ページ

2008年11月28日

作ったものリスト

以前作ったものの現在の置き場所リストです。

  • pyhabu : プラグインを組み合わせてRSSを取得・加工し、利用するためのPythonソフトウェア
  • pymixi : Pythonからmixiのサービスを利用するためのライブラリ
なんか忘れているような気もする。

2008年11月27日

Djangoのユーザ認証のあれこれ

Djangoでユーザ認証の仕組みはこのドキュメントにいろいろ書かれています。ログインの方法やユーザ情報の扱いはちゃんと書いてあるので、困ることはほとんどありません。

ログアウトはどうするのかなー、と思ってドキュメントを読んでもよくわかりません。結局urlpatternsに
(r'^accounts/logout/$', 'django.contrib.auth.views.logout'),

と書いてあげるだけでとりあえずは良さそうです。logout後の画面が/accounts/になってしまいますが、とりあえず、redirectさせて回避。こんなんでいいのだろうか?

ドキュメントを読んでいるとpassword_changeとかでパスワードの変更ができるらしいです。ログアウトを調べたついでにpassword_changeもやってみます。urlpatternsに次のように書けばよいらしい。
(r'^accounts/change-password/$', 'django.contrib.auth.views.password_change',
{'post_change_redirect': '/'}),
post_change_redirectを指定しないと例外がでたのでとりあえず、トップ画面に戻るようにします。でも、referの所に戻ればいいような気もしなくもないけど・・・。で、このpassword_changeはregistration/password_change_form.htmlがデフォルトのテンプレートして使われるので作ってあげます。僕のテンプレートはこんな感じ。

{% extends "base.html" %}

{% block content %}

{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}

<form method="post" action=".">
<table>
<tr>
<td>{{ form.old_password.label_tag }}</td>
<td>{{ form.old_password }}</td>
</tr>
<tr>
<td>{{ form.new_password1.label_tag }}</td>
<td>{{ form.new_password1 }}</td>
</tr>
<tr>
<td>{{ form.new_password2.label_tag }}</td>
<td>{{ form.new_password2 }}</td>
</tr>
</table>

<input type="submit" value="Change" />
<input type="button" value="Cancel" onclick="javascript:window.location='/';"/>
<input type="hidden" name="next" value="/" />
</form>

{% endblock %}

というか、login.htmlとほぼ同じ。formという変数に何があるかはdjango.contrib.auth.formを読まないといけない?というか、form.xxxといちいちテンプレートに書かないといけないものなの?まだ、あまり、フォームの取り扱い方は調べていないので、今はこの程度にしておきましょう。
どうでもいいけど、password1とpassword2っていうフィールドはないよなー。

それから、簡単に新規のユーザを作る方法はあるんだろうか?

2008年11月26日

Djangoのテンプレートのlinebreaksとか

Djangoのテンプレートの{% XXX %}とか{{ XXX }}とか、なんとなーくキモイです。なれません。免疫ができません。それでも、組み込みフィルタは便利です。UNIXのパイプみたいにフィルタをつなげられるのはいいです。UNIXに害されているだけかもしれません。

過去の経緯はしりませんが、デフォルトだと文字列は勝手にエスケープしてくれています。なので、エスケープ関係はどうでもいいです。今回はプレーンテキストの改行をHTMLとして処理したかったのですが、linebreaksもしくはlinebreaksbrで処理できます。その後、httpで始まるものはリンクにしたいなー、と思ったら、linebreaksbr|urlizeとすればいいだけです。urlizeだとリンクが馬鹿長くなることがあるので、切り詰めたければ、urlizetruncを使えばよいらしい。

でも、やっぱりなれない。そもそも、何を作っているかは企業秘密なのです。まあ、半分遊びなんですが。

2008年11月25日

Djangoのテンプレートのlinebreaks

最近、Djangoで遊んでいます。と言っても、自分で書いたコードの量はテンプレートを含めて300行に満たないですが。

さて、linebreaksを使えばプレーンテキストの開業をHTMLの形式に変換してくれるらしいです。{{ myvalue|linebreaks }}とすれば<p>hoge</p><p>fuga</p>のように変換してくれるらしいです。どこぞのテンプレートは自前でsplitlines()して<br/>を入れていたので、それに比べれば楽だなー、と一瞬思って、次の瞬間

