Media Log

[Programming]에 해당되는 글 57

  1. h FIELD_OFFSET 매크로 1 2011.03.01
  2. h PAGED_CODE 매크로 6 2011.02.27
  3. h 디렉터리의 읽기 전용 속성 4 2011.02.20
  4. h 알쏭달쏭한 typedef 9 2011.01.04
  5. h 하위 디렉터리의 파일이 변경 되었는지 감지하는 법 6 2010.12.20
  6. h WinApi의 reserved 인자는 뭐하는 용도일까 2010.12.09
  7. h 디바이스 드라이버를 단일 실행파일로 배포하는 방법 2 2010.12.04
  8. h 윈도우즈의 세션, 윈도우 스테이션, 데스크탑에 대해 자세히 알아보기 12 2010.11.07
  9. h Cancel-Safe Queue를 이용하여 디바이스 드라이버에서 I/O를 취소하기 2 2010.10.25
  10. h 재귀호출이 무엇입니까 2 2010.10.21
  11. h 유저모드에서 파일시스템 드라이버를 만들기 1 2010.10.17
  12. h Win32 에러 번호를 간편하게 확인하기 1 2010.08.15
  13. h 로그 뷰어로써의 Vim (2) -원하는 문자열만 골라내기 3 2010.06.20
  14. h 로그 뷰어로써의 Vim (1) -멀티 하이라이팅 2010.06.20
  15. h pragma message 지시어를 통한 실수 방지 테크닉 2 2010.01.13
  16. h Absolute path와 Canonical path의 차이점 3 2010.01.13
  17. h 2009년 최고의 프로그래밍 언어, Google의 Go 3 2010.01.10
  18. h boost 라이브러리로 커맨드 라인 파싱 쉽게 하기 1 2009.09.12
  19. h TR1을 이용한 C++에서의 정규식 사용 3 2009.06.30
  20. h SwingX 1.0 has been released. 1 2009.06.19
  21. h 컴퓨터 프로그래머(CPQ) 자바 1급 시험을 보고 8 2008.12.07
  22. h Python 3.0 Released 5 2008.12.04
  23. h 자바 버전 히스토리 3 2008.11.25
  24. h Visual C++ 경고 없는 코드 작성 팁. - CRT 문자열 함수 8 2008.05.24
  25. h 재미로 보는 프로그래밍 언어 순위 8 2008.05.19
  26. h 전방선언과 컴파일 의존성 1 2008.05.16
  27. h Visual Studio 2008과 IronPython 2008.04.12

FIELD_OFFSET 매크로

2011. 3. 1. 08:00 | Programming

'Programming' 카테고리의 다른 글

Duff's Device  (0) 2011.04.07
_countof 매크로  (0) 2011.03.15
PAGED_CODE 매크로  (6) 2011.02.27
디렉터리의 읽기 전용 속성  (4) 2011.02.20
알쏭달쏭한 typedef  (9) 2011.01.04

PAGED_CODE 매크로

2011. 2. 27. 19:09 | Programming

'Programming' 카테고리의 다른 글

_countof 매크로  (0) 2011.03.15
FIELD_OFFSET 매크로  (1) 2011.03.01
디렉터리의 읽기 전용 속성  (4) 2011.02.20
알쏭달쏭한 typedef  (9) 2011.01.04
하위 디렉터리의 파일이 변경 되었는지 감지하는 법  (6) 2010.12.20

알쏭달쏭한 typedef

2011. 1. 4. 23:10 | Programming
처음 프로그래밍을 배울 때 재귀함수라는 것은 정말 내 머리를 핑핑 돌게하는 어려운 장벽이었다.
데이터구조를 가르치셨던 교수님께서 어느 날 수업 중, 재귀로 프로그래밍을 짜는 것이 가장 쉽다는 말을 한 적이 있었는데 나는 그게 농담인지 진담인지 구분을 못했던 기억이 난다. -물론 진담이었다.

