Search Results for '~2009.12.31/software tale'

5 POSTS

  1. 2008/09/28 The Way Of Approaching 후기.
  2. 2008/08/09 Korean Perl Workshop 2008: Rising Perl
  3. 2007/09/08 어이없는 Visual C++ (2)
  4. 2007/08/20 나를 위한 프로그램을 개발한 적이 있는가?
  5. 2007/02/22 [Win32] SERVICE Logic Flow (1)

The Way Of Approaching 후기.

PUBLISHED 2008/09/28 23:28
POSTED IN ~2009.12.31/software tale
TWOA 다녀와서.

그동안 회사일로 정신없이 보내느라 후기 및 프로젝트 관련보고가 늦어졌네요.
벌써 일주일이나 지났지만, 좀 적어 볼께요.
지난 9월 20-21일에 청주 라마다 호텔에서 자유 오픈소스 소프트웨어 연합회에서
The Way Of Approaching ( http://twoa.fossa.or.kr/ ) 이라는 주제로
1박 2일!간의 빡센 일정을 보냈지요~

저는 Perl Hackathon 의 Tutorial 팀에서 밤을 새었습니다.
아주 재밌었어요. 

perlmania 에서 study 하면서 곁눈질로 보고 배운 몇가지 모듈로 간단한
사전을 만들어 보았습니다.

기본적으로 네이버 Open API를 이용하여 구현했구요, 기본적인 컨셉은
linux혹은 unix console 에서 사용할 사전을 구현하는 것이었고요.

지금은 1차적으로 웹에서 긁어오게 만들어 놓았습니다.
아주 간단하지만, 재미있었습니다.

청주의 라마다 호텔, 꽤나 괜찮더군요. 첫날 도착후 점식, 저녁, 다음날 아침까지
호텔 뷔페에서의 먹음직스런 음식들, 아주 좋았어요.

hackathon 내내 무한 제공되어진 음료! 아주 멋진 큰 방;;
좋았습니다.

행사 일정중 3가지 강좌가 있었는데요, 2시간씩의 빡센? 강좌였어요.
저는 3가지중, GCC&GDB 강좌를 들었습니다.
대부분 다 아시죠? 박재호님의 GCC,GDB 강좌, 꽤나 인상적이었습니다.
(박재호님은 조엘온 소프트웨어를 번역하신 분이시죠? 그외에도 많으시고, 번역, 집필.. 많이하셨죠~)
특히, GDB에 대해 많은 걸 배운 기회였습니다.
GDB 디버깅이 익숙해 지기 전까지 쉽지 않은 디버거라고 저는 생각하거든요.
하지만, 사용법을 많이 배운듯 해요. 좋은 강좌였습니다.

나머지 두 강좌(버전 컨트롤 시스템과 스퀵)에 대해선 사정이 있어 참석하진 못했네요.
어쨌든, 이후부터 시작된 코드페스트를 아래 잠시 정리해 볼께요.

펄 해커쓴 팀에서 많은 프로젝트가 나왔는데요. 제가 참여한 콘솔용 네이버 사전을 잠시 소개할께요.

perl 5.10 을 기본으로 했어요.(하지만, 5.8에서도 당연 동작하지요. )
펄은 기본적으로 게으른 언어 입니다.
그 게으름의 으뜸엔 CPAN이 존재 하고 있습니다.

아래 모듈을 소개합니다. 저도 늦게 알았고, 잠시 사용법을 배워서 사용한
(감사합니다. 희원님(saillinux) :0 ) WWW::Mechanize 를 사용하여
웹 페이지의 컨텐츠 부분을 긁어오도록 하였구요.
네이버 사전의 HTML 구조분석을 위해 firefox 의 firebug 를 이용했습니다.

네이버 오픈 API를 사용하면, XML로 링크를 하나 던져주지요.
링크를 가져오는 방법은 가장 기본적은 IO::Socket 을 이용하여 받아오도록 했습니다.

펄을 시작한지 얼마되지 않아(그 와중에도 회사일로 바빠서 문법도 다 잊어버린 상태에서요..ㅜㅜ)
몇줄 되지 않은 코드를 밤새 겨우 짰지요.

코드를 보실수 있습니다.

더보기


이 코드의 경우, 아직 예외처리가 되어있지 않아요.
그리고 인터넷에 연결이 안되면 당연히 안나오는 단점이 존재합니다.
하지만, 부분적으로 코드를 수정해 나갈 참입니다.

펄 스럽지 않은 코드일 수 있습니다.
아직 펄이 익숙하지 않고, 저는 C 개발자이기에, 아마 C 처럼 보일 수 있어요 :-)

가령, go 를 찾으면, 한 화면이 넘어가는 경우가 생겨요.
당연하지요. 내용이 많으니까요.

그래서 아래와 같이 해서 간단히 스크립트를 만들어 사용하도록 해도 좋아요.

#!/usr/bin/bash
perl dic.pl $1 | more

이렇게 하니 스크롤은 제어가 가능하군요 :-)

