내가 참여했던 오픈소스

제가 참여했던 오픈소스 프로젝트들 (계속 업데이트 됩니다.)

Table of Contents

    Netron

    가장 널리 사용되는 Neural Network Viewer인 Netron 에서 ArmNN 포멧을 지원하지 않길래 ArmNN 디코더를 추가. PR을 보내고, 저자분이 요구하는 것들을 맞추는 것도 나름 재미있는 경험이었다고 생각한다.

    원 저자분이 hand-merge 를 진행해서 commit history 상에는 기록이 남지 않아서 조금은 아쉬운 PR

    PyDemux

    FFMpeg을 이용해서 video 를 Pillow Image 형태로 demux 해주는 Python Extension.

    OpenCV 를 이용해도 쉽게 video demuxing이 가능하긴 하지만, OpenCV는 아무래도 의존성도 복잡하고 하다보니 장점은 있다고 생각하지만 막상 존재를 아는 사람은 많질 않은 듯.

    YUV player

    대학원에 들어가서 비디오 코덱 관련 연구를 하다보니 raw YUV 데이터 파일을 자주 사용하게 되었는데, 맘에 드는 뷰어가 없어서 만들고 공개했던 프로젝트…

    나름 github에서 별도 많이 받고, 포크도 많이 받고 있는 프로젝트!

    얼마 전에 전 회사 동료 분이 리눅스 버전도 만들어주면 안되겠냐고 물어보시길래 기본 기능들만 Python으로 구현해서 추가로 공개 완료.

    X-Chat 2

    거의 제일 처음으로 해본 패치이자 가장 의미 있었던 패치가 아니었나 싶다.

    딩딩 바이러스 라고 불리던 멀티바이트 닉 컴플리션 관련된 버그와 노틸러스에서 한글 파일을 드래그 앤 드롭했을 때 생기는 문제를 해결하기 위한 패치들을 작성했었다. 하지만 원인을 해결한다기보다 약간의 추가코드로 버그를 피해갈 수 방법만을 제공한 것 같아 조금 아쉬움이 든다. -_-;; (패치 리포트는 류창우님이 하셨지만 제가 만든 패치입니다 -_-v)

    딩딩 바이러스의 경우 utf-8 로 표현된 한글에서 앞의 첫 혹은 두 바이트만이 매칭되는 경우에 생기는 문제로 for ( i = 0 ; i < strlen(str) ; i++ ) … 식으로 된 코드를 while( utf8_get_next_char(str, &pos) ) … 정도로 수정하는 게 훨씬 훌륭한 방법이었다고 생각하나 그러기엔 손델 곳이 너무 많았다. 현재는 관련된 부분이 재작성되서 내 패치가 필요없게 되어 버렸다. (그래도 한동안 X-chat 메인 스트림에 포함되어 있던 패치 -_-v) 그리고 nautilus 에서 drag and drop 을 할 때 문제가 생기는 것은 file 의 경로가 file:///home/aqua/%EA%B0%80 식으로 url_quote 되서 오기 때문이었는데, 이를 해결하기 위해선 fopen/fread/fwrite 등의 stdio 계열 api 대신 gnome_vfs api 를 사용하면 되는 것이겠지만! 당시 X-chat 은 gnome lib 와 링크되고 싶어하지 않았기 때문에 어쩔 수 없었다고 생각한다.

    gimageview

    정확히는 기억나지 않지만 gtkmmviewer 라고도 불리는 gimageview 는 xinerama 에서 최대창 모드를 했을 때 약간의 문제가 있었던 것 같다. 이건 문제를 정말 깔끔하게 해결하는 패치였는데, 아직도 받아들여지지 않고 있다.

    이 패치를 적용해본 다른 분이 ‘완전 최고에요. 얼렁 적용해주세요!’ (내가 보기에만 저렇게 보인 걸지는 모르겠다.) 정도의 메시지를 남겼는데, 메인테이너가 확인을 안하는 것 같다. 흑흑…

    mod_autoindex hack

    아파치의 기본 모듈인 mod_autoindex 의 프레젠테이션 관련해서 약간의 수정을 가했던 작업! 내가 제일 유용하게 사용하고 있는 기능 중 하나!

    처음에는 테이블 기반이었고, Quick and Dirty 가 무엇인지를 보여주는 코드였다. 하지만 백업 하드를 날리면서 패치를 잃어버리게 된 후, kukie 씨의 도움을 받아 css/xhtml 로 변경했고 사용자가 cssfile, encoding 등을 설정할 수 있도록 기능을 확장했다.

    proftpd: mod_codeconv patch

    서버에 파일이름이 모두 utf-8 로 저장되기를 바라면서 mod_codeconv 를 적용해 보았지만, mod_codeconv 는 global 영역에서 밖에 설정을 할 수가 없길래 scope 관련해서 했던 작업. 패치를 원 저작자에게 보내주려 했지만, 메일주소가 변경되었는지 메일이 전부 반송되서 피드백을 하는데는 실패!

    mytrz-dviewer

    주위 사람들이 내 mod_autoindex 를 보고 자신도 쓸 수 없는지 물어보길래… 비슷한 역할을 하는 스크립트를 작성해서 BSD License 로 공개를 했다. 나름 구현하고자 했던 기능을 전부 구현했고, 사용자들의 피드백도 더 이상 없어서 버젼업이 멈춰있다. -_-;

    mod_rewrite 를 사용가능한 경우를 위한 패치를 할까 말까 고민 중…

    wordpress: korean trackback plugin

    까나리 옹이 이글루스에서 날려준 euc-kr 트랙백을 제대로 받기 위해 만든 hack! 관련 논의가 wordpress trac 에서 이루어지고 있지만, 이틀정도 반짝 관심을 가지고 있다가 요새 좀 정신이 없는 관계로 관심을 가지지 못하고 있다. -_-;;

    wordpress 에는 trackback 을 다 받고나서 저장하기 전까지 plugin 이 간섭할 수 있는 포인트가 전혀 존재하지 않으므로, 이미 저장된 포스트를 update 하는 방식으로 구현해야만 했다.

    gentoo ebuild

    간간히 gentoo bugzilla 에서 한글 관련 문제라거나, 새로운 패키지 등을 리포트 하는 작업을 하고 있다. (나름 대게 많이 참여했던 거 같은데 검색해보니 별로 많이 안나오네요 -_-;; )

    websvn

    websvn 의 템플릿 파일을 svn repository 에 저장하고 websvn 을 통해 보게 되면, 무한 룹에 빠지게 되버리는 버그가 있었습니다. 버그를 리포트하고 해결책까지 제시했지만, 뒷북이었다는 걸 나중에 알게 되었습니다.

    저런 중요한 버그는 정식 릴리즈 버젼에 패치를 백포트 한 뒤 얼른 새 버젼을 릴리즈 해줘야 했었다고 생각하는데… 뭐 하튼 지금 생각해보면 그런 얘기를 전혀 하지 않았던 게 약간은 아쉽네요.

    • http://websvn.tigris.org/issues/show_bug.cgi?id=97

    그 외에도 gd 의 gdImageCopyResampled 에서 x, y offset 을 제대로 적용하지 못하는 버그, unalz 파일이름 인코딩 변경 관련해서 패치를 보냈었지만… 이미 기록은 찾을 수가 없다. 그리고 막상 이것저것 많이 했었던 거 같은데 정리하려고 보니까 생각이 안납니다. ㅠ_ㅠ

    대게 정식 i18n 패치라거나, 범용성 있는 그런 패치를 만들기보다는 현재의 문제를 해결하려한다거나 나만이 필요한 기능을 hack 으로 구현해버리는 작업을 많이 해서 더 보여줄 게 없는지도 모르겠네요 ㅠ_ㅠ

    'gulim'less Windows!

    오랫만에 윈도우를 키고 cleartype 을 적용해보았습니다. ‘윤고딕’, ‘은돋움’, ‘윤체’ 등의 경우 cleartype 이 적용된 모습이 보기 좋지는 않지만, ‘맑은 고딕’ 의 경우는 꽤나 쓸만한 모습을 보여주는 군요.
    필 받은 김에 시스템에서 굴림을 몰아내버렸습니다. 그냥 테마에서 ‘맑은 고딕’ 으로 지정하는 것 만으로는 ‘굴림’ 을 원하는 곳이 너무 많더군요. 😉 부담 없이 Apple FontTool 을 이용 ‘맑은 고딕’ 의 name table 을 덤프해서 ‘gulim’ 으로 변경해서 추가해줬습니다. 하지만 version 을 10.0 으로 줬는데도 불구하고 원본 굴림을 사용하길래, 결국 원본 ‘굴림’을 제거해버려야 했습니다. -_-;;

    결과로 나온 모습이 위 스크린 샷 입니다. anti-alias 가 먹은 글꼴로 표시된 윈도우도 봐줄만 하네요. 😉
    p.s) 굴림체, 돋움, 돋움체 도 같이 제거되었는데… 세종대왕 등을 이용해서 굴림을 제외한 폰트는 다시 추가해줘야할 듯 싶습니다.

    wordpress: 최근 추가한 플러그인들…

    여기저기 돌아다니다 보니 멋진 플러그인들이 많길래 이것저것 추가해보았습니다.
    1. Korean Trackback
    이글루스에서 오는 트랙백이 euc-kr 로 인코딩되어 있기 때문에, utf-8 기반의 워드프레스에선 이글루스에서 보내는 트랙백을 제대로 받을 수 없기에… 직접 플러그인을 작성해서 추가해줬습니다. -_-v
    url: http://b.mytears.org/2006/09/396
    2. iG:Syntax Hiliter
    혹시나 포스트에 프로그램 코드를 삽입할 일이 있을 경우를 대비해서, 코드 하일라이팅을 위한 플러그인을 추가했습니다. 상당히 많은 언어를 지원합니다만 sh (쉘스크립트) 는 지원하지 않아서 약간 아쉽네요. 사용 예는 아래와 같습니다.

    url: http://blog.igeek.info/wp-plugins/igsyntax-hiliter/
    3. wp-scripts, ajax-spoiler
    wp-scripts 는 prototype.js 등을 헤더에 삽입해주는 역할을 하고, ajax-spoiler 는 tt 에서와 같이 텍스트를 숨겼다가 보여줬다 하는 기능을 사용할 수 있도록 해줍니다.
    tt 처럼 그냥 단순히 보였다 감췄다 정도가 아니라 애니메이션 효과까지 줄 수 있어서 상당히 멋드러집니다. 😉
    url: http://082net.com/tag/wp-scripts/
    url: http://082net.com/tag/aj-spoiler/
    4. bad behavior
    request 를 분석해서 봇이라고 생각되면 차단합니다. 적용 후 확실히 스팸이 줄었습니다. (하루 120 통 쯤에서 10통 이하.. 그나마 akismet 에 나머지는 걸립니다.)
    url: http://www.homelandstupidity.us/software/bad-behavior/
    조금만 부지런하면 이래저래 편리해지는 아름다운 워드프레스 세상입니다. 혹시 또 멋진 플러그인들을 알고 계신 분들은 트랙백 부탁드리겠습니다. 😉

    Block Image only spam mail…

    오늘은 수업이 2시에 시작하는데 어쩌다보니 아침 8시에 일어나게 되서… 그걸 기념하고자 스팸 룰을 하나 더 추가했습니다.
    다들 이미지 하나 딸랑 있는 메일을 보신 적이 있을거라 생각합니다. 정상적으로 의미가 담긴 메일 중에는 그런 성의 없는 메일이 많지 않으므로 이걸 이용하기 위해 간단한 스크립트를 하나 작성했습니다. 스크립트는 메일 내용에서 <!–….–> 식의 주석을 먼저 제거하고, script, style, title 등 안에 별 의미 없는 스트링을 제거한 후 마지막으로 태그들을 제거하는 역할을 합니다. (title 에 나오는 내용이 의미없다는 말은 아니지만 메일에선 의미 없다고 봐도 될거라고 생각합니다.)
    위의 스크립트를 통해 html 이 모두 제거된 후 white space 를 제외하고 스트링이 남아있는지 없는지를 판단합니다. 이미지 만으로 이루어진 메일의 경우엔 bogofilter 등에서 활용할 만한 내용이 없기 때문에 이런 식의 처리를 추가하게 된 것인데 효과는 얼마나 될지 모르겠습니다.
    뭐 하튼 태그를 제거하는 스크립트는 아래 url 에서 보실 수 있습니다. 정규표현식으로 처리했기 때문에 무척 간단해보일 겁니다 (그러고 보니 예전에 오토마타로 짜놓았던 녀석이 있었군요 -_-)
    http://mytears.org/resources/mysrc/php/removehtml/strip_html.phps
    p.s) 생각보다 효과가 탁월합니다. -_- 많이들 걸리는군요.

    bogofilter

    요 근래 늘어가는 스팸에 이마에 주름이 하나 둘 늘어가고 있던 찰나에 bsdforum 을 구경갔다가 방준영 님이 쓰신 bogofilter 관련 글을 보게 되었습니다. 사용법을 보니 자동으로 스팸 훈련을 시키는 것이 아닌 듯 싶어 왠지 모르게 호감이 가더군요. 🙂
    http://bogofilter.sourceforge.net/
    참고로 bogofilter는 베이시안 룰 기반의 스팸 필터입니다.
    사용을 위해선 우선 스팸 메일들을 .Spam에 몰아두고, 스팸이 아닌 메일을 .Ham폴더에 몰아둔 뒤 아래와 같은 명령어를 이용해서 학습을 시켜야 합니다.

    -S옵션은 이 메일이 스팸 메일이라는 것을 의미하고, -N은 이 메일이 스팸이 아니라는 것을 의미합니다.
    만약 A라는 스팸 메일을 햄이라고 잘못 학습시킨 경우 아래와 같은 명령을 이용해서 결과를 바로 잡을 수 있습니다. (A는 메일 파일 이름)

    거꾸로 A라는 햄 메일을 스팸이라고 잘못 학습 시켰다면 아래와 같은 명령어를 이용해야합니다.

    제 메일함에 쌓여있던 이메일(햄: 약300통, 스팸: 약1,000통)을 기준으로 스팸/햄 확률을 업데이트한 뒤 3일째 테스트 중입니다. 3일동안 온 30개의 메일 중에 스팸 26통을 정확하게 걸러주었네요.
    아래는 나중에 시스템에 적용시켰을 때 사용자들이 Spam 폴더를 지우지 않더라도 알아서 정리해주기 위해 사용하게 될 스크립트 초안입니다~

    제가 참고한 bsdforum 의 방준영 님의 글은 아래 링크에서 볼 수 있습니다 😉
    http://bsdforum.or.kr/viewtopic.php?t=33
    그리고 bogofilter 없는 상태에서 스팸을 걸러낸 결과는 아래와 같습니다.

    # 전체 받은 메일 수
    unfix aqua # cat /var/log/procmail|grep ^[\\[F]|wc -l
    5077
    # Spf 에 걸린 메일
    unfix aqua # cat /var/log/procmail|grep ^\\[Spf|wc -l
    2482
    # Broken Multipart
    unfix aqua # cat /var/log/procmail|grep ^\\[Fake|wc -l
    1499
    # Bad-mailer
    unfix aqua # cat /var/log/procmail|grep ^\\[BadMailer|wc -l
    315
    # Spam-word 를 포함한 경우
    unfix aqua # cat /var/log/procmail|grep ^\\[Spam|wc -l
    141
    # Bad-library
    unfix aqua # cat /var/log/procmail|grep ^\\[BadLibrary|wc -l
    21
    # 내용, 제목이 모두 없는 메일
    unfix aqua # cat /var/log/procmail|grep ^\\[EmptyMail|wc -l
    # 바이러스 메일
    unfix aqua # cat /var/log/procmail|grep ^\\[Virus|wc -l
    2

    6일부터 12일까지의 5077 개의 메일 중에 Spf 에 2482 개, Fake/NoHTML + Fake/NoPlain 에 걸린게 1499 개, BadMailer 에 315개, SpamWord 에 141 개, BadLibrary 에 21개, Virus 가 2개 되겠습니다.
    결과적으로 4460/5077 개로 87.8% 가 스팸으로 판정되었습니다.
    그리고 bogoutil 을 통해 확인해본 결과 나름 인코딩 관련된 처리를 알아서 처리하고 있는 듯 싶길래 BadMailer, SpamWord, BadLibrary 에서 처리하던 부분을 bogofilter 로 대체시킬까 싶어서 관련된 rule 은 주석처리를 해 놓았습니다.

    prev, next?

    블로그가 확실히 유행은 유행인가보다. 많은 사람들이 자신의 블로그를 운영하고 있고, 좋은 자료들을 정리해주시는 많은 분들이 있는 덕에 뭔가를 검색했을 때 누군가의 블로그가 나오는 일이 잦아졌다.
    근데 문제는 페이지 이동을 위한 prev / next 링크! 이게 블로그 툴마다 사용하는 의미가 살짝씩 다른 듯 싶다. 어떤 툴은 “다음 / 이전 페이지” 라는 의미로, 어떤 툴들은 “Previous Entry / Next Entry” 란 의미로 사용되고 있기 때문에 헷갈리는 일을 종종 겪고 있다.
    뭐 물론 첫 페이지 부터 봤다면 당연히 둘 중 어떤 의미인지 알겠지만… 검색해서 들어가는 경우는 대부분 중간 부터 보게 되기 때문에 더 헷갈리는 거 같다 -_-;

    wordpress: korean trackback!

    어제 까날옹이 egloos 에서 가볍게 트랙백을 날려주셨는데, egloos 에선 trackback 인코딩을 euc-kr 을 사용하는지 트랙백이 깨져서 와버렸네요. 혹시나 관련된 plugin 을 찾아봤지만 plugin 으로는 아직 존재하지 않는 듯 하고, 관련해서 wind-like 님이 문제를 해결한 버젼의 wp-trackback.php 파일을 배포하시더군요.
    하지만 wordpress 기본 파일을 수정할 경우 업데이트를 할 때마다 다시 수정해줘야 하는 번거로움이 있기 때문에 그냥 plugin 을 작성해버렸습니다. 막상 plugin 을 작성하려고 보니 trackback_post 에 대한 action 은 글이 삽입된 이후에 실행되도록 되어 있더군요. 역시 그냥 wp-trackback.php 를 수정해서 사용해야 하는건가 하는 생각이 들었지만, 뭐 정도가 아니면 돌아가면 되는 법!! 이미 데이타베이스에 입력완료된 trackback 을 update 하도록 하는 hack 에 가까운 플러그인이 만들어져버렸습니다. -_-v
    혹시나 필요한 분은 아래 url 에서 받아서 사용하시면 되겠습니다.
    http://mytears.org/resources/distfiles/wp_korean_trrackback-1.0.zip
    p.s) wind-like 님이 수정하신 버젼과는 다르게 ‘트랙백을 받는 경우’ 하고만 관련이 있습니다.

    Smartjoy!!


    얼마 전에 ebay 를 떠돌다가 발견한 smart joy 입니다. SFC 용 패드를 usb interface 로 연결시킬 수 있도록 해주는 컨버터로 Mac OS X / linux / ms windows 에서 아무 설정없이 사용할 수 있다는군요.
    SFC 에 푹 빠져있던 어린 시절에 비싼 가격에 부딪혀 해보지 못했던 수많은 게임들을 에뮬을 통해 해보는 중인데 역시나 재밌습니다. 어렸을 때 많이 하던 스트리트 파이터라거나 슈퍼 마리오카트, 슈퍼마리오 월드 , 슈퍼마리오 3 같은 것들도 해보고 있는데 예전 실력은 나오지 않는군요. 특히 스트리트 파이터는 옛날엔 컨티뉴 따윈 하지 않고도 엔딩정도는 봤었는데… 이제는 꼭 한 두 번씩 지네요 흑흑;;
    하튼 역시 저한텐 구형 2D 게임들이 잘 맞는 거 같습니다 -_-!!

    Apple FontTools

    개인적으로 윤디자인에서 만든 서체 시리즈를 상당히 좋아하는데, 2003 년에 처음 파워북을 살 때 받았던 Font 시디에 들어있던 유니코드 윤고딕, 윤체, 윤명조 등은 Mac OS X 에서 같은 family 로 묶여서 나오지 않는 문제가 있습니다. (윈도우야 원래 묶여서 나오지 않고, 리눅스에서도 마찬가지로 문제가 있습니다.)
    그래서 얼마 전까진 FontForge 를 이용해서 이름을 수정해서 사용하고 있었지만 이렇게 만든 서체는 Unicode Cmap 만을 가지고 있고 Korean cmap 은 가지고 있지 않기 때문에 Carbon 기반 프로그램에서는 사용할 수가 없었습니다.
    뭐 딱히 해결책이 없는고로 불편한 걸 참아가며 쓰고 있었는데 갑자기 Apple FontTools 이 생각이 나더군요. 패키지를 다운 받아 설치하고 서체 이름을 바꾸기 위해서 name table 을 XML 로 dump 했습니다. vi 로 살살살 수정을 한 뒤 다시 name table 을 덮어 쓰니 꺄홋! 딱 제가 원하는 대로 수정이 되었네요 🙂
    드디어 firefox 에서도 산돌고딕, 윤고딕, 윤체, 윤명조 등을 볼 수 있게되었습니다 -_-v 혹시나 저와 비슷한 작업을 하고 싶으신 분들은 apple font tools 를 받아서 설치하시고 터미널에서 아래와 같은 커맨드를 이용하시면 됩니다. (단 Mac OS X 전용입니다.)

    dump: ftxdumperfuser -t name TTF_FILE_NAME > XML_FILE_NAME
    restore: ftxdumperfuser -t name -d XML_FILE_NAME TTF_FILE_NAME

    link: http://developer.apple.com/textfonts/Fonttools/Index.html