Django覚書き

・なんか最近(?)unicodeカンケイのマージがあったようで、そのせいなのかコードがマズいのか、たまにデコードエラーがでる。
・日本語文字列をコードに埋め込む時はu'日本語'とやっとかないと不幸になることがある。
・やっといても不幸になることがあるみたい。多分。
・DBからデータを引っ張って来た時に文字列フィールドにNone(DB上では空文字列になってるような気がする?)だとエラーになる(ような気がする)。
・それはライブラリよりコードの問題だろ。多分。
・じゃあ空ってのをどうやって表現するかっつうと、この際アレだ、*一文字とか替わりに保存しといて、ビューで処理しちゃえ。ってのを今思い付いたんだけどソレいつの時代のワザだよ。
・というわけで文字の扱いについてはもうちょっと探ってみることにする。
・っていうかいつまでも自動Adminに頼ってないでいい加減自前のビュー作れよ、オレ
・つっても自動Adminよりかっちょええ入力フォームとか作れる自信が全くない。フィルタとかあるし、並べ替えできるし、検索もできるし、スグレモノすぎませんか、と。

Djangoヤバい

とにかくDjangoがヤバい。

何がヤバいって、何もかもヤバいんだけど、まず超簡単。ライブラリのインストールが済んでれば、

django-admin startproject mysite
cd mysite
python manage.py startapp myapp
vi settings.py
※データベース設定、自動アドミンライブラリ、myappの登録
vi myapp/models.py
※モデルの作成。各モデルにdef __unicode__(self)
  return (なんか識別できるもの)

class Admin
  pass
を追加しておくと幸せになれる。

python manage.py syncdb
python manage.py runserver

で、サーバーの8000番ポートにアクセスするだけで、なんかうごいちゃう。追加とか削除もできちゃう。ヤバい。

モデルのリレーションだって、models.ForeignKeyとかやっとけばちゃんと解決してくれるし、validationだってちゃんと出来る。ヤバい。

認証なんてDjango.contrib.authとかインポートすればデコレータでビューに一行追加するだけだし、テンプレートとか継承読込なんでもござれだ。マジヤバい。

そりゃまあ、views.pyで渡したdatetimeがテンプレートでdateフィルタ使えなくて30分悩んだ末にテンプレート内部じゃunicode文字列になってることに気付いたんだけどなんで?とか、モデルのDateTimeフィールドにdate()が無くてジャストその日!って検索条件指定したきゃ__yearと__monthと__day一個づつ合わせるかDateとTimeにフィールド分割するしかないの?とかよくわかんない事もいっぱいあるけどとにかくヤバい。ってか楽しい。

とにかくお前らは、「ああ。オレはプログラムを書きたかったんじゃなくて、モノを作りたかったんだ」って勘違いしそうになるDjangoのヤバさをもっと知るべきだと思う。

なんちって。

DSinCAR

昨日は世間一般でいうところのいわゆる「ハハノヒ」というイベント日だったので、ヨメと一緒にハハに渡す貢ぎ物を物色しに車で2時間ほどかかる大型ショッピングモールへと(往復では4時間?)ドライブすることになった訳ですが。

何しろ2時間かけて出かけるワケなので、運転しない方の人はかなり暇になることは容易に想像がつくワケで、その暇な時間を打破するための秘策として、最近のヨメはカバンの中にDSなる暇潰しグッズを忍ばせるという解決策を見出だしたらしいのです。

ただ、DSをやるといってもいわゆるゲームに類するソフトは生憎と用意がないもので、専ら「脳を鍛える大人の…」というソフトを弄る羽目になるワケです。

しかし、いくら様々な種類のトレーニングが用意されておるからといったところで、一つのモノで延々遊び続けるのには、やはり限度というのが存在するワケで。

ヨ:「飽きた」
ト:「もーいっこソフトあったべ」
ヨ:「アレ音が聞こえないと出来ないんだよね〜」

ちなみに、もーいっこというのは「もっとえーごづけ」という英語のトレーニング用のソフトウェアでありまして、こちらは「DSが喋った英会話を聞き取ってパネルに書く」という仕組みになっていますので、確かに走行中のクルマの中でやるにはちょっと難アリな感あります。

が、ここで簡単に折れては技術者の名折れ、であります。伊達に「コンセントの付いてるモノ担当」という業務をこなしておるワケではございません、と言い出さんばかりの勢いで、ハタと気付いたのです。

