- 무의미한 행동의 의미: 내재적 동기와 인공지능(1/2)✭
- Blocking-NonBlocking-Synchronous-Asynchronous✭
- 서비스 로케이터는 안티패턴이다
- 2016회고: 같은 성형외과 나온 프로그래밍 언어들
- 자바스크립트의 비동기 처리과정
- MVC-MVVM-VIPER로 이어지는 앱 개발 구조패턴(1)✭
- 디자인 패턴 1. – 책임 연쇄 패턴(Chain Of Responsibility)
- PID 제어기
- C++ 디자인 패턴 01. 명령 패턴, 커맨드 패턴, Command Pattern
- C++ 디자인 패턴 02. 경량 패턴, Flyweight Pattern
- 대규모 엔지니어링 팀의 모던 프론트엔드 스택 스타일 가이드와 소개
- [번역] 코딩 공부 후 3개월 간 구직하며 배운 점
- Python – 잘못된 클래스 변수의 사용
- [Book] 파이썬 3에 뛰어들기
boost library arm cross build
boost library를 다운받아서 압축을 푼다
아래 스크립트를 실행한다
$ ./bootstrap.sh
proejct-build.jam 파일에 아래 내용을 추가한다
using gcc : arm : arm-linux-gnueabi-g++ ;
빌드 한다
$ ./bjam --prefix=/home/abcode/setup/boost2_arm install
Device Tree Overlay Notes
원문 : http://lxr.free-electrons.com/source/Documentation/devicetree/overlay-notes.txt
디바이스 트리 오버레이 노트
이 문서는 drivers/of/overlay.c 에 구현된 커널 디바이스 트리 오버레이 기능의 구현에 대해 설명합니다. 이 문서는 Documentation/devicetree/dt-object-internal.txt & Documentation/devicetree/dynamic-resolution-notes.txt 와 같이 보면 좋습니다.
오버레이는 어떻게 동작하는가
디바이스 트리 오버레이의 목적은 커널의 라이브 트리를 수정하기 위함입니다. 또한 커널 상태에 영향을 주는 수정을 반영하고 있습니다. 커널은 주로 장치를 다루기 때문에, 활성화된 장치는 새로운 디바이스 노드를 생성해야 합니다. 비활성화 되었거나 제거된 장치는 등록이 취소되어야 합니다.
아래 예제는 베이스 트리에 있는 foo board 입니다.
---- foo.dts ---------------------- /* FOO platform */ / { compatible = "corp,foo"; /* shared resources */ res: res { }; /* On chip peripherals */ ocp: ocp { /* peripherals that are always instantiated */ peripheral1 { ... }; } }; ---- foo.dts ------------------------
bat.dts 오버레이가 아래와 같이 로딩되었습니다.
---- bar.dts ------------------------- /plugin/; /* allow undefined label references and record them */ / { .... /* various properties for loader use; i.e. part id etc. */ fragment@0 { target = ; __overlay__ { /* bar peripheral */ bar { compatible = "corp,bar"; ... /* various properties and child nodes */ } }; }; }; ---- bar.dts ---------------------------
결과적으로 foo + bar.dts는 아래와 같습니다.
---- foo+bar.dts ---------------------- /* FOO platform + bar peripheral */ / { compatible = "corp,foo"; /* shared resources */ res: res { }; /* On chip peripherals */ ocp: ocp { /* peripherals that are always instantiated */ peripheral1 { ... }; /* bar peripheral */ bar { compatible = "corp,bar"; ... /* various properties and child nodes */ } } }; ---- foo+bar.dts -------------------------
오버레이의 결과로, 새로운 장치 노드(bar)가 생성되었습니다. 따라서 bar 플랫폼 장치가 등록되고, 일치하는 디바이스 드라이버가 로드되면 예상되로 생성됩니다.
오버레이 Kernel API
API는 사용하기 매우 쉽습니다.
- of_overlay_create ()를 호출하여 오버레이를 만들고 적용합니다. 반환 값 이 오버레이를 식별하는 쿠키입니다.
-
이전에 오버레이를 제거하고 정리하는 of_overlay_destroy ()를 호출합니다. of_overlay_create ()에 대한 호출을 통해 생성됩니다. 다른것에 의해 겹쳐진 오버레이를 제거하는 것은 허용되지 않습니다.
마지막으로 한 번에 모든 오버레이를 제거해야하는 경우 of_overlay_destroy_all () : 올바른 순서로 모든 단일 항목을 제거합니다.
오버레이 DTS 포맷
DTS 오버레이는 아래와 같은 형식을 가져야 합니다.
{ /* ignored properties by the overlay */ fragment@0 { /* first child node */ target=; /* phandle target of the overlay */ or target-path="/path"; /* target path of the overlay */ __overlay__ { property-a; /* add property-a to the target */ node-a {/* add to an existing, or create a node-a */ ... }; }; } fragment@1 { /* second child node */ ... }; /* more fragments follow */ }
Using the non-phandle based target method allows one to use a base DT which does
not contain a symbols node, i.e. it was not compiled with the -@ option.
The symbols node is only required for the target= method, since it
contains the information required to map from a phandle to a tree location.
linux에서 usb 대역폭 사용량 확인하기
webcam이 usb bus bandwidth를 얼마나 사용하는지 알아보고 싶었다
누가 좋은 툴을 만들어 놨음
https://github.com/aguinet/usbtop
컴파일 의존성으로 pcap이 필요하다
런타임 의존성으로 usbmon 커널 모듈이 필요하다
WPF에서 INotifyPropertyChanged 귀차니즘 해결
WPF의 MVVM 구조는 멋지다. GUI 개발에서 glue code를 많이 제거해준다.
특히 Model 의 변화가 자동으로 View 에 반영되는 구조는 매우 유용하다.
다만, 모델의 프로퍼티가 변경 되면 propertyChanged를 이용해서 변경된 사실을 통보해줘야 한다.
요게 은근히 귀찮다.
public class Person : INotifyPropertyChanged { string givenNames; public string GivenNames { get { return givenNames; } set { if (value != givenNames) { givenNames = value; OnPropertyChanged("GivenNames"); } } } }
위 코드처럼 프로퍼티를 일일이 만들어 줘야 하고, set 프로퍼티 안에서 일일이 OnPropertyChanged()를 호출해 줘야 한다. 하나 두개면 상관없지만 많으면 코드도 길어지고 개 귀찮..
하지만 역시 해결책은 있다!
https://github.com/Fody/PropertyChanged
이거 하나면 해결 끝~
ps. fody 라이브러리는 저거 말고도 엄청 다양한 플러그인이 있다
[영화] 성실한 나라의 앨리스
내가 좋아 하는 스타일의 영화다
인디 영화지만 꽤 관객수도 있었고, 특히 이정현이 이 영화로 여우주연상을 받는다!!
비슷한 느낌으로는 일본 영화 불량공주 모모코(시모츠마 이야기), 혐오스런 마츠코의 일생이 있다.
그러고 보니 일본 영화 느낌도 좀 나는듯?
한국 영화로는 지구를 지켜라를 재미있게 본 분이라면 추천~
2016년 12월 스크랩✭
- ‘오빠를 위한 최소한의 맞춤법’: 맞춤법, 이것만은 지켜라 BEST 5
- 베스트 jQuery 플러그인 2016
- Agile과 agile
- stack overflow 개발자 설문조사
- 두 변수 값 바꾸기에 대한 고찰: 후속편
- GPU와 셰이더
- 최고의 직원을 유지하는 법
- 좋은 면접자/지원자가 되는 방법
- AngularJS 2, version 1 and ReactJS
- 코딩 인터뷰 완전 분석 풀이 (파이썬)
- 3년차 인턴 시각에서 본 50가지 UX 교훈
- 스타트업, 성공의 가장 중요한 요소는?
- [송만약의 나쁜 프로그래머 이야기] (2) 인디아나존스
- 구글 딥 마인드 대량 데이터가 필요없는 심층 학습 시스템을 개발
- 8퍼센트 CTO 1년 차 회고
- ‘디자인 패턴’ 중독자
- 추천 시스템의 기초
- 내가 첫 사업을 시작하기 전에 알았으면 좋았을 다섯 가지
- 섣부른 마케팅
- 제가 이 일을 왜 해야 합니까? – 오너십과 리더십
- 1년에 1개의 사이드 프로젝트 완성하기
- 잠자리에서 아이에게 읽어주는 동화책의 중요성
- 가독성 똥망 폰트로 개발 기술 문서를 더 잘 읽어보자!
- 구글의 깐깐한 코드리뷰 환경
- 카카오 택시 빅 데이터
- CSS 비주얼 속성 가이드
- 모바일UI 디자인시 고려해야할 가이드 라인3✭✭✭
- Practical Vim 2판 정리 페이지
- 리액트 네이티브 (React Native) 일년
- 네이버 창업자 “절대 사업하면 안되는 사람은?”✭✭✭
- 스타트업 억만장자의 실험, 로봇산업 생태계를 낳다
- [송만약의 나쁜 프로그래머 이야기] (3) 인턴에서 나쁜 프로그래머가 되기까지
- 웹개발 2016년 트렌드와 전망
- 초보 개발자에게 권장하는 객체지향 모델링 공부 방법
- Tumblr가 가진 기술과 개발 문화
- 설득당하는 스티브 잡스✭✭✭
- Git을 이용한 협업 워크플로우 배우기
- 이상한 나라의 웹
- 서버 비용을 70%나 줄인 온디맨드 리사이징 이야기
- ‘매출 1,000억’, 혹은 scalability에 관하여
- 윈도우 on ARM
- 스타트업 경영자의 흔한 착각 7가지
- 당신이 2017년에 배워야 할 언어, 프레임워크, 툴에 대하여
- 여전히 부끄러운 코드 (The code I’m still ashamed of )
/etc/init.d 와 /etc/init 폴더의 차이점
/etc/init.d 는 System V init tools(SysVinit)가 사용하는 스크립트를 담고 있습니다. 이는 리눅스가 지금까지 전통적으로 사용해온 서비스 관리 프로그램인 init 프로세스가 사용하는 스크립트 들입니다. init 프로세스는 커널이 초기화되고 나서 가장 처음 실행되는 프로세스 입니다. /etc/init.d 안에는 init 프로세스가 특정한 서비스(apache, mysql, …) 들을 start, stop, restart, reload 할 수 있는 쉘 스크립트들이 들어있습니다. 이 스크립트들은 사용자가 직접 실행할 수도 있고 /etc/rc?.d 디렉토리에 링크가 연결되어 부팅시에 자동으로 실행하게 할수도 있습니다
/etc/init 은 Upstart가 사용하는 설정파일들을 담고 있습니다. Upstart는 너무 오래된 init을 대체하기 위한 비교적 최근에 개발된 프로그램 입니다. /etc/init 디렉토리에는 Upstart가 start, stop, reload, status 명령을 통해서 특정 서비스를 어떻게 동작시켜야 하는지 설정을 담고있습니다. 우분투 10.04(lucid) 버전부터 우분투는 전통적인 SysVinit 프로세스에서 Upstart 로 전환중입니다. Upstart 로 시스템 구성이 선호되지만 당분간은 SysVinit 구조도 같이 제공될것입니다. 사실, SysVinit 스크립트는 Upstart의 호환성 레이어를 이용해서 처리되게 됩니다.
.d 디렉토리 이름은 일반적으로 어떤 환경에 필요한 설정 파일이나 스크립트를 담고 있다는 의미로 쓰입니다.(예를 들어 /etc/apt/sources.list.d 는 sources.list 를 작성하는데 필요한 파일들이 들어있습니다. /etc/network/if-up.d 는 네트워크 인터페이스를 활성화 시킬때 필요한 스크립트를 담고 있습니다).
이 경우에는 “init”은 논리적인 이름을 가진 디렉토리 이지만, SysVinit이 먼저 init.d 디렉토리를 사용하고 있으니, Upstart는 그냥 init 을 같은 목적으로 사용하는 디렉토리명으로 선택했습니다.
Upstart 는 systemd로 언젠가는 대체될 예정입니다.
참고자료
http://blog.sapzil.org/2014/08/12/upstart/
http://lunatine.net/about-systemd/
tensorflow에서 GPU안쓰기
CUDA버전 tensorflow를 실행하면 GPU가 자동으로 활성화된다
학습할 때에는 GPU를 이용하면 훨씬 빠르지만, GPU 단점이 초기 설정하는데 시간이 오래걸린다
테스트할때에는 계산량이 비교적 적어서 GPU를 끄는 편이 더 빠르다
config = tf.ConfigProto( device_count = {'GPU': 0} ) sess = tf.Session(config=config)
위 코드를 넣어주면 GPU를 비활성화 한다
CUDA 사용량 콘솔에서 모니터링 하기
GPU가 잘 돌고 있는지 궁금하다면 아래 명령어를 이용한다
$ watch -n 1 nvidia-smi