'파이썬'에 해당되는 글 3건

  1. 2008.04.03 마인드맵 툴을 만들었습니다 3
  2. 2007.12.30 파이썬용 스프링노트 모듈
  3. 2007.12.29 파이썬에서 스프링노트 API 사용 1

마인드맵 툴을 만들었습니다

프로그래밍 2008. 4. 3. 01:38
사용자 삽입 이미지

마인드맵 프로그램 '마음난리'


'마음난리'란?
  • 여럿이서 하나의 마인드맵 작업을 하기 위한 프로그램입니다.
  • 로봇이 오픈API를 사용하여 아이디어 연상을 도울 수 있는 키워드를 추천해줍니다.
  • 마인드맵을 XML문서, 혹은 웹 오피스를 통하여 출판할 수 있습니다. (미지원)
 일단 시험적으로 며칠동안 서비스는 할 것 같은데 사실 서비스, 서비스 하기엔 건더기가 너무 없죠. 실은 매쉬업 경진대회를 목표로 연초에 작업하던 것을 최근 다시 꺼내서 만들어봤습니다. 스프링노트, 구글닥스 등 웹 오피스에 대한 출판 기능을 추후 추가할 예정입니다. 물론 그 추후가 언제가 될지는 저도 잘 모르겠네요.
 관심있으시면 꼭! 실행해보시고 의견 부탁드립니다.

파이썬+QT
 배포판을 보시면 알겠지만 파이썬을 이용하여 작업하였습니다. GUI는 PyQt4 라이브러리를 사용하였으며 py2exe를 이용하여 배포판을 만들었습니다. 프로젝트 시작시에는 Eclipse+pyDev를 사용하다가 중반 쯤 들어 다른 IDE를 써볼까 하고 찾아보았는데, 파이썬 멀티스레드 디버깅이 편한 IDE가 안보이더라구요.

XMLRPC
 서버/클라이언트 구조를 기본으로 상정하며 프로토콜은 XML-RPC를 사용합니다. 실제 마인드맵 데이터는 XML DOM을 통하여 관리하고 있습니다. 때문에 성능의 저하가 있을지 모르겠습니다. 서버는 역시 파이썬으로 Twisted라는 웹 프레임워크를 사용하여 구축하였습니다.
 
OpenID
 안보이게 이쁘게 처리하고 싶었는데 오픈아이디의 인증방식 자체가 어쩔 수 없이 한 번은 사람 손을 타게 되어 있어서, 어쩔 수 없이 새 창을 띄우는 방식으로 조금 더럽게 처리할 수 밖에 없었네요. 대신 로그인의 수고라도 조금이나마 줄이고자 로그인했던 아이디를 기억하는 옵션을 추가해두었습니다.

OpenAPI
 주된 기능으로 다음의 문맥 키워드 추천, 네이버의 연관검색어, 구글의 웹 검색을 이용했습니다. 직접 마인드맵을 작성해보시면 어떻게 사용되었을지 지레 짐작이 가실 겁니다. 그리고 외국의 오픈API 중에 Lingr라는 채팅API가 있어서 시험삼아 넣어보았습니다. 프로토콜로는 json을 이용하며 외국이라 그런지 만족스러운 속도는 아닙니다. 어떻게든 사용자들에게 커뮤니케이션 수단을 제공하고 싶어서 넣은건데…. 나중에 Skype API라도 쑤셔볼까하는 생각이 드네요.

유니코드, 영어
 기본적으로 프로그램 내에서 UTF-8을 통하여 모든 문자열을 처리하도록 되어 있습니다. 그런데 Eclipse IDE는 에디터 창이 조금 이상한 탓인지 한글이 들어간 소스를 저장할 경우 다음 번에 파일을 열 때 산산조각이 나 있더군요. (pyScripter나 EricIDE같은 경우에는 별 문제가 없었는데 EclipseIDE의 문제인 것 같습니다.) 그래서 작업의 편의를 위하여 코드 내의 문자열은 영어로 입력했습니다. 짧은 영어실력이 만천하에 드러나겠네요. 영어집중교육 등록해야겠다.
 유니코드가 참 여러군데에서 발목을 걸고 넘어지더라구요. 검색결과, 위젯의 문자열에서부터 quote해야할 문자열의 인코딩 문제까지…. 정말 인코딩의 가시밭길을 헤쳐나온 기분이었습니다.

