Archive@2007/12

プレイステーション3がやってきたよ!

本日、 ENTACL GRAPHICXXX さんの忘年会にご一緒させて頂きました。 かなり緊張気味だったのですが、 みなさん良い人ばかりでホントに楽しかったっすよ。

しかも、 HIGE がモジャモジャし始めて以来、 初めて女性に HIGE を肯定してもらえた! 嘘でもなんでもテンションは上がるのです。

で、そんな浮き足立ったところに始まったプレゼント抽選会。

  • プレイステーション3
  • Xbox 360
  • 高島屋商品券
  • iTunes music storeカード
  • 80G HDD
  • 目玉焼き用フライパン

などなど。豪華な賞品が盛りだくさんな抽選会だったのですが、 いろんな紆余曲折を挟んだ結果、 1等賞 のプレイステーション3が当たっちゃいました。

それにしても、我が家に対して見事なまでの オーバースペック! そもそも我が家、 テレビがねぇぜ!

とりあえず「テレビは買います。」宣言してみたものの、 帰ってきて相場を調べてみて驚愕。 自分、テレビには手が届かないかもしれない...。 ちょっとこれを期に、安いテレビを探してみようと思います。

そんなこんなで、楽しい時間を過ごさせて頂きました! 誘ってくれた t-matsuda 氏、 そして ENTACL GRAPHICXXX の皆様、 本当にありがとうございました!

Posted at: 
2007/12/29 01:10:58
7 Comments
0 TrackBacks
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2007/12/29/playstation3-came-to-my-home/trackback/

mod_wsgiでHTTP_AUTHORIZATIONを受け取る。

Django でDigest認証用のバックエンドを書いていたんだけれども、 Apachemod_wsgi で動かすとなぜか認証を通過出来ない。

で、色々と泥臭いデバッグを繰り返したところ、 そもそも HTTP_AUTHORIZATION ヘッダが渡されていない様子。

request.META.get('HTTP_AUTHORIZATION')  # <-- コレがNoneになる。

ちょこっとググってみる前に、 mod_wsgi のドキュメントを眺めてみると、 ちゃんと Configuration GuidelinesConfiguration Directives に書いてありました。

WSGIPassAuthorization On

これを VertualHost ディレクティブに追加したら、 バッチリ HTTP_AUTHORIZATION を受け取れた! 認証も通りましたですよ!

セキュリティ面から、 WSGIPassAuthorization ディレクティブはデフォルトではOffらしい。 なるほどなるほど。

Posted at: 
2007/12/27 01:43:07
2 Comments
0 TrackBacks
Tags: 
apache
Django
mod_wsgi
Python
Trackback: 
http://humming.via-kitchen.com/2007/12/27/passed-httpauthorization-on-modwsgi/trackback/

XPathでnamespaceにハマった。

lxmlXPath 使ってる時に namespace でハマったのでメモ。 ありがちなところでハマった。 恥さらしの為にもメモりますです。

どんなところでハマったかと言うと、 例えばこんな感じの test.xml なXMLがありまして、

<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="http://example.com/hoge/1.0">
    <child>
        <type>1</type>
        <name>hoge</name>
    </child>
    <child>
        <type>1</type>
        <name>hige</name>
    </child>
    <child>
        <type>0</type>
        <name>hage</name>
    </child>
</root>

これを lxml でパースしてやろうとした訳です。 で、何も考えずにこんな事したら中身が取れなかった。

