Korea Evangelist

Developer & Platform Evangelism, Microsoft Korea

January, 2010

  • Korea Evangelist

    개발자들의 새로운 희망, Windows Phone DevDays 2010 초대

    • 3 Comments

    드디어 대망의 2010년 새해가 밝았습니다! 먼저 새해 복 많이 받으십시오!

    한국 마이크로소프트에서 새해 처음으로 개발자들의 새로운 희망인 윈도우 폰 애플리케이션 개발 세미나에 여러분을 초대합니다! 이번 세미나는 새해 처음으로 여는 행사인 만큼 푸짐한 선물들을 준비했습니다. 조기 마감이 될 수 있으니 어서 아래의 등록 버튼을 클릭해 주세요!!

  • Korea Evangelist

    골수 Unix 쟁이의 Windows 개발 환경 삽질 보고서 #1

    • 2 Comments

    윈도우즈(Windows) 한 번도 안 써봤다면 거짓말이겠다. 어떻게든 윈도우즈는 쓸 수 밖에 없지, 이 나라에서는.

    허나, 솔직히 말하건데, 지금 글을 쓰고 있는 나는, 적어도 지난 여섯 해 동안 윈도우즈에서 진지한 프로그램을 짜 본 일이 거의 없다. C#은 고사하고, C++로도. 한 술 더떠서, 편지 보내고 글 쓰고 웹 서핑 따위 일도 거의 Unix에서. 그 밖에 꼭 윈도우즈 써야할 일은, Die Hard 윈도우즈 유저이신 마눌님께서 해주시옵고. (Olleh!) 그래서 본래는 글 제목을 “Die-Hard Unix 유저…” 어쩌고 저쩌고 하려고 하다가, “Die Hard”란 낱말이 마음게 걸려 바꿨다.

    어쨌든, 어떤 까닭에서 건, 나는 지금 아주 오랫만에 윈도우즈에서 소프트웨어 개발을 해야만 한다. 그 것도 신기술을 가능한 한 껏 끌어들이면서…

    사실 이런 일로 블로그 글까지 써야 할까 하다가, 몇 년 전에 Apple Forum을 자주 들락 거릴 때 (빈도수는 줄었지만 나는 여전히 이 포럼의 오랜 회원이기도 하고 틈 나는 대로 들려서 좋은 정보도 많이 얻고 있기도 하다.),  “Die-Hard Windows 개발자의 Mac 적응기” 던가… 하여간 그런 제목의 연속된 블로그 글을 재밌게 읽었던 기억이 났다. 좀 더, 털어 놓자면, 나는 지난 거의 10년 동안 Mac OS X을 썼다. 대충 SCO Xenix –> SCO Unix –> NextStep –> 386BSD –> Linux -> Solaris –> FreeBSD로 이어지는 내 스무해 넘는 Unix 여정의 종착역인 셈이다. 따라서 Objective C를 모르지는 않지만, 그렇다고 Mac OS X 개발자라 하기는 어렵다. 아직도 내 집에는 두 대의 맥킨토시가 있다. 듀얼 G5 데탑 한 대, 검정 맥북 한대. 최근에 검정 맥북 한대에는 Windows 7을 깔았다. 이 정도면 내 “골수”의 깊이를 더 이상 늘어 놓지 않아도 될 듯.

    { 마이크로소프트 직원이 아직도 Mac OS X을 쓰면 되겠냐고? 호호, 안될게 뭐있나? 그럼 이건 뭐라고 설명할까? http://www.microsoft.com/mac/default.mspx (Mactopia). 그리고 iPhoneActiveSync 라이선스는 왜 해줘쓰까? 더불어, Google에는 또 왜 ActiveSync 라이선스는 왜 해줬으까? 이 밖에도 기술 편가르며 말싸움하기 좋아하는 버릇을 못버리는 사람들로서는 이해 못할 수많은 “적과의 동침”이 하루가 멀다하고 자연스레 생겨나는 곳이 바로 이 판이다. 기술과 제품의 성패는 생태계의 건전성으로 판가름 나는 것이지, 그 자체의 기술적 우수성과 소수 집단의 비 논리적 충성도로 지켜질 수 있는 것이 아니다. 지금 까지 이 분야의 역사가 증명하듯이. }

    아 뭐가 어찌되었던, 이 글에서 중요한 것은 어떤 필요에서건 (1) 이제 그간 죽자고 Unix / Java 환경에 더 가까운 방식으로 프로그램 짜던 사람이, 윈도우즈에서 과감히 삽질을 해보기로 마음 먹었다는 것이고, (2) 연배와 경륜이 어떠하던 간에 여하간 누군가의 도움이 절실히 필요하다는 것 (3) 그 과정에서 겪고 있는 궁금증과 난점을 눈 딱 감고 용감하게 떠벌이고 있다는 사실이겠다.

    사실 옆자리에 전문가들이 즐비하지만, 사실 내겐 거의 도움이 되질 않는다. 내가 물어보는 것이 “하도 오래전이라 기억이 안나는데, C# 컴파일러 이름이 뭐유?” 또는 “cmd 창에서 굴림체 말고 다른 글꼴은 쓸 수 없수?” 같은 너무 잡스럽고 촌스런 것이기도 하거니와 일단 너무들 바빠서 얼굴 보기도 힘든 사람들에게 어이없는 질문을 던지기가 선뜻 내키지가 않는다. 그리고, “당신이 왜 이제와서 윈도우즈 프로그래머가 되려고 하지?”라고 대놓고 물으면 뭐 딱히 대답할 답이 떠오르지 않는다. ( 내가 뭔가 열심히 몰래 준비하고 있다는 것만은 사실이지만.)  이 무슨 황당한 풍요속의 빈곤이던가? 그래서 용감한 척 (뭐 모르는 것은 모른다고 해야지…) 하면서 이렇게 공개적으로 대놓고 물어보는 거다. 혹시 안팎으로 누군가 답해 주지 않을까 싶어서…

    아래는 그 첫번째 삽질 보고서다 - 미리 말하건데 보고 웃지들 마시라. 그리고 플랫폼 전략이 어쩌고 저쩌고 하는 양반이, 3백만년 전 아해들이 고민하던 문제를 이제 와서 들먹이냐고 퇴박 놓지도 마시라. 그저 마흔 줄에 기꺼이 삽질하는 사람의 마음을 어여삐 여기사, 과감한 도움의 손길을… ^^;;

    뭐, Simon Peyton Jones 같은 어르신도 윈도우즈 쓰시면서 http://research.microsoft.com/en-us/um/people/simonpj/win32-cheat.html 이러셨나 본데 나라고 별 수 있겠남? 뭐든 익숙하지 않으면 불편한게다. 예전 우리 할머니 이불 빨래를 하시는 데도, 세탁기 마다하고 손빨래 하셨듯이. 각설하옵고. 

    1. X Terminal을 완전히 대체할 기능을 찾다가 반나절만에 포기. Remote Desktop Connection으로 대체 가능? 이 기능을 한 두 쪽으로 잘 설명해 놓은 글은 웨 검색해도 잘 않나오는 거냐. 솔직히 Help 별 도움 안됐다. 어쨌거나, RDC로 연결했을 때, Server 쪽 GUI 다 뜨는 거 말고, Shell만 어찌 뜨게 할 수는 없을까? 그리고 그 쪽에서 실행시킨 어플 화면을 내 컴터 쪽으로 보이게 하려면 어찌해야 되지? 너무 어렵거나 잘 안된다면 하는 수 없는 일. 윈도우즈에는 나름의 사는 방식이 있을 터이지. 뭐 꼭 같은 기능 필요하다고 우겨댈 생각은 없다.
    2. Cmd로는 Unix shell를 대체하기는 좀 역부족인 듯. Powershell? 문뜩 배보다 배꼽이 더 클 듯한 느낌이… 아 무엇보다 Cmd를 실행시킨 콘솔 창에서는 Defaults 세팅에서 Codepage를 437로 바꾸니, Consolas나 Lucida 같은 글꼴을 쓸 수 있는데, 왜 Powershell 창에서는 Defaults 세팅에서 Codepage를 바꾸지도 못하는 거지… –;; 이거 VI 에디터 쓸려면 굴림체나 raster 글꼴은 좀 … 그런데… 아… 괴롭다. 좋은 코드는 좋은 글꼴에서 나오는 벱이야~~~(지발 글꼴 바꾸는 방법 좀 갈쳐 주시구랴.)
    3. 왜 IDE 안쓰냐고? Visual Studio 좋은지는 저도 알지라. 뭐 앞으로는 꼭 써볼 틴티…. 근디 olleh! world 정도로 간단한 실험 코드 쓸라는데, IDE 열고 프로젝트 만들려고 엉성한 이름 짓고 … 그 건 좀 아직 좀 그러하네… 익숙치 않아서 그런건가? 이럴 땐 EMACS 쓰기도 부담시려.
    4. .NET 공부하는데, 꼭 C# 써야하남? 이 번에 나온 .NET 4 버전부터는 Ruby나 Python 쓰면 안될까? 아직도 좀 쓰기가 좀 그런가? Ruby on Rails를 꼭 쓰겠다는 것은 아니지만, 가볍고 날렵하게 즐기기에는 Interpreter 방식으로 즉문 즉답하는 환경에서, Typing 신경 끄고 노는 것이 사실 더 맘에 드는데… 흠 고민
    5. Command line 컴파일러 쓰려다 보니, 환경 변수 세팅하는 것 때문에 고민 중이었는데, Visual Studio 2010 Ultimate Beta 까니까 PATH에 환경 변수 물어서 cmd 창 띄워주는 메뉴가 떡 하니 생기던데, 왜 Visual Studio 2010 Express 판에서 C# 판 깔고나면 왜 그런 메뉴 같은 것이 아예 뵈질 않은 겨… 사무실 데탑에는 Ultimate 판 몽창 깔고 싶지 않은데… –;; { cmd 대신 powershell 물려 띄울려면 어찌 해야하지? }
    6. cmd 창 뛰우니 Visual Studio 2010 설치된 폴더로 가는 군. 이거 C Shell의 CDPATH 처럼 자주 가는 directory로 한 방에 cd로 가도록 환경 세팅할 방법은 없는가? 아니면 나도 모르는 획기적인 뭔가가? … 이거 안되면 무쟈게 귀챦은데… –;;

    이 번 삽질은 요기까지. 어쨌거나, 이거 쉽지 않군. oTL

    2010 년 1월 13일, 사무실에서 퇴근 전 막판 1 시간 남겨두고 삽질하면서

  • Korea Evangelist

    Unix 골수가 Windows에서 사는 법 #3: SUA (골수 Unix 유저를 위한 배려?)

    • 2 Comments

    일단 글 꼭지부터 바꾸었다. 너무 길어서다. 그 대신 딸린 제목을 더 길게 쓰기로 했다. 읽는 사람이 헛갈려도 할 수 없다. (누가 진짜 읽기는 하남? ^^;;)

    내가 처음으로 닷넷으로 연습삼아 해보고 싶은 놀이는, 2008년 PDC, The Future of C# 에서 Microsoft Technical fellow자 C# Chief Architect로 일하고 있다는 Anders Hejlsberg가 보여주었던 Compiler-As-a-Service 예제다. 데모에서 크게 감명을 받았다거나 그래서가 아니라, 앞으로 실험해 보고자 하는 놀이에 Meta-Programming 기술이 꼭 필요하기 때문이고, 그 과정에서 Mono 팀이 삽질하고 있는 C# Interactive Shell 이라도 만들어 가지고 놀 수 있으면 무지 즐겁겠다는 생각이 들어서다.

    문제는 이 맛갈나는 오프소스 자산을 가져다 쓰면서 tar, bzip은 아카이빙 도구들은 물론이고 make 등등 UNIX 프로그래밍 환경에서 거의 매일 쓰다시피하는 UNIX 명령어들이 줄줄이 등장하노니… 이 거 진짜 삽질이다.

    그리하여, 그간의 삽질보고 되겠다.

    • 아름드리님 가르침대로 GUI Shell command 만들어 넣는 삽질하다가 알게되었는데, Windows Registry Editor Version 5.00이라는 글귀를 파일 맨 첫머리에 넣지 않으면 이런 메시지 뜬다. 이 글귀가 없으면 이 파일 type 못알아 보나 브다. UNIX file system에서 말하는 Magic Number랑 비슷한 건가 이거?
    clip_image001

    • Meta-Programming을 지원하려면, (C#) Parser / Evaluator / Compiler Agent 같은 API set들이 필요하다. 결론은, .NET 4에는 아직 없다. 그리고 간단한 Command Line shell이라도 만들어 보려면 GNU의 readline 같이 line editor 기능이 갖추어진 Input Stream Reader가 있어야 한다.
    • 필요할 때마다, GNU Unix 유틸들 하나씩 찾아서 깔다가, 결국은 SUA (Subsystem for Unix-based Applications)라는 거 깔았다. Microsoft에서 이런 거 많들어 놓았는지 진짜 몰랐다. 왜 아무도 말 안해 주는 거냐!!! 한 술 더떠서, 이런 곳도 있다. 덩실 덩실! SUA Community라는 게 있는 거다. { 이제 이거보고 열심히 따라 해야 겠다. 그럴 바엔 차라리 그냥 Unix 쓰라고 하고 싶으시겠지만 좀 참으시라. 뭐, 교육 비디오 두편도 Microsoft에서 만들어 준 거 같은디. 어쨌든 기쁨일지어다. }

      clip_image002

    • 오, Windows/SUA 밑에 널브러진 그 친숙한 디렉터리 생김새들과, bin 아래에 화면 가득히 펼쳐진 정겨운 이름들이여!! 땡스 어랏!
  • Korea Evangelist

    Unix 골수가 Windows에서 사는 법 #4: SUA 삽질 – 코딩은 언제 할꺼냐? 당췌!

    • 0 Comments

    아직 재미있는 일은 시작도 안했건 만, 혹시나 그 동안 뭐하고 있었나 궁금할 지도 모를 양반들을 위해서 중간 보고 올리는 바이다. 요사이 공부 무지하게 하고 있다. 역시나 셈말 꾼이 터전을 옮긴다는 것은, 그간의 삶을 옮기는 것 만큼이나 버거운 일이다. ( 실제로 조사를 해봐도 그렇게 나온다지? 주로 쓰는 셈말을 바꿔치는 일이 그다지 흔치 않다는 게다. 뭐, 사람말이든 셈말이든 처음 생각의 틀을 잡을 때에 배워 쓴 말은 “엄마 말"(Mother Tongue)”이나 마찬가지. 영어를 열심히 공부해도 머릿 속에서 일어나는 생각은 우리말로 하게 되어있는 게지. 그렇다 해도, 알맞은 일에 알맞은 셈말을 배워 쓸 줄 아는 것은 쟁이가 갖추어야 할 바탕 가운데 바탕이겠다. )

    아래는 그 간의 삽질 보고 되겠다.

    • 끝내는 SUA 의 모든 걸 다 깔아서, 거의 Unix 환경을 만들어 버렸다. ( .NET 공부한다더니 지금 뭐하고 있는 거냐?—;; 배보다 배꼽이 더 크쟎아~~. ) Windows 위에 Unix Subsystem을 만들어 올리는 방법은 다음과 같다.
      1. 맨 먼저 Windows 그 머시기냐 소프트웨어 깔고 지우고 하는 제어판가서 Subsystem for Unix Apps가 하는 놈을 깐다.
      2. Utils & Apps for SUA 이거 받아다 깐다.
      3. SUA에 가서 Complete Toolset 깐다. 이 때 괜히 패키지가 쓰임새 따라 아래 같이 여러 묶음으로 나누어 놓았는데 괜한 헛삽질 말고 “Complete Toolset” 받아 까는 것이 좋다. 이 때 준비할 것은 “무한한 참을 성”이다. 내image려 받는 속도가 가끔씩 살인적이다. ( 성질 급한 우리나라 네떡 꾼들에게는 주금인 것이지, 이런거 vv;; 어지간 하면 이런데도 돈 좀 들이지. 기왕 고생해서 만든 것을 뭐 이렇게 마무리하고 있냐.)
        • 특히 이거 깔 때, Local administrator로 깔아야 한다. 다시 말해, Administrators의 Group에 들어있는 id로 해서도 안된다. 그냥 앞뒤 가리지 말고, Domain에 등록된 id말고, 로컬 곧 컴터에서 administrator라는 id로 들어가서 돌려야 된다. (나 이거하다 무지하게 헛 삽질했다. vv;;)
        • pkg-current-bundlecomplete60.exe 돌리면 깔기 시작하는데 이거 역시 “느긋한 마음”이 가장 큰 준비물이다. ClaimsAV라고 병 걸린 놈(virus)이나 못된 놈(malware) 잡아내는 서비스(Unix 말로는 daemon이라고 하지들) 올리고 엔진 업데이트를 하나 본데, 이 오픈소스 프로젝트 하는 분이 잠적을 하셨는지 어쩐지 이거 계속 해볼려고 하다가 포기하고, 다음 단계로 넘어 가지 까지 시간 많이 걸린다. 그러니 그냥 놔두고 잊어먹고 있으면 된다.
        • 다 끝나면 Subsystem for Unix-based Applications라는 메뉴판에서 bash가 걸려있는 것을 볼 수 있다!! Olleh! 하지만 주로 쓰는 id에서 이거 별 문제 없이 쓰고 싶으면, administimagerator 계정에서 걍 항상 Run as administrator로 뜨도록 손봐주고, 또 글꼴 이쁜 거 쓰고 싶으면 코드 페이지도 손봐주고 화면 크기도 맞추고 해주는 게 속편하다. ( 다른 id로는 .lnk 파일 손도 못대게 묶어 놨다. 아 물론 삽질 좀 하면 되시겠으나 편하게 사시라고 ^^;; )

        • 옆에 DISPLAY라는 변수 보이시 것지들? X Window 뜬 다는 얘기 되것다. 진짜 뜬다. Xming이라는 이름인데, 이거 Minimalist GNU Win32. 줄여서 MinGW라고, GNU 컴파일러랑 갖가기 것들 Windows로 옮겨 놓은 꾸러미 있었는데, 그 힘을 빌어서 만든 것 같다. 역시 OSS의 “십시일반” 힘은 무시 못할 일이겠다. 여간 삽질 아니 었을 텐디. 그 토록 오랫동안.

        • 아 물론, 왼편 그림과 같은 Setuid 방식이나 어마 무시한 root power를 주는 것은 두 subsystem을 일치시키는데 한계가 있는 부분이다.

      오늘의 생각

      • Cygwin 같은 거 있다는 거, 나도 안다. 좀 쓰기도 했다. 패키지도 더 많고 깔기도 더 쉽다. 하지만 Cygwin은 dll 한 덩어리로 포장된 emulation layer 위에 올라간다. SUA와 처럼, 아래와 같은 아키텍처 image- 커널 위에 서브시스템으로 올라가는 구조가 갖는 장점을 누리지 못한다. 이러한 아키텍처는 끝내  “가상화(Virtualization)” 기술의 본질과도 깊은 관계가 있다. 이 것만 알아두자. 이런 연구 개발 노력이 일견 무한 삽질인것 처럼 보이지만, 현재의 어떤 뛰어난 기술도 과거의 우직하고 멍청한 삽질 없이는 생겨나지 않는다.
      • 아래는 SUA 시스템에 영향을 준 수많은 관련 기술 자산들이다. 마치 내 지나온 발자취를 그려 놓은 것 같아서 그냥 넘어갈 수 없었다.image
      • 어쩌다 보니 깔기는 했지만, 이 서브시스템이 얼마나 뛰어난 어플리케이션 호환성을 제공하는지, 실용성이 얼마나 괜챦은지에 대해서는 뭐라 말 못하겠다. 쓰다보면 알게 되겠지.
      • 살펴보니 적쟎이 공들인 것 인정한다. 하지만 할거면 이런 서비스 제대로 좀 했으면 한다. 어찌 어치 알아가지고, 내려 받고, 만져 주고… 아~~ 번거롭다. 그리고, 안정성 중요하지만 어떤 것은 너무 옛날 것들이다. image그냥 묵혀 버리기에는, 아래 같은 노력들이 너무 아쉽지 않은가? 가상화 기술로 VM에서 리눅스 올려 쓰라고? 하기사 cygwin 보다는 나은 방법인데… 아 나도 모르겠다.

     

    아~~ 이제는 Unix 삽질은 고만하고, 코딩을…. 할꺼나?

     

     

     

     

  • Korea Evangelist

    골수 Unix 쟁이의 Windows 개발 환경 삽질 보고서 #2: VI + Visual Studio?

    • 0 Comments

    오늘의 삽질기

    늙다구니 왕초보를 보살피실 줄 아는 “아름드리” 님의 친절한 댓글 덕택에 오늘의 틈삽질 - 틈나는 대로 하는 삽질 ^^;;은 꽤 즐겁다.

    • Command Line은 아니지만 서도, CDPATH 나름 대체하는 방법은 해결,

    오늘은 아침부터 삽질 시작. 댓글 보고 곧바로 Registry 고치기 부터 시작. 어제 깔아 두었던 VI(VIM)로 아래 같이 reg 파일 만들어 start로 실행. 꾹꾹! 뱅!

    [HKEY_CLASSES_ROOT\Directory\shell\Command]

    @="Code Here"

    [HKEY_CLASSES_ROOT\Directory\shell\Command\command]

    @="cmd.exe /k \"C:\\Program Files\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" x86"

    오, 그리고 짜잔. Live Mesh로 공유된 JoP(Joy Of Programming) 폴더를 클릭하니, “Code Here”이라는 아이템이! 헉 그런데 왜 이거 실행시키니 왜 JoP가 아닌 그 위 Documents로 떨어지는 것이냐… 새로 태어난 아기 쉘 프로세스의 Current Working Directory를 클릭했던 폴더로 잡아주는 방법은 없으..까나… 뭐 꼭 또 갈켜 달라는 것은 아니고…

    • SnippetCompiler로 VI를 대체?

    - 아름드리 님이 갈쳐 주신 “SnippetCompiler”를 살펴보다 여기 저기 뒤져 보니, 나같이 생각하는 생각하는 사람들이 적지 않았던 모양. 그럼 그렇지! 2004년 6월 MSDN에 날마다 필요한 10가지 개발자 도구 가운데 하나로 꼽힌 것을 보니 제법 오래된 듯 한데. 다만, 아쉽게도 내가 만져보려는 .NET 4 판은 아직인듯.

    - 그래서 결국 다시 손에 익은 VI로 돌아왔으나, 산처럼 쌓인 뱀처럼 긴 이름의 API 이름들을 주무르려면 곧 힘에 부칠 듯. Mac OS X에서 쓰던 TextMate 비스무리 한 에디터만 있어도 딱일 터인데 하는 생각이.

    • 그 밖에

    - 서버 급히 만질 때 써보려고 X Terminal 비스무리 한 걸 찾았으나, 이 문제는 골치아파 무기한 연기. RDC는 아무래도 내 타입이 아냐… oTL. 프로그래밍 언어 문제는 아무래도 오늘 고민 좀 더해야 할 듯.

    오늘 느끼기를

    • 여전히 \랑 /의 차이는 이겨 내기 쉽지 않고나. 비슷하게 clear vs. cls, 무심코 find 해보다가 허걱하는 일 되풀이 하고 있고, dir vs. ls는 각기 오래 익어서 헛갈리지 않지만 서도.
    • cd 해놓고 왜 프롬프트가 그대로인지 멍하니 지켜보는 스스로를 또 한심하게 지켜보는…
    • 그런다고 cd ~하는 것은 또 뭐냐
    • csc가 C# compiler 이름이라는 거, 참 오랜만에 기억났다. 그래도 cl은 무심코 떠오르더만
    • 고작해야 환경 변수를 다루는 것인데 – Registry도 Enviroment요, Shell 변수도 Environemnt요, 다 본질도 같고 역할 도 같것만, 고치는 방법도 다르고, 관례도 서로 다르고… 이건 여전히 문제. 반드시 그래야 할 까닭도 없이 단순한 것을 어렵게 만드는 이 분야의 고질적인 버릇은 Unix, Windows, Mac OS X 할 것 없이 여전.

    중딩 시절부터 1년 만땅으로 코딩 한 줄 안하고 세월을 보낸 것은 여기 와서 처음.

    그럼 이제부터는 코딩 시작!? 할 수 있으까…?

     

Page 1 of 2 (7 items) 12