2010-06-03

Evernote につぶやく monolog-evernote for Mac OS X


Evernote になんでもかんでもメモするんですが、いちいち Evenote を開くと、ウインドウが大きいのが嫌なのとで、ちっちゃいのを作りました。ツイッターみたいに1行入力するだけの手軽さ。

http://code.google.com/p/monolog-evernote/



スクリーンショット(2010-06-01 12.00.13)  


タイトルは「monolog」で、時刻とテキストが入ります。タイトルには monolog とだけ入れてあります。時刻は created ad フィールドに入るの冗長だと思ったのですが、日記に書き抜くときにまるごとコピペできて便利なので、そのままにしてあります。



スクリーンショット(2010-06-01 12.00.56)  

あと、Leopard の AppleScript エディタと、Snow Leopard の AppleScript エディタで、それぞれアプリケーションを作ったときの、出来上がるものが違います。ってなわけで、別々のバイナリを作りました。


ちなみに @myen という twitter アカウントに D すると、自分の Evernote に入るというサービスがあります。「d myen 」を書き損じると公開されちゃう、ネットに繋がっていないことだってある、という理由から、ローカルのアプリに書き込むことにしました。あと、AppleScript つかえると、何かと自動化できるかなってことで、習作です。




2010-06-02

エキスパート Python プログラミング




アスキーメディアアートより、「エキスパート Python プログラミング」の見本本(みほんぼん)を頂きました。Python でひととおりコードが書けるようになって、次にステップアップしたいけど、これからどうしよう、みたいな人にオススメだと思います。即物的な知識、たとえばライブラリやフレームワーク固有の知識ではなくて、もうちょっとこう一般的な知識として身につける、とか。



たとえば、4章「良い名前を選ぶ」の132ページ。PEP 8 に則って、Python では、プライベートなメソッド、関数、変数には _lowercase をつけましょうという慣例があります。で、__init__ とか __eq__ みたいに、アンダースコアが2つつくメソッドもあるわけです。Python では、__my_method みたいな命名をすることは文法的には禁じられていません。しかしながら、これはなかなかに落とし穴があります。



>>> class Foo:
... def _hoge(self):
... print "_"
... def __fuga(self):
... print "*******"
... def hello(self):
... self._hoge()
... self.__fuga()
...
>>> f = Foo()
>>> f._hoge()
_
>>> f.__fuga()
Traceback (most recent call last):
File "<stdin>", line 1, in
AttributeError: Foo instance has no attribute '__fuga'
>>> f.hello()
_
*******
>>> Foo.__dict__
{'__module__': '__main__', '__doc__': None, '_Foo__fuga': <function __fuga="" at="" 0xc5730="">, '_hoge': <function _hoge="" at="" 0xc57b0="">, 'hello': <function hello="" at="" 0xc5630="">}


アンダースコアをひとつ接頭したメソッドには外部からアクセスできますが、アンダースコアをふたつ接頭したメソッドにはアクセスできません。この動作だけ見ると、プライベートメソッドには、アンダースコアをふたつ接頭するのかなぁと思ってしまいます。そう思っていた時期が私にもありました。



けど、違うんですね。そういう情報って、PEP とか dev のメーリングリストを読めば分かるのですが、情報が分散していますし、なかなか背景となる理由も分かりにくいです。



そういうところを抑えたのが、本書です。他にもテスト、文書系のアプリやモジュール、パッケージの書き方など、ちょっと気合いの入った開発に役立つ知識がいっぱいです。Code Complete や Pragmatic Programmer とかに近い内容です。



ちなみに上記については「Python には動作を強制するようなプライベートメソッドはない。アンスコ2つの挙動は別の理由」です。