2008년 2월 29일 금요일

[IDSolution]간결하고 냉정한 인공지능 로봇 취향


간결하고 냉정한 인공지능 로봇 취향

메마르고 독창적인. 당신은 전통적인 엔지니어의 취향입니다.

당신은 인과관계가 깔끔한 것을 좋아하는 취향입니다. "그래서? 그게 왜 그렇게 됐는데?"라는 생각을 자주 하는 편이죠. 마치 if-then 구문이 골수 깊이 박힌 엔지니어와 같다고나 할까요. 질서정연하지 않은, 장황한 감정에 의존하는 순정 만화 영화 소설은 당신이 좀처럼 가까이 하기가 힘들 겁니다.


"공각 기동대"의 주인공 쿠사나기 소령.
임무 달성의 효율성을 극대화하기 위해 만들어진 기계 군인.
쿠사나기 소령의 철두철미함과 냉혹한 결단력은 당신 취향의 이상형입니다.

당신은 너무 흔하고 뻔한 것에 쉽게 싫증내는 비주류 지향입니다. 매일 똑같은 광경이 펼쳐지는 멜로 드라마, 매일 똑같이 성형한 연예인들이 나오는 TV 광고, 매일 똑같은 멜로디와 창법의 발라드 노래, 당신에겐 모두 짜증나는 것들입니다. 도대체 이런 똑같은 것들을 지겨워 하지도 않고 즐겨 보는 사람들은 제정신일까 궁금합니다.

현실 세계에선 '까다로운' 비주류일지 모르지만, 인터넷 시대에 당신 같은 부류는 주류가 될 수 있습니다. 지루하고 개념없는 대중에 반항적인, 현실에 불만 가득한 사람끼리 모여 영향력을 발휘하고, 무개념 인간들을 조롱할 수 있을테니까요.


좋아하는 것
간결하고 논리적이고 특이한 것이 좋습니다. 딱 부러지게 예를 들자면 SF 소설이죠. 물론 SF 소설 싫어할 수도 있습니다. SF 소설의 상당수는 장황하게 길기만 하니까요. 취향이 상당히 특이하다는 말을 들을 수도 있지만, 의외로 대중적인 영화 소설 음악에 끌리기도 합니다.

사실 이렇게 보면, 특별히 당신의 취향에 시금석 같은 기준이 있는 것은 아닙니다. 일단은 뭔가 새롭고 독창적일 것, 그러나 당신이 아는 상식과 논리에 벗어나지 않을 것. 이 정도 조건이면 당신이 좋아하는 것에 근접할 수 있을 겁니다. 가령, 다음과 같은 광고 정도면 괜찮을까요?


저주하는 것
비논리, 비이성, 군중심리, 이유도 묻지 않는 따라쟁이들, 오빠부대. 당신이 저주하는 것들입니다. 물론 당신 취향만 특별히 저주하는 것은 아닐테지만 말이죠.

사실 당신은 특별히 어떤 취향을 혐오하거나 멸시하지 않는 편입니다. 저주도 관심이 있어야 하는데, 당신은 남들이 뭘 좋아하는지에 크게 관심이 없거든요. 남들이 뭘 하던 당신은 기본적으로 무관심한 편입니다. 문제는 남들이 관심없는 취향을 당신에게 들이밀 때죠. 상호존중의 원칙만 지켜진다면 당신은 그저 평안히 세상을 즐길 수 있습니다.

지민아빠님의 블로그에서 보고 저도 해봤습니다. 저는.. 기계인간;;;; 이군요 헉;;;

2008년 2월 27일 수요일

G-mail이 바뀌었군요.

사용자 삽입 이미지

Select를 div로 변경해서 javascript로 처리하도록 변경이 되었습니다. 바꿀 이유가 있었는지는 모르겠습니다만...
군더더기 없는 G-mail에 이것저것 너무 붙는 것 같네요. 느려진 듯 합니다. -_-;;

사용자 삽입 이미지

Firebug 설치여부를 체크해서 경고 메시지도 뿌려주더군요. "Firebug는 올바르게 구성되지 않은 경우 Gmail의 속도를 느리게 만드는 것으로 알려져 있습니다." 그래서 제거하라는 도움말을 보여주더군요. 사용자가 일부러 설치한 플러그인에 대해서 왈가불가할만한지는 참 애매하군요.

