<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>西尾泰和のブログ</title>
      <link>http://www.nishiohirokazu.org/blog/</link>
      <description>NISHIO HIROKAZU&apos;s Blog現在Jython本執筆中～</description>
      <language>ja</language>
      <copyright>Copyright 2007</copyright>
      <lastBuildDate>Fri, 28 Sep 2007 01:26:24 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=3.34</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

            <item>
         <title>ルノアール執筆日記</title>
         <description><![CDATA[<p>
7時半に自然起床したのにいつものようにだらだらして9時からシャワー。
その後ウェブって11時半秋葉原着。あーあ。
<p>
18時20分にリフレクソロジーの予約を入れた。
<p>
ACアダプタ忘れたorz
<split><p><a name='20070927224038' href='#20070927224038'>
= 
</a>
取ってきた
<split><p><a name='20070927224046' href='#20070927224046'>
= 
</a>

リフレクソロジー。
<p>
もっと「ぎゃー、いたたた」というのを期待したのだが、
すっかり寝てしまった。
<p>
物足りないので足用マッサージ器を色々試した。
<a href="http://www.sanyo.co.jp/koho/hypertext4/0403news-j/0308-1.html"> 温熱でポカポカ！　エアーと指圧で1日の疲れを足からほぐす フットマッサージャー「アシェステ」新発売</a>。
これがよかった。

<split><p><a name='20070928003030' href='#20070928003030'>
= 
</a>

From Scala To Ruby読んだ。両方の言語の勉強になった。

<split><p><a name='20070928011941' href='#20070928011941'>
= 
</a>

<a href="http://www.kajisoku.com/archives/eid1760.html">⊂⌒⊃｡Д｡)⊃カジ速≡≡≡⊂⌒つﾟДﾟ)つFull Auto | モスバーガーのきれいな食い方教えれ</a>
<p>
頑張って書いた(Twitterに）かっこをたくさん使った文章がTwitteriに送ったのに
なぜか送られていないことになっていたので（ログにでない)悲しいけど思い出して
もう一度書いてみようとか頑張って思い出してみた(ついったーもうやめようかな)：
「レッテル張り(ゆとりとか)
では説明できない(意図的としか思えない）かっこつけ(「格好」じゃなくて括弧のいみで
(っていうかわかるよね、わかれ。)の巧妙さから思う(主観だけど)にこれはいくらなんでも
意図的に(わざと難しく)難読かしている(んじゃないかと思う(っていうか思いたい)
とこの(記事を呼んだ時に）思ったんだけど真似をして(かっこをいっぱいすかって）
書いた文章をといったーにPOST(投稿のことね)したらなぜかスルー(ステータスが更新されなかった)
されてしまってとても悲しい(twitter嫌い)。
<p>]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/post_334.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/post_334.html</guid>
         <category></category>
         <pubDate>Fri, 28 Sep 2007 01:26:24 +0900</pubDate>
      </item>
            <item>
         <title>明日から夏休み日記</title>
         <description><![CDATA[<a href="http://www.nicovideo.jp/watch/sm1058796">ニコニコ動画(RC)‐ラクガキ王国で初音ミクを作ってみた。</a>
<p>
ラクガキ王国ってここまでのことができるようになっていたのか。２で？
１では無理だよなぁ。
<p>
<a href="http://www.nicovideo.jp/watch/sm1076517">ニコニコ動画(RC)‐私にもネギふらせて～！</a>
<p>
上と同じ曲。
この曲はいったい何だろう。
<p>
(この上の文章は17日くらいに書いたかなり古いもの。Ievan Polkkaが曲名)
<split><p><a name='20070926190832' href='#20070926190832'>
= 
</a>
ついにガスを止められた。
<p>
ガス代払ったつもりだったのに、払ったのは電気代だったようだ。違うかも。
そもそも両方自動引き落としにしたはずなのに、
なぜ毎月コンビニで払っているのかよくわからない。

<split><p><a name='20070926190923' href='#20070926190923'>
= 
</a>

払って電話したら即日開栓。

<split><p><a name='20070926191024' href='#20070926191024'>
= 
</a>

でも今日は錦糸町のサウナ付き温泉に行くと決めたんだったら決めたんだ。
<p>
明日は秋葉原の喫茶ルノワールで一日執筆。そのためには早寝早起き。
<p>
リフレクソロジーしてみたい。ふくらはぎとかつちふまずとかをもみほぐして欲しい。
どこがいいお店なのかわからないけど、
とりあえず場所の覚えやすいヨドバシアキバの上のお店に行ってみよう。
<p>
あと髪の毛を切る。

<split><p><a name='20070926223629' href='#20070926223629'>
= 
</a>

サウナいった。1時間1000円。3300円でオールナイト。
寝る場所もありました。
なんかすごい茶色いお湯が出ていて、天然だって書いてあったけど本当かなぁ。
ぬるぬるしてた。サウナ暑くて死にそう。
背中を流すおばあさんがいて420円。
あかすりが何千円か。
カーテンの向こうでごそごそしているので具体的にどういうことをされるのかわからなくて怖い。
<p>
背中にアートのある人もいっぱい。
<p>
ボディケアって書いてあるの何かと思ったらマッサージのことらしい。
<p>
その後せっかくなので何か遊ぼうと思ってカラオケに入ってみた。
「会員証かOIOIのカードはありますか」といわれたのでカードを見せたら、
なんか法人会員扱いになって1時間で504円だった。OIOI謎。
<p>
まっくら森の歌を3回歌ったんだけども音程が難しい。]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/post_333.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/post_333.html</guid>
         <category></category>
         <pubDate>Wed, 26 Sep 2007 23:54:33 +0900</pubDate>
      </item>
            <item>
         <title>初めてのDjangoで11日でどう書くorgを作るひとりごと日記</title>
         <description><![CDATA[サイボウズラボのサイボウズOffice掲示板でやっている
「西尾のひとりごと」スレ(<a href="http://www.itmedia.co.jp/bizid/articles/0707/17/news021.html">ITmedia</a>)からDjango関係の文章を抽出してみる。実際はこれの4～5倍くらいの書き込みがある。
<p>
まとめ記事にしてブログに載せようとか思いつつほったらかしなので、
このまま埋もれてしまうよりは雑然とでも公開した方がいいかと思って。
<p>
Lingrログとかとあわせて整理されて
<a href="http://www.ueblog.org/mediawiki/index.php?title=Django">Django - UeblogWiki</a>
に載るかも知れない。整理するの大変だろうなぁ(自分では整理するのを諦めた)

<hr><a href='howm#20070618' id='howm#20070618'>
= 西尾のひとりごと 2007-06-18
</a>

<pre>
はてさて
当初の予定では

GRINEditは今日でいったん保留にして
金曜日までに露木さんに教えてもらったDjangoのプログラムを参考に
「どう書く」プログラムのプロトタイプを作って、
金曜日からのPython合宿でいろいろ教えてもらって
その次の土曜のPython Workshop the Edge 2007までにベータ公開

という無謀なスケジュールを頑張ってみる予定だったがどうなることやら。
</pre>

<hr><a href='howm#20070619' id='howm#20070619'>
= 西尾のひとりごと 2007-06-19
</a>

<pre>
はっ。
今1時間時計を読み間違えていたことに気がついた。
道理で11時に来たはずなのに人が少ないと思った。
==========
・Django
・PySqlite
・sqlitebrowser
　<a href="http://sqlitebrowser.sourceforge.net/index.html">http://sqlitebrowser.sourceforge.net/index.html</a>

いれた
==========
エントリーがタグを不定個数持つってのは
エントリーの一覧のテーブルと、
タグの一覧のテーブルと、
「エントリーとタグの対」のテーブルが必要なのかなぁ
==========
> Choice.objects.filter(poll__pub_date__year=2005)

これで[c for c in Choice.all if c.poll.pub_date.year == 2005]になるそうな。

==========
モデルリファレンスにちゃんと多対多の方法とかも書いてある

from django.db import models

class Person(models.Model):
    name = models.CharField(maxlength=30)

class Tag(models.Model):
    caption = models.CharField(maxlength=30)
    
class Code(models.Model):
    author = models.ForeignKey(Person)
    tags = models.ManyToManyField(Tag)

って書くと

BEGIN;
CREATE TABLE "app1_code" (
    "id" integer NOT NULL PRIMARY KEY,
    "author_id" integer NOT NULL REFERENCES "app1_person" ("id")
);
CREATE TABLE "app1_person" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(30) NOT NULL
);
CREATE TABLE "app1_tag" (
    "id" integer NOT NULL PRIMARY KEY,
    "caption" varchar(30) NOT NULL
);
CREATE TABLE "app1_code_tags" (
    "id" integer NOT NULL PRIMARY KEY,
    "code_id" integer NOT NULL REFERENCES "app1_code" ("id"),
    "tag_id" integer NOT NULL REFERENCES "app1_tag" ("id"),
    UNIQUE ("code_id", "tag_id")
);
COMMIT;

ってのが生成される
==========
やっぱり内部的に「エントリーとタグの対」のテーブルを作るんだなぁ。
==========
Codeの方にmodels.ManyToManyField(Tag)と書いておけば
CodeオブジェクトのAdmin画面でタグを選べる
逆にすればTagのAdmin画面でそれの付いているCodeオブジェクトを選べる
管理が直感的な方を選べばいいらしい。
==========
おおお、なんと、スクリプトを修正したら勝手に読み込み直してくれてるじゃん！＞Djangoサーバ
==========
＞＞＞
Pygments 0.8
Pygments is a syntax highlighting package written in Python.
(中略)
and it highlights even Brainfuck!
＜＜＜

ちょっｗ
==========
Pygmentsでシンタックスハイライトを無効にするにはエイリアスをtextにすればいい(と思う
==========
なるほど
{% extends "base.html" %}
しておいて
{% block main_contents %}ほげ{% endblock %}
ってやれば
base.htmlのなかのmain_contentsブロックが「ほげ」で置き換えられるのか。
==========
Pygments ― Python syntax highlighter
<a href="http://pygments.org/">http://pygments.org/</a>

どう考えてもタイトルまずいと思う。
それじゃPythonの構文(だけ)をハイライトするみたいだ。
==========
んー。文字化け問題の原因。

print r'あ'

って入力したときに

"print r'\xe3\x81\x82'"

って入って

u'&lt;table>&lt;tr>(中略)r&#39;\xe3\x81\x82&#
39;(以下略)

という形でデータベースに直されているけども、
これはUTF-8の文字コードが1バイトずつに刻まれてしまっている。

==========
シンタックスハイライトを掛ける直前で
        self.code = unicode(self.code, 'utf-8')
ってやったら化けなくなった。
==========
thinkpadのシフトキーが取れてしまったorz
==========
CommentとCodeとを分けて
CodeはCommentを0/1個持つ、というつもりで
CommentへのForeignkeyを持たせてNULLでもOKにしたが

それじゃCommentの親が「CommentまたはCode」ってのを表現できない…

親クラスが一つのテーブルになって、
もし形の違うオブジェクトが入りたければその差分だけ別のテーブルにしてForeignkeyかな
==========
トラックバックとコメントも同列に扱いたいんだよなぁ
==========
あんまり漠然とした状態でこだわってもしかたないや。
とりあえずプロトタイプを金曜までに作るんだ。
==========
</pre>
<hr><a href='howm#20070621' id='howm#20070621'>
= 西尾のひとりごと 2007-06-21
</a>

<pre>
Djangoの汎用ビューは、汎用のビューだ。
でDjangoのビューはMVCのVじゃない。
やっと理解した。
==========
間違えやすい綴り
マニピュレータ？まにゅ？
コミュニケーション？こみにゅ？
シミュレーション？しゅみ？

コミュニケーションはコモンとかコミューンと同じ語源か。

シミュレーションはカタカナ表記だとよく間違えている人がいるけど
英語の字面として
simulation
sumilation x
どちらが正しいって言われると間違える人が少なそうだ。

manipulator
manupilator x
annihilator
accumulator

comminute
comminucate x
communicate

この辺はエロい
==========
django-modeは色をつけてくれるだけでインデントまでは面倒見てくれないのか！
<a href="http://unicoders.org/code/hacks/trunk/django-mode.el">http://unicoders.org/code/hacks/trunk/django-mode.el</a>
めっちゃ短いし！

でも逆に言うと、ちょこっと色をつけるくらいなら簡単ってことか。
＞＞＞
; Hacked together following instructions from the rather awesome: 
; <a href="http://two-wugs.net/emacs/mode-tutorial.html">http://two-wugs.net/emacs/mode-tutorial.html</a>
＜＜＜
どういう構文になっているのかよくわからないけど
「チュートリアル見ながら作ったらおもったよりあっさり(うまく)できた」ということなんだろうか
fromが何をしているのかよくわからない…

==========
インデントをバックスペースで削る際に
自動で{{ endfor }}とかを補ってくれたらいいのになぁ。
==========
おなかすいたすいたすいた
==========
■　お題に対するコメント一覧
■　コメントの追加
■　匿名での投稿
　□　匿名ユーザーはguestアカウントでもいいんじゃないだろうか。スパムよけにもなるかもだし。

明日から3日間で作るものを再確認
優先順位は後で決める

□　ユーザアカウントの作成
□　コードの投稿
□　新しい言語タグをユーザが追加できるように
□　トラックバックで投稿できるように
　□　トラックバックされた元のサイトのデータを取得
　□　最後のPREを投稿されたコードと見なす
　□　どこをコメントと見なす？
　□　HTMLを直接書けないブログサービスでうまく投稿できるかどうか
□　フィード
　□　新着お題
　□　新着解答
　□　言語指定での新着解答
□　レーティング
□　ユーザページ
　□　それまでの解答一覧
　□　いろんな統計情報
□　言語のページ
　□　解答一覧
　□　統計情報
□　お題タレコミページ
　□　この言語でこう書けるけど他の言語ではどうだい？ってのの収集「perlだとperl -e "$a='z';print ++$a;"でaaって出るけど…」
　　・名前は「挑戦状」
□　タグ
　□　Python2.4 Python2.5
　　□　自由な文字列をつけさせる？


□　Djangoのホスティングサービスはどこがいいのか聞いてくる
□　検索は？他のDjango使いは検索をどうしている？

ドメインはdoukaku.jpを取るか、それとも
doukaku.orgを取ってja.doukaku.orgにするか(Wikipediaみたいに)
コードは万国共通語だし。


==========
トラックバックで収集するのはコードだけって方針でいいかも。
その代わりサイトに載せるのもコードの部分だけにする。
コメントを書きたい人は自分で書けばいい。
==========
(ト書き：この週末(金、土、日)は第一回Python温泉)
</pre>

<hr><a href='howm#20070625' id='howm#20070625'>
= 西尾のひとりごと 2007-06-25
</a>

<pre>
SAKURA.AD.JP // 専用サーバ － さくらの専用サーバ
<a href="http://www.sakura.ad.jp/services/dedicated/sakura_dedicated/plans/">http://www.sakura.ad.jp/services/dedicated/sakura_dedicated/plans/</a>

FreeBSDとFedora Coreとどっちがいいのかなぁ。
どういう違いがあるのかよくわからない。
==========
*.jpにこだわる理由が全くない上に
すでにgettextでi18nしてあるので
doukaku.orgだけを取ってja.doukaku.orgで運用します。
# きっと英語が間違いだらけだけど…
==========
走り出してからモデルの変更をするのは面倒だから
明日レーティングの機能まで実装してしまおう。
==========

</pre>
<hr><a href='howm#20070626' id='howm#20070626'>
= 西尾のひとりごと 2007-06-26
</a>

<pre>
SAKURA.AD.JP // ニュース
<a href="http://www.sakura.ad.jp/news/archives/20070620-001.news">http://www.sakura.ad.jp/news/archives/20070620-001.news</a>

「さくらの専用サーバ」お申込受付け停止のお知らせ

orz

==========
(ト書き：山口さんの自宅サーバに間借りさせてもらう)
==========
とりあえず丸ごとコピーしてみたけど
さすがにすんなりとは動かないみたい…

==========
サーバの中で新しくプロジェクトを作ると動くので、
空っぽのプロジェクトを作って中身をコピーしてみよう。
==========
・Pygmentsをインストールした。
・自分で修正したdjango.db.backend.utilをコピー
・サーバ実行
→truncate_nameがないって怒られるけど、truncate_nameなんて文字列がそもそもソースコードに現れないぞ？むむむ？
==========
わかった
僕がWindows版に入れた方はリビジョン5482だけど
最新版は5519なんだな。
で自前パッチを当てたdjango.db.backend.utilにtruncate_nameって関数が新たに追加されている。
Windows側でソースをgrepしてもtruncate_nameが見つからないのはそのせい。
サーバ側でgrepしたら見つかった。

時々手元のDjangoをupdateしないといけないんだな。
手元でコンフリクト解消したutil.pyをサーバ側に上書きしてめでたしめでたし。


Exception Value:        list index out of range

えー。
==========
わかった。
データがまだないからトップページで最新のデータを表示しようとしてこけてるんだ。

Windowsではfixtures(データベースに最初につっこむデータ)を普通のUTF-8で書いておいても大丈夫だけど、FedoraCoreではダメみたい。で、さっき\u0000形式に変換したんだけども、変換後のを読み込ませるのを忘れていた。

読み込ませたらトップページ出たー
スタイルシートが読まれていなくて真っ白。
==========
ファイルの置き場所を~nishio/…と指定してはいけなかった。/home/nishio/…にしたらうまく行った。

==========
おおー
WinSCP3ってディレクトリの同期ができるんだー
便利。
==========

</pre>
<hr><a href='howm#20070627' id='howm#20070627'>
= 西尾のひとりごと 2007-06-27
</a>

<pre>
gmailからのメール送信にかんしては
ウノウラボ Unoh Labs: Pythonでメールを送信したい人のためのサンプル集
<a href="http://labs.unoh.net/2007/06/python_2.html">http://labs.unoh.net/2007/06/python_2.html</a>
が参考になりました。
==========
doukaku.orgのスタイルシートがIEで見るとうだうだな件は
諦めてシンプルなフォーマットにしよう
==========

</pre>
<hr><a href='howm#20070628' id='howm#20070628'>
= 西尾のひとりごと 2007-06-28
</a>

<pre>
レーティングの機能はつけた。あとは何がいるだろう
□　コメント投稿時にPREかそのままかを選べるように
□　意見要望送信フォーム
□　いろんな英語の所を翻訳(アカウント登録周り)
==========
ネットワーク系のコマンドを覚えるの巻

アクセスログはどこだろう
・アクセスログは/var/log/httpd以下にあった。sudoしないとlsできない

tailしたら末尾だけでちゃった
・tail -fする

<a href="http://doukaku.org/">http://doukaku.org/</a>にアクセスしたけど404で、アクセスログに記録が残ってないや
・hostsを書き換えなきゃ。
　・C:\WINDOWS\system32\drivers\etc\hosts
・IPアドレスがわかんないや
　・ping -a ***.org

・doukaku.orgにトライ
＞OperationalError at /
＞unable to open database file
さっきとエラーが違うじゃん…
何これ…

とりあえず目の前のエラーをつぶすか…

==========
DEBUG=Falseしたら見えるようになった。謎。

==========
DEBUG=Trueに戻しても見えるorz

</pre>
<hr><a href='howm#20070629' id='howm#20070629'>
= 西尾のひとりごと 2007-06-29
</a>

<pre>
(ト書き：奥さんにDNSの設定をしてもらう。設定の都合上、何も頭につかない「doukaku.org」を使うのは面倒という話に)

==========
www.doukaku.orgとja.doukaku.orgとどっちがいいかなー
==========
了解です。どうもありがとうございます。

僕のウェブアプリ側ではBASE_URLの値を書き換えるだけでいいのでja.doukaku.orgにしておきます。
www.doukaku.org宛のアクセスをdoukaku.orgに正規化している設定ファイルがどこにあるのかわからないので
それだけ山口さんにお願いします。
==========
i18nむずかしいなぁ
何がむずかしいって
Djangoのmake-message.pyを呼んだときに
拾ってくれるものと拾ってくれないものがあったり
テンプレートの中の翻訳文字列は引用符で囲まれる必要があるけどもバックスラッシュでエスケープされない点とか

ぜんぶDjangoが悪いような気もする
==========
あとエラーメッセージの表示している行が実際の行と100行くらいずれたりする。
aって入れてパースエラーを起こして前後関係から問題の一を絞り込む。
==========
SQLiteは全文検索できる
GoogleGearのバックエンドはSQLite
Djangoのloaddata, dumpdataを使えばJSON形式でシリアライズできる
クエリにexplainってつけると細かい情報が見られる
SQLiteでもできる(読んでもいまいちわからないけど)
==========
(ト書き：6月30日、Python Workshop the Edge 2007でこういうのを作っています、とちょろっと話す)

(ト書き：なぜか聞いていた人数よりはるかに多いはてなブックマークが付いてホットエントリーに。Web2.0怖い)
</pre>
<hr><a href='howm#20070702' id='howm#20070702'>
= 西尾のひとりごと 2007-07-02
</a>

<pre>
申請したりメール書いたりしてたらもうこんな時間かー
Doukakuが、怖くて触りづらい。
==========
</pre>
<hr><a href='howm#20070703' id='howm#20070703'>
= 西尾のひとりごと 2007-07-03
</a>

<pre>
ぐは
はてぶで目立ったせいで5000PVになったけど、
もうトップページから外れたからPV下がっただろうと思ったら
昨日一日は10000PVだった。
==========
by 竹迫 良範
オレンジニュースで紹介されてましたよね。
==========
人の口に戸は立てられず…

</pre>
<hr><a href='howm#20070704' id='howm#20070704'>
= 西尾のひとりごと 2007-07-04
</a>

<pre>
Google AnalyticsをなんどもGoogle Analysticと打ってしまう。

==========
JavaScriptメモ

$$("a[href]").join(" ")
$$("input[type=checkbox]").forEach(function(e){e.checked=false})

$x("/html/body")
$x("//input")

console.log
console.debug

==========
やっとDjangoで自動テストが出来るようになったー！
まだGETで200かどうかのチェックしか書いてないけど
これはいい。

問題はテストに結構時間がかかることか。
これは仕方ないのか。
==========
GETのテストはさておき、
POSTのテストはちまちま手で打つのはめんどくさい。
ブラウザ操作するとテストケースが出力されるようにならないかな
</pre>
<hr><a href='howm#20070705' id='howm#20070705'>
= 西尾のひとりごと 2007-07-05
</a>

<pre>
時刻が9時間ずれているのはGMTなんだろうなぁ。
どうしようかなぁ。
==========
>> POSTのテストはちまちま手で打つのはめんどくさい。 

>perlがインストールされている環境であれば（Windowsでも）GETコマンド、POSTコマンドがコマンドラインから使えます。

>form.submit(); 

ああっ、POSTを自分がブラウザで打ってテストするのが面倒ということじゃなくて、
テストケースに「POSTでどういう情報を渡すか」を自分で書くのが面倒ということでした。
POSTされたデータからテストケースを作ってコンソールに出力するコードを書いたので、
ブラウザで適当に書いてPOSTすると、コンソールにテストケースが出力されるようになりました。
後はそれをtests.pyにコピペして整形するだけ。

</pre>
<hr><a href='howm#20070706' id='howm#20070706'>
= 西尾のひとりごと 2007-07-06
</a>

<pre>
by 奥 一穂
GMT 問題については、クライアント側で時刻表示を生成するのもひとつの手です。

&lt;script language="JavaScript">
document.write(new Date([% unix_time %]*1000-new Date().getTimezoneOffset()*60000));
&lt;/script>
&lt;noscript>
[% time_in_gmt %]
&lt;/noscript>

とかこんな感じです。
==========
なるほど！
日本語のページだからといって読者のタームゾーンがJapanだとは限らないな…と悩んでいたところでした。
JavaScriptを使う方針でやってみます！
==========
メモ
for(var n in obj) console.log(n)
==========
C:\cur\vimcolorpy>c:\cygwin\bin\patch.exe -b VimColor.py vimcolor-utf8.patch
patching file VimColor.py
==========
うーん。
なんか疲れた感がたくさん。
doukakuの「新しいお題の投稿」を自動化しよう。

</pre>
<hr><a href='howm#20070709' id='howm#20070709'>
= 西尾のひとりごと 2007-07-09
</a>

<pre>
doukaku.orgでどたばたしていたけども
そろそろ本格的にJython本がヤバイらしい(汗)
==========
Django使い4人が全員「FedoraCoreよりFreeBSD」と言うのはなぜなんだろうか
==========
LL魂と未踏ユース成果報告会とがかぶっているorz

</pre>
<hr><a href='howm#20070710' id='howm#20070710'>
= 西尾のひとりごと 2007-07-10
</a>

<pre>
セカンダリネームサーバとは何なのかを勉強中
==========
ネームサーバは一つ止まってしまっても大丈夫なように複数立てる
→複数のサーバのデータを同期する必要がある
→プライマリのデータをセカンダリにコピーする


==========
コメント詳細画面からコメント編集画面へ移動するブックマークレットを作ってみた
javascript: location.href = location.href.replace("comment", "admin/doukaku/comment")

だけど、そもそもリンクを書き換えてくれる方がいいなぁ。

$$("a[href]").forEach(function(x){x.href=x.href.replace("comment", "admin/doukaku/comment")})

こうか。
==========
4問くらい後でこんな感じのお題を出そう

C:\django\doukaku_proj>perl
$a = "Y"; for($i=0; $i < 5;$i++){print $a++;}
YZAAABAC
==========

</pre>
<hr><a href='howm#20070711' id='howm#20070711'>
= 西尾のひとりごと 2007-07-11
</a>

<pre>
いつも持っている手提げ鞄を忘れた
でも、電車の中で読む本が入っているくらいだから大丈夫だと思ってそのまま来た
ビルの1階でカードキーがその鞄のポケットに入っていることを思い出したorz
==========
やっぱり削除や修正の機能は必要なんですかねぇ
==========
by 奥 一穂
投稿の質を高めるという意味では、修正機能はあってもいいと思います。
＃削除はいらないかも
==========
削除を実装したら、修正したい人は削除して投稿し直せばいいかなぁと…
人にコメントされた後でコメント元を書き換えるのはよくないと思うので、修正機能は「修正中に他の人が返信したので書き換えられません！」という機能をつけないといけないのが面倒かなと思いました。
==========
by 竹迫 良範
見ているほうからすると修正の過程が見えると勉強にもなることも。 
削除じゃなくって非表示フラグみたいなものでもいいのかも。
==========
>見ているほうからすると修正の過程が見えると勉強にもなることも。

なるほど。

>削除じゃなくって非表示フラグみたいなものでもいいのかも。

レーティングで沈めるというのも一つの手ですね
==========

</pre>
<hr><a href='howm#20070712' id='howm#20070712'>
= 西尾のひとりごと 2007-07-12
</a>

<pre>
FireBugの$$とかはブックマークレットで使えないけど、
Furebugのコンソールに決められた文字列を書き込むブックマークレットはできないかなぁ

==========
サーバを止めたつもりで止めてなかった…orz
データベースをいじってから上書きしたので
いじっている間の投稿が消えちゃったorz
アクセスログを見てもPOSTの内容は残ってないよなぁ…
もうどうしようもないか…（´・ω・｀）

==========
</pre>
<hr><a href='howm#20070713' id='howm#20070713'>
= 西尾のひとりごと 2007-07-13
</a>

<pre>
==========
Ajax勉強中

で、Ajaxでググってヒットしたものを見ていると
ブラウザの依存性によって異なるコードを自分で書いているので
Ajax ライブラリ 2007でぐぐった。

ウノウラボがヒットした。

役に立つウノウラボ。

<a href="http://jquery.com/">http://jquery.com/</a>
<a href="http://examples.learningjquery.com/rating/">http://examples.learningjquery.com/rating/</a>
<a href="http://mg.to/2006/01/25/json-for-jquery">http://mg.to/2006/01/25/json-for-jquery</a>
このあたりを使えばやりたいことができそうだ。
==========
あ、月曜休みなのか。
==========

</pre>
<hr><a href='howm#20070717' id='howm#20070717'>
= 西尾のひとりごと 2007-07-17
</a>

<pre>
<a href="http://adp.daa.jp/archives/000265.html">http://adp.daa.jp/archives/000265.html</a>

MTのテンプレートがやたらとDIVを二重にしていたのは
こういうことだったのか…
==========
スタイルシートが難しいということだけがよくわかった。
==========
jQuery勉強中
==========
スターレーティングは微妙にやりたいこととずれているので読んで改造するより自分で作る方が楽だと判断した。
==========
<a href="http://jquery.bassistance.de/api-browser/">http://jquery.bassistance.de/api-browser/</a>
==========
jQueryに値を渡すためにDjangoのカスタムテンプレートタグ作っててちっともAjaxの勉強になってない！
==========
$(".rating .button").click(function(){
  alert("hello");
  return false;
});
が動かないなぁと思ったら
$(document).ready(function(){
})
で包まないといけないのか…


お、動いた動いた。
==========
JavaScriptはデフォルトでグローバル変数なので
x = $(this);
って書いておけば$(this)の中身についてFirebugのコンソールでxって書いて中身をインスペクトできる。
==========
やばい、Django+jQueryが面白すぎる。
jQueryで

$.getJSON(url, function(json){...})

ってアクセスして、DjangoでPythonの辞書をstrで文字列化して

    return HttpResponse(str(some_dictionary))

と返したら、
コールバック関数の引数のjsonに
JavaScriptのハッシュとして入ってやがる！
なんだこのシームレスさは！
==========
そしてjson = {"hoge": value}の時、json.hogeでvalueにアクセスできるのか…。なんて楽ちんなんだ。
==========
やったー、できたー！初Ajaxー！
==========

</pre>
<hr><a href='howm#20070718' id='howm#20070718'>
= 西尾のひとりごと 2007-07-18
</a>

<pre>
昨日のまとめ

キバヤシ「Pythonは実はJavaScriptだったんだよ！」

その他「な、なんだってー　ΩΩ Ω」
==========
crontab -eしている最中についうっかりC-xC-cやってしまった。
固まった。
==========
>必要であれば，モデルに __str__() メソッドを定義してもかまいませんが，明確な理由がないかぎりそうするべきではありません．

がーん
全部__str__で定義しているよー
__unicode__を使うべきだったのかーーー
==========
ラボマシンでhoge.pyがhogeだけで起動できないのはなぜかと思ったらPATHEXTを指定していないからか。
==========
LivedoorReaderのソースコードを読んでいたのだけど
どこがスクロールのコードかいまいちわからない
==========
reader_main.jsの2005行目
        scroll_page: function(num){
                var h = $("right_container").offsetHeight - 40;
                var c = 
                        (Config.scroll_type == "page") ? h:
                        (Config.scroll_type == "half") ? h / 2 :
                        (Config.scroll_px || 100);
                $("right_container").scrollTop += c * num;
        },

==========
VimColorを使うには一度コードを外部にはき出す必要があるんだな。

<a href="http://ja.doukaku.org/comment/60/">http://ja.doukaku.org/comment/60/</a>
このコードもきちんとハイライトされることを確認した。
どうしようかなぁ。pygmentsと差し替えようかなぁ。

Windowsで動かないんだよなぁ、VimColor。
==========
ローカルでテストができなくなるんだよなぁ。VimColor。

とりあえずサーバが来てからにしよう。

==========
Windowsで動かない原因はここかも

"%s %s %s -s %s >/dev/null 2>&1"%(VIM_COMMAND, VIM_OPTIONS, filepath, shtemp)

Vimを適当なオプションで起動して、
ハイライトしたいコードとマークアップするためのVimスクリプトを渡し、
標準出力を捨ててエラー出力を標準出力にリダイレクト？
==========
ダメだなぁ、
そこらへんをいじってVimが起動されるようにはなったけども
出力されるはずのファイルが出力されない
VimスクリプトがWindowsのパス名を受け取ってエラーになっているとか、
そもそもCygwinのVimだとダメだとか
原因はなんだかわからないけども面倒そうだ。やめよう。
==========
自分のノーパソで動かすと30分かかったテストが
ラボマシンで動かすと2分かからなかった。
なんなんだその差は。

</pre>
<hr><a href='howm#20070719' id='howm#20070719'>
= 西尾のひとりごと 2007-07-19
</a>

<pre>
CSSを勉強した。
サイドバーが落ちてしまうのは、
サイドバーをマイナスマージンで上に重ねてしまえばいいのかも。

==========
ラボの性能のいいマシンでlinkcheckerを書けると
Djangoの開発用サーバが耐えきれなくてconection refusedの嵐
-t 2とやってスレッドを2個にしたら出なくなった(デフォルトは10個)
つぎは-t 6を試す。

==========
いまさら気がついたんだけども、
ラボマシンにDjango最新版を入れて、
コードをそれに併せて修正したのは間違いだ
今サーバで動いているのと同じバージョンを入れて、
レンタルサーバに乗り換えるときに新しいのにすればよかった
今からサーバの方のDjangoを新しいのにかえるか、どうするか…
==========
とりあえず仕方がないのでサーバ側のDjangoを最新版にしたいと思う
さて、どうしたものか…

まず
mkdir subversion
cd subversion
svn co <a href="http://code.djangoproject.com/svn/django/">http://code.djangoproject.com/svn/django/</a>
してみた。
しまった。djangoフォルダを作ってからにすればよかった。
==========
あ、勝手にフォルダ作られてた。よかった。

==========
/home/nishio/subversion/django/trunk/django

シンボリックリンクの引数の順番を間違えて二回やって循環参照になってしまった
削除してsvn upしたけど戻ってこない…
全部消してチェックアウトからやり直し

こんどは
svn co <a href="http://code.djangoproject.com/svn/django/trunk">http://code.djangoproject.com/svn/django/trunk</a>


==========
あれー。

＞＞＞
Mod_python error: "PythonHandler django.core.handlers.modpython"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 287, in HandlerDispatch
    log=debug)

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 464, in import_module
    module = imp.load_module(mname, f, p, d)

  File "/usr/lib/python2.4/site-packages/django/core/handlers/modpython.py", line 5, in ?
    from django.utils.encoding import force_unicode

ImportError: cannot import name force_unicode

==========
なんとかうまくいった。

==========
結局、サーバ上もローカルのもDjango本家から直接Subversionで取ってくるようになったので、
今後のアップデートやうまくいかなかったときの巻き戻しも簡単(なはず
==========

</pre>
<hr><a href='howm#20070720' id='howm#20070720'>
= 西尾のひとりごと 2007-07-20
</a>

<pre>
がーん
JSのreplaceは1個しか置き換えないのか

JS
>>> "aaaaabbbbbb".replace("b", "c")
"aaaaacbbbbb"

Python
>>> "aaaaabbbb".replace("b", "c")
'aaaaacccc'
==========
がーん、JSの正規表現は後読みをサポートしていないのか！
==========
>>> "<a href="http://ja.doukaku.org/comment/27/">http://ja.doukaku.org/comment/27/</a>".replace(/[^:\/]\//, function(m){return m + "admin/doukaku/"})
"<a href="http://ja.doukaku.org/admin/doukaku/comment/27/">http://ja.doukaku.org/admin/doukaku/comment/27/</a>"

こう書いた
==========
Sqliteの全文検索は仮想テーブルを使っている
Sqliteとsennaをつなぐこともできる
==========
でもMySQLつかうほうがいろいろ楽そうだなぁ。
==========
とりあえず検索して試すだけなら正規表現で全部をなめるのは簡単に実装できそう
とりあえずそれでいいかー。
サーバ移転の際にバックエンドをSQLiteからMySQLに変更しておくか。
まだデータベースに依存するようなコードは書いてないから簡単に移行できるだろうし。
==========
プロトタイプができたのにGETじゃないと検索結果にリンク張れないと思ってGETにしたり、
URLがかっこわるいと思って小細工したりしてしまった。
==========
冷静に考えると動くものができた時点でコミットしておくべきだったのに
変なことをして動かなくなって動くようにするのに時間がかかった
==========
どうしてローカルでは動くのにサーバでは動かないんだろう

==========
ローカルのPysqliteが2.3.2で
サーバのPySqliteが1.1.7だった
そういうことか
==========
yumの使い方を調べてみた
yum search python

＞＞＞
python-sqlite.i386                       1.1.7-1.2.1 
＜＜＜

いや全然古いからっ
==========
結局、PySQLiteやPythonやmod_pythonをまとめて最新版にするのは大変なので
新しいサーバに移転するタイミングで最新にすることに。
で、問題はPySQLiteかSQLiteのどちらかが古くて正規表現での検索ができないというところにあるので、
自分で正規表現で検索するように書き換えた。
6行書き換えるだけだったので戻すのも簡単。

とりあえずたくさんの人がアクセスすると負荷がすごそうだけど
社外秘で発表会の時に見せるくらいならできそうだ
==========

</pre>

<hr><a href='howm#20070723' id='howm#20070723'>
= 西尾のひとりごと 2007-07-23
</a>

<pre>
(ト書き：何気なくスルーしているけど26歳の誕生日)
</pre>
]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/django11org.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/django11org.html</guid>
         <category></category>
         <pubDate>Wed, 26 Sep 2007 18:16:56 +0900</pubDate>
      </item>
            <item>
         <title>未踏開発合宿日記その2</title>
         <description><![CDATA[会議についての会議の結果、羊が足りないという結論に達した。
<p>
実際を考えると生の構文木よりも
「マークの付いている『重要な』要素だけのツリー」
が得られた方がありがたいと思うのだけど、
とりあえず生の構文木。

<pre>
>>> MUL.match("123*45")
'123*45'/6
>>> r = _
>>> r.children
['123*'/4, '45'/2]
>>> r.children[0].children
['123'/3, '*'/1]
</pre>

Pythonの構文は、トークナイザの部分がインデント・デデントを判断しているみたいなのだけども、
トークナイザをパーサを分けるのは美しくないのでどうするか考え中。

<split><p><a name='20070923232137' href='#20070923232137'>
= 
</a>

アンサイクロペディアのPythonの項目が面白い。<a href="http://ja.uncyclopedia.info/wiki/Python">Python - アンサイクロペディア</a>
<p>
<a href="http://ja.uncyclopedia.info/wiki/%E3%83%91%E3%83%BC%E3%83%AB%E3%81% AE%E3%82%88%E3%81%86%E3%81%AA%E3%82%82%E3%81%AE">パールのようなもの - アンサイクロペディア</a>

<split><p><a name='20070923232855' href='#20070923232855'>
= 
</a>

見た目は唐辛子、ししとうなんだけどー。

<split><p><a name='20070924002452' href='#20070924002452'>
= 
</a>

AA-lib。CACA-lib。CUCU-lib。<a href="http://aa-project.sourceforge.net/bb/">BB</a>

<split><p><a name='20070924103515' href='#20070924103515'>
= 
</a>

ずっと黒い画面のターン

<split><p><a name='20070924113003' href='#20070924113003'>
= 
</a>

あああ。<a href="http://www.rubyist.net/~matz/20070912.html#p02">Matzにっき(2007-09-12)</a>より：

<blockquote>
<a href="http://livelogix.net/logix/index.html">Logix</a>
Pythonの文法を自由に再定義できるようにした新言語。またはPythonバイトコードを吐くマクロ処理系。
</blockquote>

これはPEGじゃないけど、やりたかったのはまさにこういうことだったんだ。先にやられたorz

<split>
<p>
Pythonの構文木も、生の構文木を綺麗な抽象構文木にするためには
別途トランスフォーマってのを走らせる必要がある。
<p>
僕のPEGでは簡単な数式がこんな複雑な構文木になってしまうので何か間違っているのではないかと悩んだが、
<pre>
>>> MATH.match("2*(1+3)+5")
'2*(1+3)+5'/9
>>> tree(_)
 '2*(1+3)+5'/9
   '2*(1+3)'/7
     '2'/1
       '2'/1
       ''/0
     '*(1+3)'/6
       '*(1+3)'/6
         '*'/1
           '*'/1
             ''/0
             '*'/1
           ''/0
         '(1+3)'/5
           '(1+3'/4
             '(1+3'/4
               '('/1
                 '('/1
                 ''/0
               '1+3'/3
                 '1'/1
                   '1'/1
                     '1'/1
                     ''/0
                   ''/0
                 '+3'/2
                   '+3'/2
                     '+'/1
                       '+'/1
                         ''/0
                         '+'/1
                       ''/0
                     '3'/1
                       '3'/1
                         '3'/1
                         ''/0
                       ''/0
             ''/0
           ')'/1
   '+5'/2
     '+5'/2
       '+'/1
         '+'/1
           ''/0
           '+'/1
         ''/0
       '5'/1
         '5'/1
           '5'/1
           ''/0
         ''/0
</pre>
Pythonでも生の構文木はかなりぐちゃぐちゃ
<pre>
>>> pprint.pprint(parse("2*(1+5)-3"))
['eval_input',
 ['testlist',
  ['test',
   ['or_test',
    ['and_test',
     ['not_test',
      ['comparison',
       ['expr',
        ['xor_expr',
         ['and_expr',
          ['shift_expr',
           ['arith_expr',
            ['term',
             ['factor', ['power', ['atom', ['NUMBER', '2']]]],
             ['STAR', '*'],
             ['factor',
              ['power',
               ['atom',
                ['LPAR', '('],
                ['testlist_gexp',
                 ['test',
                  ['or_test',
                   ['and_test',
                    ['not_test',
                     ['comparison',
                      ['expr',
                       ['xor_expr',
                        ['and_expr',
                         ['shift_expr',
                          ['arith_expr',
                           ['term',
                            ['factor',
                             ['power',
                              ['atom',
                               ['NUMBER', '1']]]]],
                           ['PLUS', '+'],
                           ['term',
                            ['factor',
                             ['power',
                              ['atom',
                               ['NUMBER', '5']]]]]]]]]]]]]]]],
                ['RPAR', ')']]]]],
            ['MINUS', '-'],
            ['term',
             ['factor', ['power', ['atom', ['NUMBER', '3']]]]]]]]]]]]]]]],
 ['NEWLINE', ''],
 ['ENDMARKER', '']]
</pre>
Pythonの方はトークナイザが走った後の「空白とかインデントとか処理済みのトークン列」を処理していることを考えれば、
PEGの方は(まだ盛り込んだ機能が少ないこともあるけど)比較的シンプル。
<p>
トランスフォーマが作る抽象構文木はこんな感じ
<pre>
>>> compiler.parse("2*(1+5)-3", "eval")
Expression(Sub((Mul((Const(2), Add((Const(1), Const(5))))), Const(3))))
</pre>
これは美しい。しかしこの美しい構文木に変換するためには
下のような超泥臭い作業が必要。
<pre>
def for_stmt(self, nodelist):
    # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite]

    assignNode = self.com_assign(nodelist[1], OP_ASSIGN)
    listNode = self.com_node(nodelist[3])
    bodyNode = self.com_node(nodelist[5])

    if len(nodelist) > 8:
        elseNode = self.com_node(nodelist[8])
    else:
        elseNode = None

    return For(assignNode, listNode, bodyNode, elseNode,
               lineno=nodelist[0][2]) 
</pre>
文法定義と抽象構文木化で似たような内容を書くのはばかげていると思うのだけども、どうすれば可読性を損ねたりせずに文法定義だけでこういうきれいなツリーを作れるだろうか。
<p>
とりあえず1+3だけで下のような木になってしまうのは、PEGのSequenceを二項関係だけで定義しているから。
僕のsimple_pegは本当にシンプルに作ってあるけど、Matcherを追加することで拡張できるようにしてあるから「任意のn個のSequence」を表現するMatcherを作ればいいと思う。
<pre>
'1+3'/3
 '1'/1
   '1'/1
     '1'/1
     ''/0
   ''/0
 '+3'/2
   '+3'/2
     '+'/1
       '+'/1
         ''/0
         '+'/1
       ''/0
     '3'/1
       '3'/1
         '3'/1
         ''/0
       ''/0
</pre>
<p>
すごく続きをしたいところではあるけども、
頑張って147行の英文メールを投げたおかげで(？)
日本語の化けないJython2.2.1rc1が出たので、
本当に化けないのかを確認するのが先。
]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/2_7.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/2_7.html</guid>
         <category>zakki(雑記)</category>
         <pubDate>Mon, 24 Sep 2007 20:19:07 +0900</pubDate>
      </item>
            <item>
         <title>未踏OB開発合宿1日目日記</title>
         <description><![CDATA[[2007-09-22 15:44]
<p>
アマゾンは本をきちんと整理して棚に直していない。
場所はコンピュータが知っている。
選ぶべきものを入力すると最短経路を答えてくれる。
<p>
棚を整理していないので、増やすときには適当に棚を追加して適当に本を入れればよい。
整理をしないからスケールする。
<p>
BtoBtoCのtoは右結合性。(BtoB)toCではなBto(BtoC)。
<p>
ブックマークレットでメニューをインサートして選ばせるくらいならば、
ライトユーザーにも使わせられる？
<p>
複数人で開発する際は、
「メソッドをアルファベット順に並べる」というルールにすれば、
並べる順を迷わなくなる。
<p>
SQLiteは本体のコードよりもテストのコードの方が多い。
<p>
キン肉マンは最初の方巨大化したりビームを打ったりする。
<p>
ドカベンは最初は柔道をしていた。
<p>
YouTubeやニコニコ動画のブームのおかげで、CDNが儲かった。アカマイとか。
ゴールドラッシュの時に儲かったのは金を掘りに行った人ではなくツルハシを売ったブラナン。
<p>
メールアドレスにtmpと入っている。これはむごい。
<p>
「ここ禁煙って書いてあるけど、半田付けはOKかな？」
<p>
アドエスではDirectXで書いたアプリがネイティブで動く。
<p>
アドエス用のGPSがあるがいいアプリがない。
<p>
トラックが通ると振動する会場。
<p>
電通大を通った人が6人。
<p>
カシオペアはアルマジロとつながる。
<p>
<a href="http://sashie.jp/sashieshow/">さしえショー</a>って赤塚さんだったのか。
<a href="http://www.itmedia.co.jp/news/articles/0708/31/news051.html">どんな文章も“紙芝居”にする「さしえショー」 - ITmedia News</a>
<blockquote>
フリープログラマーの赤塚大典さんが制作した。文章を句読点や改行部で分割し、形態素解析してキーワードとなる単語を抽出。「Yahoo！検索」の画像検索のAPIを活用し、その言葉に関連した画像を検索して表示する。
</blockquote>
<p>
Pythonコードリーディングが大ブーム。
<p>
SNYDER's ハラペーニョ
<p>
<a href="http://www.lingr.com/room/ileS0QezmKf">未踏チャット (at Lingr)</a>。
<p>
<a href="http://ustream.tv/channel/mitou-kaihatu-gasshuku/">Ustream.tv - mitou kaihatu gasshuku</a>
<p>
ごはん。
<split><p><a name='20070922212826' href='#20070922212826'>
= 
</a>
ご飯後一眠り→21時は起床
<p>
アクセルをかけるためにちょっとヘッドホンを使いますよ。

<split><p><a name='20070922223115' href='#20070922223115'>
= 
</a>

ノウハウ入出
<p>
出：
<blockquote>
コマンドプロンプトをUTF8にするには：
プロパティでフォントをラスタフォントからMSゴシックに変えてからchcp 65001
</blockquote>
<p>
入：
<blockquote>
コマンドプロンプトでF7で履歴メニューがでる
<p>
画面バッファの高さを大きくしておけば、
流れ去ったログが消え去りにくくなる。
</blockquote>
<split><p><a name='20070922233536' href='#20070922233536'>
= 
</a>
ぴかちふ謹製のモバイルモニタがすごくいい。
使わないときにはインテリアにもなる。
でも売ると壊れたときのサポートの労力が出るので売りたくないって。
<split><p><a name='20070923002308' href='#20070923002308'>
= 
</a>

今作っているパーサジェネレータは
テストをたくさん書く方針でやっている。
例外が投げられることをdoctestでどうやって表現するにはどうするんだろう。
<p>
ドキュメントにちゃんと書いてあった。
必ずFailっていう例外を投げるmatcherを書いた。
<pre>
class MatcherAlwaysFail(Matcher):
    """
    >>> MatcherAlwaysFail().match("foo")
    Traceback (most recent call last):
        ...
    Fail
    """
</pre>

<split><p><a name='20070923005928' href='#20070923005928'>
= 
</a>

初めてPythonのstaticmethodを使った。
古いユーザなのでこういう本質的でない機能ってあんまり知らない。

<split><p><a name='20070923011223' href='#20070923011223'>
= 
</a>

高速再生中のロイツマ

<pre>
Jatsu tsappari dikkali dallan
ヤッツッ ツァッパリ ディッカリ ダッラン
Tittali tillan titstan dullaa
ティッタリ ティッラン ティチタン ドゥラー
Dipidapi dalla ruppati rupiran
ディピダピ ダッラー ルッパティ ルピラン
Kurikan kukka ja kirikan kuu..
クリカン クッカヤ キリカンクー

Ratsatsaa ja ribirabi dil\
ラッツァッツァー　ヤ リビダビ ディル
la Beritstan dillan dillan doo..
ラ ラベリツタン ディラン ディラン ドゥー
A ba-ribbattaa baribarii\
アバリッバッター　バリッバリー
ba Dibi dibidibi disten dillan doo ←歌詞間違い？
バ ディビディビディスタン　ディッランドー

Ja barilla stillan deijaboo
ヤバリッ ラッ スティラン デイヤーボー
A daba daba daba daba dybjabuu,
ア ダバダバダバダバ デイビャブー
Baristal dillan suillan duubadag
バリスタゥ ディラン スイラン ドゥバダグ
Dagadaga duu duu deijadoo
ダガダガ ドゥードウー デイヤドー
</pre>

<split><p><a name='20070923012700' href='#20070923012700'>
= 
</a>

行きの電車の中であったメソッドをどこに追加していくかという話、
確かに複数人で開発している場合に、ソートしてからコミットするというのは
「複数人で開発している場合」にはいい戦略かとは思う。
<p>
一人でプロトタイプをがりがり作っている場合は、
小さいユーティリティ的なものを上に、
大きい「呼び出しもと」が下に来るように書いているという話。
僕はこれだったのだけども、この方法の問題点は、
脳の揮発メモリがこのプロジェクトの情報でいっぱいの時はうまく行くけども、
100行を超えて書いてしまうと後で読んだときに複雑に絡み合っていて解きほぐすのに苦労する点だ。
<p>
今回テストをきちんと書きながら進んでわかったのだけど、
テストを書くと挙動が明示されるから、Aを書いた後でBを追加したときに、
Aの挙動を変える必要が出たらテストも修正しないと行けなくなるんだ。
というわけでなるべくBを変更してもAを変更しないでいい設計にしようというバイアスがかかる。
これはルースカップリングだ。
<a href="http://c2.com/cgi/wiki?CouplingAndCohesion">Coupling And Cohesion</a>
<p>
例えば、「A / B」という表記で
<a href="http://ja.wikipedia.org/wiki/%E8%A7%A3%E6%9E%90%E8%A1%A8%E7%8F%BE%E6%96%87%E6%B3%95">解析表現文法 - Wikipedia</a>
のOrderedChoiseを表現できるようにしようと思うと、
AやBの基底クラスの__div__に書きたくなるわけだけど、
そういう機能追加を上に上がって書き足すのを避ける。
もちろんこうやって設計してできあがった上でパフォーマンス上の問題が出れば、
「PEGのOrderedChoiseは切り離せなくしても問題ない」
と言ってべったり貼り付けて高速化するかも知れないけど、
あくまで最初はルースカップリングにする。
<p>
というわけで基底クラスに注入してみた。
<pre>
class OrederedChoice(Matcher):
    """
    >>> m1 = ExactMatcher("foo")
    >>> m2 = ExactMatcher("bar")
    >>> (m1 / m2).match("barbaz").group
    'bar'

    """
    def __init__(self, m1, m2):
        self.m1 = m1
        self.m2 = m2

    def match(self, s):
        try:
            r = self.m1.match(s)
            return r
        except Fail:
            r = self.m2.match(s)
            return r

    @staticmethod
    def build(m1, m2):
        return OrederedChoice(m1, m2)

Matcher.__div__ = OrederedChoice.build
</pre>

<split><p><a name='20070923023832' href='#20070923023832'>
= 
</a>

__add__なんかの情報ってドキュメントのどこに書いてあるんだろう。
<p>
あった。
<a href="http://m-takagi.org/docs/python/ref/numeric-types.html">7 数値型をエミュレーションする</a>
<p>
深いところにおいてあるなぁ。

<split><p><a name='20070923034905' href='#20070923034905'>
= 
</a>

rimoの初音ミクチャンネルをBGMにするといいらしい(何が)

<split><p><a name='20070923032337' href='#20070923032337'>
= 
</a>

Lingrより。
<pre>
# 2:33am 26x26にしお
# 今日はPEG完成させて寝たい
# 明日Pythonのパーサを作って使い物になることを検証する
# 自分自身をパースできたら万歳

# 2:53am 26x26にしお
# あうー
# NotPredicateの実装ができて、テストを書いたら今日は終わりのつもりなのだけど
# いいテストが思いつかない 
</pre>

<split><p><a name='20070923032520' href='#20070923032520'>
= 
</a>

前回作ったときはいきなり正規表現を使うMatcherを使ったのでｇｄｇｄ。
短く書くための短い名前なんかもがんがん作ったのでｄｍｄｍ。
今回はあえて短い名前や正規表現を禁止してPEGパーサを作った。
<p>
明日は実際にこれを使ってPythonのパーサを書いてみて、
労力とかパフォーマンスとかを調べる。
労力が高いのは目に見えている( ExactMatcher("a")はないよねー )。
でも言語内DSLで変なトリックを使うのはダメだと思う。

<pre>
class NotPredicate(Matcher):
    """
    >>> a = ExactMatcher("a")
    >>> b = ExactMatcher("b")
    >>> c = ExactMatcher("c")
    >>> m1 = a + Optional(Ref("m1")) + b
    >>> Ref.m1 = m1
    >>> m1.match("aabbbb")
    'aabb'/4
    >>> m2 = b + Optional(Ref("m2")) + c
    >>> Ref.m2 = m2
    >>> m3 = AndPredicate(m1 + NotPredicate(b))
    >>> m3.match("aabbcc")
    ''/0
    >>> m = AndPredicate(m1 + NotPredicate(b)) +\
            OneOrMore(a) + m2 + NotPredicate(c)

    >>> m.match("aabbcc")
    'aabbcc'/6
    >>> m.match("aaabbcc")
    Traceback (most recent call last):
        ...
    Fail
    >>> m.match("aabbbcc")
    Traceback (most recent call last):
        ...
    Fail
    >>> m.match("aabbccc")
    'aabbcc'/6
    """
    def __init__(self, m):
        self.m = m

    def match(self, s):
        try:
            r = self.m.match(s)
            raise Fail
        except Fail:
            return Result(
                group = "",
                end = 0,
                rest = s
            )
</pre>

<split><p><a name='20070923033801' href='#20070923033801'>
= 
</a>
眠気ないなー。
378行。

<p>
350行に縮めた。文字列を消費しないマッチ結果オブジェクトを
Resultクラスのstaticmethodで生成するようにした。
UnaryOperatorクラスをmixinするようにした。

<pre>
class AndPredicate(Matcher, UnaryOperator):
    """
    (テスト13行)
    """
    def match(self, s):
        r = self.m.match(s)
        return Result.empty(s)
</pre>

テストの方が長い、わーい。

<split><p><a name='20070923035115' href='#20070923035115'>
= 
</a>

フタエノキッワッミッアッアッー
<p>
フ　タ　エ　ノ　キ　ワ　ミエ　ノ　キ　ワ　ミ　アッアッアー

<split><p><a name='20070923035209' href='#20070923035209'>
= 
</a>

クリカンクッカヤキリカンクー

<split><p><a name='20070923035801' href='#20070923035801'>
= 
</a>

<pre>
寝る前の間食は控えるべきである！
だがしかし！

　「駄菓子菓子！」
</pre>

<split><p><a name='20070923040225' href='#20070923040225'>
= 
</a>

<pre>
□　正規表現Matcher
□　PEGパーサ
</pre>

<split><p><a name='20070923043430' href='#20070923043430'>
= 
</a>

Ctrl+Alt+TABで開発合宿の隣の人の画面がいつでも見られるように。

<split><p><a name='20070923043903' href='#20070923043903'>
= 
</a>

29時。ぴかちふが玄関で酔いつぶれている。
未踏ユースOBから除名せざるを得ない。]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/ob.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/ob.html</guid>
         <category>zakki(雑記)</category>
         <pubDate>Sat, 22 Sep 2007 17:48:10 +0900</pubDate>
      </item>
            <item>
         <title>ノウハウの5レイヤー</title>
         <description><![CDATA[以前<a href="http://www.nishiohirokazu.org/blog/2007/08/4_1.html">西尾泰和のブログ: ノウハウの4レイヤー</a>というエントリーで下のように書いたが、それは間違いでした。お詫びして訂正します。
<p>
<pre>
スキル(ノウハウ)には最低でも4つのレイヤーがあると思う。
１：バッドノウハウ。
２：バッドノウハウを作るスキル。
３：バッドノウハウを取り除くスキル。
４：バッドノウハウを作らせないスキル。
</pre>
<p>
正しいのはこちら
<pre>
スキルには最低でも5つのレイヤーがあると思う。
４：知識がなくても直感的に使えるようなシステムを作れるスキル。
３：ノウハウを知らなくても使えるようにするラッパを作れるスキル。
２：問題を解決する方法を作り出し、ノウハウとして共有できるスキル。
１：ノウハウを習得し、適切なタイミングで使えるスキル。
０：ノウハウを見つけてブックマークするスキル。
</pre>
<p>
参考文献。
<p>
<a href="http://d.hatena.ne.jp/hayamiz/20070920/1190268883">日記を書く[・ _ゝ・]はやみずさん - 覚えてはいけないちょっと計算を早くするための小技</a>
<p>
<a href="http://b.hatena.ne.jp/entry/http://www.popxpop.com/archives/2007/09/10_14.html"> はてなブックマーク - 覚えておきたいちょっと計算を速くするための小技10 | P O P * P O P</a>
<p>
<a href="http://b.hatena.ne.jp/entry/http://www.jmuk.org/diary/2007/09/20/0"> はてなブックマーク - 君らは中学校で何を学んだんだ？ - val it : α → α = fun</a>
<p>
<a href="http://blog.livedoor.jp/dankogai/archives/50916062.html">404 Blog Not Found:君らはWebで何を学びたいんだい?</a>
<p>
学而不思則罔、思而不学則殆 --- 論語]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/5.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/5.html</guid>
         <category>zakki(雑記)</category>
         <pubDate>Fri, 21 Sep 2007 00:44:12 +0900</pubDate>
      </item>
            <item>
         <title>タンブラー転載日記</title>
         <description><![CDATA[この前のTwitter転載日記で、Twitterの内容をそのまま転載しても面白くないと理解した。
最低限時刻とかがないと「早朝まで起きていて徹夜明けテンションで会社に行く道すがらのひとりごと」ってのが伝わらないからただの変な人だ。(いや、そうでなくても変な人だ)
<p>
結局のところひとりごとツールはひとりごとなんだな。
<p>
タンブラーの方は「面白い情報引用ツール」として使っているので転載できるかな。
<p>
</h1>


<blockquote class="quote">
                                <big class="quote">“</big> Loituma Girl)とはロイツマの歌うフィンランド民謡『イエヴァン・ポルッカ』に日本のアニメ『BLEACH』のキャラクターである井上織姫が長ネギを回す4フレームのシーンを組み合わせたフラッシュアニメーションである。(略)オランダではSMS2.tvという企業が著作権保持者に連絡をとらずに携帯電話の動画として売ろうとしたことがあった。そのときには"Meisje met de Prei"（「ニラを持っている少女」）と宣伝された。ロシアではそのソングクリップを売っている。
                            </blockquote>
                            <span class="source"><p><a href="http://ja.wikipedia.org/wiki/%E3%83%AD%E3%82%A4%E3%83%84%E3%83%9E%E3%83%BB%E3%82%AC%E3%83%BC%E3%83%AB">ロイツマ・ガール - Wikipedia</a></p><p>初音ミクがネギを回しているのはこれが元ネタか。しかし、ワールドワイドな時代だなぁ。&nbsp;</p></span>
                        
                    
                    
                    
                    
                    
                        <div class="quote">

                            <blockquote class="quote">
                                <big class="quote">“</big> Jatsu tsappari dikkali dallan Tittali tillan titstan dullaa, Dipidapi dallaa ruppati rupiran Kurikan kukka ja kirikan kuu Rätsätsää ja ribidabi dilla Beritstan dillan dillan doo, A baribbattaa baribariiba Dibi dibidibi disten dillan doo Ja barilla stillan deijadoo A daba daba daba daba daba dybjabuu, Baristal dillan stillan duubadäg Dägädägä duu duu deijadoo
                            </blockquote>
                            <span class="source"><a href="http://en.wikipedia.org/wiki/Ievan_Polkka">Ievan Polkka - Wikipedia, the free encyclopedia</a><br><br>
歌詞あった。</span>

<hr>
タンブラーも手を加えないとそのままでばブログに使えない、でファイナルアンサー。
<p>
曲はこちら
<a href="http://pya.cc/pyaimg/pimg.php?imgid=29546">pya! 時の流れを忘れさせる時計</a>]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/post_332.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/post_332.html</guid>
         <category>zakki(雑記)</category>
         <pubDate>Thu, 20 Sep 2007 23:46:00 +0900</pubDate>
      </item>
            <item>
         <title>もじら24日記</title>
         <description><![CDATA[<a href="http://photozou.jp/photo/show/585/4816204"><img src="ttp://art6.photozou.jp/pub/585/585/photo/4816204.jpg" alt="jomei-shimasuta!" width="450" height="338" style="border:0" />(無意味に自重しました)</a>
<p>
<a href="http://www.flickr.com/photos/otsune/1387447797/">Mozilla24 on Flickr - Photo Sharing!</a>
<p>
眠い。
<p>
最初の20分でバッテリーがなくなったのでログはなし。
<p>
yukobaさんにさんざんPythonの処理系を書けとけしかけられる。あうたびに言われている気がする。
<p>
<a href="http://d.hatena.ne.jp/shi3z/20070911">shi3zの日記 - マシン語を知らない子ども達</a>
の正論に賛同して
「プログラミング言語というのは、その言語の処理系を実装して初めて「書ける」と言うのです。
プログラムが書ける、という状態は「処理系が書ける」という状態の延長線上にあるべきで、処理系を書けないということはその言語を理解していないということです。」
とか書こうと思ったけど面倒だからやめた。
<p>
♪僕らの名前を覚えて欲しい　機械語を知らない子供たちさ～
<p>
AutoPagerize+LDRize入れた
<p>
<a href="http://swdyh.infogami.com/autopagerize">AutoPagerize (swdyh)</a>
<p>
<a href="http://d.hatena.ne.jp/amachang/20070903/1188803339">IT戦記 - Firebug で XPath を簡単に試す方法</a>
<p>
AutoPagerizeのPythonドキュメント用のSITEINFOを書いてみた。
コンテンツがdiv class="content"とかで囲まれていれば楽だったのに、
body直下にずらずらおいてあったので困った。
//body/*[not(self::address)]でFirebugの$xではうまいこと取れたのに、
グリモンに書き込んだらうまく動かない。200行目くらいでpageがnullになっているために次のページを読み込んだ後で切り出しに失敗してターミネートされる。
//bodyにしても動かないから悩んだあげく、試しに//addressにしたら動いた。
謎だけど//bodyは使えないと判断して避けて実装。
<pre>
        {
            url:          'http://www.python.jp/doc/*',
            nextLink:     '(//a[@rel="next"])[last()]',
            insertBefore: '//address',
            pageElement:  '//div[@class="navigation"][position()=1]/following-sibling::node()',
        },
</pre>
<p>
LDRizeの方のSITEINFOも試しに書いてみた。
<pre>
      {
            domain:    'http://www.python.jp/doc/*',
            paragraph: '//tt[@xml:id]',
            link:      '//a',
            focus:     '',
            stripe:    true,
            height:    10,
      },
</pre>
XPathよくわかんないなー。
月曜日にamachangにいい参考資料がないか聞こうっと。]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/24.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/24.html</guid>
         <category></category>
         <pubDate>Sun, 16 Sep 2007 05:07:50 +0900</pubDate>
      </item>
            <item>
         <title>自縄自縛アートと503日記</title>
         <description><![CDATA[面白い。
<p>
via <a href="http://d.hatena.ne.jp/amachang/20070912/1189577446">IT戦記 - 忙しいとネットの話題についていけないなあ</a>
<p>
<a href="http://junnama.alfasado.net/online/2007/09/post_132.html">どんなに技術があろうと出来る人であろうと駄目なものは駄目、って誰かが言わないと。 (Junnama Online (Mirror))</a>
<p>
<a href="http://mala.nowa.jp/entry/fa12686ffd">辛辣インターフェース評議会 - amebloのフィードが酷い件</a>
は99%くらい技術的に価値のある指摘だけど、
最後の1行はやり過ぎだと感じる人もいる。(もちろん最初から「これはわざとだ」と思う人もいる)
<p>
でjunnamaさんはおそらく前者で、最初の1行は正論っぽい。
<p>
だけど個人ブログを会社に絡めた手口とか、言及先を明記しないスタイルとか、
本題と関係なさげな肖像権問題への言及とか、そういう周辺的なもののせいで
「<a href="http://b.hatena.ne.jp/entry/http://junnama.alfasado.net/online/2007/09/post_132.html"> はてなブックマーク - どんなに技術があろうと出来る人であろうと駄目なものは駄目。って誰かが言わないと。 (Junnama Online (Mirror))</a>」
こうなっている。
<p>
こういう一連の流れは、たとえて言うなら柱時計の振り子を右に押したら、
一旦左に振れて、それからまた右に振れるようなもの。
<p>
そう思って眺めていたら
<blockquote>
2007年09月12日 itkz itkz おげー！！ 駄目と言う暇があったら殺せ。503 を吐かない ameblo も、CSS Nite も、写真掲載も、全て周囲の人間から馬鹿にされてるんだよ。関係者が残らず死滅することで全てが解決する。</blockquote>
おおお、これは目から鱗。
右に振れたものを左に振るんじゃなくて振り子を折るか。その発想はなかった。
久しぶりに感動した。
<p>
でもまぁ、個人的には振り子がゆれるおかげで柱時計の針が進むんだから、
折らないでもいいんじゃないかなぁと思った。
そのためにわざわざゆらしたんだし。
<p>
続き：
<a href="http://mala.nowa.jp/entry/7c91e64fc0">辛辣インターフェース評議会 - アメブロのフィードが昨晩は403でしたけど、どう考えても503の方が適切</a>
<p>
どう書くorgは先日のサーバ移転の際にdjangoのURLマッピングの先頭に
「全てのパターンを『メンテナンス中』画面へ」ってルールを書き足して
古い方のデータベースに書き込まれたりしないようにしたのだけど、
今考えると、この方法ではフィードも巻き添えを食って「メンテナンス中(200)」になってるはずなんだよね。
せめてメンテナンス中画面は503を返すべきだったなー。

<split><p><a name='20070913020804' href='#20070913020804'>
= 
</a>
via オレンジニュース
<p>

<a href="http://chalow.net/2007-09-11-2.html">[を] ビジネス英会話がネットで無料で聴けるようになってた</a>
<p>
おお、僕もテキスト買おう。
買う前に聞こう。
<p>
<a href="http://beauty-cdn.oricon.co.jp/news/47919/">「なりたい顔ランキング」、1位は沢尻エリカ、新垣結衣 ダイエット・エステ・美容のオリコンランキング</a>
<p>
むう、全然ピンと来ない。

<split><p><a name='20070913022830' href='#20070913022830'>
= 
</a>

<a href="http://la.ma.la/blog/">最速インターフェース研究会</a>が
あんまり更新されないなぁと思ったら知らないうちに
<a href="http://mala.nowa.jp/">辛辣インターフェース評議会</a>ができてた件について。
さっきLDRに登録してで78エントリーあったのを流し読みしたけど、
やっぱりLDRのキー操作によるスクロールは優秀だと思った。
<p>
全部読み終わってからShift+SPACEで上にスクロールできることに気がついた。
<p>
あと最近「マイフィード」ってところ押すと消えてくれることに気がついた。
<p>
会社の広い画面でブログを見ると、
カラムが固定幅のせいで画面の1/3くらいしか使ってくれていないものがたまにあって、
でしかも字が小さくて読めなかったりするからホイールでぐぐぐっと文字を大きくすると
20文字で改行なんていう間抜けな状態になったりして、
いくらなんでも読みにくすぎるので幅の指定を外すJavaScript書こうかな、なんて思っていたけど、
LDRに登録して読めばいいんだな。
<p>
あとはフィードがなくてもLDRで読めるといいんだけどな(無茶苦茶言ってます)
<p>
PythonリファレンスとかDjangoオンラインドキュメントとかがLDRの操作で読めるといいなぁ。

<split><p><a name='20070913092610' href='#20070913092610'>
= 
</a>
<a href="http://market.radionikkei.jp/meigara/20070912_09.cfm">ラジオNIKKEI　KJnet | 銘柄情報 | １２日アニメ関連が高い、“麻生首相”関連先取りと</a>
<p>
ははは。と思ってブロッコリーの株価を見たら3ヶ月くらいずるずる下がった株が一気に上がってるｗ
<p>
っていうかプロダクション・アイジーって攻殻機動隊を作ったところ？

<split><p><a name='20070913094806' href='#20070913094806'>
= 
</a>

あ、揺り戻しあった。
<a href="http://junnama.alfasado.net/online/2007/09/livedoor.html">ご期待に沿ってマジレスするぜ。 (Junnama Online (Mirror))</a>
<p>
ありゃ。
自分が「ダメ」って言った文章を自分の言葉として(強調までして)使ってる。
何がしたいのかさっぱりわからなくなった。
<p>
当初の主張は「たとえ個人ブログであっても、特定企業の人間であることが明らかな場合、
会社の利益を考えて過激な表現は避けるべきである」ということだと思っていたのだけど、
ページトップで「アルファサード有限会社 代表」なんてリンク張ってあるこのブログも
その条件に該当するよね。本名まで付いてるし。
話の流れを知らずにこのページを見た人が
「無知で…」という表現がこのブログの著者本人の言葉だと勘違いする
「可能性はゼロではない」(この著者の言葉を借りれば)わけだし。
著者がブクマのページにリンク張らないし、元々のnowaの記事にもリンクを貼らないので、
可能性は結構高いのではないかとも思う。
<p>
会社のイメージを損ねないように、とか、金融機関はいろいろなところを見ているよ、とかはその通り。
で、一技術者が会社にとって不利益な発言をしたのなら首にすればいいだけだけど、
有限会社の代表が同じことをした場合に首にできるか、と考えると、
桁違いの効果があるような。
<p>
そういうことを「誰かが既に突っ込んでくれている」(著者の言葉)のだろうか。
であればいいんだけども。
<p>
「当事者は何も反応していなくて周囲がブクマコメントとかであーだこーだってのにマジレスすするのも何だかなぁと思いつつ。」なんて言いながら
ブクマコメントに対して反論しつつ
「外野は黙ってろ」って言うのも謎だなぁ。
「言いたいことを言わせろ、反論はするな」という意味？
でもそもそもmalaさんがアメブロが200を返すことを酷評した記事に関しては
自分も外野なのでは…。
「当事者は何も反応していなくて」って、そりゃあなたが外野だからでは…。
<p>
と、自縄自縛しまくり。
何がしたいんだろう。
新種の自縛アート？
だったらキャプチャに関する意見のところで
肖像権の問題のある部分も含めてキャプチャを取って紹介した方が面白いかも。]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/503_1.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/503_1.html</guid>
         <category></category>
         <pubDate>Thu, 13 Sep 2007 11:10:19 +0900</pubDate>
      </item>
            <item>
         <title>集中豪雨日記</title>
         <description><![CDATA[
豪雨だがアメダスを見ても1時間間隔で何も出ていない。
<p>
東京アメッシュというサイトを教えてもらった。
10分間隔で、地図上の解像度も高い。
<a href="http://tokyo-ame.jwa.or.jp/">東京アメッシュ</a>

<p>
<img src="/files/rain.png">

<p>
おおー。
僕の住んでいる周辺だけ豪雨だ(苦笑)

<split><p><a name='20070912013626' href='#20070912013626'>
= 
</a>

Twitterからぺた。user_timelineにpageを指定しても無視されているように思う。

<p class='twitter'>
<a href='#20070908132010' name='20070908132010'>=tw</a>
喫茶ルノワール劇こみ。プランBが必要だ。もばつい500エラー。むー。有隣堂で座れるかなぁ？座れた。
これはエラーで送れなかったぶん。
</p>
<p class='twitter'>
<a href='#20070908134309' name='20070908134309'>=tw</a>
携帯プラスついったー、という組み合わせはかなり僕の心の隙間を埋めるソリューションであった。後僕が満足するために足りないものは、ブログへの転載支援とコードを書く場合のマネジメントだ。後者はどう書くオルグを使う。
</p>
<p class='twitter'>
<a href='#20070909191531' name='20070909191531'>=tw</a>
総裁乃？印（１万円札）
 <br><img src='/img/mtw/20070910041521.jpg'>
</p>
<p class='twitter'>
<a href='#20070909191712' name='20070909191712'>=tw</a>
発券局長
 <br><img src='/img/mtw/20070910041701.jpg'>
</p>
<p class='twitter'>
<a href='#20070910004221' name='20070910004221'>=tw</a>
眠い
</p>
<p class='twitter'>
<a href='#20070910005521' name='20070910005521'>=tw</a>
五十二分スタート。今のところ余裕を持って間に合うペースだが最大の難関は永田町を寝過ごさないかどうかだ。
</p>
<p class='twitter'>
<a href='#20070910011858' name='20070910011858'>=tw</a>
クロスポストは何がクロスしているの？
</p>
<p class='twitter'>
<a href='#20070910012234' name='20070910012234'>=tw</a>
ににんがし。
</p>
<p class='twitter'>
<a href='#20070910012745' name='20070910012745'>=tw</a>
しまった。衝動的に変なことを口走ってしまうクチバシ姉妹。表面的には眠気が覚めてきたけど実は脳内麻薬でヒップホップなテンションにバンジー！
</p>
<p class='twitter'>
<a href='#20070910013248' name='20070910013248'>=tw</a>
モバイルついったーはよいサービスだ。電車でひとりどと言ってても職務質問されたりしない。あくまで表面上は携帯をいじるひと。いざるひと、いじるひと、いずるひと。日出ずる国のイグルー。のなかのピングー。
</p>
<p class='twitter'>
<a href='#20070910013633' name='20070910013633'>=tw</a>
僕が老衰で死ぬくらいの時代には脳に電極さして直接タイプできるといいな。こういうテンションで実況しながらサンズにダイブ！
</p>
<p class='twitter'>
<a href='#20070910014313' name='20070910014313'>=tw</a>
お、一つ手前の駅だ。気が付いたら。起きてて乗り過ごしたこともあるので要注意だ。あとユーチューブがヨウツベなら要注意は腰椎だ。人類にぎっくり腰の危険性を警告していたんだよ！！！
</p>
<p class='twitter'>
<a href='#20070910014349' name='20070910014349'>=tw</a>
永田町についったー
</p>
<p class='twitter'>
<a href='#20070910014747' name='20070910014747'>=tw</a>
ラボに着いたらコーヒーをのんで何か新しいことをしようをテンション
</p>
<p class='twitter'>
<a href='#20070910100224' name='20070910100224'>=tw</a>
おなかすいたので外に出たら雨だった。
</p>
<p class='twitter'>
<a href='#20070910101045' name='20070910101045'>=tw</a>
オクラとロロロそば
</p>
<p class='twitter'>
<a href='#20070910102519' name='20070910102519'>=tw</a>
携帯でなら食事の記録取れそうだ。
</p>
<p class='twitter'>
<a href='#20070910161032' name='20070910161032'>=tw</a>
名所江戸百景 両国花火
 <br><img src='/img/mtw/20070911011020.jpg'>
</p>
<p class='twitter'>
<a href='#20070910161251' name='20070910161251'>=tw</a>
名所江戸百景 大はしあたけの夕立
 <br><img src='/img/mtw/20070911011237.jpg'>
</p>
<p class='twitter'>
<a href='#20070911004906' name='20070911004906'>=tw</a>
まったく車軸を流すような。
</p>
<p class='twitter'>
<a href='#20070911004925' name='20070911004925'>=tw</a>
一番上の階なので天井から「ごごごごご」と音がします。
</p>
<p class='twitter'>
<a href='#20070911005543' name='20070911005543'>=tw</a>
アメダスの最新データが9時だ。1時間前。台風の時以上に降ってるけどウェブにそういう情報が見あたらない。やっぱテレビも必要か。
</p>
<p class='twitter'>
<a href='#20070911010002' name='20070911010002'>=tw</a>
傘を差しても無意味で駅まで歩くだけで膝からしたずぶ濡れになるのは間違いないくらいの雨なのにアメダスに映ってないのが悔しい。もうちょっとしたら10時だから更新される？
</p>
<p class='twitter'>
<a href='#20070911010152' name='20070911010152'>=tw</a>
落雷キター
</p>
<p class='twitter'>
<a href='#20070911010238' name='20070911010238'>=tw</a>
出社しないと間に合わない時間になったけど、これは様子見するしか。
</p>
<p class='twitter'>
<a href='#20070911010542' name='20070911010542'>=tw</a>
排水が間に合わなくなったと見えて道路の両脇の低いゾーンがさっそく50センチほど水没している、大丈夫かここｗ
</p>
<p class='twitter'>
<a href='#20070911011029' name='20070911011029'>=tw</a>
降水ナウキャストにすれば新しい情報が見られるのか。おおお、東京のほとんどの領域で雨が降ってないのに何ピクセルかだけ一番上の赤になってる…墨田区周辺だけの集中豪雨か…
</p>
<p class='twitter'>
<a href='#20070911011125' name='20070911011125'>=tw</a>
そして空の端が明るくなって目に見えて近づいてきますｗ
</p>
<p class='twitter'>
<a href='#20070911011333' name='20070911011333'>=tw</a>
明るくなってきたからすぐやむかと思いきやまた強くなってきた…
</p>
<p class='twitter'>
<a href='#20070911013132' name='20070911013132'>=tw</a>
収まったと思ったのにまたきた…
</p>
<p class='twitter'>
<a href='#20070911013334' name='20070911013334'>=tw</a>
東京アメッシュ
http://www.nishiohirokazu.org/files/rain.png
僕の住んでいるところだけ集中豪雨ｗ
</p>
<p class='twitter'>
<a href='#20070911013601' name='20070911013601'>=tw</a>
そんなこんなしているうちにだいぶ小振りになったし、アメッシュの最新情報を見ると雷雲は千葉に行ったみたいなのでそろそろ出社します。
</p>
<p class='twitter'>
<a href='#20070911072351' name='20070911072351'>=tw</a>
おなかすいた。雨やんだから昼御飯
</p>
<p class='twitter'>
<a href='#20070911081700' name='20070911081700'>=tw</a>
pikipikiはmopemopeの妹らしい
</p>
<p class='twitter'>
<a href='#20070911100526' name='20070911100526'>=tw</a>
@takesako さんが何色に染まってくるのかｗｋｔｋ
</p>
<p class='twitter'>
<a href='#20070911132115' name='20070911132115'>=tw</a>
Djangoのmodels.pyを分割したけど、分割したモジュールの中のクラスはもしかしてモデルとして認識されないのだろうかorz
</p>
<p class='twitter'>
<a href='#20070911132220' name='20070911132220'>=tw</a>
冷静に考えればfrom django.contrib.auth.models import Userが新しいテーブルを作らないところからわかったはずだorz
</p>
<p class='twitter'>
<a href='#20070911132251' name='20070911132251'>=tw</a>
svn revert --orz
</p>
<p class='twitter'>
<a href='#20070911133516' name='20070911133516'>=tw</a>
自分涙目。
そして豪雨だし。
帰るか…
</p>
<p class='twitter'>
<a href='#20070911134036' name='20070911134036'>=tw</a>
ポケモンカードをすぐに取り出せる裏技教えたげようかー？まず名前順に並べておいて、探すときに真ん中を開いて、探してるのより後だったら前半分の真ん中を開いて…ってやるの。これで151匹いてもかならず8回以内に見つかるよ。(8歳の甥に3文でデータベースの説明)
</p>

]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/post_331.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/post_331.html</guid>
         <category></category>
         <pubDate>Tue, 11 Sep 2007 10:31:21 +0900</pubDate>
      </item>
            <item>
         <title>5人の海賊のコイン分配問題</title>
         <description><![CDATA[via <a href="http://gigazine.net/index.php?/news/comments/20070909_google_job_interview/"> Googleの面接試験、一体どのような質問をされるのか？ - GIGAZINE</a>
<p>
<blockquote>
5人の海賊がいて、彼らは1位から5位にまでランク分けされています。1位の海賊は100枚の金貨をどのように分けるかというプランを提案する権利があります。残りの海賊はこのプランに投票する権利があり、賛成が半分に満たない場合には1位の海賊は殺されます。1位の海賊の分け前を最大にしてなおかつ彼が生き残るにはどうすればいいですか？（ヒント：一人の海賊は結局、金貨の98％で終わる）
</blockquote>
<p>
まず大前提として、
「海賊はなるべく自分が死なないように行動する」
「(死なないならば)なるべくコインが多くなるように行動する」
と仮定しよう。
これを否定したら「死にたい…」とか「ちょっと損だけどBには以前から腹が立っていたので殺す」
なんて選択肢が出て論理パズルではなくなる。
パズルとして成立させるためにこの仮定を置いた方がいいと面接官に一応言っておく。
<p>
海賊をそれぞれA,B,C,D,Eとしよう。
<p>
１：まず、仮にEだけが生き残った場合、Eが100コインを手にする。
<p>
２：仮にDとEだけが生き残っている場合、
Dが1コインでも取ったならば、Eはその分配案に反対して100コイン取る方が得だから、
確実に反対するだろう。
Dは死にたくないので0,100の分配を提案する。
この提案でもEは「Dを殺しても殺さなくても100コインが手に入る」状況なので、
Dを殺す可能性がある。
なのでDは「DとEだけが生き残っている状態」自体を避けたい。
<p>
３：仮にCとDとEが生き残っている場合、
上記の考察よりDは「Cを殺して自分がトップになるとEに殺される可能性が出てくる」
「Cを殺してもコインは手に入らない」と考え、無条件に賛成する。
Dの賛成により「半数に満たない」条件は発動しないことが確定するので、
Cはどんな分配にしても殺されることはない。
よってCは100,0,0の分配を提案し、Dの賛成により可決される。
<p>
４：仮にBとCとDとEが生き残っている場合、上記の考察より、Cは
「Bを殺せば生きて100コインを手に入れられる」と考えるため無条件に反対する。
なのでBは生き残るためにはDとEに賛成させる必要がある。
Bが死んだ場合DとEはそれぞれ0コインしか受け取れないので、
それより多い分配を提示すれば確実に賛成する。
よってBは98,0,1,1の分配を提案し、DとEの賛成により可決される。
<p>
５：仮に全員が生き残っている場合、
B以下の4人は「Aを殺した場合に決定する98,0,1,1の分配」より多く分配されるのならば賛成し、
少なく分配されるのならば反対する。
Aは生き残るために最低2人が確実に賛成するようにしたい。
よってAが死んだ場合に0コインを受け取るCに対して1コイン、
1コインを受け取るDとEのどちらかに2コインを分配すればよい。
よってAの提案する分配は「97,0,1,2,0」もしくは「97,0,1,0,2」である。
<p>
「98%」というヒントは、
問題を訳した人が間違えたか、問題を作ったGoogleの人が間違えたか、
もしくは「ヒントと自分が考えた結果が食い違ったときに、
自分の考えを捨ててヒントにあわせた答えをひねり出すのか、
それとも自分の考えの正しさを信じてヒントが間違っていると考えるのか」
を観察するために意図的に入れられたブラフだろう。
<split>
<p>
追記、sshiさんより「「半数に満たない場合に」だから4のフェイズではDかEどちらかだけに1コインあげれば賛成2票になるんじゃ？/あ、「半数」の母数に自分がはいってないのかな。どっちなんだろ。」とのコメントが。和文問題文では「<strong>残りの</strong>海賊はこのプランに投票する権利があり」、
英文では「But <strong>the others</strong> get to vote on his plan」となっているので、自分は含まないという解釈が妥当かと思います。
<p>
しかし、仮に「自分も投票できる」という問題だとしたら、D,Eだけの時100,0、CDEの時99,0,1、BCDEの時99,0,1,0、ABCDEの時98,0,1,0,1となってあっさり98%の答えが出ます。
<p>
原文のブログは友達が受けた面接の内容をまた聞きで書いているだけのようなので、友達か著者のどちらかが題意を勘違いしたって可能性も考えられますね。
<split>
kazuhookuさんからこのページを教えてもらいました。
<a href="http://puzzleanswer.seesaa.net/article/16095746.html">一息ついたときの小ネタ【回答集】: 【回答２６９】海賊と金貨</a>。
このページの記述によればこの問題はイリノイ大学のスティーブン・ランズバーグという人が考案したものだそうな。で、その情報を元に軽く調べてみたところ<A HREF="http://mysite.mweb.co.za/residents/profmd/readerinvest05.pdf">Amesa KZN Mathematics Journal, 2005, Vol. 9, pp. 38-40</A>(PDF)に下のような記述がありました。(太字は僕の編集)
<blockquote>
The following delightful puzzle was invented by Steven Landsberg (University of
Illinois, Urbana-Champaign) and posed in the March 2005 Math e-Newsletter:
Ten pirates have got their hands on a hoard of 100 gold pieces, and wish to divide
the loot between them. They are democratic pirates, in their own way, and divide
as follows. The fiercest pirate makes a proposal about the division, and <strong>everybody
votes - one vote each including the proposer</strong>.
</blockquote>

はっきりと「提案した海賊も含めて全員で投票を行う」と書いてありますね。
ということで元ネタのブログの記述が間違いだったという結論でいいのではないかと思います。]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/google.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/google.html</guid>
         <category>zakki(雑記)</category>
         <pubDate>Mon, 10 Sep 2007 22:38:50 +0900</pubDate>
      </item>
            <item>
         <title>漢字の勉強</title>
         <description><![CDATA[<font size=6>
<pre>
繁體字, 日文汉字, 简体字

蟲→虫
廣広广
录録錄
滅←灭
務←务
鄉郷乡
飛←飞
齒歯齿
廠←厂
婦←妇
麗←丽
習←习
顯顕显

蠟←蜡
鐘←钟

鄧←邓
觀観观
對対对

塵←尘

斃←毙
護←护
驚←惊
膚←肤

書←书
長←长
樂楽乐
車←车
傳伝传

穀←谷
醜←丑
後←后
機←机
乾←干
幹←干

從従从
雲←云
涙←泪(両方使う)
網←网

寫写写
處処处
圓円圆
澤沢泽
過過过
龜亀龟
</pre>
</font>]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/post_330.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/post_330.html</guid>
         <category>zakki(雑記)</category>
         <pubDate>Mon, 10 Sep 2007 05:01:15 +0900</pubDate>
      </item>
            <item>
         <title>携帯でTwitter日記</title>
         <description><![CDATA[昨日はTwitter+携帯で楽しんだ。以下ログ。

<split>
<p class='twitter'>
<a href='#tw081153' name='tw081153'>=tw</a>
つくった

</p>
<p class='twitter'>
<a href='#tw081154' name='tw081154'>=tw</a>
テスト

</p>
<p class='twitter'>
<a href='#tw081155' name='tw081155'>=tw</a>
携帯から書いてる

</p>
<p class='twitter'>
<a href='#tw081242' name='tw081242'>=tw</a>
サーバおかしい？

</p>
<p class='twitter'>
<a href='#tw081248' name='tw081248'>=tw</a>
お風呂入ろうとしたらすでにお湯があってアルツハイマーかとびびった。抜き忘れだった。

</p>
<p class='twitter'>
<a href='#tw081317' name='tw081317'>=tw</a>
いまここ→ 東京都墨田区
</p>
<p class='twitter'>
<a href='#tw081320' name='tw081320'>=tw</a>
メールで投稿テスト

</p>

<p class='twitter'>
<a href='#tw081328' name='tw081328'>=tw</a>
なんてよむの？きくぬ？

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908132823">
                <img src='http://movatwitter.jp/doc/img/20070908132823/20070908132823.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081332' name='tw081332'>=tw</a>
すばらしい、写真にコメントつけて公開するのがこんなに手軽に！
</p>
<p class='twitter'>
<a href='#tw081333' name='tw081333'>=tw</a>
ひもの

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908133342">
                <img src='http://movatwitter.jp/doc/img/20070908133342/20070908133342.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081334' name='tw081334'>=tw</a>
梅沢

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908133441">
                <img src='http://movatwitter.jp/doc/img/20070908133441/20070908133441.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081341' name='tw081341'>=tw</a>
すみだ。携帯で画像のリサイズできるんだなぁ。

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908134129">
                <img src='http://movatwitter.jp/doc/img/20070908134129/20070908134129.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081346' name='tw081346'>=tw</a>
そば処 野？日山

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908134642">
                <img src='http://movatwitter.jp/doc/img/20070908134642/20070908134642.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081351' name='tw081351'>=tw</a>
わかな。

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908135102">
                <img src='http://movatwitter.jp/doc/img/20070908135102/20070908135102.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081354' name='tw081354'>=tw</a>
いなげや。濁点つけるのはどうなのか？

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908135437">
                <img src='http://movatwitter.jp/doc/img/20070908135437/20070908135437.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081401' name='tw081401'>=tw</a>
長命…何？

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908140138">
                <img src='http://movatwitter.jp/doc/img/20070908140138/20070908140138.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081403' name='tw081403'>=tw</a>
いまここ→ 東京都台東区台東一丁目14
</p>
<p class='twitter'>
<a href='#tw081405' name='tw081405'>=tw</a>
カレー食べにいく。
</p>
<p class='twitter'>
<a href='#tw081410' name='tw081410'>=tw</a>
いまここ→ 東京都台東区台東二丁目8
</p>
<p class='twitter'>
<a href='#tw081416' name='tw081416'>=tw</a>
ジャイヒンドというカレー屋さん。おすすめ。

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908141551">
                <img src='http://movatwitter.jp/doc/img/20070908141551/20070908141551.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081421' name='tw081421'>=tw</a>
千円

                <br><a href="http://movatwitter.jp/doc/photo?imgSrc=20070908142122">
                <img src='http://movatwitter.jp/doc/img/20070908142122/20070908142122.jpg'>
                </a>
</p>
<p class='twitter'>
<a href='#tw081439' name='tw081439'>=tw</a>
よく考えたらインド人もけっこう器用だよね。右手だけで全部操作するんだもんなぁ。半ば意地で挑戦中。ナンのちぎりかたにはコツがある。漫然と引っ張るのではなく一点に集中させる。この文章は封印された左手で書いてる。
</p>
<p class='twitter'>
<a href='#tw081558' name='tw081558'>=tw</a>
今まで家にインターネット引いてなかったけど、つい契約してしまった。店員口上手い。失敗だったかも。後で考える。
</p>
<p class='twitter'>
<a href='#tw081605' name='tw081605'>=tw</a>
待ち時間の間ヨドバシの上のリフレクソロジーしようかと思ったら予約しないと次は６時半て。
</p>
<p class='twitter'>
<a href='#tw082218' name='tw082218'>=tw</a>
昼間さんざん写真送ったけどそのあと機能不全に陥ったらしい。
</p>
<p class='twitter'>
<a href='#tw082220' name='tw082220'>=tw</a>
喫茶ルノワール劇こみ。プランBが必要だ。もばつい500エラー。むー。有隣堂で座れるかなぁ？座れた。<br/>これはエラーで送れなかったぶん。
</p>
<p class='twitter'>
<a href='#tw082243' name='tw082243'>=tw</a>
携帯プラスついったー、という組み合わせはかなり僕の心の隙間を埋めるソリューションであった。後僕が満足するために足りないものは、ブログへの転載支援とコードを書く場合のマネジメントだ。後者はどう書くオルグを使う。
</p>

<split><a name='144420' href='#144420'>
= 
</a>

リアルタイムで見たい人は<a href="http://twitter.com/nishiom">Twitter / nishiom</a>。
PCから書いているひとりごとも見たければ
<a href="http://twitter.com/nishio">Twitter / nishio</a>。

<split><a name='145009' href='#145009'>
= 
</a>

モバツイッターのページが、画像がサムネイルで埋め込まれていてイイと思ったけど、
携帯だとセッション情報をもてない関係でURLにセッションIDが埋め込まれているので公開できない。
そこでモバツイッターのページをスクレイピングして、ついでにいらない情報を捨てたり
古い順に並べたり、ってスクリプトを書いたんだけども、
たぶん正規表現でスクレイピングしたのは大失敗だったと思う。
わずか一日の間なのに改行が増えてたり「br」が「br/」になったり「br /」になったり。
<p>
正解は「Twitter APIを使う」だと思った。
今度気が向いたらやる。
<p>
反面教師のコード。dataにHTMLデータが入っているとする。

<pre>import re

CLEAR_LEFT = "&lt;br\sclear=['\"]left['\"]&gt;"
PAT = r"""
    \[@\]\n+&lt;/a&gt;\n*&lt;br(\s/)?&gt;\s*
    (?P&lt;contents&gt;[^&lt;]+?)\s*

    (&lt;a\shref="[^"]+"&gt;(?P&lt;loc&gt;[^&lt;]+)&lt;/a&gt;)?\s*

    (&lt;a\shref="(?P&lt;imgurl&gt;[^"]+)".+?
     &lt;img\ssrc='(?P&lt;smallimgurl&gt;[^']+)'.+?)?\s*

    (&lt;br\sclear=['"]left['"]/?&gt;)\s*
    (?P&lt;date&gt;\d[^&amp;]+\d)&amp;nbsp;
    """ % globals()

print PAT

PAT = re.compile(PAT, re.VERBOSE + re.DOTALL)
import time

items = list(re.finditer(PAT, data))

print len(items)
#print items[0].groupdict()["debug"], items[0].groupdict()["contents"]
if 1:
    for m in reversed(items):
        d = m.groupdict()
        date = time.strptime(d["date"], "%m/%d %H:%M")
        date = time.strftime("tw%d%H%M",date)
        print "&lt;p class='twitter'&gt;"
        print "&lt;a href='#%s' name='%s'&gt;=tw&lt;/a&gt;" % (date, date)
        if d["loc"]:
            print "いまここ→", d["loc"]
        else:
            print d["contents"].replace("\n", "&lt;br/&gt;")
        if d["imgurl"]:
            print """
                &lt;br&gt;&lt;a href="http://movatwitter.jp%(imgurl)s"&gt;
                &lt;img src='http://movatwitter.jp%(smallimgurl)s'&gt;
                &lt;/a&gt;""" % d
        print "&lt;/p&gt;"

</pre>
<p>
っていうかコメントによってbrだったりbr/だったりするということは、
「抽象的な形で保管されているデータをテンプレートに流し込む」ではなく
「整形済みのHTMLの形で保管」というアプローチを取っていると言うことだろうか。
うーん。
<p>
このサービスに依存しないような形にならないといけないなぁ。
]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/twitter.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/twitter.html</guid>
         <category>zakki(雑記)</category>
         <pubDate>Sun, 09 Sep 2007 12:49:42 +0900</pubDate>
      </item>
            <item>
         <title>台風成果報告会日記</title>
         <description><![CDATA[頭痛い。
<p>
きっと低気圧のせいだ。

<split><a name='210651' href='#210651'>
= 
</a>

金曜日。
なんだ、大雨になるのかと思ったら晴れてるじゃん。
台風はもう通り過ぎたのかな？

<split><a name='124451' href='#124451'>
= 
</a>

大岡山ってどこだー。
大・岡山じゃなくて大岡・山なのかな？
大岡裁きと関係あるのかな？後で調べる。

<split><a name='124547' href='#124547'>
= 
</a>

携帯からTwitterに投げられると出先で便利かも。
きっとそんなサービスがあるに違いない。
後で調べる。

<split><a name='124917' href='#124917'>
= 
</a>

選択しただけでコピーせずに貼り付けたり、
コピーしようとして右クリックして貼り付けられてしまったり。
Windowsやめようかな。

<split><a name='125107' href='#125107'>
= 
</a>

三田はさんだではない。

<split><a name='001445' href='#001445'>
= 
</a>

行きの電車で書いた。
<a href="http://www.nishiohirokazu.org/blog/2007/09/pythonloadstore.html">PythonのLOADとSTORE</a>。

<split><a name='134422' href='#134422'>
= 
</a>

「PHPの問題点は資格試験がなくて、
PHPプログラマの質を客観的に計ることができない点。
Rubyアソシエーションは資格試験を作る？」

<split><a name='134948' href='#134948'>
= 
</a>

「非常に詳しい人を社内に作るべき。楽天の中ではまだそういうRuby使いが育っていない」
<p>
結局「fooシステムを使うと、とても便利！」というのは
「fooシステムを使うと95%のタスクについては労力が格段に削減できるよ！
残りの5%はfooシステムの中を理解してね！」
なんだよね。
fooがRubyであれPythonであれRoRであれDjangoであれ。

<split><a name='135652' href='#135652'>
= 
</a>

島根の専門学校全てにRubyを入れてしまう。
アーリーアダプターが情熱を持ってやっている段階を超えるには。

<p>
授産施設でRubyを教える。
ベトナムでRubyブーム？

<p>
サラリーマンプログラマが作ったらスパゲッティになる。
Rubyで今それが少ないのはサラリーマンプログラマがいないだけ。
PHPもJavaもスパゲッティ化の道を通ったのだからRubyも同じようになるだろう、
という話。

<p>
「日本が元気になるといいな」

<p>
「どうして少人数だとRubyがいいんですか？」
「逆に大人数だとJavaの方が強い。
Rubyはやんちゃなプログラマが一人いるだけで大変なことになる」

<p>
「Rubyという言語仕様を守った上で、どうやってスケーラビリティのでるような仕組みにするかは難しい。」
「楽天は手軽な分散用のフレームワークと大規模な分散をフレームワークとを試しにRubyで作ってみている」

<split><a name='141739' href='#141739'>
= 
</a>

「ウェアラブルは突然立ち上がる」！

<p>
実はじわりじわりと広がっている。
めだつ「ヘッドマウントディスプレイ」が広がっていないだけ。

<p>
役者がヘッドマウントディスプレイでセリフを見るとか。
実際にやってるらしい。
本番ではどうかと思うけども、練習にはいいかも。手がふさがっていても大丈夫だし。

<p>
ライブで自分の姿を見ながら歌うとかしてるらしい。

<p>
イベントガイドとかはブースに固定よりは動き回れた方がいいな、たしかに。

<p>
ウェアラブルデジカメ。

<p>
「みんなつけたくなったでしょうか」会場苦笑。
でも僕はつけたくなったけどな。
プレゼン時にプレゼン資料と付加的な情報をHMDに出せば、

<p>
「妙に頷くクセがあるので今日一日頷く回数を測定してみよう」

<p>
「次こうなったらこうしたい」というのを後で家でがりがりコード書くのではなくて、
思いついたその場で定義したい。

<p>
アクティブデータベース　ECA
<pre>
E:メール到着
C:ユーザがPCを操作中でない
A:メールを読み上げ
</pre>

<split><a name='150411' href='#150411'>
= 
</a>

「歩いている」の定義とかが面倒なんだよね。
<p>
例示でルールを定義する。

<split><a name='152241' href='#152241'>
= 
</a>

話題支援はいいなぁ。
<p>
ささださん案：RSSでニュースを出す
<p>
ウェアラブルGoogle検索使いたい。

<split><a name='152629' href='#152629'>
= 
</a>

ウェアラブルコンピューター10の予言
<ol>
<li>
1年後通勤・通学者の50%はウェアラブルビデオプレーヤーでビデオを見ている
<li>
1年後、町を歩く若者の50%はウェアラブルケータイを使っている
(取り出さなくても会話できる携帯のこと)
<li>
1年後、スキーヤーとゴルフプレーヤーの30%はウェアラブルデジカメを装着している
<li>
2年後、コンビニ・レストランの店員はHMDを装着するようになる
<li>
3年後、眼鏡は「時計付き」が当たり前になる
<li>
3年後、警官・ガードマンがHMDを装着するようになる
<li>
3年後、ウェアラブルゲーム機が現れ、子供が外で鬼ごっこゲームを遊ぶ。
<li>
5年後、ウェアラブルのソリューションビジネスが盛んになる。
<li>
5年後、街角情報配信はユビキタス情報ビューアで受信する。内容は楽しいビデオクリップ。
<li>
5年後、高齢者はウェアラブルゲーム機を身につけて、近所で出会い系RPG散歩をする。
</ol>

ウェアラブルは健康なライフスタイル。

<split><a name='154539' href='#154539'>
= 
</a>

鬼ごっこゲームがどんなものか想像。
鬼はCG。
後ろから近づくと攻撃できる。
派手な攻撃イフェクト。効果音。


<split><a name='154539' href='#154539'>
= 
</a>

面白いから買ってライトニングトークとかの時に使おうかと思ったけども、
800x600のHMDが二十数万でVaioUが十数万、あわせて四十万円、といわれるとさすがにためらうなぁ。
<p>
ライトニングトークに限定するならマシンは普通のでいいからちょっと安いけども。
<p>
400x300でよければもっと安いらしい。
<p>
<a href="http://www.shimadzu.co.jp/hmd/dg-a.html">DATA GLASS 3/A</a>
<split><a name='154654' href='#154654'>
= 
</a>

マインドマップを含むらしい＞モデリング

<split><a name='155924' href='#155924'>
= 
</a>

外でらっぱ吹いていてうるさい…

<split><a name='160047' href='#160047'>
= 
</a>

KodouguはGoogleガジェットとして公開しているのではてなダイアリにはれる。
クラス図が簡単に公開できる。
<p>
モデル情報をXML形式で出力。
<p>
Kodougu自身にはUMLの定義とかが含まれていない。
モデリング言語設計機能を使ってUMLを定義している。

<split><a name='160731' href='#160731'>
= 
</a>

オージス総研「オブジェクトの広場」
<p>
演劇だ、すごい。

<split><a name='161711' href='#161711'>
= 
</a>

失敗例：しゃべることだけで伝えようとした、相手に伝わっているかどうかを確認できていない。
<p>
会話＋モデリングでコミュニケーション。
会話は消えていってしまうが、書いたものは残る。
<p>
ソースコードと機能は粒度が違う。

<split><a name='161937' href='#161937'>
= 
</a>

作る前にテストする。
テーブル設計をテストする。
<p>
テスト対象ER図。
テストケースを用意。
<p>

www.kodougu.netで使える。
あとで試す。

<split><a name='164920' href='#164920'>
= 
</a>

パネルパネル。
Mayaa YARV Tuigwaa

<p>
バイドール法

<p>
コミュニティの進化
<ul>
<li>ひとりぼっち
<li>お友達
<li>共通の目的意識を持つ仲間
<li>リーダーのいるグループ
<li>みんなの合意で選ばれた執行部を持つグループ
<li>執行部不信任のルールを持つグループ
<li>選挙制度を持つグループ
<li>支部、支部長を持つグループ
<li>企業、地方自治体、国
</ul>

<p>
「大OSSコミュニティRubyのプリンス、ささださん」ｗ

<p>
よい独裁者がいる状態はだいぶいい。
よい王様がついているといい。

<p>
Rubyは14歳。中学に入ってからモテ始めた。

<p>
ハワイ王国の滅亡。

<p>
仲間割れｗ
コミッタが150人もいると仲間割れｗ

<p>
昼のパワーが夜に侵略してくるｗ

<p>
みんなで王様の悪口を言うことで、コミュニティが結束するｗ

<p>
お、1時間のパネルセッション、もうあと10分だな。
面白かった。

<p>
「昼間プログラミングして夜もプログラミングするのは辛い」
「あと何年かすると、昼の仕事はワードを使うようになるので夜にプログラミングできるようになるよ」

<split><a name='180204' href='#180204'>
= 
</a>

練習がてらに

<a href="http://watcher.moe-nifty.com/memo/docs/twitterAPI8.txt">Twitter API</a>
＋
<a href="http://user.niwango.jp/">ニワンゴ開発サイト</a>

してみようかな。

<split><a name='180211' href='#180211'>
= 
</a>

大学の時の友達と会う。
晩ご飯を食べた後大阪に帰るのか、大変だなぁ。
<p>
Yahooメッセンジャに全然ログインしなくなってしまったので
連絡が取れていなかった。
Lingrにパスワード制限付きの部屋を作ってみよう。

<split><a name='211714' href='#211714'>
= 
</a>

眠たい。
あー。
平日結局Jython本の原稿が進まなかったけど、
土日も進まなかったらやばいな。
もう9月になっちゃったし…。

]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/post_329.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/post_329.html</guid>
         <category>zakki(雑記)</category>
         <pubDate>Sat, 08 Sep 2007 00:18:59 +0900</pubDate>
      </item>
            <item>
         <title>PythonのLOADとSTORE</title>
         <description><![CDATA[いわゆる「ローカル変数」の読み込みはLOAD_FAST
<pre>
>>> from dis import dis
>>> def foo(x):
	x

>>> dis(foo)
  2           0 LOAD_FAST                0 (x)
              3 POP_TOP             
              4 LOAD_CONST               0 (None)
              7 RETURN_VALUE        
</pre>

グローバル変数はLOAD_GLOBAL

<pre>
>>> def foo():
	x

	
>>> dis(foo)
  2           0 LOAD_GLOBAL              0 (x)
(以下略)
</pre>

代入があるとローカル変数になる。

<pre>
>>> def foo():
	x = None

	
>>> dis(foo)
  2           0 LOAD_CONST               0 (None)
              3 STORE_FAST               0 (x)
</pre>

global宣言をつけるとグローバルになる。

<pre>
>>> def foo():
	global x
	x = None

	
>>> dis(foo)
  3           0 LOAD_CONST               0 (None)
              3 STORE_GLOBAL             1 (x)
</pre>

ここまではとてもわかりやすい。
初級編。
<p>

ネストしててもLOAD_GLOBAL
<pre>
>>> def foo():
	def bar():
		x

		
>>> dis(foo.func_code.co_consts[1])
  3           0 LOAD_GLOBAL              0 (x)
</pre>

しかし外の関数が同名の変数を定義している場合、LOAD_DEREFになる。

<pre>
>>> def foo(x):
	def bar():
		x

		
>>> dis(foo.func_code.co_consts[1])
  3           0 LOAD_DEREF               0 (x)
</pre>

ローカル変数への代入自体がSTORE_DEREFに変わっている。

<pre>
>>> def foo():
	x = None
	def bar():
		x

		
>>> dis(foo)
  2           0 LOAD_CONST               0 (None)
              3 STORE_DEREF              0 (x)
</pre>

中の関数から参照されうるかどうかで判断しているようだ。

<pre>
>>> def foo():
	x = None
	def bar():
		y

		
>>> dis(foo)
  2           0 LOAD_CONST               0 (None)
              3 STORE_FAST               0 (x)
</pre>

読む命令は書く命令と同じ種類。

<pre>
>>> def foo():
	x = None
	x
	def bar():
		x

		
>>> dis(foo)
  2           0 LOAD_CONST               0 (None)
              3 STORE_DEREF              0 (x)

  3           6 LOAD_DEREF               0 (x)
</pre>


ローカル変数は専用の「ローカル変数用のテーブル」に対して行うことで
高速に名前を解決できるようにしている。
外から参照されうる変数は別のテーブルに保管する。
<p>
どこに保管するのかはコンパイル時に決定してそれぞれ異なるバイトコードで表現されている。
ではコンパイル時に決定できないようにしたらどうなるのか。

<pre>
>>> def foo():
	exec "x = None"
	x

	
>>> dis(foo)
  2           0 LOAD_CONST               1 ('x = None')
              3 LOAD_CONST               0 (None)
              6 DUP_TOP             
              7 EXEC_STMT           

  3           8 LOAD_NAME                0 (x)
</pre>

LOAD_NAMEになる。おそらく理屈通りに順番に探していく命令。

<pre>
>>> def foo():
	exec "x = None"
	def bar():
		x
		
SyntaxError: unqualified exec is not allowed in 
function 'foo' it contains a nested function with 
free variables (<pyshell#101>, line 2)
</pre>

これはシンタックスエラー

<pre>
>>> def foo():
	exec "x = None" in locals()
	def bar():
		x

		
>>> dis(foo.func_code.co_consts[2])
  4           0 LOAD_GLOBAL              0 (x)
              3 POP_TOP             
              4 LOAD_CONST               0 (None)
              7 RETURN_VALUE        
</pre>

localsに限定してexecした場合でも、中の関数はLOAD_GLOBALになる。
execによって導入される変数は同一関数以外からは見えないのか？

<split><a name='131715' href='#131715'>
= 
</a>

Pythonはデフォルトでローカル変数、global宣言でグローバル変数になる。
JavaScriptはデフォルトでグローバル変数、var宣言でローカル変数になる。
Pythonは代入をするとその関数のローカル変数になるため、
ネストした関数で外の関数のローカル変数を書き換えることができない。

<pre>
>>> def make_counter():
	count = 0
	def push():
		count += 1 # ダメ
		return count;
	return push

</pre>

JavaScriptはvarがあるおかげで、これができる。

<pre>
function make_counter(){
    var count = 0;
    function push(){
        return ++count;
    }
    return push;
}
</pre>

しかし、これはクラス使いの立場から見ると
「メソッドを一つだけ持つようなオブジェクトが簡単に作れるというだけ」
となる。

<pre>
>>> class Counter():
	def __init__(self):
		self.count = 0
	def __call__(self):
		self.count += 1
		return count
</pre>

別に行数変わらないし、今後メソッドが増えた場合にJSのクロージャ的アプローチでは
何らかの形で複数の関数オブジェクトをまとめなければいけなくなって複雑になる。
プロトタイプ使うのかな？


<split><a name='000902' href='#000902'>
= 
</a>

ささださんに教えてもらったYARVの命令セット。
<a href="http://www.atdot.net/yarv/insnstbl.html">YARV: Yet another RubyVM / Instruction Table</a>。
やはり同じようにgetlocal, getglobalの他に、getdynamic, getspecialというそれっぽい名前の命令がある。
詳しいことは知らないけど多分にたようなことをするんだろう。]]></description>
         <link>http://www.nishiohirokazu.org/blog/2007/09/pythonloadstore.html</link>
         <guid>http://www.nishiohirokazu.org/blog/2007/09/pythonloadstore.html</guid>
         <category>Python</category>
         <pubDate>Fri, 07 Sep 2007 23:55:36 +0900</pubDate>
      </item>
      
   </channel>
</rss>
