내가 참여했던 오픈소스

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

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 으로 구현해버리는 작업을 많이 해서 더 보여줄 게 없는지도 모르겠네요 ㅠ_ㅠ

    느린 SFTP 는 이제 안녕~

    얼마 전 proftpd 패치를 한 김에 … [wikipedia:SFTP] (ftp over ssh) 대신 [wikipedia:FTPS] (ftp over ssl) 를 사용하기 위해 이래저래 삽질을 조금 해봤다… 뭐 결론은 파일질라에서 -_-;; passive 로 안하면 디렉토리 리스트를 못얻어오고 에러가 나는게 문제였지만… 하튼!!
    [wikipedia:SFTP] 의 경우엔 라인이 꽤 좋음에도 불구하고 200~300K 정도가 나올가 말까 하는 극악한 속도를 자랑했었는데… proftpd + mod_tls 조합으로 ftps 를 사용해보니 무선랜 환경에서도 500~600K 정도는 나오는게 데스크탑에서는 훨씬 빠를 듯 싶다… (테스트해보니 1.6MB 이상도 나오는거 보면 [wikipedia:SFTP] 랑 속도비교는 무의미 할 듯)
    [wikipedia:FTPS] 의 경우엔 이어받기 라던지… 예전 ftp 에서 지원하던 모든 것들을 지원하기 때문에 굳이 다시 [wikipedia:SFTP] 를 쓸 일은 없을 듯… 하튼 이제 느린 [wikipedia:SFTP] 는 안녕~
    proftpd 의 옵션 중 TLSrequired 가 on 이면 data 채널과 control 채널 모두 암호화를 해서 전송을 하고 ctrl 이면 data 는 암호화 되지 않은 상태로 전송이 된다고 하는데… off 인 경우는 tls 를 사용하는지 마는지 궁금해졌다 -_-; sniffit 을 이용해서 21 번 포트로 들어오는 데이타를 스니핑 해보니… off 여도 확실히 암호화 되서 전송되는 거 같기는 해서 안심!

    proftpd: codeconv module

    사실 unfix 는 나 혼자 쓰는 서버가 아니고… 파일이름등을 unicode 로 관리할 경우 ms 윈도우와의 궁합이 그다지 좋지 않기 때문에… utf-8 환경을 갖추는 게 망설여지는게 사실이었다.
    얼마 전 젠투 한국 사용자그룹의 유리님의 개인 portage-overlay 리스트를 보다가 proftpd 의 charset conversion 패치를 발견했다. 원 출처는 일본 쪽인 듯 싶은데, 이 패치를 적용하면 client 에서 사용하는 charset 과 server에서 사용하는 charset 을 설정하는게 가능해진다.

    만약 중간에 charset conversion 에 실패했다거나 한 경우 어떻게 처리를 하나 봤더니, 변환에 실패한 글자를 ‘?’ 로 바꿔버리고 있었다. out_buffer size 를 in_buffer size 의 세 배 크기로 할당하고 중간에 에러가 발생하면 무조건 변환이 실패한 것으로 생각하기 때문에 한 글자를 표현하는데 3바이트보다 더 많은 바이트 수가 필요하다면 (ucs2 로는 표현 못하는 글자를 사용하는 경우), 버퍼 오버플로의 희생양이 될 수도 있을 듯 싶다. 그래도 원하는 코드를 삽입하는 건 힘들고 그저 segmentation error 를 부를 뿐이겠지만 찝찝한 건 사실이므로 에러가 발생할 경우 errno 를 참고하도록 패치를 해야겠다.

    근데 실제 적용을 해보니 Directory 나 .ftpaccess 를 통한 지역 설정이 허용되지 않는다. 내가 사용하는 폴더들에 한해서 저 패치의 영향을 받게 하는게 목적이었기 때문에 결국 패치를 해버렸다. proftpd 개발자 문서는 서버가 다운되었었는지 참고를 할 수가 없었고, 그나마 미러링 된 곳도 찾을 수가 없어서 한참 헤매긴 했지만!! 결국!! 내가 원하는 데로 패치 성공 -_-v

    mod_autoindex 도 몇 일전에 charset 을 설정해줄 수 있도록 패치했고, 그 외에는 이미 다 준비가 되어 있었기 때문에 누군가 mod_autoindex 의 새로운 테마만 만들어준다면 바로 utf-8 환경으로 넘어갈 수 있을 듯 싶다.

    FTP 관련해선 RFC2640 에 있는 것을 구현하는 것이 옳다고 생각하지만 중간 단계로써 mod_codeconv 도 나름의 의미가 있을 듯 싶다.

    p.s) 위의 사이트에 나와있는 메일 주소로 패치파일을 보내주려 했지만 메일주소가 죽어있네요.