« 未踏開発合宿日記その2 |Main| 明日から夏休み日記 »

« PythonのLOADとSTORE | Python | »

初めてのDjangoで11日でどう書くorgを作るひとりごと日記

サイボウズラボのサイボウズOffice掲示板でやっている 「西尾のひとりごと」スレ(ITmedia)からDjango関係の文章を抽出してみる。実際はこれの4~5倍くらいの書き込みがある。

まとめ記事にしてブログに載せようとか思いつつほったらかしなので、 このまま埋もれてしまうよりは雑然とでも公開した方がいいかと思って。

Lingrログとかとあわせて整理されて Django - UeblogWiki に載るかも知れない。整理するの大変だろうなぁ(自分では整理するのを諦めた)


= 西尾のひとりごと 2007-06-18
はてさて
当初の予定では

GRINEditは今日でいったん保留にして
金曜日までに露木さんに教えてもらったDjangoのプログラムを参考に
「どう書く」プログラムのプロトタイプを作って、
金曜日からのPython合宿でいろいろ教えてもらって
その次の土曜のPython Workshop the Edge 2007までにベータ公開

という無謀なスケジュールを頑張ってみる予定だったがどうなることやら。

= 西尾のひとりごと 2007-06-19
はっ。
今1時間時計を読み間違えていたことに気がついた。
道理で11時に来たはずなのに人が少ないと思った。
==========
・Django
・PySqlite
・sqlitebrowser
 http://sqlitebrowser.sourceforge.net/index.html

いれた
==========
エントリーがタグを不定個数持つってのは
エントリーの一覧のテーブルと、
タグの一覧のテーブルと、
「エントリーとタグの対」のテーブルが必要なのかなぁ
==========
> Choice.objects.filter(poll__pub_date__year=2005)

これで[c for c in Choice.all if c.poll.pub_date.year == 2005]になるそうな。

==========
モデルリファレンスにちゃんと多対多の方法とかも書いてある

from django.db import models

class Person(models.Model):
    name = models.CharField(maxlength=30)

class Tag(models.Model):
    caption = models.CharField(maxlength=30)
    
class Code(models.Model):
    author = models.ForeignKey(Person)
    tags = models.ManyToManyField(Tag)

って書くと

BEGIN;
CREATE TABLE "app1_code" (
    "id" integer NOT NULL PRIMARY KEY,
    "author_id" integer NOT NULL REFERENCES "app1_person" ("id")
);
CREATE TABLE "app1_person" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(30) NOT NULL
);
CREATE TABLE "app1_tag" (
    "id" integer NOT NULL PRIMARY KEY,
    "caption" varchar(30) NOT NULL
);
CREATE TABLE "app1_code_tags" (
    "id" integer NOT NULL PRIMARY KEY,
    "code_id" integer NOT NULL REFERENCES "app1_code" ("id"),
    "tag_id" integer NOT NULL REFERENCES "app1_tag" ("id"),
    UNIQUE ("code_id", "tag_id")
);
COMMIT;

ってのが生成される
==========
やっぱり内部的に「エントリーとタグの対」のテーブルを作るんだなぁ。
==========
Codeの方にmodels.ManyToManyField(Tag)と書いておけば
CodeオブジェクトのAdmin画面でタグを選べる
逆にすればTagのAdmin画面でそれの付いているCodeオブジェクトを選べる
管理が直感的な方を選べばいいらしい。
==========
おおお、なんと、スクリプトを修正したら勝手に読み込み直してくれてるじゃん!>Djangoサーバ
==========
>>>
Pygments 0.8
Pygments is a syntax highlighting package written in Python.
(中略)
and it highlights even Brainfuck!
<<<