うちのクルマの中には、ipodを接続するためにFMトランスミッターを装備してあるではないか。コイツをDSに接続して出力をクルマのスピーカー経由にするというのは、「走行音が五月蠅くて聞こえない」という問題を解決するためのグッドなソリューションに成り得るのではないか、と。

結果は「クルマの中で走行中にDSのえーごづけをやりたい」というクライアント(ヨメ)の希望を申し分無く解決する事ができました。


今後は、このソリューションを適用する事によって発生する可能性のある、以下の問題について検討する必要があるようです。

・DSをプレイするヒトの英語力の多少によって、ドライバーの運転に対する集中力に(主にDSプレイヤーのトンチンカンな回答対する笑い過ぎによる)影響がある。

#一度試してみる事をオススメします

オブジェクト思考?

注)「オブジェクト思考」というのはオブジェクト志向で設計実装されている(またはする)というたった今作った造語で、ケッシテ誤変換ではありません。

ここ一週間くらい「オブジェクト脳の作り方」なる本を読んで、今更「オブジェクト指向」という考え方を理解しようと努めてみた。

結論:「社長」ってズルくね?

だってね。
今までずーーーっと疑問だったんよ。
オブジェクト指向ではこうプログラミングするんだよ」みたいな本をいくら読んでも、

class Foo{
    public static void main(String[] args){
        Bar b = new Bar();
            b.run();
    }
}

とか書いてあったんよ?
FooプログラムでBarクラスのオブジェクトbを作ってbを実行するのがオブジェクト指向流、みたいな。
だからなんなんだよ
って話ですよ。
そいで、犬クラスの動物にワンって鳴かせて、ネコクラスの動物にニャーって鳴かせて、これが多態性ですよ、とか。

class Animal{
    public Animal() {
    }
    abstract public void sing() {
    }
}

class Dog extends Animal {

    public Dog {
    }
    public void sing() {
        System.out.println( "ワン" );
    }
}

class Cat extends Animal {
    public Cat {
    }
    public void sing() {
        System.out.println( "ニャン" );
    }
}

class Zoo {
    public static void main(String[] args){
        Dog pochi = new Dog();
        Cat tama  = new Tama();
        (Animal)pochi.sing();
        (Animal)tama.sing();
    }
}

良くて上に書いたレベル。
ひどいのなんか、コンストラクタの中にprintln("ワン")が入ってるとか。

なんで「動物園」ってプログラム犬と猫を作って鳴かせるんだよ、と。動物園が犬と猫を管理する、ってヘンでしょ?
ずーーーーっとそう思ってたわけ。

何が疑問だったのかもうちょっと具体的に言えば、結局「プログラム全体の始まりが不明確」って事。
今までの経験から言えば

10 print "ワン"
20 print "ニャン"
30 end

とか

<?php
echo ("ワン");
echo ("ニャン");
?>

とか

常に
一番上の行から始まって一番下の行で終わる
ってのが常識だったのね。

もちろん上から始まって下で終わるプログラムだって、書きようによっては一番上から始まらないケースもあるけど、上から順番に眺めていけば、簡単に「ココが本当の始まりなんだな」ってのが分かる。

しかしながら、オブジェクト志向(javaとかは1クラス1ファイルなんで特にかな)で構成されたソフトウェアってのはこの「始まり」がひっじょーに分かりづらい。

その上、
似たようなサンプルしか見る機会がない
/*いや、正直真剣に探したこともないけども…*/

大体あるとすれば「犬がワンと鳴いて猫が…」レベルか、ワケのワカランライブラリをゴテゴテに使った高度なサンプル、のどっちか。
知りたいのは「オブジェクト思考」なのに、なんでワケのワカランライブラリの内容までイチイチ調べなきゃあかんのか、と。

PHPだってあちこちインクルードしまくったCMSなんかはかなり分かりづらいけど、結局「ブラウザからアクセスするエントリポイント」ってのは使用説明書にしっかり書いてあるんで、そこから追っていけばあ結構把握できる。
その上、「PHPで作ったCMS」って世の中に星の数ほどあるから、サンプルとして読む分には困ることは無い。
で、その星の数ほどのCMSがどれくらいオブジェクト思考か、というと…。

そんなもん無くてもこんだけのものが作れるんだ

みたいな妙な安心感が沸くモノが多数というか、なんというか。

