본문 바로가기

Programing

(403)
원격제어:키보드 시물레이션 원격제어의 기능 중 하나는 원격지의 화면을 보는 것이고 다른 하나는 기능(마우스, 키보드)을 수행하는 것이다.원격지에 기능을 수행하기 위해서는 가상으로 마우스나 키보드가 눌리도록 명령을 주어야 한다. 윈도우 API 중에는 keybd_event가 있는데 현재는 SendInput를 사용하라고 msdn에는 권장을 한다. keybd_event: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx SendInput: http://msdn.microsoft.com/en-us/library/windows/desktop/ms646310(v=vs.85).aspx 아래 프로그램은 3초후에 키보드 오른쪽 키를 누른 것 같은 효과를 준다..
[Node.js] - 윈도우 지원의 역사 전에 유투브에서 Node.js를 만든 Ryan Dahl이 "윈도우는 매우 중요하다. php처럼"이라는 말을 진지하게 했다가 사람들은 농담인지 알고 웃었던 장면을 본적이 있다. (아래 동영상에서 52초 부근~1:20초) node.js가 v0.10.21이 나오도록 아래 아키텍처 그림은 계속 검색이 된다. 하지만 Node.js는 v0.5부터 획기적인 변화가 있었다. 2011년 5월 5일 (어린이날!)에 발표한 로드맵 문서(http://nodejs.org/nodeconf.pdf)를 보면v0.5의 주요 목표는 윈도우 호환성이었다!!! 윈도우로의 포팅이 왜 중요한지는,서버의 33%가 윈도우이고, 웹 브라우저의 87%가 윈도우에서 돌아가고 있다는 것이다.(지금은 모바일 %가 높아졌지만) 이전까지는 윈도우에서 노드제이..
[JavaScript] 부동소수점의 오류 예 컴퓨터의 부동소수점의 정밀도 문제는 오래전 부터 알려진 사실이다. 자바스크립트에서도 그 예를 쉽게 찾을 수 있는데, 기록을 해놓지 않으면 예를 들 때 바로 생각해 내지 못하는 경우가 있어서 기록을 해둔다. 예)> 0.1 + 0.2;0.30000000000000004 이런 것은 결합법칙에서 문제가 된다. (A + B ) + C = A + (B + C)> (0.1 + 0.2) + 0.3;0.6000000000000001> 0.1 + (0.2 + 0.3);0.6> 돈과 관련된 경우에는 정밀도는 민감한 사항이기 때문에 실수가 아닌 정수형으로 계산을 하라고 한다.최소 단위를 일의 단위로 이용을 한다면 문제가 없다.> (1 + 2) + 3;6> 1 + (2 + 3);6> ((1 + 2) + 3)/10;0.6> (1..
[JavaScript] null 값과 비교할 때는 반드시 비교 연산자로 === 또는 !==를 사용 Maintainable JavaScriptp.129 null 비교 금지null 값과 비교할 때는 반드시 비교 연산자로 === 또는 !==를 사용해야 한다. 실제 잘못 사용 예) 문자열이 IP 패턴을 하고 있는지 확인하는 함수function isIPAddress(ip) { var ipFormat = /^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; return (ip.match(ipFormat)!=null);} 수정 예function isIPAddress(ip) { ..
[Node.js] Buffer 데이터 초기화 네트워크 패킷을 만들일이 있어 Buffer를 사용해야 했다.기본 모듈인지라 require는 따로 필요하지 않는다. 기본 메뉴얼은 => http://nodejs.org/api/buffer.html 처음에는 배열을 new로 생성해서 writeUInt8 메소드로 데이터를 추가했다. => http://nodejs.org/api/buffer.html#buffer_buf_readint8_offset_noassert예)var printQueue = new Buffer(7); packet.writeUInt8(0x02, 0); // Receive a printer job packet.writeUInt8(0x70, 1); // p packet.writeUInt8(0x72, 2); // r packet.writeUInt8(..
node.js v0.8.21 -> v0.10.16 오랫만에 node.js를 할 일이 있어 버전을 검토하니 0.8대에서 0.10으로 릴리즈 되었다.꾸준이 버전이 올라가는 것으로 보아 누군가가 열심히 개발을 하고 있다고 생각이 되었다. 무슨 기능이 추가되었는지는 둘째치고 성능상의 변화가 궁금해서 이전 버전을 idle 상태로 돌려보고 업그레이드 후 버전을 돌려서 비교를 해보았다. 메모상으로만 보면 16.7 MB에서 10.8 MB로 대폭 감소하였음을 볼 수 있다.v0.8.21 v0.10.16 이전에 지역 저장소에 0.6.17 버전의 소스코드(정확히는 헤더들)를 넣어둔 적이 있는데 0.8까지는 변화가 없었다. cpp가 바뀌었을지도 모르겠다. 그럼 이번에는 어떤 변화가 있을지?
이클립스의 자바빈 getter/setter 생성 버그 Foo라는 클래스의 String타입의 name이름의 프로퍼티가 있다고 할 때,JavaBean 규약에 의하면 getter와 setter의 이름은 각각,String getName()과 void setName()이 된다. 이클립스에서 POJO형태의 클래스를 만들때 보통 메소드 자동생성기능을 이용한다. Source > Generate Getters and Setters... 문제는 두번째 글자가 대문자일 경우에 이클립스는 첫 번째 문자를 대문자로 바꾸지 않고 소문자로 놔둔다는 것이다.nName이라는 프로퍼티는 아래처럼 바뀐다. 별로 상관없을지 모르나 리플렉션(reflection)을 통해 메소드를 가져오는 경우 아래와 같은 메세지가 나오면서 예외가 발생한다.java.beans.IntrospectionExcepti..
지역변수의 이름은 짧게 하는 것이 보기에 좋다. 프로그래밍 수련법 1장 스타일 > 1.1 이름에 나오는 이야기이다. (p.4) 전역변수에는 서술적인 이름을, 지역변수에는 짧은 이름을 붙여라 C#의 콤보 컨트롤이 바뀌었을 때 수행되는 이벤트 핸들러 메소드의 예이다. [수정전] [수정 후]코드가 길어졌다고 불평할지도 모르겠지만 3번째 줄의 using을 보여주기 위해서 앞부분을 추가한 것일 뿐이다. using을 사용함으로 42라인은 스크롤 하지 않고도 한번에 볼 수 있게 되었다.