MyAlbum   Pet
DirectX   openGL   Java   C/C++   STL   C#   Python   Window   ActiveX   SE & Refactoring   Game   Unicode   googleDesktop   Network   Database   Web   php   asp   asp.net   Library   QT   wxWidget   Something to read  
ToDo
zelon's WebAlbum
Google Tools
Google Naver map
ToRearrange
OpenOffice.org
Eclipse
Check W3 validator

2008년의 구글 제품 Top 10

IT 2008/12/28 22:48 zelon
사용자 삽입 이미지


 한 구글관련 블로그에서 2008년의 구글 Top 10 를 발표했다.

10. 구글 블로거가 대폭 업데이트 되었다고 한다. 실제로 가끔 한번씩 써보면 텍스트큐브에 비해서 많이 기능이 떨어진다고 느낀다. 하지만 구글의 제품들과 많이 쓰기 쉽게 느껴진다.

9. 피카사의 업데이트. 특히 피카사 웹에서의 얼굴 인식 태그 기능이 많이 주목받았었고, 피카사 3.x 버젼이 발표되었다. 사진 관리 프로그램으로 많은 사람들이 쓰기 시작했다. 나도 쓰고 있다 -0-;

8. 구글 번역에 10개 언어가 추가되었다. 사실 한국어는 기존에 서비스되고 있어서 와 닿지 않는다. 한국에서는 오히려 구글 사전의 발표가 와닿을 듯 하다.

7. 구글 독스(구글 오피스)에 PDF 읽기 기능, 양식, 템플릿, 가젯, 오프라인버젼(구글 기어) 추가. 구글 양식은 웹에서 쉽게 다른 사람들의 의견을 모으는 기능으로 꽤 재미있었고(내 결혼식의 방명록으로도 사용해봄), 템플릿은 현재의 기능만으로도 이만큼의 비주얼을 낼 수 있다는 지표를 보여주었다. 앞으로의 성장이 많이 기대된다.

6. 유튜브의 고화질 버젼이 제일 눈에 띄인다. 자막 기능의 추가 등이 있지만, 사실 한국 서비스의 정식 출시가 제일 큰 이슈이며, 현재는 꽤 자리를 많이 잡았다. 특히 특정 사건과 연계되어 꽤 많은 인기를 얻었으나 아쉽게도 그 인기를 이어가지 못했었다.

5. 안드로이드의 발표다. G1 의 발표로 시작되었으며, 이제 하나둘씩 꽤 많은 기업들이 앞으로 발표할 것이라고 기사를 내었다. 2009년에 어떤 성과를 보여줄지 개인적으로 많은 기대가 된다. 과연 한국에도 안드로이드 폰이 판매될 것인지...

4. gmail 에 다양한 추가 기능들의 발표. 특히 비디오 채팅 기능은 플래시로 꽤 멋지게 구현되었으며, 개인적으로도 꽤 사용해보았던 기능이다. gmail 에 테마 기능도 좋은 반응을 얻었다.

3. 구글맵의 스트리트뷰 영역이 상당히 넓어졌다. 미국, 프랑스, 이태리, 스패인, 오스트릴리아, 뉴질랜드, 일본등에서 현재 서비스되고 있다. 한국은 언제 서비스될지 미지수... 하지만  http://maps.google.co.kr 로 접속하면 한국에서도 지도 서비스가 된다는 게 이슈가 될만하다.

2. 구글 검색에 많은 개선이 있었다. 페이지가 올라온 날짜 추가와 suggest 기능이 기본이 되었으며... 실제로 지금도 충분히 잘 쓰고 있는데 어떤 좋은 기능들이 추가될지 기대된다.

1. 1위는 구글 크롬의 발표이다. 베타가 언제 끝날지 알 수 없는 구글인데, 출시 된지 얼마 안되어서 베타 딱지를 뗀 크롬이다. 웹에서의 최강자인만큼 웹 브라우저를 개선하는데 많은 힘을 쏟았다. 특히 그 속도는 대단한 관심을 모았다.

 2009년에 구글은 또 어떤 발전들을 이룰까? 개인적으로 기대하는 것은 한국의 스트리트뷰와 안드로이드폰의 한국 발표. 그리고 스타벅스에서 제공되는 무료 무선 인터넷을 좀 더 넓혀서 모든 역과 모든 영화관, 모든 터미널로의 확대는... 너무 무리일까? ^^

감동의 '하나되어' UCC

일반 2008/12/19 03:09 zelon
 내가 상당히 좋아하는 노래 중 하나인 '하나되어' 라는 노래가 있다. 10년 전 IMF 의 위기에서 온국민의 마음을 하나로 모아 위기를 헤쳐나가자는 뜻으로 당시의 유명한 가수들이 총출동해서 부른 곡이다.

 10년이 지나 다시금 국가적인 어려움이 닥친 이 때 UCC 로 이 노래를 다시 불렀다. 가수들은 아니지만 UCC 의 특성을 살려 각자가 노래해서 편집한 것으로 보인다. 무척이나 감동적이다. 재미있는 점은 노래뿐만 아니라, 피아노, 바이올린, 드럼 등의 악기음까지도 모은 듯 하다. 한번 감상해보시길...



 정말 다시 한번 온 국민이 마음을 모아서 이 위기를 잘 헤쳐나갔으면 한다. 파이팅~ ^^/


 원곡은 다음의 링크에서 볼 수 있다.

