Django に興味津々なんだけど、1 回ぐらい 0 から作ってみるのもいい勉強になるはず、と思って、今は Python と MySQL だけ使って Web アプリケーション的なものを作っているところ。
で、Web アプリケーションって要するに、
1. データベースに問い合わせて、ふさわしい形式に変換して表示する
2. ユーザの行動を、後で参照しやすい形式でデータベースに保存する
の 2 点に尽きるのではないか。
というのが今の感想。

2007.09.30 Sun l Python l COM(0) TB(0) l top ▲
Cookie に関しても、知らないことが多すぎてヘコむ。
Python や MySQL も難しいけれど、Web アプリケーションを作るのに不可欠な HTTP のプロトコルとかも、意外に知らないことに気づいてヘコむ。

ブラウザに保存させている Cookie を無効にするには、 expires を過去の日付にすればよい。 たとえばこんなふうに。
import Cookie, os
c = Cookie.SimpleCookie( os.environ.get("HTTP_COOKIE",""))
c["name"]["expires"] = "Tue, 1-Jan-1980 00:00:00 GMT"
print "Content-type: text/html"
print c
print 

...

2007.09.28 Fri l Python l COM(0) TB(1) l top ▲
標準 MySQL 改訂第 3 版を買ってきた。
本業の方がだいぶ落ち着いてきたので、改めて MySQL を勉強しようと思う。

まだざっと読んだだけだけれど、知らないことが多すぎて、
それなのになんとなく分かったつもりになっていた自分に驚いている。
あいまい検索の LIKE とか、そもそも INDEX についてもよく知らなかった。
無知の知とか言う以前のレベルだ…。恥ずかしい。

追記:
FOREIGN KEY についても、なんとなく知っているだけだったけど、
これを読んで今、理解した。
2007.09.27 Thu l ちょっと前に読んだもの l COM(0) TB(0) l top ▲
大勢の人の価値観は Web 2.0 とか集合知とかで分かるかもしれないけれど、何が正しいのかは判らない。特に専門的な領域について素人の知識を集めても、集まった知識は「素人が犯しがちなよくある間違い」になる可能性がある。だから「素人は引っ込んでいろ」と専門家が言いたくなる気持ちは理解できる。
でも、「素人は引っ込んでいろと言うのか」といってくる人々に満足してもらうためとはいえ、その間違っている素人の主張を受け入れてしまう専門家なんていらない。素人の誤解を、素人の機嫌を損ねないように正して、素人に満足してもらう。それができない専門家は、素人から見て存在する意味がない。
で、昔の素人を納得させるのは簡単だったけど、最近の素人は「素人は引っ込んでいろと言うのか」とか言い出してメンドクサイから、dankogai曰く、玄人は

1. 口のうまい営業を挟む -- 染之助・染太郎方式
2. 自ら口もうまくなる -- ホンダディーラー方式

のどちらかを選べ。ということなんじゃなかろうか。

要するに、専門家が正しいことをするためには、専門家が素人に正しいことを正しいと思わせなくてはならない。間違った素人が束になって声を上げ始めたら、専門家にとっても素人本人にとっても不利益だから、そうなるまえに手を打つ必要があるんだけど、手を打てるのは専門家だけで、専門家っていうのは弁護士も医者もエンジニアも例外じゃないよってことか。

なんか最近はやってるらしいので、この辺を読んで自分なりにまとめ。
http://blog.livedoor.jp/dankogai/archives/50916417.html
http://benli.cocolog-nifty.com/la_causette/2007/09/post_ebe1.html
http://d.hatena.ne.jp/comumikaze/20070922/1190472250
http://d.hatena.ne.jp/NOV1975/20070922/p4

(誤字があったので修正しました。)
2007.09.24 Mon l ちょっと前に読んだもの l COM(4) TB(0) l top ▲
このへんの情報で、Mercurial というものを知った。

Pythonで分散バージョン管理
さくらインターネットでmercurial
分散バージョン管理
Mercurial で手軽な共有レポジトリをつくろう

Subversion をさくらのレンタルサーバにインストールしようと思って試行錯誤してたけれど、こっちのほうが簡単そう。Python で書かれてるらしいし、CGIで動作させるのも簡単そうで、期待度大。

ちなみに、これを Ubuntu Linux にインストールするには
sudo apt-get install mercurial
で一発OK。version 0.9.3 がインストールされる。最新版は 0.9.4 みたいだけど、とりあえずはこれでいっか。
2007.09.23 Sun l Python l COM(0) TB(0) l top ▲
洗濯機を回してる間に、Python を使って、やっつけで CMS もどきを書いた。
いままでの昔の遺産を引き継ぎつつ、
管理をウェブベースのインターフェースでやりたい。という
身内の要求に応えるためだ。

