본문 바로가기

Programing

(403)
libuv 계층도 libuv를 이용해서 개발을 할 때 문제는 레퍼런스가 별로 없다는 것이다.MSDN같이 잘 정리되어 있는 API 문서가 있으면 좋겠지만, 그나마 괜찮은 문서는 An Introduction to libuv인데 버전이 좀 되다보니 안맞는게 많다. 이 문서조차도 공식 API 문서는 uv.h 파일이라는 말을 하고 있다. tcp 서버를 만들고 있는데 accept가 되면 uv_tcp_t로 init을 하고 uv_stream_t 로 캐스팅을 한다. 소스를 보았더니 아래와 같은 계층 구조를 가지고 있었다.
libuv가 많이 바뀌었다. 객체지향에서 인터페이스 부분(public 필드나 메서드)은 바뀌면 사용하는 부분도 수정을 해주어야 한다.C의 경우에는 함수의 프로토타입이 그런 영역이 될 것이다. libuv에 대한 메뉴얼이 별도로 없어서 An Introduction to libuv와 libuv 소스코드를 참고해서 짜다보니 현재 버전과 많이 다르다는 것을 느끼고 있다. 이 메뉴얼은 0.10.2 기준으로 되어 있고 나는 0.11.24 버전이다 (uv-version.h에 적혀있다) uv_last_errorWin32의 GetLastError()와 유사하다.이 함수는 함수 모양이 바뀐 것이 아니라 아예 없어졌다.예제를 보면 uv_err_name(uv_last_error(loop)) 식으로 사용을 한다. 참고로 loop는 uv_loop_t 포인터 ..
An Introduction to libuv 주소: http://nikhilm.github.io/uvbook/ 우선 예제를 돌리기 전에 git으로 소스코드를 빌드해서 시스템에 설치를 한다.자세한 내용은 전에 포스팅한 libuv를 참고아래 명령처럼 libuv.a 파일이 /usr/local/lib/에 있어야 한다.$ ls /usr/local/lib/libuv.a/usr/local/lib/libuv.a 첫 번째 예제 - http://nikhilm.github.io/uvbook/basics.html#hello-world소스코드#include #include int main() { uv_loop_t *loop = uv_loop_new(); printf("Now quitting.\n"); uv_run(loop, UV_RUN_DEFAULT); return 0;..
libuv libuv는 Node.js에서 사용하고 있는 고성능 이벤트 I/O를 위한 라이브러리이다.최초의 Node.js는 Marc Lehmann의 libev와 V8를 사용해서 만들어졌다. 하지만 libev는 Unix에서만 동작하고 Windows에서는 동작을 하지 않는다는 단점이 있었다. 이전에 쓴 Node.js 윈도우 지원의 역사에도 나와있지만 리안 달역시 윈도우가 중요한 플랫폼으로 생각하고 윈도우의 IOCP를 이용해 이벤트 I/O를 편입을 하려고 하였다. 그래서 도입한 것이 libuv이다. 처음에는 libev와 libuv가 동시에 사용이 되다가 Node.js v0.9에서 libev가 제거되었다. Node.js가 V8을 이용한 자바스크립트 인터프리트 엔진이 들어가다보니 런타임 메모리가 클 수 밖에 없었다.그래서 자..
Node.js winston 표준 시간이 안맞는 경우 해결 방법 winstone의 날짜는 winston.transports설정시 timestamp 프로퍼티를 이용하여 설정할 수 있다.var winston = require('winston');winston.add(winston.transports.File, { filename: '2014-03-20.log', timestamp: true, json: false }); 그런데 이렇게 했을 때 시간의 아래와 같은 형태로 찍힌다.'2014-03-20T08:26:15.861Z'그런데 이 시간은 UTC이기 때문에 지역시간과 다를 수 있다. KST를 사용하는 한국에서는 -9 한 값이 나온다. winston의 기본 시간 표시는 whitelife님의 블로그를 보면 알 수 있듯이 node_modules/winston/lib/winst..
TDD 디자인 패턴(design pattern) JUnit in ActionPetar Tahchiev, Felipe Leme, Vincent Massol, Gary Gregory, 2010JUNIT IN ACTION: 단위 테스트의 모든 것(인사이트, 이복연 옮김. 2011) 퍼사드(facade) p.27제어 구조 역전 p.36싱글톤(singleton) p.98제어 역전(Inversion of Control, IoC) p.140
TDD 모범사례(best practice) '베스트 프렉티스'를 모범사례로 번역을 한 것은 참고문헌 MAS10 p.xx/p.2를 따른 것이다. "한 번에 하나의 객체만 테스트하라." - MAS10 p.43"assert 호출 시에는 실패 원인을 기술하라." - MAS10 p.47"하나의 @Test 메서드에서는 하나의 테스트만 수행하라." - MAS10 p.50"실패할 가능성이 잇는 모든 것을 테스트하라." - MAS10 p.53"테스트를 통해 코드를 개선하라." - MAS10 p.57"예외 테스트도 읽기 쉽게 만들어라." - MAS10 p.59"테스트를 통해 코드를 개선하라." - MAS10 p.59"테스트를 건너뛸 때는 반드시 그 이유를 명시하라." - MAS10 p.62"같은 패키지, 다른 디렉터리" - MAS10 p.67"리팩터링하라" - M..
[NHibernate] 현재 시간 current_timestamp DB 마다 시간 구하는 함수가 다르다. 하이버네이트에서는 방언(dialect)라는 개념을 이용해서 쿼리를 변환해주는 기능이 있는데,보니 current_timestamp를 괄호없이 사용하면 된다.eg) UPDATE sdh2k_device_map SET sdh2000_ip = :sdh2000IP, updated_datetime = current_timestamp WHERE mfp_ip = :mfpIP; 구현은 아래 URL을 참고MsSqlServer : https://github.com/nhibernate/nhibernate-core/blob/master/src/NHibernate/Dialect/MsSql2000Dialect.cs (current_timestamp -> getdate) PostgreSQL : ..