普通の構造化プログラマーがオブジェクト指向の存在意義を理解するコツ
http://d.hatena.ne.jp/ryoasai/20110926/1317044975
GoogleAppEngineを使いたいという理由でPythonを始めたのだけど、Pythonそのものが面白くてローカルPC上で動くアプリも作ってみた。toodledoのタスクを俺基準で抽出して、それをGrowlforWindowsから通知させよう、というもの。これを自宅のPCに突っ込んでおいて、ちょっとゲームでもとPCの電源をいれれば、残っているタスクが画面に現われて出鼻をくじかれる、そんな機能。
オブジェクト指向プログラミングの観点で言えば、クラス1つ定義していない。やりたいと思った処理をダラダラ書いただけのソースだ。しかも、出来合いのpoodledo(GitHub)、gntp(GitHub)にタダ乗りしているだけ。
公開されているパッケージ、モジュールがたくさんあって、それらを使わせてもらえるというのがとてもありがたかった。
インストールも(その名もeasy_installのおかげで)楽だし、「これってうまく動くの?」と思えば、付属のテストコードでテストもできる。至れり尽くせりだ。テストが足りてるか心配なら、そのテストコードを読めるし、足りてないと思えば自分でテストを追加して作者に送ることすらできる。
オブジェクト指向そのものより、この気軽さ、親切さ、文化がうらやましいと思った。
GoogleAppEngineにしても、Webアプリののひな形があって、そのリクエストハンドラさえ継承すれば俺様webアプリが作れるという手軽さだ。(ニコニコ動画のランキングを引っぱがすアプリはこれで作った)
Pythonの文法をいちいち調べながら書いたので、それなりに時間もかかったけど、はっきり言って楽だ。こんなに簡単にできていいのかと思えるくらい。(仕事で作ってるものほどガリガリとテストしてない、というのはある。)
でも、Pythonで企業の業務システム書けって言われたらどうだろう。無数のベンダーに同時にロックインされているような気分になるかもしれない。「このモジュールのメンテが終わったらどうしよう」とか、「ライセンス条項が変わって使用できなくなったらどうしよう」とか。個人で作れる規模のちょっとしたアプリなら、必要に応じて自分で直すこともできる(やった)けど。
#!/usr/bin/env python #!/usr/bin/env python # -*- coding: utf-8 -*- """ toodledo2grwol : Display grwol notify tasks of Toodledo """ from datetime import datetime from apiclient import ApiClient import gntp.notifier # Task Filters def _taskFilter(tasks): """ Task Filter -- return filtered tasks """ def _isUncompleted(task): """ Task Uncomplered """ if hasattr(task, "completed") == False: return True else: if task.completed == "0": return True else: return False def _hasDuedate(task): """ Task Has Duedate """ if hasattr(task, "duedate") == True: if task.duedate != "0": return True else: return False else: return False for task in [ task for task in tasks if (_isUncompleted(task) == True) and \ (_hasDuedate(task) == True)]: yield task # create Toodledo Client api = ApiClient(app_id = "aaaaaaaa", app_token="bbbbbbbb") # Toodledo Authentication api.authenticate('cccccc@cccc.cccc', 'dddddddd') # Get Task list from Toodledo task_list = api.getTasks(fields="duedate") # Register to Growl growl = gntp.notifier.GrowlNotifier( applicationName = "aaaaaaaa", notifications = ["Task"], defaultNotifications = ["Task"], ) growl.register() # Send Notify to Growl for hot_task in _taskFilter(task_list): duedate = datetime.fromtimestamp(float(hot_task.duedate)) growl.notify( noteType = "Task", title = hot_task.title, description = duedate.strftime("DueDate: %Y/%m/%d"), icon = "file:///C:/Users/eeeeeeeeeeeeeee/icon.png", sticky = False, priority = 1, ) # end自分PCローカルで動くGrowl通知に加えて、boxcar経由で通知を送るWebサービス(GAE/p)版も作ろうとしてる。こっちは難航中。GAEにモジュール突っ込むときのimportのルールがいまいち怪しいのだ。
0 件のコメント:
コメントを投稿