とにかく、難しいのはイヤだ、ということなので、
今までの静的なコンテンツはそのまま使えて、
もちろん RDBM なんかは使わないで、
作業をしたらすぐに静的コンテンツに反映されて、
パスワードもいらなくて、
200 行程度の CGI ファイル 1 つで完結させる
という無茶な制限のもとで、とりあえず動くレベルのプロトタイプを作った。

あとは後輩がよきに計らってくれるのを期待したい。
っていうか要求が無茶すぎる。

ちなみに洗濯機は3回、回した。天気が良くてよかった。
2007.09.16 Sun l Python l COM(0) TB(0) l top ▲
ナンクロ用の漢字検索プログラム へ青空文庫から新たにデータを追加した。
今回追加したのは、有島 武郎やアンデルセンらの作品で約60作。

この作業をやっていて初めて 有島 武郎 という人を知った。
なんか明治時代の小説家にありがちなパターンな人生というか、
男前で、英語の教師をしたりして、命懸けの恋愛をして、
最期は自殺する、という人生。彼はそんな人生を送った人の1人。

自殺するのは嫌だけれど、死ぬ程の恋愛ってどんなのだろうかと
ちょっと興味はある。
でも小説家は女性がらみじゃなくても自殺しそうだから、
普通の人なら死ぬ程の恋愛じゃなくても自殺するのかも。
あくまで勝手なイメージというか、偏見だけど。

俺は男前でない時点で、このレールには乗れない。
残念だ。
2007.09.15 Sat l Python ナンクロ l COM(0) TB(0) l top ▲
Python の正規表現で、以前に出てきた表現を使うには、
グループを使うとよい。

たとえば "(?P<a>.).(?P=a)." という正規表現は、
"一日一善" にはマッチするけれど、"一日千秋" にはマッチしない。

今日は勢いでナンクロの自動ソルバーを作り始めてみた。
ナンクロの自動ソルバーを作るためには
データベースから言葉を拾ってくる必要がある。
そのために正規表現を使って検索しようと思ったんだけれど、
うまくいかない。

たとえば番号のならびが [1] [2] [1] [3] になっているときに、
ここに入る四字熟語は
(条件1.) 3種類の漢字を使っていて
(条件2.) 1文字目と3文字目が同じになる
必要がある。ところが "(?P<a>.).(?P=a)." という正規表現を
使って検索すると(条件1)を満たさない熟語までマッチしてしまう。
つまり、欲しいのは「一日一善」みたいな四字熟語だけなのに、
「一歩一歩」みたいな四字熟語も拾ってきてしまう。
正規表現を "(?P<a>.)(?P<b>.)(?P=a)(?P<c>.)"にしてみても
もちろんダメで、困ってしまった。

しかたがないので、この部分は正規表現をあきらめて
自分で作ったのだけれど、なんかいい方法はないのだろうか。
2007.09.12 Wed l Python ナンクロ l COM(0) TB(0) l top ▲
Googleの面接試験、一体どのような質問をされるのか?を読んで、
海賊の問題をやってみて、

自分なりに解いて


海賊が1位と2位の2人だけの場合
1位がどんな提案をしても、2位はそれに反対すれば、金貨の全てが手に入る。
したがって1位は0枚、2位は100枚。

海賊が1位と2位と3位の場合。
どちらか1人が賛成すれば、1位の提案は通る。
1位の提案が通らない = 2位と3位だけが残る = 2位は0枚、3位は100枚
だから、2位は1枚以上もらえるなら賛成するべき。
したがって1位は99枚、2位は1枚、3位は0枚。

海賊が1位と2位と3位と4位の場合
2人が賛成すれば、1位の提案は通る。
1位の提案が通らない = 2位と3位と4位が残る = 2位は99枚、3位は1枚、4位は0枚
だから、2位は100枚全部もらえない限り、賛成するべきではない。
だから、1位が生き残るには3位と4位の賛成を集めるしかない。
したがって、1位は97枚、2位は0枚、3位は2枚、4位は1枚。

海賊が1位と2位と3位と4位と5位の場合
2人が賛成すれば、1位の提案は通る。
1位の提案が通らない = 2位と3位と4位と5位が残る = 2位は97枚、3位は0枚、4位は2枚、5位は1枚。
最低の金貨で票を集めるには、3位と5位に賛成してもらう。
したがって、1位は97枚、2位は0枚、3位は1枚、4位は0枚、5位は2枚。


というメモを書いておいたのだけれど、
ヒントと合わないので「おかしいなぁ…」と思っていたら、
西尾泰和さんのブログで、