재귀를 이해하기 위해서 좋은 질문이 여기에 있다.
Enjoy recursion.
Tiobe는 내가 심심할 때 가끔씩 찾아보는 사이트 중 하나이다.
여러 검색엔진들을 통해 프로그래밍 언어에 대한 정보들을 수집해서 순위를 매겨주는 사이트이며, 한달에 한번씩 업데이트 된다.

파이썬을 만든 Guido는 아마 나보다 훨씬 더 자주 이 사이트를 들어와보면서 파이썬의 순위를 확인해 보는 것이 분명하다.
이 정도 수준의 천재 해커가 자신이 만든 언어의 순위를 확인하면서 킬킬대는 것은 조금 웃기기도 하지만, 어떤 면에서 보면 이 사이트의 공신력을 더 높여주는 일이라고도 할 수 있겠다.

3년 정도 이 사이트를 봐왔는데 Go처럼 빠르게 성장한 언어는 그나마 루비 밖에는 없었다. 그래도 Go의 성장속도와는 역시 비교할 바가 못된다.
그렇지만 실제로 Go를 사용하고 있는 프로젝트는 아직 본 적이 없다. 아마도 아직까지는 구글에서나 쓰고 있을 것으로 생각한다. 2009년 11월에 처음 발표 되었으니 그럴만도 하다.

Position
Jan 2010
Position
Jan 2009
Delta in PositionProgramming LanguageRatings
Jan 2010
Delta
Jan 2009
Status
11Java17.482%-1.54%  A
22C16.215%+0.28%  A
35PHP10.071%+1.19%  A
43C++9.709%-0.41%  A
54(Visual) Basic7.354%-1.81%  A
66C#5.767%+0.16%  A
77Python4.453%-0.28%  A
88Perl3.562%-0.74%  A
99JavaScript2.707%-0.65%  A
1011Ruby2.474%-0.67%  A
1110Delphi2.392%-0.91%  A
1237Objective-C1.379%+1.24%  A
13-Go1.247%+1.25%  A--
1414SAS0.809%+0.01%  A
1513PL/SQL0.718%-0.29%  A
1618ABAP0.641%+0.10%  A--
1715Pascal0.624%-0.04%  B
1823Lisp/Scheme0.576%+0.14%  B
1920ActionScript0.566%+0.11%  B
2024MATLAB0.540%+0.11%  B


아래 표에서 가장 돋보이는 것은 단연 PHP이다.
범용 목적의 언어도 아닌 PHP가 10년 전의 최강자였던 C++을 제치고 3위를 차지하고 있는 것을 보고 있으면 이제는 Web의 세상이라는 것을 다시 한번 더 실감하게 만든다.

Programming LanguagePosition
Jan 2010
Position
Jan 2006
Position
Jan 2000
Position
Jan 1985
Java113-
C2211
PHP3418-
C++4329
(Visual) Basic5553
C#6713-
Python7817-
Perl864-
JavaScript91012-
Ruby1020--



YearWinner
2009Go
2008C
2007Python
2006Ruby
2005Java
2004PHP
2003C++

비록 이 사이트는 한달에 한번씩 업데이트가 되긴 하지만 매년 새해에는 올해의 언어를 선정하기도 한다. 나는 2009년에는 당연히 C#이 Winner가 되리라 예상했었는데, 바로 지난달인 작년 12월까지 순위에도 없던 Go가 2009년의 언어로 선정된 것은 정말 의외였다.

Tiobe에서는 이에 대해 나름대로 변명을 하고 있기는 하다.

Is Go a hype? May be. But even if it appears to be just another language, the fact that it is a language designed by Google is sufficient to make it really popular. Nobody will be blamed to use a language that is associated with the Google brand name. Apart from that, there is also something technically promising about Go. It has native support for concurrent programming, thus fulfilling the existing need of a language that allows efficient use of multicore processors.

It is astonishing to see that a programming language can rise so fast. Go was not listed yet last month and now it is already #13. This sudden change might be considered an inevitable consequence of our current culture, in which new information is spread and used around the globe at the speed of light.



어쨌거나 나는 아직 Go를 공부해보지는 않았지만 훌륭한 사람들이 설계한 언어이고, 또 믿을만한 회사에서 지원하는 오픈소스인만큼 곧 우리들 곁에도 가까이 다가오게 될 것이라는 생각을 한다.