아주 간단하지만, 저는 아주 즐겨 사용하고 있습니다.
개발은, 어느 정도 언어에 익숙해 지면, 특별한 이유가 없는한 많은 것들을 만들 수 있습니다. 언어를 사용하는 것은 그저 도구를 사용하는 것뿐이예요.

다만, 무엇을 만들 것인가를 생각하는 것이 가장 어려운 문제이지요.

여러분이 생각하는 것들을 perl 로 한번 구현해보세요.
생각보다 즐겁고 게으른 느낌을 직접 느껴보자구요.

나중에 기회가 되어 TWOA에서 다시 뵐수 있으면 좋겠습니다.!!
just for fun!

저작자 표시

사용자 삽입 이미지


http://event.perl.kr/kpw2008/index.html

드디어 PERL 컨퍼런스 사이트가 오픈했습니다.
그와함께 이제 펄 컨퍼런스가 2주 앞으로 다가 왔습니다.

펄 컨퍼런스 사이트에 가셔서 어떤 분들의 어떤내용들이 있는지 꼬옥 확인하시기 바랍니다.
상당히 재미나고 좋은 내용으로 가득차 있을 것으로 생각됩니다.

오후 1시부터 저녁 9시까지 아주 하드하게 진행될 예정입니다만,
보시면 아시겠지만 20-30분정도의 주제에 중간에 10분 휴식으로 이루어져 있어서
생각보다 타이트 하지는 않을 것으로 예상하고 있습니다.

세션이 아니라 첫주제 부터 끝주제까지 한 사이트에서 진행되기 때문에
지루할 수도 있지만, 관심없는 주제를 잠시 쉬시는 동안 다음 주제를 듣기까지는
20-30분정도 밖에 걸리지 않을 예정으므로 시간관리가 좀더 유연하지 않을까도
생각됩니다.


perl, 이 유연한 이름의 재미난 언어는 우리가 지극히 단순하게 알고 있는,
CGI로 옛날에 웹사이트나 만드는 언어쯤으로 알고 있을지도 모르지만,
펄의 그 광범위한 사용을 경험할 수 있을 것으로 기대하고 있어요.
생각보다 훨씬 유연하고, 재미있는 펄의 세계에 함께 빠져보아요 :-)
좀더 많은 내용을 아시고자 하시면;; 아래를 열어주세요.

more..



어이없는 Visual C++

PUBLISHED 2007/09/08 18:01
POSTED IN ~2009.12.31/software tale
가끔 정말 어이 없이 이 VC++ 6.0 이란놈은
말이 안되는 일을 벌이곤 한다.

예전에도 그랬던거 같은데.
오늘 정말 어이 없는 일을 당했다.

strcpy(res_faultcode, ERROR_CODE);

이렇게 해놓은 문장에서 분명히 값이 res_faultcode 로 안 들어가는 거지.
거의 두시간동안 이것 저것 해보아도, 결과는 마찬가지.

sprintf(res_faultcode, "%s", ERROR_CODE);

이렇게 해보아도 값이 카피가 안되는 거다.
혹시나 해서 char res_faultcode[32]; 를 다른 위치에 놓았다.
어라? 값이 들어가네? ㅡ.ㅡ

도대체 누가 나를 계속 윈도우즈 프로그래밍을 하게 만드는가! 젝일.
젝일, VC 2005는 좀 나을려나?

그냥 좀, 유닉스에서 굴러먹게좀 놔뒀으면 좋겠다.
먹고 살기가 이렇게 어이없어서야;
어디서더라?
애자일 관련하여 사람을 뽑는 구인광고에서 본것 같다.

주위 사람을 위해 프로그램을 개발한 적이 있는가에 대한 물음이었던걸로 기억되는데..
뭐 하여튼 계속 머리속에 남는것이 내겐 충격(?)적인 내용이었던것 같다.

주위, 가족이나 친구 도는 직장에서의 업무 효율성을 위해 아니면 나를 위한 프로그램을
개발한 적이 있는가? 라는 물음에 대해 나는 전무하게 'NO' 라고 밖에 대답을 못한다.

어느 순간부터 나는 업무 이외의 (요새 같아서는 업무적인 개발도..) 개발은 너무나
귀찮아 하게 된것이다.

그렇다고 뭐 내가 그리 개발을 잘 하는 것도 아니고.. 보면 대체적으로 어쩔수 없이 개발을
하는 상황으로 나를 몰고 가고 있는건 아닌지.. 요새 그래서 회사가 너무 재미 없는게 아닌가 하는
생각도 해본다.

뭐, 이유를 대자면, 대체적으로 내가 개발에 참여하는 것들은 대게 unix daemon 측 개발자로
UI가 포함되지 않은 개발이 주류다. 