공지정도로만 띄우면 되지 않을까 싶습니다만... -_-;;;

2008년 2월 26일 화요일

Lombok

Bali에 놀러갔을 때, 샀던 DK Series의 Bali &Lombok 책..
문득, 그 책의 붉게 물든 석양이 생각이 났습니다. 따뜻한 날씨의 석양을 보고 싶어집니다.

사용자 삽입 이미지


이미지 출처: Flick의 Kelly Cheng님의 사진입니다.

※ 회사 그만두고 여행 가고 싶어지네요. 휴~
※※ Lombok은 Bali 옆의 섬입니다. Bali에서 배타고 가야된다고 하더군요.

PDT 간단한 정리;;;

  1. PDT란?
이클립스 플랫폼에서 PHP를 개발하기 위한 프레임워크입니다.
PHP Integrated Development Tool
  2. PDT 설치하기
이클립스 설치는 기본적으로 다 되어 있다고 가정하겠습니다.

  a. Update 기능을 사용하는 방법
Help > Software Updates > Find and Install을 누른다음에 나오는 창에서 Search for new features to install을 선택하고 Next를 누릅니다. 여기에서 New Remote Site를 누른 다음에 나오는 창에서 Name과 URL(URL은 pdt 업데이트 주소를 넣어줍니다.)을 입력하고 Finish를 누르면 자동으로 업데이트가 됩니다.

사용자 삽입 이미지


  b. 코드를 다운받아서 설치하는 방법
PDT project downloads에서 PDT를 다운로드 받으신 다음에 압축을 풀고 eclipse 폴더에 PDT의 내용을 복사해서 넣으시면 됩니다.

  3. PHP Project & PHP 파일만들기
PDT의 모든 기능을 사용하기 위해서는 PHP Project를 먼저 생성해야합니다.
메뉴에서 'File > New > PHP Project'를 선택하거나 PHP Explorer에서 마우스 오른쪽 버튼을 누르고 'New > PHP Project'를 누르셔도 됩니다. 그 다음에 나오는 창에서 프로젝트 명을 넣고 Finish를 누르면 PHP 프로젝트가 생성이 됩니다.
사용자 삽입 이미지

동일한 Project이름이 사용된 경우에는 그림과 같이 에러가 발생합니다.


PHP파일 만들기도 PHP Project 만드는 것과 비슷합니다. 'File > New > PHP' Project 또는 PHP Explorer에서 'New > PHP File'을 선택해도 됩니다. 먼저 파일명을 입력합니다.
사용자 삽입 이미지사용자 삽입 이미지

입력한 다음에 Finish를 누르는 경우에는 단순한 PHP파일이 생성되구요. Finish를 누르지 않고 Next로 이동하게 되면, PHP Template을 선택할 수도 있습니다.

  4. Code Assist
PDT에서는 코드 생성을 쉽게하기 위해서 여러가지 도움 기능을 제공하고 있습니다. 이런 도움 기능(말)들이 어떠한 역할을 하는지(function인지, class인지 등을 알리는)를 나타내기 위해서 아이콘을 사용하고 있습니다.
사용자 삽입 이미지
이러한 아이콘들은 Outline view에서나 입력창에서 보실 수 있습니다.

사용자 삽입 이미지

Outline view에서 본


PHP 파일 입력창에서 나온 도움말. 입력하는 도중 또는 Ctrl +Space를 누르는 경우에 나옵니다. Ctrl +Space는 JDT나 RDT, WTP등에서도 공통으로 code assist 기능이 동작하도록 하는 단축키입니다.  (윈도우의 경우이며, 리눅스나 맥의 경우 단축키가 다릅니다.)

사용자 삽입 이미지

코드 입력이 완료되었는데 코드에 대한 도움말을 보고 싶으시면 마우스를 해당 위치에 갖다 대면 보이게 됩니다. 도움말 창을 고정시키길 원하시면 이 때 F2를 누르시면 됩니다.

사용자 삽입 이미지

