Console IME対応パッチ このエ
    ントリーをはてなブックマークに追加

Windows用のコマントプロンプトの置き換えアプリ Console の、IME対応パッチ版

インストール方法

https://sourceforge.net/projects/console/files/console-devel/2.00/ より console2 2.00 b147 をインストールし、console.exe を上記のファイルで置き換えます。

全て表示… コメント

ジェネレータの循環参照 このエ
    ントリーをはてなブックマークに追加

以前、ジェネレータが循環参照の一部になっている場合、メモリが開放されなくなるケースがあるという エントリ を書いた。

最近、この仕様が 問題となっていた ようで対策が検討されていたが、ついにトランクにコミットされたようだ。

http://bugs.python.org/issue17807

従来のジェネレータでは、ジェネレータオブジェクトへの参照が全て破棄されて不要となった時に GeneratorExit 例外を送出してコードの実行を再開し、ジェネレータ内の finally 節が実行されるようになっていた。Pythonのコードで書くと、こんな感じになる

class Generator:
   def __del__(self):
      if self.generator:
         self.generator.send(GeneratorExit)

ここで、ジェネレータオブジェクトは __del__ メソッドを持っているため、このオブジェクトが循環参照の一部となっていた場合、ガベージコレクションでは開放できない、というのが上のエントリの話だった。

Python3.4では、上のコードの __del__() メソッドに相当する部分が削除され、代わりに ジェネレータ ...

全て表示… コメント

git-svn でSubversionから最新バージョンを再取得する このエ
    ントリーをはてなブックマークに追加

久しぶりに Subversionのプロジェクトにパッチを書いた 訳だが、そう何年もSubversionから離れているわけでもないのに、もうすっかりSubversionを使った時のパッチ開発ワークフローがわからなくなっているのには驚いた。なにしろ、手元ではコミットからしてできないのだから恐ろしい。ほんのちょっと前までDVCSなしでやれていたのだから何か方法があるんだろうが、どうやっていたのかもう思い出せない。

で、あまり使ったことのなかった git-svn を使ってみたのでメモ:

svnからリポジトリを取得

$ git svn clone SVN_URL dest

で、全履歴を取得できた。しかしちょっと大きなプロジェクトでは大変時間がかかってしまうので、

$ git svn clone -r HEAD SVN_URL dest

$ git svn clone -r r100:HEAD SVN_URL dest

のように、範囲をしぼった取得もできる。

svnから再取得

gitの仕組みがよくわからないが、取得したリポジトリを clone しても、取得元svnリポジトリの情報は clone 先には伝わらないようだ。

clone したリポジトリで ...

全て表示… コメント

日本語でreStructuredText このエ
    ントリーをはてなブックマークに追加

実のところ、私はあんまり reStructuredText /Shinx が好きではない。Markdown と比べるとシンプルさで劣り、TeXと比べると印字品質で劣る。この辺の中途半端さが、restを愛せない大きな理由だが、もう一点、日本語の文章を書くのに適切なマークアップ言語ではない、というのも大きい。英語などの、単語と単語の間にスペースがある言語向けに設定されており、日本語で書こうとするとイライラが溜まってどうしょうもないのだ。

とはいえ、SphinxはPythonの公式ドキュメントで使われているツールでもあり、ちょっと複雑なドキュメントを書くには Pandoc を使うよりは便利なことも多いので、ある程度は使えるようにしてみたい。ということで、私が使っていて一番イライラする、インラインマークアップの改善に取り組んでみた。

通常のrestでは、インラインマークアップの前後に空白や区切り文字が必要なため、

restは*うざい*

とは書けない。

restは\ *うざい*\ !

などと書かなければならない。実にうざいので、スペース無しでもマークアップとして認識できるようにしてみた。

https://sourceforge.net/p/docutils/patches/103/

このパッチでは、前後のスペースや区切り文字などのチェックをいっさいチェックせず、`*` などの記号は全てマークアップとなる --no-inline-delimiters オプションを追加している。

$ rst2html.py --no-inline-delimiters ...
全て表示… コメント

Mac OS-X で Idleの日本語入力 このエ
    ントリーをはてなブックマークに追加

Mac OS X 10.8 に標準で入っているTcl/Tkは少々バージョンが古く、そのままでは日本語の入力ができないようだ。

ActiveState で公開されている ActiveTcl 8.5.13 を使えば、IMEを立ちあげて日本語入力ができるようだ。私はHomebrew を使っているので、

$ brew rm python
$ brew install python

で、idle上の日本語入力ができるようになった。入力はできるものの、インライン変換ができないのであまり見栄えはよくない。Python3も同様にActiveTcl 8.5.13で動作した。

ただ、このバージョンのTkには 既知の問題 があり、Python2.7.3以前、Python3.3.0以前のバージョンでは、Preference 画面を表示すると落ちてしまう。

この問題はトランク上ではもう修正済みなので、Python2.7.4/3.3 ...

全て表示… コメント

PowerPointは僕らのIllustratorだ このエ
    ントリーをはてなブックマークに追加

普段、図を書いたりすることはそれほどないが、書くときは適当にPowerPointを使って書いてしまうことが多い。このページの図 なんかもPowerPoint製で、けっこう綺麗な図を手軽にかけるので重宝している。

書くのが簡単なのはいいんだけど、書いたあと、画像として出力するのが微妙にめんどくさい。数が多いとうんざりする。ということで、Sphinxの文書を書くときのために、PowerPointのプレゼンテーションから画像を抽出し、png ファイルとして保存するDirectiveを作成してみた。

