Programmer
-
GLib와 GIO를 이용한 간단한 네트워크 서버와 클라이언트 예제Programmer/Computer Skills 2013. 8. 13. 16:25
예전에 인터넷에서 우연히 발견한 GLib와 GIO를 이용한 간단한 네트워크 서버/클라이언트 예제이다. GLib의 이벤트 루프와 GIO의 네트워크 기능을 활용하여 서버를 개발하는 좋은 샘플이 될 것으로 기대한다. 서버 소스 #include #include static GInetAddress* get_localhost() { /* No clean way to handle IPV6, short of guess/check */ GInetAddress* addr = g_inet_address_new_any(G_SOCKET_FAMILY_IPV4); if (!addr) { addr = g_inet_address_new_any(G_SOCKET_FAMILY_IPV6); } return addr; } /* this fun..
-
간결하고 효율적인 프로그래밍Programmer/Programming 2013. 7. 22. 15:24
예전에 인터넷에서 중국 격투가의 동영상이 화제가 된 적이 있었다. 정확히 기억이 나지는 않지만 1900년대 중반에 촬영된 것으로 중국의 고수 2명 링에서 실전 격투를 벌이는 영상이었다. 나는 중국의 무술 영화의 한장면을 기대하며 시청했는데, 막상 그들은 무술을 전혀 배우지 않은 사람들처럼 마구잡이 난타전이 벌였다. 눈을 돌려서 최근에 이종 격투기를 살펴보자. 이들의 기술은 단순하고 효율적이다. 실전 격투에서는 화려하기 보다는 간결하고 파괴적인 동작, 이론으로만 존재하는 것이 아니라 실전에서 검증된 기술이 살아남는다. 현대의 이종 격투기와 같이, 중국 무예의 창시자는 대부분 실전 무술가로써 명성을 얻는 경우가 많다. 후대에서는 이 창시자가 어떤 생각을 가지고 무예의 동작과 훈련을 만들었는지는 무시되고, 스..
-
이맥스의 파일 변수 사용하기Programmer/Emacs 2013. 7. 15. 10:31
이맥스에서 컴파일은 대부분 'M-x compile'을 사용한다. 이 명령을 치면, 별다른 설정이 없으면, 기본 명령어 "make -f"가 이맥스 미니 퍼버에 보인다. 대다수의 C/C++ 프로젝트는 Makefile을 사용함으로 그냥 엔터를 누르자. 컴파일 과정과 결과는 '*compilation*' 버퍼에서 보여준다. 컴파일 관련 오류도 같이 출력한다. 이 오류 메시지를 선택하면 그것과 연결되는 소스로 바로 갈 수 있다. 한편 기본 컴파일 명령어를 사용하지 않는 상황을 생각해보자. 간단한 실험용으로 코드를 작성하는 상황이다. 실험용 코드를 담은 파일을 'test.c'라는 하자. 이맥스에서 위에서 언급한대로 컴파일을 해보자. 그러면, 미니 버퍼에 "make -f"라는 명령어가 보이지만, 실험용 코드라서 Mak..
-
strspn/strcspnProgrammer/Programming 2013. 7. 9. 09:37
ffmpeg 코드를 보던 중에 못 보던 함수를 만났다. C 언어의 스트링 관련 함수는 거의 다 안다고 생각했는데, 학부까지 포함하면 20년만에 새로운 함수를 발견했다. #include size_t strspn(const char *s, const char *accept); size_t strcspn(const char *s, const char *reject); 메뉴얼 페이지에 의하면, strspn() 함수는 accept에 있는 문자들로 이루어져있는 s의 부분 문자열의 처음의 개수를 구한다. 즉, s 문자열의 앞에서 읽기 시작하여 accept에 포함되지 않은 문자가 나타나면 그 지점에서 멈추고 개수를 반환한다. 반대로, strcspn() 함수는 전체적으로 reject에 없는 문자들로 이루어져있는 s의 부..
-
쉬우면서 다양한 기능을 제공하는 UIProgrammer/Etc 2013. 6. 27. 19:55
100가지의 기능을 사용자가 손쉽게 사용할 수 있게 하려면 어떤 방법이 좋을까? 첫번째 접근으로 모든 기능을 사용자가 마음껏 사용할 수 있도록 UI를 제공한다. UI에 100가지가 넘는 컨트롤이 덕지덕지 붙은 모양이 된다. 그간의 경험으로는, 사용자 경험에 대한 생각없는 개발자가 UI까지 맡는 경우 종종 이러한 사태가 발생한다. 이러한 UI는 일반 대중들이 처음에 사용하기에 매우 어렵다. Pilot's Seat of Space Shuttle Endeavour by jurvetson 두번째로는 중요한 10가지 기능만을 엮어서 UI와 함께 제공한다. 나머지 90가지는 아깝지만 폐기한다. 일반 대중을 생각한다면, 위에 것보다는 낫지만, 기능 상의 한계가 존재한다.일반 대중의 개개인이 생각하는 주요 10가지의 ..
-
테스트 주도 개발 - 둘째날Programmer/Etc 2013. 5. 7. 18:21
최대한 빨리 테스트에 통과하는 코드를 작성하는 방법 중에, 캐스팅의 남용이 있다. 돌아가고 나면 이러한 코드를 적절한 자리로 옮기거나 다형성을 사용하여 불필요한 캐스팅을 제거한다. 지난 번 포스팅한 글을 다시 불러와서 갱신해보자. 최종 목적은 잘 돌아가는 깔끔한 코드의 작성이다. 이를 위해서 아래 과정을 반복한다.최대한 빨리 테스트에 통과하는 코드를 작성하는 것이 목적이다. 스텁 구현, 상수를 사용한 하드 코딩, 복사&붙여넣기 신공, 캐스팅을 마구 남용한다.리펙토링을 통해서 스텁을 채우고, 상수와 중복을 제거하고, 캐스팅을 제거하기 위한 적절한 코드 옮김이나 다형성을 사용한다. 외부 프로토콜은 같으면서 내부 구현이 다른 객체를 정의하는 방법을 소개했다. 저자는 Money와 비슷하게 동작하지만 합을 나타내..