Skip to main content

ログ取得ツール

Pythonメモ:trは必須だろう

Pythonのstring.translatestring.maketransが情けないので、自分で少し書いてみた。stringmisc.py。デフォルトのstring.translateより少しはマシだと思う。

import stringmisc
print stringmisc.tr("a-z0-9", "A-Z2-90-1", "test0123")

結果は以下のようになる。

TEST2345

ドキュメントのかけらも書いてないのは申し訳ない。 Unicodeにも対応しているので、ひらがな←→カタカナ変換とか全角←→半角変換にも使える。たぶん、ROT13変換とかにも使えるのだろう。そういう、デフォルトの変換セットとか作っておこうかなぁ。 あと、PHPのtrは連想配列(Python用語だと「辞書」?)を引数に取ることができるが、これはstring.tr_array()という別関数にしてみた。連想配列のキーに正規表現を使うかそうでないかのフラグをつけて。ただ、これでもあんまり厳密じゃないんだよなぁ。Pythonの正規表現は意外にも最長マッチではないみたいで、re.split("(a|abc)", "abcde")['', 'abc', 'de']ではなくて['', 'a', 'bcde']になる。 trはre.subの繰り返しでは実現できないわけだから、あらかじめ作っておいてほしいよ。 PHPのtrを知ったときは目から鱗だった。そうだよ、そうなんだよ、と。 (追記) 2004-03-22 16:53 今さら気づいたんだけど、ちょっとバグっていた。range(ord(str[i-1])+1,ord(str[i+1])-1):じゃなくて、range(ord(str[i-1])+1,ord(str[i+1])):だった。-1はいらない。

時刻の設定

SPAMに分類される中にウィルスメールがたくさんあるのだが、いまどき日付が2002年1月17日になっているものがけっこうある。何かあった日だっけ?? 調べたら、1月17日は金色夜叉で貫一が忘れもしない恨みを覚えたあの日(hi-ho.ne.jp)らしい。…というのは関係ないな、たぶん。 これは恐らく、日付でソートされるメーラを騙して先頭に表示させるためかなんかじゃないかと思う。だったらむしろ、未来のほうがよくない? 2040年とかってやったら、もしかしたらバグるMTAやMUAがあるかもしれないね。

なんだろう、この疎外感は

季節はもう春である。 今日はずっと、妙な疎外感を感じていた。帰り道で理由を考えている間もそれは続いていて、平間銀座のテーマソング(?)にも、店の片づけをするオッサンにも、なんか妙に遠くの出来事のような感じがした。実はずっと図書館の中にいたことに気づいたからかとも思ったけど、どうも違うような気がする。 で、理由なんだけど、主に3つあるように思う。 1つは朝のとくだね!で小倉さんが触れていた、草加市で拾われたゴミの所有権の話だ。草加市で捨てられたゴミの中に2800万円の現金が入っているのを収集業者が見つけた。で、警察に届けた。草加市は市のものだと主張し、業者は持ち主が現われない場合も市にあげると言った。そして市に抗議がきた、という話だ。市はロクに集積場の管理もしてくれないのにカネの話になると途端に飛びつきやがって、という抗議だ。集積場までは住民(町内会)が管理している。うちのゴミ集積場のネットも町内会費で購入されている。集積場の場所は公園のそばだから土地としては川崎市(か中原区)のものかな。でも、家の前とか、回り持ちとか、市のものではない場合も多いのだ。ほとんどの場合は土地代も出してくれていないのではないかと思う。さらに、以前に集積場の問題で市に文句を言っても何もしてくれなかったとかって話が続いていた。なんか憂鬱な話だよね。 次に、今日は通勤で新聞を持っていくのを忘れた。階段を降りたところで気づいたが遅い。痛恨のエラーだ。よくやるけど(笑)。 もう1つ。春だからだ。コートが暑い。 ついで。さっき、Exilimに入れた覚えのないMP3が入っていた。いつの間に入れたんだろう。 春だし、タイトル変えようっと。 (追記) 2004-03-10 22:12 それで出た結論が「河童! 河童! 河童!」か…わけわからん。春先は暖かくなって変な人が多くなる時期だから、気をつけようと思う。 で、疎外感は自宅でカツオのたたきとトリ唐揚げを食ったら直った。こういうのは食い物のせいらしいよ。

来週の新製品:ソースバイナリパッチパッケージ形式