중괄호 {}를 사용해서 function이나 class를 정의하게 되는데요. 중괄호의 시작부분({)이나 끝부분(})에 마우스를 갖다대면 한 쌍을 이루는 반대 쪽에 내가 끝이다를 의미하는 표시가 나오게 됩니다.

사용자 삽입 이미지

위의 그림에서는 5번째 줄에 커서가 있었구요. 2번 째 줄에 사각형의 표시가 있는 것을 보실 수 있습니다. 이 둘의 중괄호를 이동하기 위해서는 Ctrl+Shift+P를 누르면 됩니다.

코드의 의미를 구분하기 위해서 위와 같이 색상을 따로 정해주고 있는데요. 각 색의 의미는 다음과 같습니다.
사용자 삽입 이미지
위의 값은 디폴트이기 때문에 Window > Preferences > PHP > Editor > Syntax Coloring에서 수정이 가능합니다.
사용자 삽입 이미지

주석의 경우에도 //와 /* */ 모두 지원하고 있습니다. 주석을 쉽게 달기 위해서는 Ctrl +/를 누르시면 주석을 달아주구요. 이미 달려있는 경우에 다시 Ctrl+/를 누르시면 주석이 삭제됩니다.

  5. 에러 찾기
PDT에서는 실시간으로 에러를 잡아주는 기능이 있습니다. 코드를 입력하다 입력한 문구에 에러가 발생하면 다음과 같이 x자 모양의 에러를 표시해줍니다.

사용자 삽입 이미지

에러 마크위에 마우스를 갖다 대면 어떠한 에러가 났는지를 표시해 주기도 합니다.

또다른 방법으로는, Problems 뷰를 사용하는 방법인데요. Window > Show View > Others > General > Problems를 클릭해서 창을 띄울 수도 있습니다.

사용자 삽입 이미지

에러가 발생한 경우에는 에러를 모두 보여주구요. 리소스/경로/발생한 위치를 보여줍니다. 에러 위에서 마우스 오른쪽 클릭하면 해당하는 에러로 이동하거나 에러 내용을 보거나 복사할 수 있는 등의 기능을 제공합니다.

※ 해야할 일의 경우 @todo 또는 //주석 뒤에 TODO를 입력해주면 Tasks창에서 해당 내용을 쉽게 찾아 볼 수 있습니다.

 6. 디버깅하기
디버깅하기 위해서는 먼저, 디버깅할 줄의 옆(에디터 옆의 marker bar)을 더블클릭합니다. 더블클릭하는 경우 파란색 아이콘이 나오며 (breakpoint가 설정되며) 다시 이 아이콘을 더블클릭하면 해제가 됩니다.
사용자 삽입 이미지

벌래모양의 아이콘의 옆 삼각형을 클릭한 후 Open Debug Dialog를 클릭합니다. (벌래를 클릭하면 최근에 디버깅한 명령이 재실행됩니다.)

사용자 삽입 이미지

PHPScript > New를 클릭하면 로컬에 설치된 PHP 실행파일을 설정하라고 나오게 됩니다. 미리 설정되어 있는 경우는 상관이 없습니다. 이름/경로/php.ini파일 등을 설정해주고 Finish를 누릅니다. PHP 설정이 완료되면 아래와 같이 Debug 창이 나오게 됩니다.

사용자 삽입 이미지

여기에서 PHP File에 디버깅할 파일을 설정해주고 Debug를 누르게 되면, Debug Perspective로 바꿀지를 묻습니다. 선택을하게 되면 다음의 Perspective로 변경이 됩니다.

사용자 삽입 이미지

※ Xdebug 설치는 매우 쉽습니다. (Window의 경우구요.) Xdebug Download 페이지에서 자신의 로컬에 설치된 PHP 버전에 맞는 Xdebug를 받은 다음에 받은 파일을 적당한 곳에 놓고 php.ini 파일에 다운 받은 파일의 위치를 추가시켜주면 됩니다.
zend_extension_ts="c:/php/modules/php_xdebug-4.4.1-2.0.2.dll"
※※ 서버에 설치하는 것은 시간상 못해봤습니다. ^^;;; 자세한 Xdebug상요법은 검색하시면 많이 나와요

Adobe RIA World 2008이라는 메일이 날아왔는데요....

