2013-04-07

更新情報

ひみつメモ帳 1.0.0 です。

四年前のコードで、今だったらこういう作りにはしないとか、こういうふうにしたいとかはあるけど、区切りをつけないと次に進めないのでひとまず。

なんか広げた風呂敷多すぎでとっちらかっとるよ。

2013-02-16

ほかのモジュールで使うかもしれなくて、頭の体操めいたモジュールを作った。こういうものが世の中にあるのかどうか知らないけど、自分ではちょっと面白いと思ってるので書きます。

文字列の範囲を指定してマークアップするという作業を文字列から独立させたようなモジュールです。

markup.Marker オブジェクトを作り、markup.Marker.markup() メソッドで範囲 startend を指定して stagetag でマークアップします。markup.Marker オブジェクトはマークアップする対象の文字列(実際には文字列に限らず任意のシーケンスでよい)とは独立しています。markup.Marker.apply() メソッドを呼んで、マークアップ結果を文字列と混ぜ合わせて列挙します。”.join() で繋げればマークアップ文字列になります。

>>> import markup
>>> marker = markup.Marker()
>>> marker.markup(0, 5, '<b>', '</b>')
>>> marker.markup(-1, None, '<i>', '</i>')
>>> marker.markup(None, None, '<p>', '</p>')
>>> list(marker.apply('Hello, world!'))
['<p>', '<b>', 'Hello', '</b>', ', world', '<i>', '!', '</i>', '</p>']
>>> ''.join(marker.apply('Hello, world!'))
'<p><b>Hello</b>, world<i>!</i></p>'

markup.Marker.markup() の順に関わらず、マークアップの入れ子を適切に列挙するのが仕事です。start, end が正の整数値(fixed な範囲指定といいます)なら markup.Marker.markup() 実行時その場で、None や負の整数値であれば(こちらは unfixed な範囲指定)なら markup.Marker.apply() メソッド実行時に、入れ子の整合性チェックを行って、破綻するようであれば例外 ValueError を発生させます。

>>> marker = markup.Marker()
>>> marker.markup(0, 5, '<b>', '</b>')
>>> marker.markup(0, 6, '<c>', '</c>')
>>> marker.markup(1, 7, '<d>', '</d>')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".\markup.py", line 148, in markup
    .format(span, conflicting))
ValueError: markup.Span(1, 7, '<d>', '</d>') conflicts with existing markup.Span
(0, 5, '<b>', '</b>')
>>> ''.join(marker.apply('ABCDEFGHIJ'))
'<c><b>ABCDE</b>F</c>GHIJ'
>>> ''.join(marker.apply('123'))
'<c><b>123</b></c>'

同じ範囲であれば、あとから追加したほうが外側になります。

今回の用ではこれだけで足りてるのだけど、入れ子が破綻してたら分割点で分けて追加するとか、いろいろ機能の追加のしどころはあると思う。あんまり長くならないのが好きだけど。

unicodeseg.py 開発停止

やる気があるのかないのかわからなかった unicodeseg.py ですが、開発停止。理由は、ICU (International Components for Unicode) の Python バインディングである、PyICU がちゃんと動いたから。せこせこ作って試してた unicodeseg.py の LineBreaking 境界のン千項目のテストコードに試しに食わせてみたところ一瞬にして完全クリアしたのを見て踏ん切りついた(笑)。

いや、もともと PyICU の存在は知ってたんですよ。作る前に調べたから。けどどうもその時は開発がアクティブでなさそうで、なんか頼りなさそうだったのだ。しかしいまや新しい ICU のバージョンにもキャッチアップしてるのでこれでいけると。まあプロジェクトとして人は足りてなさそうだけど……。

なので次の関心としては、PyICU のバイナリ配布物を作りたい。ICU のビルドやそれと PyICU と組み合わせての動作確認はできてるので、使う人が ICU を自分で Visual Studio でビルドしなくても簡単にインストールできるようにしたい。それと OS X 版もバイナリ配布あったほうがいいよね。

OS X も Mountain Lion の今は開発ツールが別途ダウンロードだったと思うので、バイナリ配布物の需要はあると思う。というか、みんな忙しいんだからいちいち ICU みたいなでかいライブラリを手元でビルドさせることはないと思うんだよね。そういう意味で、バイナリ配布というのは現実的には(Windows にとっても Mac にとっても)重要な要素だと思うんだけど、現状のパッケージング開発界隈にはそうは見えてないらしい。まあおそらくウェブ開発の人中心なのだろうから、Win/Mac のデスクトップ・コンピューティングにはあまり関心がないのだと思う。かれらはどちらかというとダウンロードからインストールまでの工程の自動化という面にフォーカスしているように思える。

そういや pip って今はバイナリ配布できるのかな。Windows だと、setup.py bdist_wininst の出来がアレだし、MSI 形式も Python 3 では使えなくなっちゃったしで、現状バイナリ egg がいちばん現実的な形式になっている。そうなると easy_install からいつまでも卒業できないし、かといって wxPython のようにインストーラでしか配布してないモジュールもあるから、けっきょくパッケージ管理一元化なんて Windows では夢のまた夢、と悲しくなってしまう。

(wxPython のために一言添えておくと、かれらの独自インストーラはカスタマイズ用のオプションを持っているので標準のセットアップ配布物よりはまとも。けどたぶんセットアップ・オプションの存在なんて誰も知らないと思う(笑)。)