「オブジェクト志向(と思っている|っぽい)コード」を書いたり読んだりしようと思うと、先に全体の中で使う部品の定義(クラス定義とかクラスのプロパティとかメソッドなんか)がだいたい一番初めにでてきて、それからそのクラスのオブジェクトを生成して…って順番になっちゃう。これは(自分にとっては)明らかに順序がオカシイ。
だって、クラス定義なんていくら書いたって、
結局オブジェクトが無いと動かないんだもん

で、肝心要のプログラムを動かすためのオブジェクトは

誰が(どこに)作ればいいんだよ???

みたいな。

コード書く→動かす→思い通りに動く→ウマー
コード書く→動かす→思い通りに動かない→マズー→直す→動かす→動く→ウマー

の繰り返しが「プログラミング」だと思ってたから、
「書いても動かないコード=クラス定義)」を書かなきゃいけないって正直面白くない=オブジェクト志向ってツマンネ
って図式が自然に出来上がってたんだなあ。

/*そりゃお前の頭が固い、とか言う無粋なツッコミは却下*/

それが、「社長命令.起立」で解決されちゃうんだから、これはもう反則じゃないか、と。

一言で言えば
「ああ、コレ(社長)って作っていいんだ」
みたいな。
先にできあがるオブジェクトの振る舞いを予想したコードを書いてそれに合わせてクラスを実装する(テストファースト、というのかな)というやり方も、かなり好みにマッチしてる。
/* 当然その前の設計はちゃんとやりますよ */

おかげさんで、今は「PHPってなーんか気持ち悪い」と思うくらい立派な(?)オブジェクト思考になりました。
だってクラス型にキャストできないし…完全に隠蔽もできないし…インターフェイス型ないし…
レンタルサーバーでServletとかJSPとか使えるとこは、ちょっと遊ぶには偉く高いし、PHPのVer5が使えるとこってのもまだまだ少ないんで、当面はPHP4の気持ち悪いオブジェクトを使うつもりではいるんだけど、Servletの使える安いレンタルサーバーがでてきたら、あっさり乗り換えてたりして…

逆に考えるんだ…

昨日車を洗いました。ええ。

「今週の予報はただでさえ悪いのに、アンタが車洗うと余計に天気悪くなるんだから止めときなさい」
というヨメのココロナイコトバに深く傷つきながら、敢えてがっつり固形WAXで仕上げました。ハイ。


説明しよう。
さむーい冬の間はどうしても洗車に時間をかけるのがツラくなるので、今まで不本意ながらも液体のコーティング剤で凌いでいたのだ。
ちなみに、まともにWAXで仕上げると約4時間の洗車時間が、コーティング剤を使用することによりなんと2時間程度にまで短縮されるのだ。すごいぞコーティング剤。
ただし、固形WAXの仕上がりにはいかんともし難い魅力がある…

そして今日。

大荒れの予感

まて。
逆に考えるんだ。

車を洗うと言う事は水をその分使うって事だそれはつまり使える状態であったはずの水が使えない状態になるということだという事は使える水の量が減るということで減ったままにしておくのはヨロシクないでは使える水を増やせばいいという事になるその為にはどうするかといえばどこかから水を調達してくればいいということになるではどこからというとやっぱりここは雨に頼る他無い、とこういう事だ(ここまで約0.5秒)

さて、この理屈で考えると。

「洗車に使う水量」と「洗車後の降雨量」の有るべき姿というのが見えてくる。
そう、つまり…
「洗車に使う水量」>「洗車後の降雨量」となるのは甚だ環境に優しくない人種であるが、ワタシのように「洗車に使う水量」<「洗車後の降雨量」とという関係を常に保つことのできる人種はとっても環境に優しいということになるじゃあないか。

ヨシ。
今週末も地球の環境を守るため洗車に行こう。

ジレンマ

いろいろ面白そうな事を考え付いたりしているんだけども、いざ実行するとなるとなかなか難しい事も多いわけ。

だいたい、やってみたい事とやりたい事とやっといた方が良さそうな事ってのの区別が、自分の中でイマイチついてないんだよなぁ。

何しろ典型的シングルタスク人間なもんで、一旦一つの事に手を付けてしまうと他の事に向けられる注意力ってのが格段に落ちる。自分でも「ああ、今そういう状態だなあ」って分かってやってる事がほとんどなので、尚更タチが悪い。一旦そういう風になると、どこかで落ち着くまではもうそれしか眼中にない。
パッと切替えが利かないというか、表面的には他に注意を向けているように見えていたとしても、頭の中はその事しか考えて無い、みたいな。