원곡 - http://kr.youtube.com/watch?v=p8bmuI1fQnw
 Makefile 로 빌드에 관심을 가지면서 의존성 문제는 이상하게 해결하기 힘든 것이었다. Visual Studio 에서는 알아서 잘(!) 해주는 데, 리눅스에서 간단한 프로그래밍을 하거나, eclipse 에서 MingW 를 이용해서 뭔가 해보려면 꼭 이 문제가 마음에 걸렸다.

 기숙사에 있을 때 제윤이형과 함께 이 얘기를 하다가 이 책을 보라고 해서 gcc 에 -M 이란 옵션이 있는 것을 알았고, 얼마전에 문득 ZViewer 를 mingw 로 컴파일 해보기로 했고, 다시 Makefile 에 의존성을 넣는 것을 해봤다.

 일단 시작은 kldp에서의 글이다. 잘 만들어진 makefile 을 얻을 수 있다. 하지만 난 환경이 윈도우 환경이라서 약간의 수정이 필요했고, 이것저것 찾아보면서 고쳤다.

CC          = gcc
CXX = g++
INC = -I"lib" -I"ZViewer\res" -I"ZViewer" -I"commonSrc"
LIBS =
CFLAGS = -DUNICODE -D_WINDOWS_ -D_UNICODE -D_WIN32_IE=0x0500
#CFLAGS = -Wall -Winline -DDEBUG -ggdb

# import from cpp list
-include srclist.txt

#RESS = $(HOME_DIR)\res\ZViewer.rc
RESS =
TARGET = ZViewer.exe

CRES = $(RESS:.rc=.rco)
OBJS = $(SRCS:.cpp=.o)
DEPS = $(SRCS:.cpp=.d)
DEPS += $(PREDEPS)

PRECOMPILED_HEADER = ZViewer\stdafx.h
PRECOMPILED_HEADER_OUTPUT = $(PRECOMPILED_HEADER:.h=.h.gch)
PREDEPS = ZViewer\stdafx.h.d

.PHONY : clean new all $(TARGET)

all:$(TARGET)

srclist.txt: ConvertFromVCProj.py
@echo Creating source files list...
@python ConvertFromVCProj.py > srclist.txt

$(TARGET):$(PRECOMPILED_HEADER_OUTPUT) srclist.txt $(OBJS) $(CRES)
@echo "CREATE [$@]"
@$(CXX) -o $@ $(PRECOMPILED_HEADER_OUTPUT) $(OBJS) $(CRES)
@echo [OK] Build Completed

$(PRECOMPILED_HEADER_OUTPUT): $(PRECOMPILED_HEADER) $(PRECOMPILED_HEADER:.h=.d)
@echo Compile Precompiled header
@$(CXX) -x c++-header $(PRECOMPILED_HEADER) -o $(PRECOMPILED_HEADER_OUTPUT) $(INC) $(CFLAGS)

clean:
@del /Q $(PRECOMPILED_HEADER_OUTPUT) $(OBJS) $(DEPS) $(TARGET) core 2> NUL
@echo [OK] cleaned

new:
@$(MAKE) -s clean
@$(MAKE) -s

%.rco:%.rc
@echo Compile RC $< to $@
cd $(HOME_DIR)\res
windres $< -o $@
cd $(HOME_DIR)

%.o:%.cpp
@echo $<
@$(CXX) $(INC) $(CFLAGS) -c $< -o $@

%.d:%.cpp
@echo Dependency Reset $<
@$(CXX) -MM $(INC) $(CFLAGS) $< > $@.$$$$
@sed "s,\($(basename $(notdir $@))\)\.o[ :]*,$(subst \,\\,$(basename $@)).o $(subst \,\\,$@) : ,g" < $@.$$$$ > $@
@del /Q $@.$$$$

# h 면 precompiled header 뿐이다.
$(PREDEPS):$(PRECOMPILED_HEADER)
@echo Precompiled header Dependency Reset $< to $@
@$(CXX) -MM $(INC) $(CFLAGS) $< > $@.$$$$
@sed "s,\($(basename $(basename $(notdir $@)))\)\.o[ :]*,$(subst \,\\,$(PRECOMPILED_HEADER_OUTPUT)) $(subst \,\\,$@) : ,g" < $@.$$$$ > $@
@del /Q $@.$$$$

