본문 바로가기

Programing

(391)
웹 프로젝트 DLL 참조 추가 한 솔루션 파일에 여러 프로젝트를 넣을 수 있다.C# 프로젝트일 경우 다른 프로젝트에서 빌드시 생성되는 dll을 참조로 지정하므로 컴파일시 자동으로 업데이트 되게 할 수 있다. 웹 프로젝트일 경우(예. aspx.cs) 어떻게 하는지 방법을 몰라서 Bin 폴더에 수작업으로 dll과 관련된 파일들을 복사했었는데 방법은 다음과 같았다. 속성 페이지 > 추가 > 참조추가 > 프로젝트 탭 > '확인'버튼 그럼 형식에는 프로젝트로 표시가 되고, 버전은 자동 업데이트로 표시가 된다. 이렇게 하고 나면 참조 당하는 프로젝트가 갱신 되면 같이 복사가 된다.문제는 dll 뿐만 아니라 디버깅 정보가 포함되어 있는 pdb 파일도 같이 복사가 된다. 이것을 막기 위해서는 참조되는 프로젝트에서 pdb 생성 옵션을 막아주면 된다...
단위테스트가 아닌 것들, 팁 레거시코드 활용 전략p.43단위테스트는 빠르게 실행된다. 빠른 속도로 실행되지 않는 단위테스트는 단위테스트가 아니다. 다음과 같은 일을 한다면 그것은 단위테스트가 아닐 것이다.1. 해당 테스트가 데이터베이스와 통신한다.2. 네트워크를 통해 통신한다.3. 파일시스템을 건드린다.4. 실행하기 위해 구성 파일 편집처럼 환경을 바꾸는 작업(.cfg나 .ini 파일 등의 수정)을 해야 한다. 이런 일을 하는 테스트가 나쁜 것은 아니지만 이와 같은 코드를 작성하기 위해 보통 단위테스트 하니스 내에서 작성하게 된다. 하지만 이 경우, 진정한 단위테스트 루틴과 구별하는 것이 좋다. 그렇게 함으로서 변경시킬 때마다 사용할 수 있고 빠르게 실행되는 일련의 테스트 루틴을 확보 할 수 있기 때문이다. NUnit에서는 카테고리..
[JavaScript] 브라우저 크기 구하기 : 화면 해상도 구하기 기기에 브라우저 장치가 되는데 디스플레이 크기를 구해야 되었다.처음에는 이미지를 표시해서 몇 픽셀인지 구하려다가 자바스크립트에 화면 크기를 구하는 방법이 있다는 것이 생각났다. 참고: http://stackoverflow.com/questions/2474009/browser-size-width-and-heightvar size = { width: window.innerWidth || document.body.clientWidth, height: window.innerHeight || document.body.clientHeight } 이것을 바탕으로 HTML을 만들어보았다. 전체화면 모드일 경우에는 모니터 해상도를 구할 수 있다. 1) HTML HTML에 가로, 세로를 표시할 span 엘리먼트를 추가했다..
libuv - uv_pipe_open 에러 : EINVAL 아래 코드는 파일을 열어서, 파이프로 만드는 간단한 예제이다.https://github.com/nikhilm/uvbook/blob/master/code/uvtee/main.c 를 참고했다. (거의 같다.) 그런데 아래 콘솔처럼 EINVAL이 떨어진다.디버그를 해보니 아래 처럼 호출 스택이 이어지고 uv_set_pipe_handle에 이른다. 이 함수에서 SetNamedPipeHandleState라는 윈도우 API를 호출하는데 에러가 발생하는 것이다.
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을 이용한 자바스크립트 인터프리트 엔진이 들어가다보니 런타임 메모리가 클 수 밖에 없었다.그래서 자..