내년 이 맘때는 순위가 어떻게 변해 있을지 정말 궁금하다.
SwingX 라는 오픈소스 프로젝트가 있는데, 꽤 오랫동안 0.9대 버전으로 개발되어 오다가 이번에 1.0 버전이 릴리즈되었다.

SwingX는 java의 기본 swing을 랩해서 조금 더 기능이 풍부한 UI 구현들을 제공하는 프로젝트이다.
java로 데스크탑 애플리케이션을 만드는 경우는 그렇게 많지 않지만, 만약 그런 일을 접하게 되면
기본 swing으로 뭔가 부족하다 싶을 때 swingx에 혹시 원하는 기능이 있는지 찾아보고 그런 기능이 있다면 직접 구현하는 수고를 덜 수 있다.

JRE 1.6.10부터 제공되는 Nimbus 룩앤필(개인적으로는 스윙에서 처음으로 그나마 봐줄만한) 역시 이 swingx 프로젝트에서 시작해서 JRE에 통합되었다.


이미 기존에 만들어둔 GUI애플리케이션이 있다면 룩앤필을 설정하는 코드 몇 줄만 추가함으로써 별 다른 수고 없이 더 보기좋은 UI로 탈바꿈 시킬 수 있다.

MFC로 GUI 프로그래밍을 하게되면 객체에 변경을 가하기 위해 주로 상속을 하거나 서브클래싱을 하게되는데 swing에서는 인터페이스를 구현하는 방법이 많이 사용된다.

C++ 프로그래밍을 하게 되면 COM같은 특수한 분야를 다루지 않는 이상 인터페이스를 구현하는 일이 그다지 많지 않지만, 자바에서는 곳곳에서 쉽게 찾아볼 수 있다.

인터페이스를 설계 및 구현하고 또 변경하고 싶은 기능들만 오버라이딩하여 잘 동작하게 될 때의 기쁨은 어쩌면 객체 지향 프로그래밍의 가장 큰 즐거움 중에 하나일 것이다.
나는 C++을 하는 동안 그런 느낌을 한 번도 느껴보지 못했는데, 자바로 프로그래밍을 하면서 많은 것을 배우고 재미를 느끼는 중이다.

인터페이스가 뭔지 혹은 가상함수가 뭔지에 대한 내용은 어려운 내용이 아니라서 쉽게 배울 수 있지만
인터페이스를 언제 사용해야 할지, 왜 사용해야 하는지에 대한 깨달음은 실제로 많이 사용해봐야만 얻을 수 있는 것 같다.

그런 면에서 객체 지향 프로그래밍을 배우기에는 확실히 C++보다는 자바가 좋은 선택이다.
오늘 컴퓨터 프로그래머(CPQ) 자바 1급 시험을 보고 왔다.
이 시험에 대해서 알고 있는 사람은 아마도 많지 않을 것 같다.

한국 정보과학회에서 주관하고 있다고 하는데, 이 곳에 가면 정보를 얻을 수 있다.

나는 리눅스마스터라는 시험을 통해 우리들에게 어느 정도 알려져 있는 한국정보통신인력개발센터에서 이런 시험이 있다는 것을 알게 되었는데, 이 곳을 통해서도 역시 지원 신청을 할 수 있다.

한국정보통신인력개발센터에는 멤버쉽 제도라는 것이 있는데,
우수회원이나 특별회원들에게는 여러 특전이 있다.

그 중 하나는 1차 시험 응시료를 면제해 주는 것인데, 이 CPQ시험은 2차 시험이 없으므로 우수 회원 이상이라면 무료로 응시 할 수 있다.

나는 특별회원이라서 가끔씩 심심풀이로 무료 시험을 보러 가곤 하는데,
시간도 많이 들지 않고 자격증도 덤으로 생기게 되는 꽤 유익한 일이다.