-include $(DEPS)

 소스가 조금 짤리는데, 긁어서 Ctrl+C,V 해서 보거나,  이렇게 만들어진 ZViewer 의 MingW+gcc 윈도우용 버젼은 [kldp.net의 ZViewer 소스]에서 볼 수 있다.(하지만 아직 소스 차원의 문제(VC와 gcc 의 함수 지원등) 때문에 빌드는 안된다 ;;)

 ZViewer 의 Makefile 에서 바뀐 것은 -M 옵션을, -MM 으로 바꾸어서, 시스템 헤더 파일들은 의존성에서 뺐다. 시스템 헤더는 보통 다시 수정하지 않기 때문이다.

 precompiled header 를 추가했다. 이 부분은 약간의 최적화가 필요할 듯도 한데, 일단 gcc 에서의 precompiled header 기능을 활용해보고자 넣어보았다.

 Makefile 에 gcc 외에 sed 라는 프로그램이 실행되는 것을 볼 수 있는데, 이건 정규식을 통해서 치환을 하는 것이다. 관련 내용은 여기에서 찾아볼 수 있다.

 중간에 python ConvertFromVCProj.py 라는 부분은, Visual Studio .NET 2005 의 vcproj 에서 cpp 파일들을 뽑아주는 간단한 스크립트이다. 즉 ZViewer 의 Makefile 은 .NET 2005 의 vcproj 에서 cpp 목록을 뽑아서 컴파일을 하게 된다.(아직 주개발 tool 이 Visual Studio이다)

ps : 유능한 후배의 글을 보고, 도움이 될까해서 얼마전에 있었던 일을 정리해봄 ^^
사용자 삽입 이미지

 갑자기 ZViewer 새버젼을 설치할 때 이전 버젼 위치에 항상 덮어써서 '업그레이드' 를 하게 하고 싶어졌다. 어느날 문득 갑자기 ㅋ

 해야할 일은

  1. 현재 설치된 디렉토리를 찾아서 넣고
  2. 디렉토리를 선택할 때 텍스트 입력창 비활성화
  3. Browse(찾아보기) 버튼을 비활성화
 이렇게 인데, 생각보다 도움말을 뒤져봤는데 원하는 명령을 찾을 수 없었다. 현재 설치된 디렉토리를 찾는건 이전 글에서 특정 레지스트리를 찾으면 되어 금방이었는데, MUI 기반이라서 관련 매크로와 NSIS 의 Contrib 디렉토리를 뒤져보았는데 Resource 와 ControlID 처럼 보이는 것까지는 찾을 수 있었는데, 원하는 내용을 찾지 못했다.

 그래서 검색을 시작했는데, 처음에는 한글로 검색. 주옥같은 게으른 엔지니어님의 NSIS 글을 찾을 수 있었지만 원하는 내용으로의 단서만 찾을 수 있었다. 그래서 다시 NSIS 도움말에서 대충 원하는 내용을 찾아서 일단 대충 만들었는데, 실제 코드가 분명있을거라는 생각이 (또 갑자기) 들어서, 'nsis disable browse button' 이라고 구글로 검색. 제일 처음에 원하는 내용 발견 -_-;;; 코드까지 나와 있어서 정말... 좀 허무했지만, 내가 만들어본 코드랑 거의 비슷했다. 하지만 '찾아보기 버튼' 까지는 나와있지 않아서 좀 더 내용을 덧붙여서 완성~

 관련 코드는 다음과 같다.

...
!define MUI_PAGE_CUSTOMFUNCTION_SHOW onDirectoryShow
!insertmacro MUI_PAGE_DIRECTORY
...
; 디렉토리 선택 화면이 보여질 때 실행되는 함수. 이미 설치된 경우 디렉토리 선택을 할 수 없게 한다.
Function onDirectoryShow
  push $R0
  push $R1
  ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ZViewer" "UninstallString"
  IfErrors onDirectoryShowEnd onDirectoryShowDisableBrowse
onDirectoryShowDisableBrowse:
  FindWindow $R0 "#32770" "" $HWNDPARENT
  GetDlgItem $R1 $R0 1019
  EnableWindow $R1 0
  GetDlgItem $R1 $R0 1001
  EnableWindow $R1 0
; '기존의 설치될 디렉토리를 고르세요' 라는 메시지를 '다시 설치합니다' 라는 내용으로 바꿈
  GetDlgItem $R1 $R0 1006
  SendMessage $R1 ${WM_SETTEXT} 0 "STR:$(TEXT_REINSTALL)"

onDirectoryShowEnd:
  pop $R1
  pop $R0
FunctionEnd
 코드를 조금 설명해보자면,

- MUI_PAGE_DIRECTORY 앞 문장에 define 을 해서 callback 을 등록하는게 일단 중요하다.
- ReadRegStr 에서 읽어오는 것은 '프로그램 추가/제거' 에서 쓰이는 레지스트리이다.(참고)
- FindWindow 로 Directory 선택창을 읽어오고, GetDlgItem(win처럼) 로 Control handle 을 얻어온 후 EnableWindow 로 disble 시킨다.
- SendMessage 에 ${WM_SETTEXT} 를 써서 기존의 글자를 바꾼다.