ちょっw
==========
Pygmentsでシンタックスハイライトを無効にするにはエイリアスをtextにすればいい(と思う
==========
なるほど
{% extends "base.html" %}
しておいて
{% block main_contents %}ほげ{% endblock %}
ってやれば
base.htmlのなかのmain_contentsブロックが「ほげ」で置き換えられるのか。
==========
Pygments ― Python syntax highlighter
http://pygments.org/

どう考えてもタイトルまずいと思う。
それじゃPythonの構文(だけ)をハイライトするみたいだ。
==========
んー。文字化け問題の原因。

print r'あ'

って入力したときに

"print r'\xe3\x81\x82'"

って入って

u'<table><tr>(中略)r'\xe3\x81\x82&#
39;(以下略)

という形でデータベースに直されているけども、
これはUTF-8の文字コードが1バイトずつに刻まれてしまっている。

==========
シンタックスハイライトを掛ける直前で
        self.code = unicode(self.code, 'utf-8')
ってやったら化けなくなった。
==========
thinkpadのシフトキーが取れてしまったorz
==========
CommentとCodeとを分けて
CodeはCommentを0/1個持つ、というつもりで
CommentへのForeignkeyを持たせてNULLでもOKにしたが

それじゃCommentの親が「CommentまたはCode」ってのを表現できない…

親クラスが一つのテーブルになって、
もし形の違うオブジェクトが入りたければその差分だけ別のテーブルにしてForeignkeyかな
==========
トラックバックとコメントも同列に扱いたいんだよなぁ
==========
あんまり漠然とした状態でこだわってもしかたないや。
とりあえずプロトタイプを金曜までに作るんだ。
==========

= 西尾のひとりごと 2007-06-21
Djangoの汎用ビューは、汎用のビューだ。
でDjangoのビューはMVCのVじゃない。
やっと理解した。
==========
間違えやすい綴り
マニピュレータ?まにゅ?
コミュニケーション?こみにゅ?
シミュレーション?しゅみ?

コミュニケーションはコモンとかコミューンと同じ語源か。

シミュレーションはカタカナ表記だとよく間違えている人がいるけど
英語の字面として
simulation
sumilation x
どちらが正しいって言われると間違える人が少なそうだ。

manipulator
manupilator x
annihilator
accumulator

comminute
comminucate x
communicate

この辺はエロい
==========
django-modeは色をつけてくれるだけでインデントまでは面倒見てくれないのか!
http://unicoders.org/code/hacks/trunk/django-mode.el
めっちゃ短いし!

でも逆に言うと、ちょこっと色をつけるくらいなら簡単ってことか。
>>>
; Hacked together following instructions from the rather awesome: 
; http://two-wugs.net/emacs/mode-tutorial.html
<<<
どういう構文になっているのかよくわからないけど
「チュートリアル見ながら作ったらおもったよりあっさり(うまく)できた」ということなんだろうか
fromが何をしているのかよくわからない…

==========
インデントをバックスペースで削る際に
自動で{{ endfor }}とかを補ってくれたらいいのになぁ。
==========
おなかすいたすいたすいた
==========
■ お題に対するコメント一覧
■ コメントの追加
■ 匿名での投稿
 □ 匿名ユーザーはguestアカウントでもいいんじゃないだろうか。スパムよけにもなるかもだし。

明日から3日間で作るものを再確認
優先順位は後で決める

□ ユーザアカウントの作成
□ コードの投稿
□ 新しい言語タグをユーザが追加できるように
□ トラックバックで投稿できるように
 □ トラックバックされた元のサイトのデータを取得
 □ 最後のPREを投稿されたコードと見なす
 □ どこをコメントと見なす?
 □ HTMLを直接書けないブログサービスでうまく投稿できるかどうか
□ フィード
 □ 新着お題
 □ 新着解答
 □ 言語指定での新着解答
□ レーティング
□ ユーザページ
 □ それまでの解答一覧
 □ いろんな統計情報
□ 言語のページ
 □ 解答一覧
 □ 統計情報
□ お題タレコミページ
 □ この言語でこう書けるけど他の言語ではどうだい?ってのの収集「perlだとperl -e "$a='z';print ++$a;"でaaって出るけど…」
  ・名前は「挑戦状」
□ タグ
 □ Python2.4 Python2.5
  □ 自由な文字列をつけさせる?


□ Djangoのホスティングサービスはどこがいいのか聞いてくる
□ 検索は?他のDjango使いは検索をどうしている?

ドメインはdoukaku.jpを取るか、それとも
doukaku.orgを取ってja.doukaku.orgにするか(Wikipediaみたいに)
コードは万国共通語だし。


==========
トラックバックで収集するのはコードだけって方針でいいかも。
その代わりサイトに載せるのもコードの部分だけにする。
コメントを書きたい人は自分で書けばいい。
==========
(ト書き:この週末(金、土、日)は第一回Python温泉)

= 西尾のひとりごと 2007-06-25
SAKURA.AD.JP // 専用サーバ - さくらの専用サーバ
http://www.sakura.ad.jp/services/dedicated/sakura_dedicated/plans/

FreeBSDとFedora Coreとどっちがいいのかなぁ。
どういう違いがあるのかよくわからない。
==========
*.jpにこだわる理由が全くない上に
すでにgettextでi18nしてあるので
doukaku.orgだけを取ってja.doukaku.orgで運用します。
# きっと英語が間違いだらけだけど…
==========
走り出してからモデルの変更をするのは面倒だから
明日レーティングの機能まで実装してしまおう。
==========


= 西尾のひとりごと 2007-06-26
SAKURA.AD.JP // ニュース
http://www.sakura.ad.jp/news/archives/20070620-001.news

「さくらの専用サーバ」お申込受付け停止のお知らせ

orz

==========
(ト書き:山口さんの自宅サーバに間借りさせてもらう)
==========
とりあえず丸ごとコピーしてみたけど
さすがにすんなりとは動かないみたい…

==========
サーバの中で新しくプロジェクトを作ると動くので、
空っぽのプロジェクトを作って中身をコピーしてみよう。
==========
・Pygmentsをインストールした。
・自分で修正したdjango.db.backend.utilをコピー
・サーバ実行
→truncate_nameがないって怒られるけど、truncate_nameなんて文字列がそもそもソースコードに現れないぞ?むむむ?
==========
わかった
僕がWindows版に入れた方はリビジョン5482だけど
最新版は5519なんだな。
で自前パッチを当てたdjango.db.backend.utilにtruncate_nameって関数が新たに追加されている。
Windows側でソースをgrepしてもtruncate_nameが見つからないのはそのせい。
サーバ側でgrepしたら見つかった。

時々手元のDjangoをupdateしないといけないんだな。
手元でコンフリクト解消したutil.pyをサーバ側に上書きしてめでたしめでたし。


Exception Value:        list index out of range

えー。
==========
わかった。
データがまだないからトップページで最新のデータを表示しようとしてこけてるんだ。

Windowsではfixtures(データベースに最初につっこむデータ)を普通のUTF-8で書いておいても大丈夫だけど、FedoraCoreではダメみたい。で、さっき\u0000形式に変換したんだけども、変換後のを読み込ませるのを忘れていた。

読み込ませたらトップページ出たー
スタイルシートが読まれていなくて真っ白。
==========
ファイルの置き場所を~nishio/…と指定してはいけなかった。/home/nishio/…にしたらうまく行った。

==========
おおー
WinSCP3ってディレクトリの同期ができるんだー
便利。
==========


= 西尾のひとりごと 2007-06-27
gmailからのメール送信にかんしては
ウノウラボ Unoh Labs: Pythonでメールを送信したい人のためのサンプル集
http://labs.unoh.net/2007/06/python_2.html
が参考になりました。
==========
doukaku.orgのスタイルシートがIEで見るとうだうだな件は
諦めてシンプルなフォーマットにしよう
==========


= 西尾のひとりごと 2007-06-28
レーティングの機能はつけた。あとは何がいるだろう
□ コメント投稿時にPREかそのままかを選べるように
□ 意見要望送信フォーム
□ いろんな英語の所を翻訳(アカウント登録周り)
==========
ネットワーク系のコマンドを覚えるの巻

アクセスログはどこだろう
・アクセスログは/var/log/httpd以下にあった。sudoしないとlsできない

tailしたら末尾だけでちゃった
・tail -fする

http://doukaku.org/にアクセスしたけど404で、アクセスログに記録が残ってないや
・hostsを書き換えなきゃ。
 ・C:\WINDOWS\system32\drivers\etc\hosts
・IPアドレスがわかんないや
 ・ping -a ***.org

・doukaku.orgにトライ
>OperationalError at /
>unable to open database file
さっきとエラーが違うじゃん…
何これ…

とりあえず目の前のエラーをつぶすか…

==========
DEBUG=Falseしたら見えるようになった。謎。

==========
DEBUG=Trueに戻しても見えるorz


= 西尾のひとりごと 2007-06-29
(ト書き:奥さんにDNSの設定をしてもらう。設定の都合上、何も頭につかない「doukaku.org」を使うのは面倒という話に)

==========
www.doukaku.orgとja.doukaku.orgとどっちがいいかなー
==========
了解です。どうもありがとうございます。

僕のウェブアプリ側ではBASE_URLの値を書き換えるだけでいいのでja.doukaku.orgにしておきます。
www.doukaku.org宛のアクセスをdoukaku.orgに正規化している設定ファイルがどこにあるのかわからないので
それだけ山口さんにお願いします。
==========
i18nむずかしいなぁ
何がむずかしいって
Djangoのmake-message.pyを呼んだときに
拾ってくれるものと拾ってくれないものがあったり
テンプレートの中の翻訳文字列は引用符で囲まれる必要があるけどもバックスラッシュでエスケープされない点とか

ぜんぶDjangoが悪いような気もする
==========
あとエラーメッセージの表示している行が実際の行と100行くらいずれたりする。
aって入れてパースエラーを起こして前後関係から問題の一を絞り込む。
==========
SQLiteは全文検索できる
GoogleGearのバックエンドはSQLite
Djangoのloaddata, dumpdataを使えばJSON形式でシリアライズできる
クエリにexplainってつけると細かい情報が見られる
SQLiteでもできる(読んでもいまいちわからないけど)
==========
(ト書き:6月30日、Python Workshop the Edge 2007でこういうのを作っています、とちょろっと話す)

(ト書き:なぜか聞いていた人数よりはるかに多いはてなブックマークが付いてホットエントリーに。Web2.0怖い)

= 西尾のひとりごと 2007-07-02
申請したりメール書いたりしてたらもうこんな時間かー
Doukakuが、怖くて触りづらい。
==========

= 西尾のひとりごと 2007-07-03
ぐは
はてぶで目立ったせいで5000PVになったけど、
もうトップページから外れたからPV下がっただろうと思ったら
昨日一日は10000PVだった。
==========
by 竹迫 良範
オレンジニュースで紹介されてましたよね。
==========
人の口に戸は立てられず…


= 西尾のひとりごと 2007-07-04
Google AnalyticsをなんどもGoogle Analysticと打ってしまう。

==========
JavaScriptメモ

$$("a[href]").join(" ")
$$("input[type=checkbox]").forEach(function(e){e.checked=false})

$x("/html/body")
$x("//input")

console.log
console.debug

==========
やっとDjangoで自動テストが出来るようになったー!
まだGETで200かどうかのチェックしか書いてないけど
これはいい。

問題はテストに結構時間がかかることか。
これは仕方ないのか。
==========
GETのテストはさておき、
POSTのテストはちまちま手で打つのはめんどくさい。
ブラウザ操作するとテストケースが出力されるようにならないかな

= 西尾のひとりごと 2007-07-05
時刻が9時間ずれているのはGMTなんだろうなぁ。
どうしようかなぁ。
==========
>> POSTのテストはちまちま手で打つのはめんどくさい。 

>perlがインストールされている環境であれば(Windowsでも)GETコマンド、POSTコマンドがコマンドラインから使えます。

>form.submit(); 

ああっ、POSTを自分がブラウザで打ってテストするのが面倒ということじゃなくて、
テストケースに「POSTでどういう情報を渡すか」を自分で書くのが面倒ということでした。
POSTされたデータからテストケースを作ってコンソールに出力するコードを書いたので、
ブラウザで適当に書いてPOSTすると、コンソールにテストケースが出力されるようになりました。
後はそれをtests.pyにコピペして整形するだけ。


= 西尾のひとりごと 2007-07-06
by 奥 一穂
GMT 問題については、クライアント側で時刻表示を生成するのもひとつの手です。

<script language="JavaScript">
document.write(new Date([% unix_time %]*1000-new Date().getTimezoneOffset()*60000));
</script>
<noscript>
[% time_in_gmt %]
</noscript>

とかこんな感じです。
==========
なるほど!
日本語のページだからといって読者のタームゾーンがJapanだとは限らないな…と悩んでいたところでした。
JavaScriptを使う方針でやってみます!
==========
メモ
for(var n in obj) console.log(n)
==========
C:\cur\vimcolorpy>c:\cygwin\bin\patch.exe -b VimColor.py vimcolor-utf8.patch
patching file VimColor.py
==========
うーん。
なんか疲れた感がたくさん。
doukakuの「新しいお題の投稿」を自動化しよう。


= 西尾のひとりごと 2007-07-09
doukaku.orgでどたばたしていたけども
そろそろ本格的にJython本がヤバイらしい(汗)
==========
Django使い4人が全員「FedoraCoreよりFreeBSD」と言うのはなぜなんだろうか
==========
LL魂と未踏ユース成果報告会とがかぶっているorz


= 西尾のひとりごと 2007-07-10
セカンダリネームサーバとは何なのかを勉強中
==========
ネームサーバは一つ止まってしまっても大丈夫なように複数立てる
→複数のサーバのデータを同期する必要がある
→プライマリのデータをセカンダリにコピーする


==========
コメント詳細画面からコメント編集画面へ移動するブックマークレットを作ってみた
javascript: location.href = location.href.replace("comment", "admin/doukaku/comment")

だけど、そもそもリンクを書き換えてくれる方がいいなぁ。

$$("a[href]").forEach(function(x){x.href=x.href.replace("comment", "admin/doukaku/comment")})

こうか。
==========
4問くらい後でこんな感じのお題を出そう

C:\django\doukaku_proj>perl
$a = "Y"; for($i=0; $i < 5;$i++){print $a++;}
YZAAABAC
==========


= 西尾のひとりごと 2007-07-11
いつも持っている手提げ鞄を忘れた
でも、電車の中で読む本が入っているくらいだから大丈夫だと思ってそのまま来た
ビルの1階でカードキーがその鞄のポケットに入っていることを思い出したorz
==========
やっぱり削除や修正の機能は必要なんですかねぇ
==========
by 奥 一穂
投稿の質を高めるという意味では、修正機能はあってもいいと思います。
#削除はいらないかも
==========
削除を実装したら、修正したい人は削除して投稿し直せばいいかなぁと…
人にコメントされた後でコメント元を書き換えるのはよくないと思うので、修正機能は「修正中に他の人が返信したので書き換えられません!」という機能をつけないといけないのが面倒かなと思いました。
==========
by 竹迫 良範
見ているほうからすると修正の過程が見えると勉強にもなることも。 
削除じゃなくって非表示フラグみたいなものでもいいのかも。
==========
>見ているほうからすると修正の過程が見えると勉強にもなることも。

なるほど。

>削除じゃなくって非表示フラグみたいなものでもいいのかも。

レーティングで沈めるというのも一つの手ですね
==========


= 西尾のひとりごと 2007-07-12
FireBugの$$とかはブックマークレットで使えないけど、
Furebugのコンソールに決められた文字列を書き込むブックマークレットはできないかなぁ

==========
サーバを止めたつもりで止めてなかった…orz
データベースをいじってから上書きしたので
いじっている間の投稿が消えちゃったorz
アクセスログを見てもPOSTの内容は残ってないよなぁ…
もうどうしようもないか…(´・ω・`)

==========

= 西尾のひとりごと 2007-07-13
==========
Ajax勉強中

で、Ajaxでググってヒットしたものを見ていると
ブラウザの依存性によって異なるコードを自分で書いているので
Ajax ライブラリ 2007でぐぐった。

ウノウラボがヒットした。

役に立つウノウラボ。

http://jquery.com/
http://examples.learningjquery.com/rating/
http://mg.to/2006/01/25/json-for-jquery
このあたりを使えばやりたいことができそうだ。
==========
あ、月曜休みなのか。
==========


= 西尾のひとりごと 2007-07-17
http://adp.daa.jp/archives/000265.html

MTのテンプレートがやたらとDIVを二重にしていたのは
こういうことだったのか…
==========
スタイルシートが難しいということだけがよくわかった。
==========
jQuery勉強中
==========
スターレーティングは微妙にやりたいこととずれているので読んで改造するより自分で作る方が楽だと判断した。
==========
http://jquery.bassistance.de/api-browser/
==========
jQueryに値を渡すためにDjangoのカスタムテンプレートタグ作っててちっともAjaxの勉強になってない!
==========
$(".rating .button").click(function(){
  alert("hello");
  return false;
});
が動かないなぁと思ったら
$(document).ready(function(){
})
で包まないといけないのか…


お、動いた動いた。
==========
JavaScriptはデフォルトでグローバル変数なので
x = $(this);
って書いておけば$(this)の中身についてFirebugのコンソールでxって書いて中身をインスペクトできる。
==========
やばい、Django+jQueryが面白すぎる。
jQueryで

$.getJSON(url, function(json){...})

ってアクセスして、DjangoでPythonの辞書をstrで文字列化して

    return HttpResponse(str(some_dictionary))

と返したら、
コールバック関数の引数のjsonに
JavaScriptのハッシュとして入ってやがる!
なんだこのシームレスさは!
==========
そしてjson = {"hoge": value}の時、json.hogeでvalueにアクセスできるのか…。なんて楽ちんなんだ。
==========
やったー、できたー!初Ajaxー!
==========


= 西尾のひとりごと 2007-07-18
昨日のまとめ

キバヤシ「Pythonは実はJavaScriptだったんだよ!」

その他「な、なんだってー ΩΩ Ω」
==========
crontab -eしている最中についうっかりC-xC-cやってしまった。
固まった。
==========
>必要であれば,モデルに __str__() メソッドを定義してもかまいませんが,明確な理由がないかぎりそうするべきではありません.

がーん
全部__str__で定義しているよー
__unicode__を使うべきだったのかーーー
==========
ラボマシンでhoge.pyがhogeだけで起動できないのはなぜかと思ったらPATHEXTを指定していないからか。
==========
LivedoorReaderのソースコードを読んでいたのだけど
どこがスクロールのコードかいまいちわからない
==========
reader_main.jsの2005行目
        scroll_page: function(num){
                var h = $("right_container").offsetHeight - 40;
                var c = 
                        (Config.scroll_type == "page") ? h:
                        (Config.scroll_type == "half") ? h / 2 :
                        (Config.scroll_px || 100);
                $("right_container").scrollTop += c * num;
        },

==========
VimColorを使うには一度コードを外部にはき出す必要があるんだな。

http://ja.doukaku.org/comment/60/
このコードもきちんとハイライトされることを確認した。
どうしようかなぁ。pygmentsと差し替えようかなぁ。

Windowsで動かないんだよなぁ、VimColor。
==========
ローカルでテストができなくなるんだよなぁ。VimColor。

とりあえずサーバが来てからにしよう。

==========
Windowsで動かない原因はここかも

"%s %s %s -s %s >/dev/null 2>&1"%(VIM_COMMAND, VIM_OPTIONS, filepath, shtemp)

Vimを適当なオプションで起動して、
ハイライトしたいコードとマークアップするためのVimスクリプトを渡し、
標準出力を捨ててエラー出力を標準出力にリダイレクト?
==========
ダメだなぁ、
そこらへんをいじってVimが起動されるようにはなったけども
出力されるはずのファイルが出力されない
VimスクリプトがWindowsのパス名を受け取ってエラーになっているとか、
そもそもCygwinのVimだとダメだとか
原因はなんだかわからないけども面倒そうだ。やめよう。
==========
自分のノーパソで動かすと30分かかったテストが
ラボマシンで動かすと2分かからなかった。
なんなんだその差は。


= 西尾のひとりごと 2007-07-19
CSSを勉強した。
サイドバーが落ちてしまうのは、
サイドバーをマイナスマージンで上に重ねてしまえばいいのかも。

==========
ラボの性能のいいマシンでlinkcheckerを書けると
Djangoの開発用サーバが耐えきれなくてconection refusedの嵐
-t 2とやってスレッドを2個にしたら出なくなった(デフォルトは10個)
つぎは-t 6を試す。

==========
いまさら気がついたんだけども、
ラボマシンにDjango最新版を入れて、
コードをそれに併せて修正したのは間違いだ
今サーバで動いているのと同じバージョンを入れて、
レンタルサーバに乗り換えるときに新しいのにすればよかった
今からサーバの方のDjangoを新しいのにかえるか、どうするか…
==========
とりあえず仕方がないのでサーバ側のDjangoを最新版にしたいと思う
さて、どうしたものか…

まず
mkdir subversion
cd subversion
svn co http://code.djangoproject.com/svn/django/
してみた。
しまった。djangoフォルダを作ってからにすればよかった。
==========
あ、勝手にフォルダ作られてた。よかった。

==========
/home/nishio/subversion/django/trunk/django

シンボリックリンクの引数の順番を間違えて二回やって循環参照になってしまった
削除してsvn upしたけど戻ってこない…
全部消してチェックアウトからやり直し

こんどは
svn co http://code.djangoproject.com/svn/django/trunk


==========
あれー。

>>>
Mod_python error: "PythonHandler django.core.handlers.modpython"

Traceback (most recent call last):

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 287, in HandlerDispatch
    log=debug)

  File "/usr/lib/python2.4/site-packages/mod_python/apache.py", line 464, in import_module
    module = imp.load_module(mname, f, p, d)

  File "/usr/lib/python2.4/site-packages/django/core/handlers/modpython.py", line 5, in ?
    from django.utils.encoding import force_unicode

ImportError: cannot import name force_unicode

==========
なんとかうまくいった。

==========
結局、サーバ上もローカルのもDjango本家から直接Subversionで取ってくるようになったので、
今後のアップデートやうまくいかなかったときの巻き戻しも簡単(なはず
==========


= 西尾のひとりごと 2007-07-20
がーん
JSのreplaceは1個しか置き換えないのか

JS
>>> "aaaaabbbbbb".replace("b", "c")
"aaaaacbbbbb"

Python
>>> "aaaaabbbb".replace("b", "c")
'aaaaacccc'
==========
がーん、JSの正規表現は後読みをサポートしていないのか!
==========
>>> "http://ja.doukaku.org/comment/27/".replace(/[^:\/]\//, function(m){return m + "admin/doukaku/"})
"http://ja.doukaku.org/admin/doukaku/comment/27/"

こう書いた
==========
Sqliteの全文検索は仮想テーブルを使っている
Sqliteとsennaをつなぐこともできる
==========
でもMySQLつかうほうがいろいろ楽そうだなぁ。
==========
とりあえず検索して試すだけなら正規表現で全部をなめるのは簡単に実装できそう
とりあえずそれでいいかー。
サーバ移転の際にバックエンドをSQLiteからMySQLに変更しておくか。
まだデータベースに依存するようなコードは書いてないから簡単に移行できるだろうし。
==========
プロトタイプができたのにGETじゃないと検索結果にリンク張れないと思ってGETにしたり、
URLがかっこわるいと思って小細工したりしてしまった。
==========
冷静に考えると動くものができた時点でコミットしておくべきだったのに
変なことをして動かなくなって動くようにするのに時間がかかった
==========
どうしてローカルでは動くのにサーバでは動かないんだろう

==========
ローカルのPysqliteが2.3.2で
サーバのPySqliteが1.1.7だった
そういうことか
==========
yumの使い方を調べてみた
yum search python

>>>
python-sqlite.i386                       1.1.7-1.2.1 
<<<

いや全然古いからっ
==========
結局、PySQLiteやPythonやmod_pythonをまとめて最新版にするのは大変なので
新しいサーバに移転するタイミングで最新にすることに。
で、問題はPySQLiteかSQLiteのどちらかが古くて正規表現での検索ができないというところにあるので、
自分で正規表現で検索するように書き換えた。
6行書き換えるだけだったので戻すのも簡単。

とりあえずたくさんの人がアクセスすると負荷がすごそうだけど
社外秘で発表会の時に見せるくらいならできそうだ
==========


= 西尾のひとりごと 2007-07-23
(ト書き:何気なくスルーしているけど26歳の誕生日)

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/656

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.