中学の時だったか。
図書室にあったある種の図鑑みたいなモノに夢中になっていた時期(っつっても2日か3日だけども)があった。
そうなったらもう、授業なんてそっちのけで、机の上に教科書は乗っけてるんだけど目は膝の上の図鑑に釘付けな状態だった。
英語の授業なんかは、先生の後について繰り返すなんてのがあったワケだけど、耳から入ったのがそのまま口から出て行く、みたいな、なんかテープレコーダーみたいな状態だったらしい。ハッと気がついたらクラス中の注目を浴びていた。
本人は全く覚えていないんだが、
先生「マイネームイズタロー、はい」(ゴッホン←例文の後に必ず咳払いする先生だった)
ワシ&クラスメイト「マイネームイズタロー」
という具合に始めの内はうまく鸚鵡返ししてたらしいんだけども、
先生「アイアムハングリー、はい」(ゴッホン←咳払い)
クラスメート「アイアムハングリー」
ワシ「アイアムハングリー、はい」
という感じで徐々にズレて行き(そもそもこの辺で気付くべき)
先生「ディスイズア、ペン。はい」(ゴッホン←咳払い)
クラスメート「ディスイズ、アペン」
ワシ「ディスイズア、ペン。ハイ」(ゴッホン)
という具合に、かなりいらんとこまで繰り返してたらしい。あろう事かそれを3回くらいやってようやく気がついたというんだから、我ながら大したモンだ。

んで、その時間はさすがに反省したものの、次の数学の授業の時にはすっかり立ち直ってやっぱり図鑑に夢中になっていて、気がついたら机の横に先生が立っていた。
「その本面白いの?」
とやや引きつった笑みで尋ねられたのを覚えている。
ちなみにこの時夢中になっていたのは、「世界の戦闘機」とかなんとかいう古今東西の戦闘機の写真とその仕組みが載ってるものだった。中学生のセレクトとは思えない。

大人になってちっとは成長したかと言うとそうでも無く、今でもごく稀に読書に夢中になって電車を一駅乗り過ごしたりする。どうにもこうにも救いようが無い。
直近だと、詰め碁の本かなあ。って、昔っから妙なセレクトばっかだ。
※もちろん普通の小説とかも読みますよ?読むんですよ???

ちょっと話がズレたけども、こんな具合に、昔っから一つの事に夢中になりすぎるとどうも周りを振り回す羽目になりやすいらしい。
と、いうのを最近ようやく学習した(らしいというか少なくとも本人はそのつもりでいる)ので、あまりガーッと何かに夢中にならないように気を使ってみたりする。
でもやっぱり、いくら気をつけてみたところで、生まれもった性格っつうのはやっぱりなかなかやっかいなもので、そう簡単には変えられない。

ちょうど今のように、「やりたい事イロイロ」の狭間に立っていたりすると、特に危ない。なんでか。

そもそも、「やりたい事イロイロ」の中から「とってもやりたい事」を選び出す過程というのには、ある種の快感を伴うケースが多いのだ。まあ当たり前といえば当たり前の話ではある。だって「やりたい事」なんだから。
そして、その「やりたい事」について更にイロイロと考え始めると、快感は加速していく。だってもう、「やりたい事やってる」状態に片足突っ込んじゃってるんだもの。そんで、誘惑に負けて「やり始める」。ここまで来たらもう一種のトランス状態。まさに、「やりたい事やってる」状態の時って、多分怪しい脳内麻薬とかドバドバ出てる。世界の回り方から全てオレに合わせろ、とかそういう状態。何しろ、「やりたい事」以外のその他一切合切に全く関知したくない。

つまり、「やりたい事イロイロ」って状況は、そういうヤバい状態になりやすい時だって事だ。後は選ぶだけ、みたいな。

「イロイロ」を満遍なくうまーくこなす事ができないかといえば、一応大人だし、周囲の状況によってそれを余儀なくされる事もあって、実際それなりにうまーくこなせればそれなりの満足感が無いわけではない。けれども、「何事にも煩わされずに一つの事に満足するまで集中」というプロセスで得られる快感というのには、抗しがたい魅力があるのだ。

さて、どうにか上手くまとめてやろうとここまでひっぱって見たんだけども、どうやってもまとまりそうにないので、もう諦めることにする。

…まあイロイロ悩み多き年頃ということなんです。察して下さい。