오늘 시험은 동국대학교에서 봤다. 나는 동국대 하면 이동국밖에는 생각나지 않았었는데,
오늘은 확실히 동국대에 대한 이미지를 굳혔다.
추운 날씨의 일요일임에도 불구 하고 많은 학생들이 나와 공부를 하고 있던 모습이 인상적이었다.
허름한 건물 외관에 비해 내부 시설들은 꽤 잘 되어 있었다.

이 시험의 난이도는 그다지 어렵지 않다.
나는 C++ 1급과 Java 1급 시험을 치루어봤는데, 둘 다 대학교 때 배운 지식 정도면 충분히 합격할 수 있는 시험 수준이다.

시험 문제에 대해서는 마음에 안드는 점이 몇 가지 있다.
지난 번 C++ 시험을 볼 때에는 예문에 있는 코드가 오타 였는지 인쇄가 잘못된건지 모를 컴파일도 안되는 이상한 코드가 있었고,
오늘 자바 실기 시험에서는 위의 이미지를 보고 아래 Swing 코드를 작성하시오. 뭐 이런 문제가 있었는데, 그 이미지는 깨져서 보이지도 않았다. 어쩌라고.
이미지 주소를 보니 10.x.x.x/어쩌구 로 내부아이피로 되어 있었는데,
아마도 IHD 사무실 내에서만 테스트 한 번 해보고 시험지인 동국대로 가져와서는 정작 테스트 한 번 해보지 않고 그냥 문제를 바로 배포했는지도 모르겠다.

이런 것들은 주최측에서 조금만 신경쓰면 충분히 보완될 수 있는 문제인데 -그리고 당연히 그래야한다.
아직 그런 것 조차 신경 안쓰는 걸 보면 국가공인 자격증이 되기에는 10년은 걸릴 듯 하다.

또 한 가지 맘에 안드는 점은 문제의 20% 정도가 다른 주제의 내용이라는 것이다.
아니 자바 시험 보는데 퀵 소트하고 머지소트에 대해서 왜 물어보며 폭포수 모델 같은 건 도대체 왜 나오는 건지 모르겠다.
어디 80년대 국가고시에나 나올 법한 이런 썩어빠진 문제들은 빨리 없어져야만 한다.
좋은 자바 문제 고르기에도 바쁜 판에 자료구조하고 소프트웨어 공학은 왜 껴넣는 건지.

이런 점들이 빨리 개선되어 훌륭한 국가 공인 자격증으로 인정 받게 되기를 진심으로 바란다.

기존 기출 문제들은 이 곳에서 확인 할 수 있다.
http://exam.ihd.or.kr/pds/getFile.asp?id=869&tb=tbl_PDS_040100&code=
http://exam.ihd.or.kr/pds/getFile.asp?id=838&tb=tbl_PDS_040100&code=

멤버쉽 제도에 대해서 관심이 있는 사람들이 있을 것 같은데,
다음 링크에서 확인 할 수 있다.
http://exam.ihd.or.kr/exam_community/commu_01_2.htm
무료 응시 뿐만아니라, 시험 감독이나 시험 채점등의 재밌는 아르바이트 또한 할 수 있다.
상반기, 하반기 2회 뽑는데, 자격요건이 된다면 신청기간에 간단한 자기소개서를
제출하면 된다.

Python 3.0 Released

2008. 12. 4. 18:41 | Programming



내가 파이썬을 처음 만나본 것은 2006년 12월이었다.
나는 그 때 입사한지 4개월 정도된 신입사원었는데, 파이썬이라는 언어를 생전 들어보지도 못했었다.

그 때 우리 프로젝트에서 사용되던 작은 파이썬 프로그램이 하나 있었는데,
그것은 안철수 연구소의 웹 페이지에 가서 V3 모듈을 내려 받아 업데이트 해주는 프로그램이었다.
나는 그 코드를 고칠 일이 있어 수정 하면서 별 거지 같은 언어라고 얼마나 속으로 투덜 거렸는지 모른다.

그 뒤로 언제부터 파이썬이 좋아졌는지는 잘 기억이 안난다.
아마도 도서관에서 두리번 두리번 책을 고르다가 Learning Python이라는 책을 빌려서
천천히 읽어본 후, 꽤 매력을 느꼈고 그 때 부터 파이썬에 호감을 갖기 시작했던 것 같다.