そういうわけで、バイナリ配布物の作り方のようなものを調べなくちゃいけないんだけど、手元で動いてるとそれでいいやあとなっちゃうのでなかなか進まない。というか PyICU いじる時間自体もあんまない。ああ、PyICU にもコミット取らなきゃいけないだろうしねえ。優先度としては低めかなあ……。

2013-02-08

更新情報

「さくらのレンタルサーバに Python モジュールをインストール」を公開。紛らわしい名前ですが、「さくらのレンタルサーバで Python 外部モジュールを使う」に最近の事情を加味して追記したほうがいいと思っていた点をまとめました。

たぶん三年くらい早く書いておくべきだったのではないかという気がする。旧版は当時とにかく調べたことをまとめとこうと思って書いたのだけど、その後自分の予想を超えて参照されるようになってしまった。そうすると責任を感じてくるもので、もうだいぶ古くなってるなあとずっと気になってていたのです。

まあ新版のほうにもちろっと書いたけど、さくらのレンタルサーバの場合じゃがんばっても所詮 CGI なので、モジュールのインストール先は自分で管理しやすいやり方で簡単に済ませとけばいいんじゃないでしょうか。

更新情報その2

追記です。ゲストブックでわりと致命的な不具合を報告いただいたので、修正したひみつメモ帳 0.9.1 を公開しました。ご報告ありがとうございました。

2013-01-13

My friend Aaron Swartz committed suicide yesterday, Jan 11. He was 26.

RIP, Aaron Swartz – Boing Boing

ショックが大きくてまだ詳しく読む気にもならないのだけど、ひとまず。まだ悪い冗談かなんかだと思いたい気分だ。

落ちついたらなにか書くと思います。

2013年1月18日追記

一週間たって、信じられないという思いからさすがに事実を受け入れる心持ちにはなってきた。若い人の死というのは、いいようのない理不尽さを感じさせるので、きっとこの先も思い出してはつらい気分になるとは思うけど。

こんな形で注目を浴びることなど望んではいなかったのだけど、かれのひととなりを振り返るのにふたたびうちの翻訳記事がよく参照されるようになった。昔のつたない文章でもうしわけないんだけど、かれのことを多くの人に知ってもらいたいと思うのも(こうしたことがあってはなおさら)正直な気持ちです。

なにかかれを追悼するようなことを書こうとも思ったけど、アクチュアリティ指向のサイトじゃないので機を得た振る舞いは苦手なのである。なので、昔出そうと思ってけっきょくやめたかれの記事の翻訳を公開することにした。いままでは公開前にメールで一応許可を取ってたのだけど、それはもうかなわない。しかしまあ、快く許してくれただろうと思うのでそこに引っかかりはないですね。

で、公開しといてなんだけどじつは僕はこの内容に半分くらいしか得心していない。なんだけど、いまはかれがどういう人物だったかに注目が集まっているので、その役には立つと信じて出すのです。

それに関連して、いままではやってなかったことだけど、終わりのほうに珍しく自分の意見ぽいことも書いた。この局面で公開すると誤解されるおそれもあったのでそういうことについてなど。結果的には、自分にとってはこの翻訳あとがき的なノートが追悼文のような感じになった。

ハッカー・コミュニティのマスコット的存在だったアーロン君。多くの年長者にとって、かれは見守ると同時に追いかけるべき対象というユニークな存在だったと思う。将来が楽しみだった。ほんとうに残念でなりません。

2013年1月23日追記。信じがたいことに Aaron 君の名前を間違っていたので修正。ありえん。

2013-01-04

あけましておめでとうございます。

暮れは体調を崩して高熱で寝込んでしまい、そのまま元日まで起き上がれずといったありさまで、とんだ年越しだったよ。年末年始はコードも日本語もばりばり書くぞと意気込んでいたのに、情けない。まだ本調子ではないけど、とりあえず本を読んだりパソコン開けたりはできるようになった。けど長時間集中できないのでプログラミングがなかなか……。

2012年中にと言っていたのにけっきょく年を越してしまった、ひみつメモ帳の 0.9.0 を公開。ずっと原因を追いかけられなかったメモリリークを潰した(OpenSSL のソースがアレなせいだっ)。それと、インストーラ(Windows Installer)を用意した。ファイルの関連付けやスタートメニューへの登録と、アンインストール時にレジストリのクリーンアップをしてくれるのでインストーラ経由の導入をおすすめします。

大きな問題がなければ Windows 版はひとまずこれで(というか次で)安定としたい。脱 wxWidgets とかエディット・コントロールそのままとはいえエディタ部分が貧弱とか気になってる点はあるけど、いいかげん OS X 版と iOS 版のほうに行きたい。OS X 版も Mountain Lion で動いてるけど、コンパイルしたの Snow Leopard の頃? まあソース忘れてるのでそこから。

なにはともあれ、もう一回見直してから Windows 版は近く 1.0.0 の番号付けて公開しよう。

ひみつメモ帳は Windows 版 OS X 版、両方ともほぼ毎日自分で使っている。Dropbox にサイトのアカウントとパスワードなんかをメモしたファイルを置いて、Win/Mac 双方から参照している。iPhone から見たい(ときもある)ので iOS 版も欲しいのだ。そういうわけなのであまりアクティブに更新されてなくても見捨てられているプロジェクトではないということ。

あとは……なんだっけ。昨年までで書く種はいろいろあるので漸次書いていきます。今年もよろしくお願いいたします。それにしても時間と体力がない。