hoge


fuga
が<p>hoge</p><p>fuga</p>になっていることを知り、がっくり。改行は無条件に<br/>に置換してほしいです。実は、置換してくれる魔法があるとか?教えてエロい人。

2008年11月18日

DjangoのO/Rマッパー

使いやすいような、使いにくいような、単に慣れていないだけのような・・・。
何使っても、レリーションは僕にとっては難しい。で、いろいろやってやりたいことはできそう。時々、SQLを直接書いちゃえという誘惑にかられる。


2008年11月17日

Ubuntuをインストール

LL温泉でMacのParallelsのUbuntuが壊れたので(壊れていることが判明した)、インストールし直しました。以前インストールしたときは少し苦労したような気がします。今回はParallels 4を使っていたのですが、新規のイメージを作るプラスボタンを押して、isoイメージを指定しただけです。Ubuntuのおかげか、Parallelsのおかげかしりません、楽ちんです。

再インストールして、起動すると、ParallelsのメニューからInstall Parallels ToolsでParallelsのツールをインストールします。といってもこれは、必要なものを/cdromにマウントするだけなので、cd /cdrom; sudo ./installでインストールします。ウィザードになっているのでNextを押して行くだけです。簡単です。

再起動した後、パッケージのアップデートです。これは時間がかかります。disk ioやネットワークへのアクセスがあるので遅くなります。そしてUbuntuがreadyの状態になりました。

Parallels 4になってCompizの3Dエフェクトが使えることを期待したのですが、残念ながら使えませんでした。さあ、これでPlaggerをインストールできるぜ。

ところで、ターミナルでemacsって打つと、

プログラム 'emacs' は以下のパッケージで見つかりました:
* emacs21-nox
* emacs22
* emacs-snapshot-nox
* e3
* emacs-snapshot
* emacs22-gtk
* emacs21
* emacs22-nox
* jove
次の操作を試してください: sudo apt-get install <選択したパッケージ>
bash: emacs: command not found
って表示されました。なんか、ubuntuすげー

2008年11月15日

とりあえず

今回のお泊まり会でこっそりやろうと思っていたことは、だいたいできた。えー、でもほとんど遊んでたのでちょっとだけしかやってないのですが・・・。それから最大のミッションは、日本では唯一のホーバークラフトにのることと、子供の本にのっていた「ゆふいんの森」にのることです。

ちなみに、お泊まり会とはLL温泉です。

Djangoでテーブルが作れない

Djangoでモデルを作ってpython manage.py syncdbをすると

Error: One or more models did not validate:
auth.message: Accessor for field 'user' clashes with related field 'User.message_set'. Add a related_name argument to the definition for 'user'.
logs.message: Accessor for field 'author' clashes with related field 'User.message_set'. Add a related_name argument to the definition for 'author'.
と言われて、怒られます。models.pyはこんな感じ。

from django.db import models
from django.contrib.auth.models import User

class Message(models.Model):
    author = models.ForeignKey(User)

のようにしているだけです。a2cのDjango 0.7とかではちゃんと動いています。下手にDjangoに手を出した僕が悪いのでしょう。Pylonsでもいいような気がしてきた。

そして、ここのお達しによると、エラーメッセージに書いてあるようにForeignKeyの引数にrelated_nameを指定すればよいらしいです。related_nameを指定したらちゃんとデータベースができました。

ついでにエラーメッセージのcrashがclash。それとも僕の知らない単語?

金鱗湖

Komodo EditをVersion5にする

ParallelsのUbuntuのイメージが壊れていました。Parallelsをバージョン4にしたせいじゃなく、多分、古いMacBookから持ってくるときに失敗したのでしょう。なので、Komodo Editのバージョンが5になったらしいので、バージョンアップしました。LLとは関係ありません。

バージョンアップしたら設定がすべて消えていました。悲しいです。アドインももう一度インストールし直さないといけません。ありえない・・・。しかも、5に対応していないものも沢山あります。まあ、僕は最低限、Source TreeとTabSwitcherさえ動けばいいので大丈夫そうです。ただ、無料のKomodo Editならまだしも、割と高いKomodo IDEだったら許せないかもしれません。