Lingr가 속도가 느린 관계로 채팅을 배제한 상태입니다.
참. 마인드맵 메뉴는 오른쪽 버튼을 누르시면 됩니다.
적절한 테스트를 거치지 못해서 자꾸 글을 수정하게 되네요.

:

파이썬용 스프링노트 모듈

프로그래밍 2007. 12. 30. 21:16

설명

  • 파이썬스프링노트 모듈로 CRUD만을 지원하는 간단한 구조입니다.
  • CRUD 작업 함수는 요청된 페이지를 문자열로 반환합니다. (XML 텍스트)
  • Delete의 경우에는 반환값이 없습니다
  • 사용자 설정을 위한 springnote.conf 파일이 필요합니다.
[springnote]
open_id: open ID
user_key: user key
app_id: application ID
app_key: application key

멤버함수

  • httpReq(method, uri, data=None): 스프링노트에 대한 HTTP REQUEST
  • createPage(): 사용자 노트에 새 페이지를 만듭니다.
  • getPages(): 사용자 노트의 페이지 전체(pages)를 읽어옵니다.
  • getPage(page_id): page_id에 해당하는 페이지를 읽어옵니다.
  • updatePage(page_id, title, memo): page_id에 해당하는 페이지의 제목을 title로, 내용을 memo로 변경합니다
  • deletePage(page_id): page_id에 해당하는 페이지를 삭제합니다
  • getTop(): 사용자의 시작 페이지(모든 페이지의 상위 페이지)의 id를 얻어옵니다.

페이지 생성

  • createPage() 는 현재시각을 제목으로 하여 새 페이지를 생성하고 생성된 페이지의 내용을 문자열로 반환합니다.

예제

  • 새 페이지를 생성하고 일련의 내용을 채워넣는 코드 (python 2.5 에서의 ElementTree를 이용하여 XML 파싱을 하였습니다.)
comm = SpringNote()
no_newpage = XML(comm.createPage()).findtext('{http://api.springnote.com}identifier')

title = '솔로라서'
memo = '행복해요ㅠㅠ'
comm.updatePage(no_newpage, title, memo)

소스코드

이 글은 스프링노트에서 작성되었습니다.


 파이썬용 모듈이 페이지 생성이 불가능하길래 새로 작성해보았다. 스프링노트에 블로그로 보내기가 있길래 한 번 티스토리로 쏴봤는데 의외로 놀라울 정도의 퀄리티였다. 하지만 코드블럭에서 조금 문제가 발생. 결국 조금 손을 봐주는 걸로 끝냈다. 사실 참고가 된 소스를 살짝 리버전한 정도에 불과하다. 반성! 파이썬이 참 재밌다. 취직하고싶다.

:

파이썬에서 스프링노트 API 사용

프로그래밍 2007. 12. 29. 02:54
링크 : http://nakada.springnote.com/pages/400945

 스프링노트 메쉬업을 작성해보기 위해 파이썬 스프링노트 API 모듈을 찾아보았다. 오픈마루 스프링노트 API 공식 도큐멘트에 링크되어 있는 파이썬 예제는 9월자로 스프링노트 인증방식이 바뀌기 전의 예제였다. 약간의 구글링 끝에 링크에 위치한 문서를 찾았지만 실제로는 ElementTree의 Element의 tag가 "{http://api.sptringnote.com}tagname" 같은 식으로 되어 있어서 위 문서 그대로는 ElementTree.findtext()를 통해서 제대로 파싱이 되지 않는 문제가 있었다. (왜일까?)

 PyDev를 쓰고 있어서 디버거를 돌려 볼 수 있었기에 망정이지 텍스트 에디터만 꼴랑 가지고 작업하고 있었으면 백날 삽질해도 알아차리지 못할 문제였다. 후덜. 갈 길이 멀다. 컴팩트한 프로젝트니까 후딱 끝내야지.


: