月別アーカイブ: 2012年3月

環境設定いろいろ

Djangoの勉強に合わせて、環境を構築する。
wikiにApacheのBasic認証付けたり、tmux入れたり、Emacsのキーバインド覚えたり。
Djangoの勉強より、こっちの方に力入れてしまいそうでコワい。

tmuxとEmacsのキーバインドがかぶってるのがちょっとうっとおしかった(二つともC-bを多用する)。
~/.tmux.confをいじって対応。
tmuxのPrefixをC-tに変更した。

設定ファイルの適用がPC再起動後だということを知らず、何度もターミナルを立ち上げ直したり。
UNIX、マダヨクワカラナイヨ…

そういえばwikiにBasic認証付けたらiPhoneのSafariから閲覧できなくなった。。(訂正:Safariでは閲覧できたけど、後からインストールしたブラウザアプリでは閲覧できなかった。理由は未だ不明)
Apacheの設定と関連あるのかしら?
出先でwiki見たいのでどうにか対応したい。

Wiki 運用開始

何となく思うところがあってWikiの運用を始めてみた。
備忘録とかメモ代わりに試しに使ってみる。

あと、iPhoneから手軽に閲覧、編集したいんだけどスマホ用のスキンとかって存在するのかしら?
ちょっとググってみた印象だと見つからない感じ。
もうちょっと探ってみるべきか。。

Djangoチュートリアル

Djangoをチクチクいじり始める。
Djangoドキュメントに載ってるチュートリアルを見ながら投票サイトを作った。

日本語版のチュートリアルはDjangoのバージョンがちょっと古い。
自分は最新の1.3使ってたせいで、掲載されているコードを忠実に再現しても動かなかった(新しいバージョンに対するフォローも書いてはあるけど、チュートリアル本文と別の場所に載ってた)。

手元のメモに残ってる限りだと、

Tutorial 3

  • url.pyのurlpatternsの引数をurl()で括る。

Tutorial 4

  • -details.htmlのフォーム記述前に{% csrf_token %}が必要。
  • views.pyのrender_to_response() の3番目の引数 として
    context_instance=RequestContext(request)を指定。

ここら辺に対して修正の必要アリ。

というか、初めから最新バージョンに対応してる英語サイト見て進めた方が良いかも。
で、チュートリアルの流れをつかむために日本語版を補助的に使う、というのがベストな気がした。

Calibreで pdf→mobi変換

Django Bookを読む、と決意した訳だけど、どうせだったら手持ちのKindleに入れてどこでも読みたい。
ところが用意されているのはpdfファイルのみでePub形式は見つからない。
前に書いたけど、普通のpdfファイルは文字が小さくてそのままKindleで読むのはちょっとツラい。

ということでpdf→mobi変換できるソフトを探して、CalibreというGUIベースの電子書籍管理ソフトを発見した。
書籍ファイルを色んな形式に変換したり、Kindleにワイヤレスでファイル転送したりする機能が搭載されていたりと、大分豊富に機能が取り揃えられているみたい。

で、実際に使ってみるとかなりお手軽にpdf→mobi変換することが出来た。

実際の手順は下図のような感じ。

たった4ステップの簡単なお仕事。
Django Book(全437ページ)の場合、この後1分半くらいの処理時間で、ファイルが出力された。

ただここで一つ問題が発生。
pdfのページ数や文書タイトルなどが含まれたヘッダがmobiファイル内のすべてのページに挿入されてしまっている。。

これを回避するためには変換時に詳細設定をいじくる必要がある。
このソフト、どうやらファイル変換時に元のファイルをhtmlに変換し、そのhtmlを所望の出力ファイルに変換しているみたい。
Calibreにはこのhtml形式の中間ファイルに対して正規表現で検索、置換する機能があって、これを利用することでヘッダを消す、などの自由な編集作業が可能になる。

検索置換の設定はConvert画面のSearch & Replaceで行える。
この画面には設定の入力フォームだけでなくhtml形式の中間ファイルを閲覧して、作ったパターンを試すためのウィザードなんかも用意されていたりする。

出力ファイルの細かいレイアウトがちょっとアレな感じだったりして、まだまだ完璧とは言いがたいけど、それなりに読める感じになっているので、しばらくコレを使ってKindleライフを送ってみよう。

Django

Webプログラミングを勉強して思ったのが、メンテナンスやら修正を考えて設計、実装するのがかなり大変だな、ということ。
もちろん他のプログラミング言語でも似たような問題はあるけれど、Web開発の場合、html、css、スクリプト、DB、URI構成などなど、考えなければいけない要素が多い印象。

ということで、Webサービス開発用のフレームワークについて勉強してみようかと思う。
Python向けにはDjangoが一般的らしいのでそれを触ってみよう。

Djangoの公式サイトやら解説サイトやらをざっと見た感じ次のような機能、特徴があるとか。

  • MVCデザインパターン: Model View Controller デザインパターンの採用による風通しの良いプログラム、メンテナンス性の高さ
  • O/Rマッパー: Pythonスクリプト内のオブジェクトとDBのデータ間の相互変換を行うモジュール
  • URLディスパッチャ: URLとPythonのコールバック関数をマッピングするモジュール
  • etc…

とりあえずはDjango bookとかいう公式の解説書があるようなので、それを読んでみることにする。

Private Library 制作記その2

以前紹介した蔵書管理システムの基本的な機能(蔵書の閲覧、追加、検索)を実装し終えた。
上の写真右側に見えるのが検索用フォームと、追加する書籍のISBNを入力するフォーム。

まだまだ実現したい機能はたくさんあるし荒削りだけど、とりあえずは必要最小限の構成は実現できた。
あとは認証機能付けてWeb繋がるところどこからでも参照出来るようにしたいなぁ。

ココにトップページの静的htmlだけ置いときます(フォームを無効化してある)。
ご参考までに。。

Python Webアプリ開発メモ

開発中の蔵書管理システムはPythonで実装してます。
今までPythonはちょっとしたデータ整形とか計算用スクリプトとかに使うのが主だったので、Webアプリで使うのは今回が(ほぼ)初めて。

ということで、いろいろと環境整えるのに苦労したりしたので、その過程で調査したものをメモ。


SimpleCGIHTTPServer
作ったCGIの動作をローカルで確認したいとき、わざわざマシンにApacheを導入するのは億劫。
なんで、その環境自体もPythonで用意する。
実はPython使うとシェルから下記のコマンド一行でCGIサーバを起動できたりする。

python -m CGIHTTPServer

あとは起動したディレクトリ内にhtbin、もしくはcgi-binと名付けたディレクトリを作成しその中に動作確認したいCGIを保存しておけばOK。
参考リンク(Running a Simple CGI Web Server)


デバッグ
Pythonの標準ライブラリに含まれているcgitbを使用する。
CGIソースの初めの方に下記の記述を入れておく。

import cgitb
cgitb.enable()

この2行を加えておくと、プログラム中でエラーが発生した際に、発生個所とその内容をブラウザ上で表示してくれる。
あとそもそもこれが起動しない場合はPythonの文法上の記述ミスであることが多いので問題の切り分けに使える。