C++ 관련 자료를 찾다 보면 
Google에서 공개한 자료를 많이 접할 수 있게 됩니다.

뭐 사실 C++의 Library야 찾아보면 다른 Library도 많습니다만...
Google의 자료들은 몇가지 공통적으로 기본빵을 해주는게 몇 가지 있는데..
 - 오픈소스라서 소스레벨의 접근이 가능합니다.
 - 라이선스가 BSD/MIT 입니다. 즉 GPL이 아니라서 라이선스 제약이 상대적으로 덜 합니다.
 - 멀티 플랫폼을 지원합니다. (Windows/Linux은 기본으로 됩니다.)
 - 마지막으로 Google이라는 거대 회사에서 직접 적용해본 도입 사례가 있습니다.


제가 찾은 Google의 자료를 공유 합니다. 이밖에 좋은 자료가 있으시면 공유 부탁드립니다.


#. Google Test & Google Mock
 - Google Test: Google C++ Testing Framework
 - Google Mock: Google C++ Mocking Framework

   C++의 xUnit 도구들이 상당히 많은데.. 사용하다보면 뭔가 하나씩 부족한 느낌이 듭니다.
  그 중에서 제일 덜 부족한 느낌이 드는게 Google Test가 아닌가 싶습니다.







#. Google Performance Tools
 - Google Perftools: Fast, multi-threaded malloc() and nifty performance analysis tools

   멀티쓰레드에서 더욱 좋은 성능을 내는 TCMalloc(Thread-Caching Malloc), CPU Profiler를 제공 합니다. TCMalloc에는 HeapProfiler와 HeapChecker포함되어 있습니다. 하지만, Windows 쪽은 지원이 미약하며 다른 좋은 것들도 많기 때문에 Linux에서 쓰기에 적합하다고 할 수 있겠습니다.







#. Google Log
 - Google glog: Logging library for C++

   glog는 Application Level Logging을 할 때 쓰는 Library입니다. 서버 Application을 만든다면 반드시 어떠한 방식으로든 로깅 기능을 사용할텐데 참조가 될만한 Library입니다. 직접 써도 좋을 것 같다는 생각도 들고요.

  인상적인 부분중에 하나는 google::InstallFailureSignalHandler() 함수 하나만 호출하면.. SIGSEGV 등을 받으면 아래와 같이 Logging을 하게 해준다고 합니다. 매우 편할 것 같습니다. 

*** SIGSEGV (@0x0) received by PID 17711 (TID 0x7f893090a6f0) from PID 0; stack trace: *** PC: @ 0x412eb1 TestWaitingLogSink::send() @ 0x7f892fb417d0 (unknown) @ 0x412eb1 TestWaitingLogSink::send() @ 0x7f89304f7f06 google::LogMessage::SendToLog() @ 0x7f89304f35af google::LogMessage::Flush() @ 0x7f89304f3739 google::LogMessage::~LogMessage() @ 0x408cf4 TestLogSinkWaitTillSent() @ 0x4115de main @ 0x7f892f7ef1c4 (unknown) @ 0x4046f9 (unknown)







#. Google Sparse Hash
 - Google Sparse Hash: An extremely memory-efficient hash_map implementation

 긴 설명 보다는 아래 테스트 결과가 많은 것을 말해줄 수 있을 것 같습니다.

Average over 10000000 iterations
Wed Dec  8 14:56:38 PST 2004

SPARSE_HASH_MAP:
map_grow                  665 ns
map_predict/grow          303 ns
map_replace               177 ns
map_fetch                 117 ns
map_remove                192 ns
memory used in map_grow    84.3956 Mbytes

DENSE_HASH_MAP:
map_grow                   84 ns
map_predict/grow           22 ns
map_replace                18 ns
map_fetch                  13 ns
map_remove                 23 ns
memory used in map_grow   256.0000 Mbytes

STANDARD HASH_MAP:
map_grow                  162 ns
map_predict/grow          107 ns
map_replace                44 ns
map_fetch                  22 ns
map_remove                124 ns
memory used in map_grow   204.1643 Mbytes

STANDARD MAP:
map_grow                  297 ns
map_predict/grow          282 ns
map_replace               113 ns
map_fetch                 113 ns
map_remove                238 ns
memory used in map_grow   236.8081 Mbytes






#. Google CoreDumper
 - Google CoreDumper: A neat tool for creating GDB readable coredumps from multithreaded applications

  Runtime에 원하는 시점의 Memory를 Dump할 수 있는 기능입니다.
  ASSERT를 걸어야할 시점이 Runtime에서 한참 작업을 진행중이라면 Core만 떠두고, 일단 작업을 진행하도록 한 다음에 나중에 수정하여 업데이트 하는 방법이 있겠습니다.
 (당연히도) Linux만 지원됩니다.







#. 그 밖에..
 - gflags: Commandline flags module for C++
 - Keyczar: Toolkit for safe and simple cryptography
 - Breakpad: An open-source multi-platform crash reporting system
 - Omaha: Software installer and auto-updater for Windows
 - Protocol Buffers: Google's data interchange format

