분류 전체보기
-
GLib의 GHashTable로 알아보는 해시 테이블의 충동 해결 방법Programmer/Computer Science 2013. 9. 17. 11:19
GLib에서 제공하는 해시 테이블(hash table)의 구현인 GHashTable의 충동을 해결하는 알고리즘을 살펴보자. GHashTable은 Open Addressing 방법 중에 Quadratic Probing 알고리즘을 사용하여 충동을 해결한다. 해시의 연산-삽입(Insert), 검색(Lookup), 삭제(Remove)-을 할 때는, 주어진 키에 해당하는 적절한 해시 테이블의 인덱스 번호를 먼저 구해야 한다. GHashTable에서는 g_hash_table_lookup_node() 함수가 이를 수행한다. 이 함수에서 해시키의 충동 해결 알고리즘이 구현되어 있다. static inline guint g_hash_table_lookup_node (GHashTable *hash_table, gconst..
-
뛰어난 실력자보다 별로인 사람들이 세상을 활개치는 이유Life/Society 2013. 9. 8. 17:29
예전 회사에서 선임과 함께 세미나에 참석한 적이 있었다. 여러 강사들이 있었는데, 그 중에 내 선임이 잘 아는 분도 있었다. 그분은 오늘 강의하는 플랫폼에 대한 저서와 강의로 유명했다. 하지만, 선임은 그분을 평가하기를 "실력도 없으면서 말만 많다"고 격멸하듯 말했다. 인지도는 말 그대로 많이 알려졌다는 뜻이다. 인지도와 실력은 항상 비례할 수는 없는데, 종종 우리는 이 둘을 하나로 생각한다. 인지도는 주로 TV나 신문과 같은 미디어 매체를 통하거나 직접 저술한 책을 통해서 이루어진다. 기본적으로 말(또는 글)에 재주가 있어야 한다. TV와 같은 매체에서 유명해지려면 조리있고 알기 쉽게 설명해야 하며, 더불어 유머까지 겸비하면 금상첨화이다. 신문이나 책과 같은 곳에서는 짜임새 있는 구성과 간결한 문장이 ..
-
GLib의 GTree로 알아보는 균형 이진 트리 알고리즘Programmer/Computer Science 2013. 8. 20. 17:31
GLib에서 제공하는 균형 이진 트리(balanced binary tree)의 구현인 GTree의 알고리즘을 살펴보자. GTree는 AVL tree (Adelson-Velskii and Landis' tree) 알고리즘을 사용하였다. 우선 균형 상태에 대한 정의부터 해야하겠다. 트리 A가 균형 상태라고 하면A의 하위 트리(subtree) A(L)과 A(R)이 균형 상태이고A(L)과 A(R)의 높이의 차이가 1 이하이다. abs(height(A(L)) - height(A(R))) balance left->balance left->balance > 0 LR node->balance > 1 node->right->balance >= 0 RR node->right->balance < 0 RL..
-
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..
-
행복은 IT 기술의 발전이 아니라 개인의 태도에 달렸다Life/Society 2013. 8. 2. 18:00
IT 기술은 계속 진보한다. 컴퓨터는 서버/터미널, 개인용 데스크탑, 노트북, 스마트폰/태블릿으로 발전하고 있다. 네트워크 역시 대역폭이 증가함에 따라 텍스트에서 멀티미디어로, 유선에서 무선으로 발전하고 있다. 이제는 모바일 기기와 무선 인터넷의 발달로 항상 인터넷에 연결되는 시대가 되었다. quad-head MacBook Air (sorta...) by blakespot 기술의 발전으로 인간은 점점 행복할 것 같다. 언제 어디서나 게임을 할 수 있고, 누군가와 연락하기 위해서 유선망에 접속할 필요가 없다. 기성 언론에서 다루어지지 않는 뉴스들을 SNS에서 볼 수 있고 내 목소리를 낼 수도 있다. 한편으로, 인간이 욕구를 표출하는 다양한 수단들, 예를 들면, 게임, 채팅, 게시글 등은 기술의 발전에 따라..
-
간결하고 효율적인 프로그래밍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의 부..