가능한한 빠른시간내에 구현해야하는 워크샵자동등록프로그램 구현중. 역시나 [Python]으로... 필요한 사항은 3주간에 걸친 워크샵사용자등록 (약500명), 등록현황 메일발송 및 입금확인 후 최종확인메일발송, 관리자에 의한 등록현황파악. 이에 대한 나의 대응태세는

  • [HTTP]서버 : [Medusa]
  • WebApplication 라이브러리 : [Quixote]

  • 입력값확인 : JavaScript

  • 사용자 입력시 주소부분 우편번호검색기능 : 제로보드 참고
  • data persistancy : shelve
  • 등록현황파악 인터페이스 : 탭으로 분리한 txt파일에 Excel파일확장자 붙힘

[APM]의 방법이 아마 제일 쉬울수도 있겠다. 난 pythonist답게... 파이썬으로.. 으흐. [MySQL]을 제외한 이유는 아무래도, 테이블하나짜리 디비를 따로 돌릴 필요성을 느끼지 않았기때문. 허나, 관리자에 의한 등록현황파악시 효과적인 화면을 보여주려면, 좀 고민해봐야겠다. 오늘내에 끝낸다. --yong27, 2004-05-14


우편번호검색기능에서 막혔다. 일단은 다음의 방법들.

[Linux]의 man 프로그램, pydoc의 help기능에서 몰랐던사실 하나를 알았다. 문서를 보다가 앞내용이 보고싶어 무의식적으로 VimEditor명령인 'k'를 눌렀더니, 오호 위로 올라가는게 아닌가. man페이지볼때는 마치 vi처럼~

shelve를 쓰는 문제는 생각처럼 간단하지 않았다. d[key][3]등의 값을 수정하면, 이건 바로 hard disk와 연동되지 않는다. d.sync()의 방법도 있지만, 그것만으로도 안되는 경우도 있다. d=shelve.open('db',writeback=True) 의 방법을 쓰면된다던데, 이건 메모리낭비가 심하다고 한다. 결국은 anydbm으로 값을 바꾸게 되는 항목만 따로 db를 만드는 방법으로 선회.

접수현황을 excel로 보고자한다는 요구사항을 위해, 탭으로 분리된 .xls파일을 만들어서 다운로드 시키는 방법을 썼는데, 이게... 정보가 바뀌어도 웹브라우저에서 캐쉬된 파일만을 계속 읽는다. 방법을 찾다가 결국 파일이름을 그때그때 새로 만들어주는 방법사용.

마지막으로, 데몬화하기. 이건 nohmad씨의 코드를 참고했다. 한줄추가로 될줄이야.


저는 이런 경우, 위키와 결합을 시도합니다. 사람들이 [Python]을 "glue"로 많이 쓰는데, 저는 파이썬은 물론, 위키 자체를 "glue"로 많이 쓰게 됩니다. 자료의 수정, 삭제, 삽입 등을 위키에서 그대로 할 수 있게 합니다(물론 권한이 있는 사람만 위키를 통한 직접적 조작이 가능하게 하고, 입력폼을 위키에서 템플릿을 생성하고 유저는 그냥 입력폼 칸에 맞춰 집어넣으면 그 내용이 위키의 페이지로 저장되게 하는 방법). 그리고 SQL의 select 문 같은 것도 그냥 파이썬 스크립트로 웹브라우져에서 해버립니다. 예를 들어, len([each.age>21 for each in people])나, len(people.select(lambda r:r.age>21)) (see Xper:프로그래머내공업그레이드워크샵 의 Data Munging 예) 같이 말이죠.

그리고 여기에 하나를 더한다면 YAML을 첨가합니다. 그리고 만약 간단히 템플릿을 쓴다면 Preppy를 씁니다.

--[김창준]


Python2.3 으로 접어들면서, 파이썬 프로그래밍 패턴에 변화가 일고 있다. 좀더 읽기쉬운 목표였던 예전과는 약간 달라진, 다소 읽기 어려워보여도, 최적의, 해커식의, 한줄짜리의 등등의 코드들이 눈에 띠게 많이 보인다. iterator, generator, list comprehension, generator expression 등등에 익숙하지 않으면, 요즘나오는 코드들 이해가 어려울꺼다. 한편으로는 [Cee]나 [Java]만 하는 사람들은 이런류의 패턴을 종종 쓰게될까? 그나마, 파이썬이 접근이 쉬워서 최신의 연구결과들이 속속 이렇게 표현되는듯 싶다. (SeeAlso PythonNewFunction)

PythonKoreaUserGroup에서 nohmad씨가 소개한 string concatenation method 이후로, 문자열 붙이고 방법이 전혀 달라진 나 자신을 발견. 다음의 메쏘드는 다소 읽기 불편하지만, 성능은 좋다니깐...

   1     def getExcelFormatStr(self):
   2         line=[]
   3         line.append('\t'.join(['RegistrationNo']+self.itemsh+['RegTime','RegConfirm']))
   4         for jumin, datalist in self._db.iteritems():
   5             line.append('\t'.join([jumin]+datalist+[self._dbwb[jumin]]))
   6         return '\n'.join(line)

예전같았으면, while문안에서 직접 파일에 write했거나, 아님 cStringIO를 썼을 수도 있겠다.


프로그램중, 입금자 확인용 스크립트.

   1 import sys
   2 sys.path.append('/home/yong27/wkshop')
   3 
   4 from wkshop.db import getDbConnection
   5 
   6 dbc=getDbConnection()
   7 for jumin in [x.split()[0].strip() for x in sys.stdin if x.split()]:
   8     try:
   9         dbc.confirmMoney(jumin)
  10     except KeyError:
  11         print aJumin, "key error..."
  12     except Exception, msg:
  13         print aJumin, msg
  14 dbc.close()

list comprehension 기술이 자연스럽게 등장~~ 이걸 써보니, 역시나, GeneratorExpression의 필요성이 느껴진다. --[yong27], 2004-06-07

WorkShopRegistrationProgram (last edited 2011-08-03 11:00:40 by localhost)

web biohackers.net