정작 메일을 열어보니.. 내용은 없네요.
사용자 삽입 이미지

View Image로 이미지를 보니 트래팩 초과 -_-;;;;;
사용자 삽입 이미지

통짜 이미지인걸 봐서는 스팸인 것 같은데요.. -_-;; 설마 Adobe에서 보낸 것은 아니겠죠? ㄷㄷㄷㄷ

※ 메일도 dism.co.kr에서 보냈더군요.
※※ RIA World라는 행사를 하기는 하는가 보군요.... [관련링크] -_-;;;;;

2008년 2월 25일 월요일

정광수의 돈까스가게

류난님의 '저도 다녀왔습니다. 망원동 정광수의 돈까스가게' 포스트에 나와있던 정광수의 돈까스가게에 드디어 다녀왔습니다. 류난님의 포스트대로 마포구청역에서 내려서 찾아갔었는데요. 불행히도 세 팀이 먼저 와있어서 부근 술집에서 식사 전에 간단히 칵테일 소주를 먹었습니다. (7시 정도에 도착했었는데요. 예약하고 가시는 것도 좋을 것 같습니다. 02)336-8919)

사용자 삽입 이미지

1시간 정도 있다가, 마지막 손님으로 먹게되었는데요. ^^
사용자 삽입 이미지

식사의 시작으로 먼저 크림스프가 나옵니다. 다인님의 말씀대로 '근성의 스프'더군요. 조미료 맛은 전혀 안나고 부드러우면서도 깔끔한 맛의 스프가 나왔습니다.
사용자 삽입 이미지
사용자 삽입 이미지
사용자 삽입 이미지

그리고, 돈까스(안심, 등심)에 샐러드와 국이 나왔는데요. 가격이 5,000원 밖에 안됨에도 불구하고 튀김옷이 고기에 잘 달라붙어있는 상급의 돈까스가 나왔구요. 고기를 씹을 때의 육즙과 소스의 달달함이 어울리더군요.

맛있다는 느낌과 얘기하면서 먹을 수 있는 가게의 분위기가 상당히 마음에 들었습니다.
사용자 삽입 이미지
그리고, 마지막 디저트로 나온 팝콘과 녹차. 차도 티팩의 차는 아닌 것 같았구요. 팝콘도 깔끔한 맛이 고기를 먹고난 뒷 느낌을 개운하게 하더군요.

전반적으로 별 5개는 주고 싶은 가게입니다. 특히 친절함에서 높이 쳐주고 싶구요.
  • 메뉴는 돈가스와 생선가스 두 가지가 있습니다.
  • 가격은 모두 \5,000원 입니다. (카드가 아직 안되기 때문에 현금을 준비하셔야 됩니다.)
  • 주변 거리에 PC방하고 호프집, 음식점 정도 밖에 없더군요. 커피숍 같은 것은 전혀 눈에 띄지 않았습니다.
  • 테이블이 4개 밖에 없습니다.
식사하고 나오면서 드는 생각이 맛도 있고 가격도 저렴하고 다 좋은데 장사가 안되시면 어쩌나 하는 걱정이 들더군요. 장사 잘되셨으면 합니다.

2008년 2월 23일 토요일

script.aculo.us의 effects.js 정리

제가 요즘 다니고 있는 YUI 스터디에서 '멋진인생'님께서 script.aculo.us의 effects.js를 발표하셨는데요.
제가 잘 몰랐던 부분을 마음껏 물어볼 수 있어서 좋왔던 것 같습니다. 후후후 ^^;;

※ 본 포스트는 script.aculo.us의 effects.js와 관련된 세미나를 들으면서 들었던 생각과 내용을 보충하는 내용입니다. Effet를 생성하거나 ScopedQueue를 생성하거나 옵션을 주는 부분은 다루지 않습니다.
사용자 삽입 이미지

  1. effects.js란?
  • 인자로 받는 element들을 대상으로
  • 시작시간(startOn)부터 종료시간(finishOn)까지
  • 투명하게하거나, 접히거나, 서서히 사라지고 나타나는 등의 효과(데모 페이지)
를 주는 것을 의미합니다.
사용자 삽입 이미지

  2. effects의 코드 상의 구성
effects.js의 구성은 세 가지 단계로 나눌 수 있습니다. (effects.js 코드는 Effect 스코프를 가지고 있습니다.)
  • Effect.Base를 상속받은 Effect 클래스
  • Effect클래스를 시간 상(time line)에서 어디에 배치되고 동작할 지를 관리하는 Effect.ScopedQueue
  • Effect.ScopedQueue를 전부 관리하는 Effect.Queues
다이어그램으로 본다면 다음의 그림으로 볼 수 있겠네요.
사용자 삽입 이미지

※ 다이어그램은 의미전달 용도로 쓰였기 때문에 UML 규약과 틀릴 수 있습니다.

  3. effects 개념상의 구성
effects의 개념을 보기 위해서는 가장 먼저 할일이 ScopedQueue를 들여보는 일입니다. ScopedQueue를 간단히 말하자면 영사기와 같다고 보시면 됩니다. 15ms이라는 단위를 갖는 시간 축을 갖고 15ms이 지날 때마자 자신의 effects(영화 필름의 프레임으로 생각하셔도 될 것 같습니다.)들에게 시간을 알려줍니다.

사용자 삽입 이미지

ScopedQueue에 더해진 Effect들은 넘겨 받은 시간을 확인하여 자신이 나타날 시간인지 아닌지를 확인한 후 자신들이 변화된 (스타일이 변경되거나 html이 변경된) 모습을 화면(페이지)상에 출력하게 됩니다.

ScopedQueue의 코드 상의 흐름을 잠시 살펴보겠습니다.
  1. 먼저 add()가 호출되면 현재 시간의 timestamp를 얻어옵니다.
    add: function(effect) {
       var timestamp = new Date().getTime();

  2. 더해진 effect가 다른 effect보다 앞에 나와야할 지 또는 뒤에 나와야할 지에 대한 position 값이 주어지면 해당하는 position만큼 effect들이 무대(페이지)에 나오는 시간과 들어갈 시간을 조절해 줍니다.

    var position = Object.isString(effect.options.queue) ?
       effect.options.queue : effect.options.queue.position;

    switch(position) {
         case 'front':
           // move unstarted effects after this effect 
           this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
             e.startOn  += effect.finishOn;
             e.finishOn += effect.finishOn;
           });
           break;
         case 'with-last':
           timestamp = this.effects.pluck('startOn').max() || timestamp;
           break;
         case 'end':
            // start effect after last queued effect has finished
            timestamp = this.effects.pluck('finishOn').max() || timestamp;
           break;
       }

    그림으로 본다면 다음과 같이 될 것 같습니다. 앞의 그림을 ScopedQueue의 현재 상태라고 가정하구요. 여기에 초록색 Effect를 추가하겠습니다. 시작시간(startOn)은 15ms, 종료 시간은 65ms으로 설정을하고 파란색 Effect의 앞(front)로 삽입을하면 다음의 결과가 나오게 됩니다.
    사용자 삽입 이미지
    초록색 Effect가 앞에 나오고 다른 Effect들의 시작시간은 65ms만큼 앞에 더해지게 되는거죠.

  3. 더해지는 Effect에 시작시간(startOn)과 종료시간(finishOn)에 현재 시간의 timestamp를 더해서 시작가능한 시간이 되도록 맞춰줍니다.
        effect.startOn  += timestamp;
        effect.finishOn += timestamp;

  4. Effect의 limit를 체크한 후, limit를 넘지 않는 경우 ScopedQueue에 추가를 합니다.
        if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
          this.effects.push(effect);

  5. this.interval가 있는지 확인한 후 없는 경우 setInterval을 호출해서 interval을 생성합니다. (달리말하면, timeline을 생성한다고 봐도 되겠죠.)
        if (!this.interval)
          this.interval = setInterval(this.loop.bind(this), 15);
      },

    this.interval이 설정이 되면, 15ms마다 loop를 호출하게 됩니다.

  6. loop에서는 호출 될 때마다, 현재 시간을 얻은 후 ScopedQueue에 쌓여 있는 effect들에게 시간을 알려줍니다. (Effect.Base에서 상속받는 loop()를 호출해주게 됩니다.)
      loop: function() {
       
    var timestamp = new Date().getTime();
        for(var i=0, len=this.effects.length;i<len;i++)
          this.effects[i] && this.effects[i].loop(timePos);
      }

  7. 호출된 Effect의 loop에서는 현재 시간이 자신이 나타나야되는 시간이 지났는지와 종료되어야 하는 시간인지를 체크한 후 (startOn과 finishOn 사이의 시간인지를 확인한 후에) 자기 자신을 화면에 그리게 됩니다.

      // Effect.Base의 loop 메소드입니다.
      loop: function(timePos) {
        if (timePos >= this.startOn) {
         
    if (timePos >= this.finishOn) {
           
    this.render(1.0); // 종료 시점의 pos 값은 1입니다.
           
    this.cancel();
           
    this.event('beforeFinish');
           
    if (this.finish) this.finish();
           
    this.event('afterFinish');
            return
          }
          // startOn과 finishOn 사이의 시간인 경우
          var pos   = (timePos - this.startOn) / this.totalTime,
              frame = (pos * this.totalFrames).round();
         
    if (frame > this.currentFrame) {
            // 현재의 frame과 timeline상의 시간의 frame이 맞지 않은 경우 새로 그려줍니다.
            this.render(pos);
            this.currentFrame = frame;
          }
        }
      },