그 후에 회사에서 사람들과 파이썬 스터디도 하고, 프로젝트에도 파이썬을 조금씩 적용하기 시작했다.

나는 언어를 선택할 때, 윈도우즈 플랫폼에서만 동작해도 되고 클라이언트에 배포되지 않는 그런 서버 사이드 코드를 작성해야 한다면 주저하지 않고 C#을 선택한다.
파이썬을 선택하는 경우는 일단 리눅스 플랫폼일 때이다.
나는 리눅스에서 코드를 작성 할 때 vi, gcc, make 세트를 사용하는 것을 아주 어려워하고 또 싫어하는데,
아마도 그래서 그 대안 언어로써 파이썬을 공부했는지도 모르겠다.

그래서 리눅스에서 그다지 많지 않은 코드를 작성할 때는 파이썬 부터 머리에 떠올린다.
터미날을 통해 vim에서 편하게 코드를 작성할 수 있기 때문이다. -C보다 훨씬!
또한 파이썬은 Perl의 문법보다 깔끔하고 Java처럼 잡 것들을 설치하지 않아도 되고, Ruby보다 레퍼런스가 많아서 좋다.

그렇다고 해도 회사에서 파이썬으로 코딩하게 되는 일은 거의 10%도 되지 않는다.
하지만 나는 파이썬으로 코드를 작성하는 그 시간들이 정말 즐겁다.

오늘은 그 파이썬 3.0이 릴리즈 되었다.
나는 지금까지 작성해놓은 코드들이 그렇게 많지 않기 때문에 파이썬 3.0으로 전부 포팅할까 잠시 고민했었는데, 금방 생각을 덮었다.

파이썬 3.0은 2.x 와 호환되지 않는데, 그 만큼 아주 많은 부분이 바뀌었다.
바뀐 부분들은 다음 링크에서 찾아볼 수 있다.

http://docs.python.org/dev/3.0/whatsnew/3.0.html
http://www.python.org/download/releases/3.0/NEWS.txt

나는 이렇게 팍팍 뭔가를 뜯어고치는 파이썬 프로젝트의 스타일이 마음에 든다.
빨리 파이썬 3.0을 써먹어보는 날이 왔으면 좋겠다.

자바 버전 히스토리

2008. 11. 25. 18:55 | Programming
자바로 애플리케이션을 개발하다보면, 버전 때문에 골치가 아플 때가 많이 있다.

나는 자바 6으로 처음 애플리케이션을 만들어봤는데, 예전 버전들이 언제쯤 발표된건지, 6으로 개발 했을 때 사용자들이 문제없이 내 애플리케이션을 쓸 수 있을 지 항상 궁금했었다.
오늘은 드디어 자바 버전 히스토리를 찾았다.

http://en.wikipedia.org/wiki/Java_version_history

1.6이 2006년에 발표된 것인지 오늘 처음 알았다.
1.5가 2004년에 발표되었었다는 것도 역시 처음 알았는데, 아직까진 1.6 보다는 1.5으로 애플리케이션을 개발하는 것이 안정적일 것 같다. 미리 알았으면 좋았을텐데 말이다.

그나저나 자바7에서는 또 재밌는 많은 기능들이 생기게 되는 것 같아 기대 된다.

내 첫 자바 애플릿 프로그램 사진 한장.

비즈하드 애플릿

'Programming' 카테고리의 다른 글

Python 3.0 Released  (5) 2008.12.04
자바 버전 히스토리  (3) 2008.11.25
재미로 보는 프로그래밍 언어 순위  (8) 2008.05.19
전방선언과 컴파일 의존성  (1) 2008.05.16
Visual Studio 2008과 IronPython  (0) 2008.04.12
사용자 삽입 이미지
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
위 사이트에서는 프로그래밍 언어 순위에 대한 선호도를 매달 업데이트 한다.
가끔씩 들어가서 보는데 심심풀이 용으로 보기에 썩 좋다.
개인적으로는 C++이 하락세인 것이 마음이 아프지만 파이썬 같은 관심있는 언어들이 꾸준히 상위에 랭크되어 있는 것은 기분 좋은 일이다.