>>> from lxml import etree
>>> xml = etree.parse(open('test.xml', 'r'), parser=etree.XMLParser())
>>> xml
<etree._ElementTree object at 0x1290940>    # ココは取れてる。
>>> root = xml.getroot()
>>> root
<Element {http://example.com/hoge/1.0}root at 1236c60>  # ココもOK。
>>> #   ココからが問題。
>>> root.xpath('./child')
[]  # 空っぽ?

仕事中に色々試してみるも、 結局 namespace の指定の仕方が解らず撃沈。 が、家に帰ってきてから本家のドキュメント見てみると、 あっさりやり方が書いてあった。 どうやら xpath の第2引数で、 namespace を指定出来るらしい。

>>> root.xpath('./n:child', namespaces={'n':'http://example.com/hoge/1.0'})
[<Element {http://example.com/hoge/1.0}child at 1292fc0>,
 <Element {http://example.com/hoge/1.0}child at 1292ea0>,
 <Element {http://example.com/hoge/1.0}child at 1297030>]
>>>
>>> root.xpath('./n:child/n:name/text()', namespaces={'n':'http://example.com/hoge/1.0'})
['hoge', 'hige', 'hage']

とりあえず、めでたく XPath での問い合わせが出来た :-)

それにしても恥ずかしいな。この凡ミス。 なんで本家のドキュメントを読もうと思わなかったんだろ? そこが本当に不思議。

Posted at: 
2007/12/25 23:46:20
4 Comments
1 TrackBack
Tags: 
lxml
Python
XPath
Trackback: 
http://humming.via-kitchen.com/2007/12/25/namespace-trap-on-xpath/trackback/

エトコトバがオープンしたよ!

社内プロジェクトで走っていた、 エトコトバ がめでたくオープンしました!

なんか色々あったものの、 個人的には凄く満足しております。 初めて「これ、携わりましたよ!」って言えるサイトが出来たよ。 :-)

たくさんの人のおかげでココまで来たよ。 本当に嬉しいっす!

ちなみに中は Django で出来てるよ。 某 endless 氏がゴリ押して Django でやらせてくれたよ!

そんなこんなで色々ある訳ですが、 是非とも触ってみてくださいまし。 画像とか、言葉とか投稿してくれると、 両手を上げて喜びます :-D

Posted at: 
2007/12/25 14:37:27
2 Comments
1 TrackBack
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2007/12/25/etocotoba-opened/trackback/

newformsが変わってたよ。

いつの間にか、 newformsform_for_modelform_for_instance がdeprecatedになってるよ。 変わりに ModelForm が出来ていて、 モデルに紐づかないフォームと同じ様に定義出来るようになったっぽい。

# vim: encoding=utf-8 :

from django import newforms as forms
from blog.models import Entry

class EntryForm(forms.ModelForm):
    """
    エントリーに紐づくフォーム。
    """

    class Meta:
        model = Entry

基本はコレだけで良いみたい。 使い方は今までと変わらないのがありがたいっすなぁ。

>>> from blog.forms import EntryForm
>>> form = EntryForm()
>>> form.is_bound
False
>>> form.is_valid()
False
>>> del form
>>> data = {'title': u'test', 'slug': u'test', 'body': u'test'}
>>> form = EntryForm(data=data)
>>> form.is_bound
True
>>> form.is_valid()
True
>>> object = form.save()
>>> object
<Entry: test>

更新の時は、 __init__instance キーワードで渡してやると良いみたい。

>>> data = {'title': u'new title', 'slug': u'new-slug', 'body': u'new text'}
>>> # instanceキーワードで渡す。
>>> form = EntryForm(data=data, instance=object)
>>> form.is_bound
True
>>> form.is_valid()
True
>>> object = form.save()
>>> object
<Entry: new title>

バリデーションするフィールドを指定する fields は、 フォームの Meta クラスに移動したらしい。 それと、 exclude ってのも追加されたみたいで、 fields と逆の、バリデーションから省くフィールドを指定出来る。

# vim: encoding=utf-8 :

class EntryForm(forms.ModelForm):
    """
    """
    class Meta:
        #   ターゲットとなるモデルを指定。
        model = SomeModel
        #   バリデーションするフィールドを列挙。
        fields = ('some', 'fields', 'here')
        #   バリデーションしないフィールドを列挙。
        exclude = ('some', 'exclude', 'fields', 'here')

今までよりも少し拡張しやすくなったような。 フィールドのオーバーライドも出来るみたいなんだけども、 そこらへんはまだ試してないので、またおいおい。

Posted at: 
2007/12/23 17:26:02
2 Comments
1 TrackBack
Tags: 
Django
Python
Trackback: 
http://humming.via-kitchen.com/2007/12/23/changed-newforms/trackback/

イベントリスナーの上手い外し方とか。

ActionScript 3.0 でどうやってイベントを外すか? って事をいつも悩んでたんですが、 受動的に外したい場合、こういうやり方も良いんじゃないかと。

public function someCallback(evt:Event):void
{
    if (isDied)
    {
        //  リスナーを外す。
        evt.target.removeEventListener(evt.type,
                                       arguments.callee,
                                       evt.eventPhase < 2);
        //  ココで処理おしまい。
        return;
    }
    //  実際の処理をココに書く。
}

コレだと、リスナーの参照を引き回さなくても大丈夫。 その場にあるもので解決出来るので素敵。 毎回if文を書くのがダルければ、 Closure とかにしちゃえば隠蔽出来ると思う。

うーむ、また1歩 ActionScript とシンクロ出来た気がするよ :-D

助言をしてくれた kjirou さんに感謝!

Posted at: 
2007/12/16 23:01:21
0 Comments
0 TrackBacks
Tags: 
ActionScript
Flash
Trackback: 
http://humming.via-kitchen.com/2007/12/16/remove-eventlistener-on-actionscript3/trackback/

PyTC試してみたよ。

PyTC をインストールしてみたよ。 思いっきり Python Unconference Tokyo 1 の影響を受けてるワケですが。 思いっきり a2c さんの こちらのエントリー に刺激されてるワケですが。

TokyoCabinet 自体もインストールしてなかったので、 まずは TokyoCabinet から。

$ curl -O http://tokyocabinet.sourceforge.net/tokyocabinet-1.1.2.tar.gz
$ tar zxf tokyocabinet-1.1.2.tar.gz
$ cd tokyocabinet-1.1.2/
$ ./configure --prefix=/usr/local/tokyocabinet
$ make
$ sudo make install

Mac なら MacPorts + 野良Ports で最新版が1発で入るよ。

$ sudo port install tokyocabinet

jbking さんや Voluntas さんに感謝です。

次に PyTC をインストール。 グニャラ さんのおかげで easy_install で入るよ。素敵過ぎます。

$ sudo easy_install pytc

と、思ったら、こんな感じのエラー吐いた。

pytc.c:18:19: error: tcbdb.h: No such file or directory
pytc.c:19:19: error: tchdb.h: No such file or directory
pytc.c:20:20: error: tcutil.h: No such file or directory

ヘッダファイルが見つけられないらしいので、以下で回避。

$ export CPPFLAGS="-I/opt/local/include ${CPPFLAGS}"
$ export LDFLAGS="-L/opt/local/lib ${LDFLAGS}"

Ubuntu/etc/ld.so.conf.dtokyocabinet.conf とか作って、 ldconfig もやりましたです。

インストールの確認も含めて、 ちょろっと遊んでみる。

>>> import pytc
>>> hdb = pytc.HDB('hdb.db', pytc.HDBOWRITER | pytc.HDBOCREAT)
>>> hdb
<pytc.HDB object at 0x162db8>
>>> hdb['hige'] = 'mojamoja'
>>> print hdb['hige']
mojamoja
>>> hdb['uhige'] = u'mojamoja'
>>> print hdb['uhige']
?(  # unicodeはダメっぽい。
>>> hdb['mhige'] = 'もじゃもじゃ'
>>> print hdb['mhige']
もじゃもじゃ
>>> hdb['muhige'] = u'もじゃもじゃ'
>>> print hdb['muhige']
 (  # やっぱunicodeはダメっぽい。

どうやら unicode は食えないらしい。

オブジェクトを保存する時は、 cPickle とか使って保存すると良いらしいので、 それもやってみる。

>>> import pytc
>>> import cPickle
>>> hdb = pytc.HDB('hdb.db', pytc.HDBOWRIER)
>>> d = {'zero': 0, 'one': 1, 'two': 2}
>>> hdb['dict'] = cPickle.dumps(d)
>>> hdb['dict']
"(dp1\nS'zero'\np2\nI0\nsS'two'\np3\nI2\nsS'one'\np4\nI1\ns."
>>> cPickle.loads(hdb['dict'])
{'one': 1, 'two': 2, 'zero': 0}

ちゃんと復旧出来ております!(当たり前なのでしょうけれども) これ、ちょっと感激。面白すぎる。 大きな事が出来る訳ではないけれども、 かなり実用的な感じ。

どこか使える場所を探して、もっと試してみたいなぁ :-)

Posted at: 
2007/12/16 17:38:20
0 Comments
1 TrackBack
Tags: 
PyTC
Python
TokyoCabinet
Trackback: 
http://humming.via-kitchen.com/2007/12/16/tried-using-pytc/trackback/

staticなものは継承されません!

ActionScript 3.0 でまたもハマったのでメモメモ。

どうやら static なプロパティやメソッドは、 サブクラスには継承されないみたい。 ドキュメントの 継承されない静的プロパティ を見ると、

静的プロパティはサブクラスに継承されません。 つまり、サブクラスのインスタンスから静的プロパティにアクセスすることはできません。 静的プロパティは、そのプロパティが定義されたクラスオブジェクトからのみアクセス可能です。

って書かれております。で、 例えばこんなクラスが定義されてたとして、

public class Base
{
    protected static _hoge:String = 'hoge';

    public static function get hoge():String
    {
        return _hoge;
    }
}

それを元にサブクラスを作るって時に、 これだと大丈夫なんだけれども、

public class Extender extend Base
{
    public function Extender():void
    {
        trace(hoge);    //  hogeとか出てくる。
    }
}

コッチだとエラー吐いてコンパイル出来ない。

import Extender;

public class Others
{
    public function Others():void
    {
        trace(Extender.hoge);   //  未定義なものになってる。
    }
}

ドキュメントの 静的プロパティとスコープチェーン によると、

静的プロパティは継承されませんが、 そのプロパティが定義されたクラスおよびそのクラスのサブクラスのスコープチェーン内にあります。 このため、静的プロパティは、 定義されたクラスおよびサブクラスのスコープ内にあると言います。 つまり、静的プロパティが定義されたクラスおよびそのサブクラスの本体内から直接静的プロパティにアクセスできます。

と言う事らしい。

この実装、ぶっちゃけ冗談としか思えないんですけど。 コンストラクタが public じゃないとダメ。ってのも驚いたけれども、 なんか言語仕様的に DRY じゃない気がするなぁ :-(

Posted at: 
2007/12/16 06:35:56
0 Comments
0 TrackBacks
Tags: 
ActionScript
Flash
Trackback: 
http://humming.via-kitchen.com/2007/12/16/unextended-static-property-on-actionscript3/trackback/

ActionScript3メモ

ActionScript 3.0 の自分用メモ。

  1. flashVars の行方

    root.loaderInfo.parameters
    

    に入ってる。 ので、 hige="mojamoja" な値を渡しておいてやると、

    trace(root.loaderInfo.parameters.hige); // mojamoja
    

    で参照出来る。 返り値の型は String なので、 必要に応じてキャストしてやる必要がある。

  2. キャストのやり方

    コンストラクタを使わなくても as を使うとキャスト出来る。

    addChild(new Sprite()); // 返り値の型はDisplayObject
    

    とかやった後に、続けて処理したい時とか、

    var child:Sprite;
    //  コッチでも良いけど
    child = Sprite(addChild(new Sprite()));
    //  コレでもいける。
    child = addChild(new Sprite()) as Sprite;
    

    とじ括弧の連続で、ワケが分からなくなっちゃう時とかに良いと思う。 違いとして、コンストラクタでのキャストは失敗すると Exception を投げるのに対して、 as でキャストして失敗すると、型のデフォルト値が返ってくるらしい。 ので、状況に応じて使い分けが必要。

  3. root が先? stage が先?

    rootstage では stage が親になって、 その子要素として root がいるらしい。

    package
    {
        import flash.display.Sprite;
    
        public class Root extends Sprite
        {
            public function Root():void
            {
                trace(stage.numChildren);   //  1
                trace(numChildren);         //  0
            }
        }
    }
    

    なので、 stageaddChild してしまうと、 root と同じ階層に位置してしまう(と思われる)。

とりあえず、忘れないようにメモメモ。 一緒になって調べてくれた kjirou 氏、 berian氏、 そんでもって、俄然やる気をくれる t-matsuda 氏サンクスです。

Posted at: 
2007/12/15 22:54:32
0 Comments
0 TrackBacks
Tags: 
ActionScript
Flash
Trackback: 
http://humming.via-kitchen.com/2007/12/15/actionscript-3-memo/trackback/

Objective-C Mac OS Xプログラミングを求めて。

コレ の流れでまたまた行ってきたよ。

今回の目的は

の2つ。

1つ目の ActionScript 3.0 アニメーション は、 いつも行く渋谷のBook1stに在庫があって難なく購入。 素直に嬉しい :-)

が、しかし、 Objective-C Mac OS Xプログラミング はどこ探しても見つからなかった。 店員さんに聞いてみるも、今は在庫が無いとの事。 くそぅ。 仕方なく取り寄せをお願いして退散 :-(

帰る間際に WEB+DB PRESS Vol.41 を発見。 ActionScript3.0 の特集らしいので、とりあえず購入。 遅すぎっす。間違いなく。

帰ってきてから WEB+DB PRESS Vol.41 を読んでみて、 同じ ECMAScript なのに、 JavaScriptActionScript 3.0 でココまで違うのか。と独りでブツブツ。 JavaScript が同じ実装してきたら、これはデザイナーさんきっと泣いちゃうぞ。とか。

もうすぐ次に進む道が見えてくると思うので、 それまで精一杯ちからをつけようと思いますです。 結局 DB までは手が回らなさそうではありますが。

年明けの 解散 の合図まで!

Posted at: 
2007/12/10 02:31:59
0 Comments
0 TrackBacks
Tags: 
book
memo
Trackback: 
http://humming.via-kitchen.com/2007/12/10/looking-for-objective-c-mac-os-x-programming/trackback/

Categories

Archives