あとは、まあ、そこそこ快適です。

紅葉だ

X-MAC-JAPANESEって何だ?

Djangoで遊んでいたらX-MAC-JAPNESEでデコードできないと怒られます。自分で調べるのがめんどくさいので、a2cに聞くとここを教えてくれます。あとは、システムのデフォルトエンコーディングをutf-8に書き換えた方がいいというお達しも。前者はともかく、後者はいやです。以前Zope3で似たような問題があってutf-8にすれば動くけど、システム全体の設定を変えちゃうので動かないものがあるかもよ、とありました。また、他の環境に持って行くときにめんとっちいことなると。なので、前者のやつだけ対応します。

該当するtzinfo.pyをみるとなんかがんばっています。無条件にDEFAULT_ENCODING = "utf-8"でいくね?と、始めたばかりの初心者は思ってしまいます。文字コード周りはバグの温床になりやすいので、なるべく複雑にしたくないし、プログラマが指定できるのであれば面倒でもそうした方がよかったりもします。まあ、そんなこんなで、tzinfo.pyを書き換えればちゃんと動きました。作りかけなので、他のところが動きませんが。

2008年11月14日

Djangoのプロジェクトを作る

a2cにせかされてインストールしたままになっていたDjangoでプロジェクトを作ります。

$ django-admin.py startproject myproj

で、「Python2.6では動かないぞ」と脅されたので

$ cd myproj
$ python manage.py runserver

します。ちゃんと動きます。だまされました。

ゆふいんの森

ホーバー乗った

ホーバー

羽田だ

こいつに乗るんだ。

2008年11月11日

マクブクたんはやっぱり重い

体を鍛えるためにMacBookは重いのである、とどんなに主張してもことあるごとに軽いノートが欲しくなります。欲しくなるだけで踏み込めませんが。

先週、ルータを買うためにヨドバシに行って、ついでにNetBookたちをみてきました。NECのNetBookですが、上品な佇まい?僕にはすごーくかっこわるいノートにしか見えませんでした。EeePCとかの方がまだましです。10年前であれば、かっこ良かったのかもしれません。でも、キーボードとかは実用的に使えそうです。でも、どんなに実用的であろうと、自分の美意識を満たせないんじゃな・・・。ついでに言うと、僕はMacBookAirが出た頃からあの手の色や質感が好きになったので、NetBookではHPのやつがいいけど、CPUが・・・。でもって、NetBookどれも重すぎ。Letsに惹かれてしまうけど、高い。なので、iPhoneがあるからいいのさ。

2008年11月7日

マクブクたんにDjangoをインストールしたよ

でも、インストールしただけだよ。

DjangoのページからDjango-1.0.tar.gzをダウンロード。そして、

$ tar xf Django-1.0.tar.gz
$ cd Django-1.0
$ sudo python setup.py install
で終わり。ブログのエントリにするほどのことか?で、Djangoで何をしようとしているかは秘密。

2008年11月5日

子供は上から降ってくることもある

写真は先週末、わが家の4歳児。3歳ぐらいから時々登ってい
る。

2008年11月4日

MobileFilesを使う

MobileFiles」というiPhoneからiDiskにアクセスするソフトがでたのでインストールしてみました。iPhoneをストレージとして使うソフトはいくつかあり、僕はAirSharingというソフトを入れていますが、まあ、使いかってはあまりよくありません。どちらかと言えばMobileMeのiDiskがみれればいいと思っていたので、このソフトはいい感じです。

で、iDiskにアクセスしてパワーポイントのファイルを開くと編集はできませんが、中身はみれます。いい感じです。いい感じついでにKeynoteを開いてみます。おー、だめじゃん。Keynoteは一個のファイルじゃなくって複数のファイルを寄せ集めたディレクトリ構造になっているので、そのディレクトリが見えるだけです。残念。まあ、そのへんはそのうちなおるとして、iPhoneだけ持ち歩けばプレゼンできる日は来るのでしょうか?(ちなみに追加のケーブルはなしね)