この拡張は標準の image ディレクティブのパラメータに加え、pptfilenameshapename を指定できる。

.. ppt-shape:: abc.png
   :pptfilename: testppt.pptx
   :shapename: shape-title

pptfilename には、PowerPointプレゼンテーションのファイル名を指定し、shapename には、図形の名前(図形の書式設定|代替テキスト|タイトル で指定した、図形のタイトル) を指定する。Sphinxで文書をビルドする時、プレゼンテーションが更新されている場合は画像を抽出してファイルに保存する。PowerPointがインストールされていない環境では、作成済みの画像をそのまま使用する。

動作環境

  • Python 3.3 ...
全て表示… コメント

動的型言語の使いどころ - その2 このエ
    ントリーをはてなブックマークに追加

先日、動的言語の使いどころ という記事を公開してしまった。公開して「しまった」というのは、じつはあの記事はもうしばらく寝かしてから公開するつもりで、まだ未完成だったためだ。なんで公開するつもりがないエントリが公開されてしまったかというと、エントリを更新してリポジトリにpushすると自動的にサイトが更新されるからくりを仕込んだのをすっかり忘れて、気軽に git push してしまったのだ。ということで、前のエントリで書いておきたかったことをもうちょっと書き足しておきたい。

私は Python を使ってはいるが、それでも、Python 使うやつとか馬鹿じゃねーの、と思うこともそれほど珍しくはない。特に、自分で Python を使うのと、他人が書いた Python アプリケーションを使うのはまったく別の話で、他人に対しては「Python 使うなよ」と言いたくなってしまう時もないではないのだ。

例えば、有名な Python製チケット管理アプリケーションの Trac というのがある。ここ数年は Trac を使っていないが、以前使っていた時には、Trac を管理するのがイヤでイヤで仕方がなかった。Trac は本体は比較的シンプルな機能しか持たず、いろんなプラグインで機能を拡張して便利に使えるタイプのアプリケーションだが、 本体のバージョンアップにプラグインがきちんと追随できていないことが多く、迂闊にバージョンアップしてしまうとあれが動くがこれが動かない ...

全て表示… コメント

動的型言語の使いどころ このエ
    ントリーをはてなブックマークに追加

型宣言というのは良い物だ。型が明確なら、実行速度は型情報がない場合と比べて100倍も200倍も高速になるし、エラーチェックだってできる。リファクタリングも簡単だ。

型がないほうがいいという人は、昔の、まだプロトタイプ宣言がなかった頃のCコンパイラでも使ってみるといい。静的型チェックの有り難みが身にしみることだろう。型宣言を書くのがめんどくさいったって、大したことはない。さすがにC++の型宣言はめんどくさかったが、autodecltype のおかげで楽になった。それでもめんどくさいというなら、Fortranでも使って i ではじまる変数名は宣言不要とか言って喜んでるといい。「暗黒の型宣言」とか言い換えて中二病気分を満喫するのもいいだろう。

しかし、動的な型システムの言語というのも、それはそれで良い物だ。現在、私の主力言語はPythonであり、そのメリットは日々実感している。動的型システムを使った開発スタイルのほうが、静的型システムを使った開発スタイルよりも私の目的には適しているからだ。

アプリケーション開発という面から見た時の、動的型言語のメリットとはなんだろうか。色々とあるが、システム開発全体のライフサイクルへ与える影響を考えると、「不具合のあるアプリケーションを実行できる」ということだと思っている。「そんなアプリ実行しねーよ」と思うかもしれないが、そんなことはない。開発中・修正中のアプリは全て不具合のあるアプリで、この期間中、我々はアプリをだましだまし実行しながら開発・デバッグを進めているのだ。動的型言語をつかうなら、この「だましだまし」のだましやすさを意識し、最大限に活用しなければ意味が無い ...

全て表示… コメント

OS Xの Vim で IME 制御 このエ
    ントリーをはてなブックマークに追加

Vimで挿入モードから抜ける時に英数入力に切り替える を参考に、KeyRemap4MacBook を使って、ESCを押したらIMEを抜けるように設定。元のままだと、Ctrl+[ で抜けた時に効果が無いようだったので、private.xml ファイルに設定を追加した。

<?xml version="1.0"?>
<root>
  <list>
    <item>
      <name>LeaveInsMode with EISUU(Terminal)</name>
      <identifier>private.app_terminal_esc_with_eisuu</identifier>
      <only>TERMINAL</only>
      <autogen>--KeyToKey-- KeyCode::ESCAPE, KeyCode::ESCAPE, KeyCode::JIS_EISUU</autogen>
      <autogen>--KeyToKey-- KeyCode::C, VK_CONTROL, KeyCode::C, VK_CONTROL, KeyCode::JIS_EISUU ...
全て表示… コメント

Python3 の数値型 このエ
    ントリーをはてなブックマークに追加

お前ら、Python3 だと、みんな大好き全角数字使えるの知ってた?

>>> int('100')
100
>>> int('100')
100
>>> int('100', 16)
256

ってことは、これがエラーになるのはバグじゃないか?

>>> int('FF', 16)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  ValueError: invalid literal for int() with base 16: 'FF'

追記

Jun Omae⁽⁻⁶⁶ʲ⁵⁾ さんの Tweet によれば

Python3 の数値型 http://www ...
全て表示… コメント