「98%」というヒントは、問題を訳した人が間違えたか、問題を作ったGoogleの人が間違えたか、もしくは「ヒントと自分が考えた結果が食い違ったときに、自分の考えを捨ててヒントにあわせた答えをひねり出すのか、それとも自分の考えの正しさを信じてヒントが間違っていると考えるのか」を観察するために意図的に入れられたブラフだろう。


を読んでヘコむ。意図的に入れられたブラフから、自分の論理を信じる弱さを暴かれてしまった。

しかも、自分のメモと西尾さんの解答の途中が少し違ってて、
どこが違うのかとよく見てみたら、俺は無意識に海賊のプライオリティを
「もらえる金貨が0枚で生き残る」よりも
「後で殺されるけど、一時的に1位の海賊になる」の方が高いと
思い込んでいた。自分の虚栄心の強さを暴かれてしまった。

そのあとで、鵜飼さんのブログで、

面接についてはいろいろ面白い話があるけど具体的にいえないのが残念。ちなみにSoftware Engineer では、こんな問題 はだしません。 What to expect from your Google interview を見ましょう。
FizzBuzz問題が簡単すぎるという人はいろいろなバリエーションを考えてみるといいかも。例えばこういうの

* 制限を加える(ループを使わないで書く、剰余を使わないで書く、…)
* printせず list にしてかえす
* FizzBuzzをテストするプログラムを書く
* 3とか5がパラメータ化されているとして、出力からそのパラメータを調べる


を見つけた。当り前だけど英語は必須で、
その他コードを書くようにいわれたり、
今までやったことを専門的に話すように言われたりするらしい。
もう寝る。
2007.09.11 Tue l 未分類 l COM(0) TB(0) l top ▲
RetroTubeというサービスを知った。
このサービスを、このテレビから使ってみたい。
レトロなテレビ


っていうか、この違和感のなさは何なんだ。
2007.09.10 Mon l ちょっと前に読んだもの l COM(0) TB(0) l top ▲
Concatenative な言語とは Concatination できるプログラム

複数のプログラムを Concatination する、とは、
そのプログラムが意味している機能を合成することだ。
あるプログラムの後に別のプログラムをコピペしても、
全体として意味があるプログラムになって、
なおかつその実行結果は、最初のプログラムの出力を次のプログラムの入力として
扱った結果になる。

まとめとして、あるプログラミング言語が Concatinative であるならば、
1. Concatenative で正しい式は、基本的には、引数 1 個で返り値 1 個の単項演算子。
2. X と Y が正しい式ならば、X と Y の concatination も正しい式。
3. Z が X と Y の concatination ならば、Z の値は X と Y の値の concatination

意味不明。

ようするに

2 7 +

は 「2 と 7 をスタックに積んで、"+"演算子がそれを 9 に置き換える。」という
意味のプログラムだけど、そこに「スタックを受け取って 9 を足す」という意味の別のプログラム

9 +

をコピペして

2 7 + 9 +

にしても意味が通るよね。だからこんな言語は Concatinative だよ。

...ということらしい。

「Concatinative って分かりにくいから、 Stack-based って呼ぼうよ。」という流れもあるらしい。

http://en.wikipedia.org/wiki/Concatenative_programming_language より。

LLSpirit の後で調べたんだけど、書くのを忘れてたこと。
2007.09.06 Thu l ちょっと前に読んだもの l COM(0) TB(0) l top ▲
何を捨てて,何を残すのか.
それだけが唯一,大掃除をするときに判断が必要なこと.

その判断を下すために,何を考えればいいのか.

それは,「残す」ということは「将来の自分に与える」ということ.
将来の自分に与えたいものは,残す.
そうでないものは捨てる.
そうやって考えると,たぶんうまくいく.

そうではなく,「必要なものは残す」と考えてしまうと,
何も捨てられなくなってしまう.
どうしてもこの考え方から離れられないときは,せめて,
主語を「将来の自分」とか「理想の自分」に変換して,
「理想の自分が必要とするものは残す」と考えるとうまくいくかもしれない.

昨日,今日と大掃除をしていて感じたことを,ライフハック風にメモしておく.
2007.09.05 Wed l 未分類 l COM(0) TB(0) l top ▲
芥川龍之介の作品153作を、ナンクロ用漢字検索に追加してみた。 これで他の著者もあわせて約400作が登録されたことになった。 そのかいあってか、ナンクロ10月号の漢字の問題は、なんとか全部解答できた。 さぁ、明日は月曜日だけど、飲もうか。
2007.09.02 Sun l Python ナンクロ l COM(0) TB(0) l top ▲