※ 관련링크 : script.aculo.us의 위키 페이지
※※ 발표하느라 고생이 많으셨던 '멋진인생'님과 제가 잘 몰랐던 부분을 가르켜주신 신기루님 감사해요~

2008년 2월 21일 목요일

회의하던 도중에...

기획자 분께서 말씀하시기를 "프로젝트가 잘 되도록 많이 도와주세요."라는 말씀을 하셨다.
사용자 삽입 이미지

'저.. 저희 같이 만드는거 아니었나요?'... -_-;;;;;; 쩝....

2008년 2월 19일 화요일

읽어야 할 책 목록

올해의 목표: 질렀으면 좀 읽자!!
패턴 그리고 객체지향적 코딩의 법칙 상세보기
문우식 지음 | 한빛미디어 펴냄
블로그에서 바로 읽는 듯한 생생한 개발 노하우! 'Blog 2 Book' 제1권, 『패턴, 그리고 객체지향적 코딩의 법칙』. 시간이 모잘라서 버그투성이의 프로그램을 개발하기에도 버거운 우리 시대 개발자들에게 효율적인 패턴과 코딩을 위한 객체지향적 방법론을 가르쳐주고 있다. 이 책은 동료들과의 원활히 소통하면서도 즐겁고 독창적으로 객체지향적인 코딩을 할 수 있도록 인도한다. 직장 선ㆍ후배 사이인 '나초보'와 '나고수'
미코노미: 웹 2.0과 플랫폼 경제학 상세보기
김태우 지음 | 한빛미디어 펴냄
개인의 위치가 소비자에서 공급자로 변하는, '내'가 중심에 서는 '미코노미' 세상! 개인이 블로그에 쓴 글 하나가 브랜드의 흥망에 영향을 미치고, 책이나 음반이 룰루와 샐라벤드를 통해 세상에 나오고… 과거에는 상상도 못했던 많은 일들이 우리 주변에서 일어나고 있다. 예전에는 대기업, 또는 최소한 중소기업, 소수의 엘리트들만이 할 수 있을 것이라 생각했던 경제활동 영역을 일반 개인이 침범한 것이다. 『미코노미 :