사용자 삽입 이미지
Basic은 닷넷 프레임워크로 들어가면서 C#에 밀려 안쓰일꺼라 생각했지만 여전히 많이 쓰이고 있나보다.

파이썬은 2004년도에 그래프가 엄청 높았던 것이 눈에 띄는데, 그 때 나는 프로그래밍에 문외한이었기 때문에 무슨일이 있었던 것인지 모르겠다. -누가 알면 좀 가르켜주십쇼.

아래는 20위 이하 랭크의 언어들.

사용자 삽입 이미지
그냥 재미로만 봅시다.^^

'Programming' 카테고리의 다른 글

Python 3.0 Released  (5) 2008.12.04
자바 버전 히스토리  (3) 2008.11.25
Visual C++ 경고 없는 코드 작성 팁. - CRT 문자열 함수  (8) 2008.05.24
전방선언과 컴파일 의존성  (1) 2008.05.16
Visual Studio 2008과 IronPython  (0) 2008.04.12

사용자 삽입 이미지


python 언어 자체는 너무나 재미있지만, 몇가지 간단한 스크립트를 작성 해보면서, 비주얼 스튜디오에 익숙해 있는 내게 편리한 디버깅 인터페이스와 자동으로 메소드 목록을 보여주는 기능이 없는 환경은 너무나 불편하게 느껴졌다.

이클립스에서 사용할 수 있긴 하지만, 이클립스는 내게 익숙하지 않으므로 패스하고.
Visual Studio에서 파이썬을 붙여서 사용할 수 있다는 것은 이전부터 알고 있었지만 그다지 관심있게 보지는 않았었다.
왜냐하면 IronPython이라는 것은 닷넷 프레임워크 기반에서 동작하기 때문이었다.

어제는 리눅스에서 간단한 파이썬 스크립트를 작성하다가, vim에 그다지 익숙하지 않고 print로 밖에 디버깅 할 수 없는 나에게 조금은 화가 났었다.

곰곰히 생각을 해봤는데 이런 방법이 떠올랐다.
VS2008에 IronPython이라는 것을 붙여서, 닷넷 라이브러리를 사용하지 않은 순수 파이썬 코드만을 편하게 작성하고 리눅스나 다른 환경으로 옮겨서 실행하면 어떨까.

예상은 그럭저럭 들어맞았다.
설치 방법은 생각보다 간단하다.

1. VS2008 설치

2. Visual Studio 2008 Shell Isolated Mode Redistributable package 혹은
Visual Studio 2008 Shell Integrated Mode Redistributable package 다운로드

3. VS2008 SDK 설치

4. http://www.codeplex.com/IronPythonStudio에서 최신 설치 버전 다운로드.
 -  IronPythonStudioIsolatedSetup 혹은  IronPythonStudioIntegratedSetup

isolated 모드와 integrated 모드가 있는데 나는 isolated모드로 설치했다.
사실 잘 이해 못하고 사람들이 더 다운로드 많이 받았으므로 이걸 골랐었다. :(

설치 완료 후 비주얼 스튜디오를 켜니 python 프로젝트가 없길래 역시 쉽게 안되나 생각했었는데, 시작 -> 모든 프로그램에 보니 IronPython Studio라는게 생겨있었다.
아마도 이 부분이 isolated와 integrated에 따라 달라지는 것 같다.
intergrated를 선택해서 설치했다면 아마도 비주얼 스튜디오를 실행 하고 새 프로젝트를 눌렀을 때, C#, C++, 이 밑에 Python프로젝트가 같이 나올 것으로 예상된다.
따라서 저 옵션은 아마 비주얼 스튜디오에 독립적으로, 또는 통합적으로 라는 말이 아니었을까?

어쨌뜬 실행 화면을 보자.

사용자 삽입 이미지
사용자 삽입 이미지
디버깅은 아주 잘된다.
자동으로 메소드 목록이 나타나지 않는 것은 조금 유감이지만 이 정도만으로도 만족한다.
앞으로 좀 더 개선 될 것을 기대한다. :)