그리고 꼭 읽어보길 권장하는...
Posted by U∙Seung


 네이버 통합검색(이하 통검)이 세계최초라는 것과 전문적이지 않은 일상적인 이야기들을 검색하기에는 매우 유용한 방식이라는데는 대부분 이견이 없으시리라 봅니다. 역사가 무려 7년이나된 통검은 한국인들의 생활에 이미 배어있는 듯 합니다. 국내 Big 포털인 네이버, 다음, 엠파스(SK컴즈) 등이 모두 이러한 통검 방식을 사용하고 있을 뿐만 아니라 실시간 인기 검색어나 네이버 끝음절 검색어에서 보면 한국인들이 입력하는 검색에는 통검에 최적화 되어 있습니다.

 그래서 그런지 본격적으로 한국 시장에 맞는 Localization을 준비중이며, 최근 메인 페이지까지 바꾼 구글이 이번에는 검색 결과도 통검 형식으로 바꿀 계획이 있나 봅니다.

참조3의 기사에 따르면..

구글코리아(대표 조원규ㆍ이원진)는 최근 한국 시장에서의 검색서비스 점유율을 높이기 위해 구글의 검색 결과 표시 방식을 바꿀 수 있다는 방침이다. 이원진 구글코리아 사장은 "구글코리아는 이용자들이 검색 서비스를 편리하게 이용할 수 있다면 모든 방법을 강구하겠다"며 "검색 결과를 나열하지 않고 국내 포털처럼 분류할 수도 있다"고 말했다.
인터넷업계는 구글코리아가 네이버 등 국내 포털처럼 뉴스, 블로그, 카페 등으로 검색 결과를 분류해 보여주는 통합검색을 실시하는 게 아니냐는 관측을 하고 있다. 이에 대해 구글코리아측은 "미국에서 오픈한 `유니버설 서치'를 한글사이트에 도입할 예정"이라고 밝히고, "단 미국의 `유니버설 서치'처럼 `패리스 힐튼'을 입력할 경우, 관련 동영상ㆍ텍스트ㆍ사진이 섞여서 나오는 방식에 한국 사용자들이 익숙하지 않아 칸을 나누는 등의 디스플레이 방식에 대해 고민하고 있다"고 전했다.


 유니버설 서치에서 디스플레이 방식을 칸으로 나누면 그게 통검이지 유니버설 서치인지 -_-;;
 그리고 급기하 얼마전 참조4 에서는 구글 통검 스크린샷이 올라왔습니다. 나는 어떻게 하는지 아직 파악이 안되서 스크린샷을 보진 못했지만 완전 통검입니다.


 개인적인 생각이지만 네이버의 통검은 Google 뿐만 아니라 전세계 검색엔진들이 벤치마킹할만한 좋은 검색결과 표현 방식입니다. 사용자들은 키워드를 입력하는 순간 자신이 찾고자 하는 정보가 무엇인지 자신도 명확히 알지 못하고, 검색엔진 또한 사용자가 무엇을 찾고자 하는지 키워드만 파악해서는 정확히 알 수 없습니다. 그래서 Personalized Search, Clustered Search등이 나오고 있지만 구글의 언급 처럼 아직 기술적인 뒷받침이 부족한 상황에서는 사용자에게 선택권을 주는 것이 가장 바람직하지 않을까요?


 네이버 통검은 각 문서의 종류별로 검색 결과를 나열을 방식을 사용 하고 있습니다. 이 순서는 사용자들이 가장 많이 찾는 것을 상단에 보여 주는 데 이는 고정된 것이 아니라 사용자들의 이용도에 따라서 순위가 바뀐다고 합니다.(참조1) Collection Ranking이라고 하는데, 굳이 표현을 하자면.. 검색 이용자들의 집단지성을 이용해서 검색 순위가 조정된다고 할 수도 있겠습니다.

현재 네이버 통합검색은 지식iN, 카페/블로그, 사전, 이미지, 동영상, 음악, 뉴스, 지역, 책, 쇼핑, 내PC 등 다양한 콜렉션을 제공하고 있습니다. 또한 키워드별로 어떤 정보를 가장 많이 찾는지를 계산해, 콜렉션이 노출되는 순서가 자동적으로 달라지는 Collection Ranking을 적용하고 있습니다.


 이런 면에서 네이버는 매우 훌륭하지만....
 이제는....  웹 검색 결과의 Quality를 한 층 더 높여 줄 시기도 되지 않았을까?



Posted by U∙Seung
일단 PageRank 대해서 알고 싶은 사람은 아래 글을 참조하자.

이명헌 경영스쿨: [텍스트마이닝] 구글 검색 엔진의 해부학
이명헌 경영스쿨: [텍스트마이닝] 구글 페이지랭크(PageRank) 알고리듬
좀더 공부 하고 싶다면 Recent Papers Written by Googlers 를 참조 하도록 하자.

물론, 나는 논문을 자세히 보지 않아서 정확한 것이라던가 최근의 것에 대해서 잘 모른다.
다만 여기에 소개된 PageRank의 개념은 지금은 수정이 되어서 완전히 일치하지 않는다고 한다.

