複数バージョンの Perl をインストールして、簡単に切り替えながら使えるツールとして perlbrew
というプロダクトがある。今回 OS を再インストール(CentOS 5.6)したついでに perlbrew
及び、これの Python 版である pythonbrew
を使ってみた。
Category Archives: python
keyhac で Emacs 風ショートカットを定義する
キーカスタマイズソフト keyhac において、“複数のキー入力へアクションを割り当てる”ことが可能になっていた。要するにこれは、Emacs 風のショートカットを実現するためのものだ。
from keyhac import * def configure( km ): # グローバルキーマップ kmg = km.defineWindowKeymap() # “切り取り”は C-W に退避させておく kmg[ "C-W" ] = "C-X" # マルチストローク設定 kmg[ "C-X" ] = km.defineMultiStrokeKeymap() # 開く kmg[ "C-X" ][ "C-F" ] = "C-O" # 上書き保存 kmg[ "C-X" ][ "C-S" ] = "C-S" # 名前をつけて保存 kmg[ "C-X" ][ "C-W" ] = "A-F", "A" # 終了 kmg[ "C-X" ][ "C-C" ] = "A-F4"
これにより、Control を押下したまま、XC と順に叩いてウィンドウを閉じることができる。さらに応用として、
【Perl, Python】日本の祝日の一覧を取得する
とかく日本は祝日の多い国である。しかも祝日となる日付は毎年異なり、その法則も他国のように単純なものではない。
2007 年(平成 19 年)からは国民の祝日が合計 15 日となった。これは先進国では最多であり、「ワーカホリック」ともいわれる日本の意外な一面でもある。
http://ja.wikipedia.org/wiki/国民の祝日
Perl の場合
Perl で祝日判定を行うならば Calendar::Japanese::Holiday
モジュールが使いやすい。
Calendar::Japanese::Holiday – search.cpan.org
http://search.cpan.org/~kztomita/Calendar-Japanese-Holiday-0.03/lib/Calendar/Japanese/Holiday.pmPerl 祝日名の取得 – とみぞーノート
http://wiki.bit-hive.com/tomizoo/pg/Perl%20%BD%CB%C6%FC%CC%BE%A4%CE%BC%E8%C6%C0
インストールは次のコマンドを打つだけだ。
Windows(ActivePerl)の場合
C:\> ppm install Calendar::Japanese::Holiday
Linux、Mac OS X 等の場合
$ cpan -i Calendar::Japanese::Holiday
keyhac で簡単なマクロを作ってみる
keyhac を使ってキー配列をいじるスクリプトを紹介してきたが(その 1、その 2)このソフトではキーボードやマウスを使ったマクロを書くこともできる。今回は簡単な例として、Putty + GNU Screen での例を書いてみる。
Putty + GNU Screen でウィンドウを簡単に切り替える
GNU Screen で複数のウィンドウを切り替える場合は“コントロールキャラクタを押した後に数字キー”という操作を行う。具体的には、
- Control + Z を押す1。
- Control + Z を離す。
- 3 を押す。
これで 3 番のウィンドウに切り替わる。毎回 Control を離す動作が面倒なのだ。これを、単に Control + 3 だけで切り替わるようにしたい。
config.py
(部分)
def configure( km ): km_putty = km.defineWindowKeymap( exe_name = u"PUTTY.EXE" ) for i in xrange( 10 ): km_putty[ "C-" + str( i ) ] = km.command_InputKey( "C-Z", str( i ) )
2 行目では特定のプログラム(PUTTY.EXE
)でのみ有効なキーマップ(km_putty
)を得ている。そして 4 行目がキモ。command_InputKey
メソッドは引数に並べたキーを順に押した場合と同じ効果を得るための関数を返す。
このスクリプトを使うと、Putty + GNU Screen な環境で Control + 0 ~ 9 を押すと、0 番~ 9 番のウィンドウに切り替わるだろう。
【Python 事始め】404 エラーを補足する
指定された URL からファイルをダウンロードする方法を「【Python 事始め】進捗を表示しながらダウンロードする」に書いたが、ここで使った urllib.urlretrieve
関数はダウンロードできなかった場合(404 エラー等)でも問題なく終了してしまう。これを回避するには次のようにする。
How to catch 404 error in urllib.urlretrieve – Stack Overflow
http://stackoverflow.com/questions/1308542/how-to-catch-404-error-in-urllib-urlretrieve
urllib.FancyURLopener
の http_error_default
メソッドをオーバーライドしたクラスを作成すればよい。
【Perl, Python】シュワルツ変換あるいは優雅なる DSU
「【Perl, Python】map、grep、sort の比較」に続き、map
、sort
を使って高速なソート手法であるシュワルツ変換を書いてみよう。
シャチ泳ぎとシュワルツ変換 – perl-mongers.org
http://perl-mongers.org/2008/05/schwartzian_transform_and_orcish_maneuver.htmlSchwartzian transform – Wikipedia, the free encyclopedia
http://en.wikipedia.org/wiki/Schwartzian_transform
シュワルツ変換とは、ある配列の要素をそれぞれの属性値に従ってソートする場合、一度属性値を全て計算した配列を作ることでソートを高速化することを言う。
……と、言葉で説明してもアレだし、例を挙げてみよう。次のように、九州の各県の人口を表したテキストファイルがあるとする1。
kyushu.txt
エンコーディングは UTF-8 とする。
長崎県 1,478,632 人 佐賀県 866,369 人 福岡県 5,049,908 人 熊本県 1,842,233 人 大分県 1,209,571 人 宮崎県 1,153,042 人 鹿児島県 1,753,179 人 沖縄県 1,361,594 人
これを人口の少ない順に並べ直し、次のような出力を得たい。
佐賀県 866,369 人 宮崎県 1,153,042 人 大分県 1,209,571 人 沖縄県 1,361,594 人 長崎県 1,478,632 人 鹿児島県 1,753,179 人 熊本県 1,842,233 人 福岡県 5,049,908 人
【Perl, Python】map、grep、sort の比較
Perl で言う、map
、grep
、sort
を Python で表すと次のようになる。
Are Python list comprehensions the same thing as map/grep in Perl? – Stack Overflow
http://stackoverflow.com/questions/1418912/are-python-list-comprehensions-the-same-thing-as-map-grep-in-perl