« 2007年10月 | メイン | 2007年12月 »

2007年11月 アーカイブ

2007年11月12日

大きなテーブルへのForeignKeyにはraw_id_admin=True

どう書くorgは Djangoを使って作られていて、 下のような管理画面が

下のようなモデルの定義から自動的に生成されます。

class Comment(models.Model):
    topic = models.ForeignKey("Topic", null=True, blank=True)
    parent = models.ForeignKey("self", null=True, blank=True)
    create_date = models.DateTimeField()
    author = models.ForeignKey(User, null=True)
    body = models.TextField(blank=True)

すごく楽ちんだったのですが、どう書くorgがにぎわってコメント数が増えてくるに従って どんどん重たくなってきました。

理由はとても簡単で、この自動生成されたリストの部分で、 数千件あるすべてのコメントをデータベースから取ってきて文字列にする処理が行われるからです。

↑数千件がリストの中に…

このせいでページを開くだけで30秒程度かかっていました。 この問題はどうすれば解決できるか。 実はすごく簡単で、フィールドの定義にrw_id_admin=Trueをつけるだけでした。

-   parent = models.ForeignKey('self', null=True, blank=True)
+   parent = models.ForeignKey('self', null=True, blank=True, raw_id_admin=True)
このオプションをつけるとすべてを読み込んでリスト表示する代わりに、 下のようなIDを入れる欄と虫眼鏡アイコンが表示されます。

虫眼鏡アイコンを選ぶとアイテムの一覧が別ウィンドウで開きます。

テーブルが大きくなってくるとリスト表示では探すのも面倒になるので、 大きくなりそうなテーブルへForeignKeyを張っているなら今のうちにraw_id_adminをつけておくのも手かもしれません。

2007年11月22日

Python4JS and KEMURI Interperer on it

OreScript時代の幕開け - yukobaの日記はとても面白い。

ので、

Pythonで書かれているKEMURI のインタプリタを<script type="text/python4js">で囲ってHTMLソースに書いておくと、それがJavaScriptに変換されて実行される、というデモを作ってみました。

Python4JS and KEMURI Interperer on it

ラボでは他にも JSRuby - Javascript による Ruby(っぽい)実装 (nakatani @ cybozu labs) などが公開されていますが、僕のこのデモは深夜ノリで作ったため、Python2.5の全機能をサポートしているわけではありません。今後改良していく予定もありません。ごめんなさいごめんなさい。ソースコードを見て石を投げないで!

2007年11月26日

自分がBruteForceBlockerに引っかかってしまったときの対処

どう書く?org ではBruteForceBlocker を使ってブルートフォース攻撃を仕掛けてくるIPアドレスからのパケットを捨ててしまうようにしているのですが、今日変なことをしていたら自分がブロック対象になってしまいましたorz

対処方法:

  • 別のIPアドレスからログインする
  • /var/db/ssh-bruteforceに記録されている自分のIPアドレスを削る(もしここにデータファイルがなければ、ps -xでbruteforcebrockerの場所を調べ、中を見て設定ファイルの位置を調べ、その設定ファイルを見ると書いてある)
  • /etc/rc.d/pf restart でパケットフィルタを再起動する

あんまり変なことをしないように気をつけないと…(^^;

About 2007年11月

2007年11月にブログ「西尾泰和のブログ @ Cybozu Labs」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2007年10月です。

次のアーカイブは2007年12月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。