-----------

 최근 웹의 판도가 구글 중심으로 흘러가면서(특히, 미국) PageRank가 사이트를 평가하는 중요한 팩터 중에 하나로 자리잡게 되었다. PageRank의 명칭은 구글 창업자인 래리 페이지의 이름에서 따왔다고 하는데 세르게이 브린은 섭섭하지 않을지 모르겠다. 아무튼 PageRank가 발표된 이후에 수많은 검색 사이트 들이 이를 기반으로 한 ExpertRank(IAC)라던지 SnowRank(한국) 라던지 하는 검색 알고리즘을 적용하기 시작했고 PageRank는 이 사이트가 검색에 얼마나 잘 노출이 되는지를 결정할 수 있는 중요한 팩터가 되었다.


PageRank 알고리즘을 간략히 정리하면 아래와 같다.
사용자 삽입 이미지

 페이지 A를 가리키는 다른 페이지들이 T1, T2, ... Tn 까지 있다고 하자. ( = T1,...Tn은 페이지 A를 인용한 페이지들) 퍼래미터 d는 damping factor로 0에서 1 사이의 값을 갖는다. 우리는 보통 d = 0.85로 했다. d값에 관해서는 다음 섹션에서 다룬다. C(A)는 페이지 A에서 밖으로 나가는 링크의 갯수다.

페이지랭크는 사용자 행동을 모델링한 것으로 생각해볼 수 있다. "랜덤 써퍼"가 한 명 있다고 하자. 이 사람은 무작위로 선택한 어떤 웹 페이지에서 출발해서 백버튼을 누르지 않고 계속 링크를 따라 클릭해 나간다. 그러다가 지루해지면 또 다른 무작위로 선택된 페이지에서 써핑을 시작할 것이다. 랜덤 써퍼가 특정 페이지를 방문할 확률이 바로 그 페이지의 페이지랭크다. 그리고 d damping factor는 랜덤 써퍼가 어떤 페이지를 읽다가 지루해져서 또 다른 랜덤 페이지를 찾게될 확률을 뜻한다. 페이지랭크의 변형된 형태 중에서 중요한 것 중 하나가 댐핑 팩터(damping factor) d를 특정 페이지 하나 또는 일군의 페이지에만 선택적으로 적용하는 것이다. 이렇게 함으로써 사용자화(personalization)가 가능하며 랭킹을 올리기 위해 교묘하게 조작하는 것을 사실상 불가능하게 만들 수 있다.


이 단순 해보이는 식과 설명에서 알 수 있는 것은 우리가 d는 컨트롤 할 수 없다는 것과
자신의 PageRank를 높이기 위해서는 최대한 다른 사이트에서 자신의 사이트를 많이 링크 시켜야 한다는 것인데 자신의 사이트를 링크하는 사이트가 다음과 같은 특징을 가지면 좋다.
 1. PageRank가 높다.
 2. 다른 사이트로의 링크가 적다.

------------------

 
그리고, 마지막으로 PageRank 감각을 익힐 수 있도록 PageRank별 사이트 리스트를 마련했다.
 
노사모         3/10
개인 블로그  3/10
이올린         4/10
유명 블로그  4~5/10
서울메트로   5/10
올블로그      5/10
egloos        6/10
Nate.com    6/10
Naver         7/10
Daum         7/10
Wikipedia    8/10
SourceForge     8/10
MySpace.Com  8/10
NYTimes    9/10
CNN          9/10
W3C        10/10

Posted by U∙Seung
구글, 성공 신화의 비밀 - 10점
데이비드 A. 바이스 외 지음, 우병현 옮김/황금부엉이

The Google Story 는 구글이 성공하기 까지의 과정을 다룬 책이다.

래리 페이지와 세르게이 브린은 성공한 벤처 기업이 다 그렇듯이 창고에서 사업을 시작한다.

둘은 스탠포드 박사과정 학생이었으며, 지금까지의 검색이 형편 없음을 깨닫고 훨씬 더 좋은 검색을 만들게 되고 사업을 시작하게 된다.

책을 읽고 내가 느낀 구글의 성공 비결 세가지는..

1. 뛰어난 검색 기술력

2. 창업자들이 뜻을 맞춘 일관된 사고와 탄탄히 가꾼 기업 문화

3. 늦은 기업 공개

나도 구글을 좋아한다.

구글 같은 기업들이 앞으로도 계속 생겨나길 기원해 본다.




관련 해서...

네이버, 성공 신화의 비밀 - 10점
임원기 지음/황금부엉이


임원기 기자의 네이버 성공 신화도 매우 볼만한 책중에 하나이다.
네이버 시작, 한게임 합병, 글로벌 진출을 상세하게 다루었으며 이해진 의장님을 비롯하여 초기 멤버로 각 지사의 사장을 맡으시던 김범수, 최휘영, 천양현 님의 이야기를 담고 있다.

네이버 관련 책중에서 가장 추천할만한 책이다.


Posted by U∙Seung