뭐 요새는 간단한 툴을 개발하더라도 누군가가 쓰도록 하려면 UI 가 필수가 되는 시대이니
누군가를 위해 뭔가를 개발한다는건 나로썬 좀 껄끄러웠다고 이유같지 않은 이유를 대어본다. :-(

어쨌든, 저 구인광고속의 '누군가'를 위한 개발에 대한 내용을 보고 난 이후로 나는
온통 머리 속이 텅 빈것 같다.

나는 뭐하러 개발을 하고 있는건지, 무슨 재미로 개발을 하는 건지.. 요새 같아선 통 모르겠다.
먹고 사느라? 물론 중요하지만, 정말 그런식으로 따지면 나는 정말 때려 치워야 하는게 아닌가 하는
생각이 ... 재미가 없거든.

어릴때.. 초등학교 다닐때 부터 쭈욱 프로그램짜야지 하며 .. 벌써 몇년.
이렇게 말하면 우끼지만, 할일이 없어서 몇개월 학원에서 배우고 실무에 뛰어든 케이스가 아닌 나로썬
(오해하지 마시어요~) 요새 같이 재미 없는 개발 업무에 정체성 까지 흔들린다라고 말하면
정말 우수운 얘길까?

나는 정말 개발이 재밌었는데, 언제부터 코딩한줄 하는 것도 지겨워진걸까?
어떻게 헤쳐나가야 하나...

궁시렁 궁시렁...

[Win32] SERVICE Logic Flow

PUBLISHED 2007/02/22 21:56
POSTED IN ~2009.12.31/software tale
젝일, 윈도우즈 개발경험이 거의 없다시피하는 나로써,
어쩔수 없이 서버단에 올라가는 데몬(Service)을 만들기위해 이틀간 삽질하고
알아낸 사실이다.

예제 프로그램을 내가 이해하지 못했을까?
하여튼, StartServiceDispatcher 가 계속 fail 을 내는 동안 담배만 수개피 핀거같다.

저놈의 Dispatcher Error : [오류 1053] 이 왜나는지 알수 없었던 나는
오래전 2004년도에 hotfix 자료 가지고 고민도 해봤는데, XP SP2 를 쓰는 나로썬
당근 볼 필요도 없는 자료였다.

근데, 왜! 이런 로직 flow 를 아무도 알려주지 않는거지??!!  +.+
다들 알고 있는데 나만 몰랐던걸까? ㅠㅠ.


02/22/2007, 21:30:50
    lieps:ServiceMainProc() Start
    Service ONM_BRIDGE_MGR installed
02/22/2007, 21:30:50
    lieps:Install() End
    lieps: Installed
    lieps: ServiceMainProc() End
02/22/2007, 21:34:04
    lieps:ServiceMainProc() Start
    lieps: ExecuteSubProcess() start
    lieps:ServiceMain() Start

처음 programName -install 시 main()에서 시작해서 install()를 실행하여
SCM을 오픈하고 서비스에 등록
서비스 메뉴를 열어서(혹은 실행하여) 서비스를 시작하면, 프로그램이 다시
실행되는데, 이때 main()에 argv 가 없는 상태이므로 StartServiceCtrlDispatcher() 실행된다. 그러면서 ServiceMain()를 호출하는거지... +.+
SCM에 프로그램이 등록된 상태에서 Dispatcher 는  SERVICE_TABLE_ENTRY 에 ServiceMain을 구동시킨다.

즉;
    1. SCM을 오픈하고 서비스에 등록시킨다.
    2. SCM에 의해 서비스가 실행이 되면서 StartServiceCtrlDispatcher() 가 실행

주의! 서비스에 먼저 등록되고 난 후 StartServiceCtrlDispatcher()가 실행되어야 함!

[ sample example! ]
-------------------
int main(int argc, char **argv)
{
    // 서비스 테이블 정의
    SERVICE_TABLE_ENTRY ste[]={
        {"MemStat", (LPSERVICE_MAIN_FUNCTION)MyServiceMain},
        {NULL, NULL}
    };

/*
아무런 옵션이 없을 경우 마지막 else 문으로 빠지면서 StartServiceCtrlDispatcher() 가 실행된다.
그러나 서비스에 등록되지 않았기때문에 StartServiceCtrlDispatcher 연결 실패가 일어나면서 return 0;
-install 옵션이 붙을경우 install()에 의해 서비스가 등록되고 return 으로 끝난다.
install 에 의해 일단 서비스가 등록된다.
그리고 서비스에서 "시작" 버튼을 눌렸을때, main() 이 다시한번 실행하되 이번에는 argv가 붙지 않으므로
마지막 else 문이 시작되나 서비스가 등록된 상태이므로 StartServiceCtrlDispatcher() 함수가 정상적으로
Dispatcher Thread 를 시작하게 되며 ServiceMain()를 호출하게 된다.
Dispatcher Thread 는 ServiceMain()가 종료되지 전까지 대기한다.
*/

    if( argc >= 2 ) {
        if( strcmp(argv[1], "-install") == 0 )
            install();
        else if( strcmp(argv[1], "-remove") == 0 )
            uninstall();
    }
    else {
        printf("Usage : %s [-install][-remove]\n", argv[0]);

        if( StartServiceCtrlDispatcher(ste) != 0)
            printf("StartServiceCtrlDispatcher ok!\n");
        else
            printf("Dispatcher error!\n");
    }
    return 0;
}
-----

휴- 인제 잘 동작한다.
근데, 오랫동안 윈도즈 개발 해본적이 없어서 힘들었다. ...ㅜ.ㅜ 삐질..