Try WiMAX

UQ WiMAXからお試し用のUSBデバイス(USB TYPE UD01NA)が届いた。箱を開けてみての印象は、デカっ。思ったよりもでかい。まあ邪魔になるほどじゃないけれど。せめて3分の2ぐらいになるといいな。
早速、家(山手線田端駅近く)でやってみた。まあ家からの通常利用は無理。窓のそばでカーテンを開ければなんとなくつながるけれど、すぐ切れる。

翌日以降、いろいろ立ち寄りそうなところで試す。
Continue reading

さくらのレンタルサーバで直近1週間分だけmysqlのバックアップを取っておく

  • さくらインターネットのレンタルサーバを使っている。
  • 毎日mysqlのバックアップを自動的に取りたい。
  • 一週間分だけ取っておきたい(一週間以上前のバックアップは消えてほしい)。

と、聞かれたので、書いておく。

  • mysqldumpでダンプする。
  • bzip2で圧縮する。
  • dateで取得した曜日をファイル名に含めて毎日上書きする。

という方針でいく。
Continue reading

length(to_char(1, ’00′))=3

知らなかった。2じゃないってこと。符号の1文字分だけ増えるんだな。考えてみればそりゃそうか。
あんまり数字をこうやって扱うことがないから。そんなのが必要な時ってたいてい設計が悪いんじゃん。(言い訳)

PostgreSQL 8.4
pguser=# select length(to_char(1,'00'));
length
--------
3
(1 行)

Oracle 9i
SQL> select length(to_char(1,'00')) from dual;

LENGTH(TO_CHAR(1,'00'))
-----------------------
3

Solace

Solace http://opensource.plurk.com/Solace/

Plurk Solace Released http://lucumr.pocoo.org/2009/9/2/plurk-solace-released

Stack OverflowインスパイアードのQ&Aサイト構築システム。最初のリリースだけど、とても完成度が高い。Werkzeugの人(たち)が作っている。Ubuntuで動かしてみるのに5分とかかからないから試してみるといいと思う。

Pinaxをいろいろいじっているけれど、カスタマイズのベースにするにはこっちの方が僕にはとっつきやすい感じがしてきた。

トリガーで変更した値を反映させるには、flush()+invalidate()

stormの話。

def invalidate(self, obj=None):

Set an object or all objects to be invalidated.

This prevents Storm from returning the cached object without first verifying that the object is still available in the database.

This should almost never be called by application code; it is only necessary if it is possible that an object has disappeared through some mechanism that Storm was unable to detect, like direct SQL statements within the current transaction that bypassed the ORM layer. The Store automatically invalidates all cached objects on transaction boundaries.

http://twistedmatrix.com/users/radix/storm-api/storm.store.Store.html#invalidate

これだけじゃ、ダメで、

    store.flush()
    store.invalidate()

とした後で使わないと、データベースとstorm.storeの同期が取れていない状況になる。

トリガーでバリバリとStormの知らないところでデータを変更していると、わかりにくいエラーになってしまう。

ちなみに、更新後にstore.commit()を発行していればこういう問題は起きない。

ユニットテストでロールバックしながら繰り返しテストしていてはまった。

SQLAlchemyでも同じだよなあ。後で調べる。