Archive@2008/05

ミナミで集合。

今日は mitszo さん、 tokibito さんと晩ゴハンを食べてきたよ。

技術的な話から、おバカな話まで、色々話せて面白かった。 地元でもこういう機会を増やせていけたら良いなぁ。と思ったよ。

途中、 tokibito さんがMacBookを取り出してプレゼンがスタート。 画像検索のwebアプリを見せてもらって、ギャラリー2人がハイテンション。

  • 「HIGEな画像で検索したら、色々 アブない人 とかズラっと出てくるんでしょ。」
  • 「いやいや、 アブない人 の画像で検索したら、結果の中にHIGEが居るんでしょ。」

とか、くだらない会話がポツポツとか。

他にもたくさん話したんですが、 まぁ、そこらへんは参加者のウマミって事で :-P

mitszo さん、 tokibito さん、 本当にありがとうございました!! また次回とかあると良いっすねー :-)

Posted at: 
2008/05/06 02:32:43
0 Comments
0 TrackBacks
Tags: 
memo
Trackback: 
http://humming.via-kitchen.com/2008/05/06/meeting-in-minami/trackback/

モデルのsaveが変わったよ。

Djangotrunkqueryset-refactor がマージされたタイミングで、 モデルの save メソッドにも改良が加えられてたのでメモメモ。

マージ前(r7476)save メソッド自体に実際の処理が書かれてた。

# django/db/models/base.py@213行目あたり
def save(self, raw=False):
    dispatcher.send(signal=signals.pre_save, sender=self.__class__,
                    instance=self, raw=raw)
    # 中略...

    dispatcher.send(signal=signals.post_save, sender=self.__class__,
                    instance=self, created=(not record_exists), raw=raw)

ので、データ登録の際に何か処理を挟みたい場合、 オーバーライドして処理を追加してあげて、 良いところで親の save をコールしてあげる事で実装してた(と思う)。

class Hige(models.Model):
    """
    HIGEなモデル
    """
    def save(self, raw=False):
        # なにか追加したい処理が入る。
        super(Hige, self).save(raw=raw)

でも、これだとダイレクトにデータを保存したい場合に、 適当な名前でもうひとつ save メソッドを作ってやる必要があった。

class Hige(models.Model):
    """
    HIGEなモデル
    """
    def save(self, raw=False):
        """
        adminとかでは処理を追加したいので、
        オーバーライドせざるを得ないんだ。
        """
        # なにか追加したい処理が入る。
        super(Hige, self).save(raw=raw)

    def direct_save(self, raw=False):
        """
        たまーに処理を追加しないのも必要。
        """
        super(Hige, self).save(raw=raw)

こういう状況になると、ものっすごい残念な気持ちになってた訳なのですが、 これが マージ後(r7477) でちょっと素敵に改良されてるよ。

# django/db/models/base.py@293行目あたり
def save(self):
    """
    Save the current instance. Override this in a subclass if you want to
    control the saving process.
    """
    self.save_base()

def save_base(self, raw=False, cls=None):
    """
    Does the heavy-lifting involved in saving. Subclasses shouldn't need to
    override this method. It's separate from save() in order to hide the
    need for overrides of save() to pass around internal-only parameters
    ('raw' and 'cls').
    """
    # 省略...

実際のデータ登録の処理は全部 save_base メソッドで実装しておいて、 save メソッドはそのフックになってるよ。 これだと、ダイレクトにデータを登録する必要が出て来た場合でも、 save_base をコールすれば良いだけ。 なので、特にモデルに変更を加える必要は無い。

class Hige(models.Model):
    """
    HIGEなモデル
    """
    def save(self):
        """
        処理を追加したいのでオーバーライド。
        raw=Falseは無くなってるよ。
        """
        # なにか追加したい処理が入る。

        # self.save_base()ってしてないのはなんとなく。
        super(Hige, self).save()

これでもう残念な気持ちにならなくて良いね。 また一つ、 Django が好きになりましたとさ :-)

Posted at: 
2008/05/02 00:29:35
2 Comments
1 TrackBack
Tags: 
Django
Python
Trackback: 
http://humming.via-kitchen.com/2008/05/02/changed-models-save-on-django/trackback/

キャッシュ関連のヘッダメモ

なんとなくで通り過ぎてたのを調べてみたメモ。 知ってたのも知らなかったのも、恥を晒すためにもブログに書いておく。

リクエストヘッダ

If-Modified-Since

日時を指定し、それより新しいコンテンツの場合にのみデータを返すようにサーバにリクエストする。

Ajaxでのキャッシュ抑制のために以下の設定で頻繁に使ってるな。

If-Modified-Since: Thu, 01 Jan 1970 00:00:00 GMT

この使い方が合ってるのかは分からんですけども、 QueryStringに時間をくっつけてキャッシュから逃げるやり方よりかは、 こっちの方がスマートで好き。

If-None-Match

エンティティタグを指定し、一致しない場合にのみデータを返すようにサーバにリクエストする。

If-None-Match: "xyzzy"

とか

If-None-Match: *

とか指定するらしい。意図的に付ける場面はまだ思いつかないなぁ。

レスポンスヘッダ

Expires
コンテンツの有効期限を指定する。
Last-Modified
コンテンツの最終更新時刻を指定する。 If-Modified-Since と対で使用される。
ETag

コンテンツを特定するための固有値を指定する。 If-None-Match と対で使用される。

Proxyとか使ってる場合にコイツが悪さをする事があるらしい。 その場合、設定を変えてやる必要がある。デフォルトだと以下になってる。

# デフォルトだとi-node, 最終変更時刻, ファイルサイズを見る。
FileETag INode MTime Size

i-nodeなどが邪魔してる場合は INode を外してやる。

# 最終変更時刻, ファイルサイズを見る。(i-nodeは見ない。)
FileETag MTime Size

Directory, VirtualHost なディレクティブでも指定出来る。詳しくは core - Apache HTTP サーバFileETag を見る。

共通ヘッダ

Cache-Control
そのまま。キャッシュコントロールに関する指定をする。 HTTP/1.1から追加されたらしい。詳しい情報は HTTP/1.1: Header Field Definitions14.9 Cache-Control を見る。
Pragma
特殊な追加情報を指定する。これはHTTP/1.0からある。 no-cache を指定することも出来る。詳しい情報は HTTP/1.1: Header Field Definitions14.32 Pragma を見る。

まとめ

眠気と戦いながら、調べながらメモしたので全然まとまってないや。 でも、忘れた時に見るべき場所は分かったので、それだけで良しとする。 また理解出来た頃にちゃんとまとめようと思う :-P

Posted at: 
2008/05/01 02:26:03
0 Comments
0 TrackBacks
Tags: 
apache
REST
Trackback: 
http://humming.via-kitchen.com/2008/05/01/cache-control-headers/trackback/

Categories

Archives