웹 기획 기초와 설계(사이트 인터페이스 디자인)(IT COOKBOOK 66) 상세보기
강은정 지음 | 한빛미디어 펴냄
웹 기획 입문서. 이 책은 웹 기획의 기본적인 의미에서부터 웹 사이트 개발과정과 사이트 목적 및 사용자 중심 디자인방법과 디자인 기획설계 등의 내용을 담았다.
PHP IN ACTION : Objects, Design, Agility 상세보기
Reiersol, DagfINn/ Baker, Marcus/ Shiflett, Chris 지음 | Oreilly & Associates 펴냄
PHP 5 OBJECTS,Patterns,and Practice 상세보기
Zandstrs 지음 | Apress 펴냄
SLAM DUNK 10 DAYS AFTER(슬램덩크 그로부터 10일후) 상세보기
편집부 지음 | 대원씨아이(주) 펴냄
[표지 글] * 슬램덩크 주인공들의 일상을 그린 칠판 만화집 * 1억부 돌파 기념 이벤트 현장의 포토 갤러리 * 6개 신문에 실린 전면 광고 일러스트 수록
켄트 벡의 구현 패턴 상세보기
켄트 벡 지음 | 에이콘출판 펴냄
켄트 벡은 늘상 일어나는 프로그래밍 작업에 사용되고, 좀더 읽기 좋은 코드를 작성하는 데 필요한 77개의 구현 패턴을 이 책에 모았다. 이 패턴들은 클래스, 상태, 행위, 메소드, 컬렉션, 프레임워크 등 소프트웨어 개발에 있어 다양한 측면을 다룬다. 각 패턴은 그림, 이야기, 예, 짧은 글 등의 방식으로 표현된다. 변수 작명부터 예외처리에 이르기까지 프로그래밍에 필요한 대부분 작업에 대한 답을 이 책에서 찾을 수 있을 것





2008년 2월 15일 금요일

Excel의 테이블을 미디어위키(MediaWiki)로 변환하기

Excel로 정리한 테이블의 내용을 미디어위키에 손으로 하나씩 넣다보니 지쳐버리군요.
그래서, 구글 신에게 검색해 본 결과 두 가지 계시를 받았습니다. (-_- ;;

일단 사용할 데이타는 다음과 같이 책에 대한 내용입니다.
사용자 삽입 이미지

1. 'Copy & Paste Excel-to-Wiki Converter'를 사용하는 방법
  1. 먼저, Excel에서 작성한 테이블 내용을 복사합니다.
  2. 복사한 내용을 'Copy~' 사이트에 다음과 같이 붙여넣습니다.
    사용자 삽입 이미지
  3. 입력한 내용 아래 쪽의 'Submit Query'를 클릭하면 'Copy~' 사이트 페이지의 아래 쪽에 새로 생성된 위키 포멧을 보실 수 있습니다.
    사용자 삽입 이미지
  4. 생성된 결과입니다. 스타일이 유지 안되는 점이 있지만, 빠르게 같다 붙일 수 있다는 장점이 있습니다.
    사용자 삽입 이미지
2. VBA-Macro for EXCEL tableconversion를 사용하는 방법
  1. 변환하려는 Excel 파일을 엽니다.
  2. Excel 파일에서 Alt+F11을 눌러서 Macro Editor(Microsoft Visual Basic이라고 나와있습니다.)를 띄웁니다.
  3. 매크로 에디터의 프로젝트-VBAProject 창에서 'VBAProject > 삽입 > 모듈'을 클릭해서 모듈을 생성합니다.
    사용자 삽입 이미지
  4. 새로 열려있는 모듈 창에서 여기의 매크로 코드 (VBA-Makro 아래 쪽에 감싸진 코드입니다.)를 복사해서 붙여넣습니다.
    사용자 삽입 이미지
  5. 엑셀파일을 저장합니다. (2007의 경우 xlsm 확장자로 변경하여 저장합니다.)
  6. 매크로를 실행해서 format_as_wikipedia로 실행합니다. (2007에서는 보기>매크로>매크로 보기를 클릭하여 다이얼로그를 띄운다음에 format_as_wikipedia를 실행합니다.)
    사용자 삽입 이미지
  7. 실행하게 되면 Excel 파일 아래 쪽에 wikioutput이라는 새로운 Sheet이 추가되고 Wiki 포멧이 새로 생성되게 됩니다.
    사용자 삽입 이미지
  8. 해당하는 내용을 복사해서 미디어 위키에 붙여놓은 결과입니다. (걸리는 시간에 비해서는 그렇게 만족할만한 결과는 아니군요. 책제목의 길이도 그렇지만.. \가 $로 변경되었습니다. -_-;;;;)
    사용자 삽입 이미지

출처: MediaWiki - Tools (미디어 위키와 연동하여 사용할 수 있는 툴 목록입니다. MS Office 변환에 관해서도 나와있습니다. 참고할 만한 자료 같네요.