2008-03-29

TekTekを作った時にお世話になったものリスト+手のうち公開

TekTekにはまだ今後も追加機能をたくさん考えていますが、ここまででお世話になったものを感謝の気持ちを込めてここに書いておきます。

デザイン系
自分は絵心がないので、いろいろな素材にお世話になりました。

Open Source Web Design
サイトのデザインはここで配布されているオープンソースのデザインを拝借し、それに修正を加えて使用しています。非常に洗練されたものばかりで、すごく助かります。

PI Diagona Pack
アイコンはここから頂きました。すっきりしたかわいいアイコンで、気に入っています。

フリー素材 シンプルな吹き出しのイラスト・アイコン
吹き出し画像をここから頂きました。こういうのを作るのって、絵心がない自分にはなかなかむずかしいんですよ。

Seashore
画像の編集にはSeashoreというGIMPのMac版を使いました。


英語
英辞郎 on the WEB
英語サイトの制作のためにここで何度も何度も辞書を引いています。

プログラミング
開発は全てPythonとJavascriptで行いましたが、以下のライブラリのお世話になりました。

Django
WEBアプリのフレームワークとしてDjangoを使いました。

json.py
JSONの処理にはjson.pyを使っています。

Universal Feed Parser
RSSの処理に使いました。このライブラリはすばらしい。

pyaws
Amazon Webサービスのラッパーライブラリとして、pyawsを使いました。

jQuery 開発者向けメモ
Javascriptのライブラリとして、JQueryを使っていますが、ここのリファレンスなどには大変お世話になりました。

PopBox
書籍画像が飛び出す部分にはPopBoxというライブラリを使用しました。


API
各種大手サービスのAPIをふんだんに利用させていただきました。

Amazon WEBサービス
これはメインで使用しています。

Google ブログ検索
Googleのブログ検索のRSSを使って、TekTekの書籍紹介画面右のブログ一覧を生成しています。

Google Ajax Search API(+はてなブックマーク)
Googleの検索APIを使って、はてなブックマークの検索を行うことで、書籍紹介右の注目のレビューを表示しています。

TekTekをオープンしました

TekTek

書評が気になってしょうがない人のための書籍情報閲覧サービスTekTekをオープンしました。

こういう全日本&全世界公開型のサービスを作るのは経験不足ですが、まだいろいろ改善していきたいと思います。




ちなみにPythonとdjangoで作っています。

2008-03-12

djangoのi18nのset_languageリダイレクトビュー

またしても国際化ではまった。

djangoの国際化機能で用意されている、言語選択のビューset_languageは、公式ドキュメントではPOSTで渡すことになっているようだが、これはおそらく開発版での話で、今自分が使っている0.97preの段階ではGETで渡さないといけないようだ。
djangoの開発とその文書への反映速度の速さはすばらしいと思う。

2008-03-02

djangoの国際化アプリをOSXで作る時にはまる事。

OSXでdjangoの国際化アプリを作る場合、メッセージファイルの作成make-messages.pyでこける。
これはgettextのバージョンが古いから。最新のgettextを入れるとなおる。
gettextのインストールは、これに従った。

2008-03-01

djangoのgeneric viewsのobject_listでPythonの普通のlistを表示する

(以下、あまり詳しく既存の情報を調べず、手元のdjangoのコードを読んで適当に作ったもの。。)

djangoのgenericviewsのobject_listは便利だが、デフォルトではmodelのレコードしか表示できない。
一般のリストの中身などを表示する場合は、リストオブジェクトを適切にラップしてあげる必要がある。
そういう状況はマッシュアップサイトなどを作っていると、model以外からアイテムリストを取得したりするので、よくありますね。

以下、そのサンプル。
※get()メソッドでの例外の投げ方はあまり詳しく調べてないので、いい加減です。エラーが出るかも。
※まだpagenationさせて動かしていないので、その辺はこれからテストします。

from django.views.generic.list_detail import object_list
from django.core.exceptions import ObjectDoesNotExist

def list2genericviews(lst):
class GenList(list):
model = "GenList"
DoesNotExist = ObjectDoesNotExist
def __init__(self, lst):
self.extend([{"id": i, "value": x} for i, x in enumerate(lst)])
def _clone(self):
return self
def filter(self, pk=None):
return self[pk]
def count(self):
return len(self)
def get(self):
if len(self) == 0:
raise self.DoesNotExist("No item found in GenList")
if len(self) > 1:
raise AssertionError("There are multiple items in GenList")
return self[0]
return GenList(lst)

def show_list(request):
items = ["apple", "banana", "orange"]

#引数template_nameは必須です。
return object_list(request, queryset=list2genericviews(items), template_name="itemlist.html")

テンプレートitemlist.htmlはこんな感じ。
{% if object_list %}
<ul>
{% for item in object_list %}
<li>{{ item.value }}</li>
{% endfor %}
</ul>
{% endif %}