小さなパッチを当ててコンパイルして入れる…だけだとパッケージシステムで矛盾してしまうことになりかねない。 そこで、私はソースパッケージを持ってきて*.specファイルをいじってそのパッチ入りのパッケージにしてインストールする…という手順をいつも踏んでいる。これが、非常に面倒である。かと言って/usr/local以下に手コンパイルバイナリを入れる方法もあるが、これは昔やって破綻して懲りた。 で、今やっている「パッケージ+小さなパッチ」→「パッケージ」化の作業を自動化できないかな、と思った。バイナリからソースへのポインタが張ってあれば、ソースにパッチを当ててリビルドしてバイナリを実行できる場所に置く…というのが自動化できるような気がする。 つまり、/bin/lsへのパッチがあったのでユーザがそれを当てたくなったとして、/bin/lsはcoreutilsとかfileutilsに入っているものなので…というのを検索して(rpm -qfで可能)、coreutilsやらfileutilsのソースを見つけだしてパッチを当てて再コンパイルしてできたバイナリをインストールしてパッケージシステムに登録する…というのを自動化できると思ったのだ。…「つまり」以下が余計にわかりにくくなっているが(笑)。 けっこう画期的な気がする。ユーザからの見た目はバイナリパッチのようであって、中身がソースパッチであることを隠蔽するのだ。 実装方法としては、rpmbuildコマンドを改造して、コマンドラインだけで*.src.rpmや*.specにパッチを追加できるようにするのがいいかなぁ。rpmbuildよりも上位でやったほうがいいかな。悩ましい。 でも、小さなパッチをあっちこっちで作って配っているという文化じゃなくなってるんだよね、最近は。残念なことだ。 まあ「パッチ」とさかんに言っているが本命はバージョンアップだ。software-0.1-1.{nosrc,src}.rpmとsoftware-0.2.tar.gzからsoftware-0.2-1.{src,i686}.rpmを作る、というのを自動化できるだけでだいぶ違うと思うんだよな。自分でバラしてsoftware.specの中身をいじってrpmbuild -bb software.specして、rpm -Uvh software-0.2-1.i686.rpmする、というのを、rpmbuild –rebuild software-0.1-1.src.rpm –withver=0.2 –installとかだけで実行できれば労力は激減するだろう。 (追記) 2004-03-10 14:09 そういう意味ではrpmbuild -tb software-0.2.tar.gz(*.specが*.tar.gzの中に入っている)というのも一つの解ではあるな。あれは非常に楽だ。いい加減な*.specもあるからけっこう困るんだが。

Pythonメモ

Pythonで文字列から文字コードを求めるのはord()という関数である。逆に文字コードから文字(列)を求めるのがchr()だとされている。…であるからして、

chr(ord(str[0])) == str[0]

は常に真であるように思える。しかし、違う。ord()がUnicodeに対応しているのに対し、chr()は対応しておらず、chr()の引数は0〜256の範囲しけ受けつけず、範囲外の値が渡されるとValueError例外を投げてしまうのだ。 これを回避するには`u"%c" %(val)を使う方法しか私は知らない。

u"%c" %(ord(str[0])) == str[0]

はだいたい常に真のようである。 chr()の引数に文字コード情報がないというのが間違いではないかと思う。`

君の傍で (高岡亜衣)

この系統はけっこう好きなんだな。GIZA系(…という表現でいいのか?)。 この曲はAvril Lavigneの曲に日本語の詞をつけたのかな、と漠然と思っていたのだが違うらしい。入りが似てる曲があった気がする。 「傍」を「そば」と読ませるよりは「かたわら」のほうが情緒があるような気がする。ミスチルの「掌」もミスチルのことだし「て」じゃなくて「たなごころ」なんだろうなと思って期待していたのに、「て」「てのひら」だったので残念だったことがあるのを思い出した。いくら言われようと、日本語入力で「掌」を変換させようとしたら「たなごころ」と入力したほうが速いぞ。

古人の敗北

FedoraのlessはLESSCHARSET=japanese-eucにするとinvalid charset nameが出て動かなくなっている。これは非道だろう。ここはlessを削除してlvに移行するべき。さすがFedora。 ただlvには「F」コマンド(いわゆるtail -fの動作)がないんだよなぁ。 というわけで、少し試行錯誤して作ってみました。なんかメッセージ行が消えたりする未完成パッチですが、一応動作はしてるみたいです。これでlessを捨てられる人も多いはず。 lvはiconvよりも良い文字コード変換フィルタみたいな使い方もできるし、lessよりも細かい面で使いやすかったりするので重宝している。特にlessは検索が遅いんだよな。同じような正規表現なのに。BM法を使っていないのだろうと勝手に思っている(その思いが正しいのかどうかはわからない)。 (追記) 2004-03-10 15:31 なんだよ、lv-4.51には最初からF(CommandPoll)が入ってるのか。さすがにちゃんと書いてある。騙された。恥ずかしい。 とりあえず、Fedora Core 1のlvがいずれ4.51以降にアップデートされることを願う。

残り31分

歩くやつの続き。今日は寄り道せずに高速に歩いて帰ってきてみた。GLORY DAYS(175R)のリズムで歩いていたから、私を見た人は「ああこの人は相当急いでるんだろうな」と思ったことだろう。汗びっしょりだ。こんな日はビールがうまいに違いない。 で、タイムはちょうど40分だった。あの速度で40分ということはやはり3kmよりは少し長いのだろうと思う。信号待ちがあるにせよ。 真のランナーにはあと31分縮めなければならない。道は長いな。