Python

DevQuiz スライドパズル 解答

本日、Google Developer Day 2011の参加資格をかけたDevQuizが終了しました。 というわけで、今年一番の難問だったスライドパズルの回答を掲載します。 結果から先に言うと、5000問中4562問正解でした。 が、特別なアルゴリズムを使っているわけでもなく、計…

nginxとgunicornとsupervisorを連携させる

私はVPSと自宅LAN内でDjangoで作った個人的なwebサービスをいくつか運用しています。 現在の運用環境はapache+mod_wsgiですが、ネットで色々調べていると、nginxとgunicornとsupervisorを組み合わせるのが旬(?)のようなので、その方法について色々調べたこと…

Djangoのモデル継承でポリモーフィズムを実現する

Djangoのモデルクラスは継承が可能ですが、基底クラスのオブジェクトを派生クラスのオブジェクトに変換する手段がデフォルトで存在しないため、普通のオブジェクト指向プログラミングのように、派生クラスでメソッドをオーバーライドしてオブジェクトの振る…

Qt4のQFileSystemWatcherでファイルの更新検知を行う

プログラマの方々なら、ファイルを更新したときに自動的にあるアクションを実行したいと思うことが、一度はあると思います。 そのようなタスクを実行するプログラムを書くには、ファイルシステムを監視して、ファイルの更新を検知する必要があります。 ファ…

pythonでファイナンス計算

先日会社で退職金の説明会がありました。それによると退職金の一部を確定拠出年金として自分で運用しなくてはいけないとのことで、ポートフォリオを設計する必要あります。今時は各種金融機関がポートフォリオのシミュレーターを公開していますし、Excelを使…

Rubyメソッドのアラウンドエイリアスについて

Rubyで末尾再帰最適化をする。を読んで思ったこと。 このエントリやメタプログラミングRubyでメソッドのアラウンドエイリアスを定義する際に、古いメソッドに別名をつけてから新しいメソッドを定義しています。以下はメタプログラミングRubyの例。 class Str…

Emacsのauto-insertでテンプレートを自動生成する

プログラムの単体テストを書く場合や、各種フレームワークを使用してプログラムを書く場合などは、ある規則にそってファイル名を付けると思います。(例えば単体プログラムのソースファイル名は"モジュール名_test.py"(Pythonの場合)など) Emacsのauto-insert…

PythonでWEBページをクローリングする時のTips

PythonでWEBページをクローリングする時のTipsをまとめてみました。 urllib2.urlopenのデフォルトのユーザーエージェントを変更する PythonでURLを開くには、urllib2.urlopenします。 urllib2.urlopenは、デフォルトで"Python-urllib/(Pythonのバージョン)"…

Djangoのデータベースをsqlite3からMySQLに移行したときにハマったこと

sqlite3はデータベースが1つのファイルで簡潔するので、バックアップがファイルのコピーで済む等、扱いが非常に簡単です。 そのため僕はDjangoのアプリケーションを作るときは、sqlite3を使用しています。 しかし、sqlite3ではトランザクション実行時にファ…

PythonとRubyの変数のスコープのまとめ

僕が普段使用するPythonとRubyの変数のスコープについてまとめてみました。 Python 1. if文やfor文などの制御構造はスコープを作らない。 次のプログラムでは、if文の内側と外側のスコープは共通なので、if文内でaが上書きされてa=1が出力されます。 a = 0 i…

radikoを録音して後で聞くためのプログラムを作ってみた

radikoを録音して、iPhoneなどで聞くためのプログラムを書いてみました。 といっても、rtmpdumpで録音、ffmpegでエンコードし、gmailで送信するだけのプログラムです。 僕はこれを使って、朝のラジオ番組を仕事終わりの電車の中で聞いています。ただし、プロ…

GAEでDocutilsを使う方法

GAEで動くアプリケーションでDocutilsを使おうとしたところ、何故かエラーが発生してしまいました。エラーメッセージを読むと、GAEでは使用不可能なAPIを、Docutilsが内部で使用しているため、このようなエラーが発生してしまうということが分かりました。こ…

DjangoでJavaScriptの国際化を行う方法

前回のエントリ「GAEでポケモンのデータベースサイトを作成しました - saito’s blog」で紹介したサイトでDjangoの国際化機能でJavaScriptの翻訳を行う際に,いくつかハマったことがあったので,ここにまとめておこうと思います.Djangoのリファレンスによる…

GAEでポケモンのデータベースサイトを作成しました

ここ最近、Google App EngineとDjangoを使って、新作ポケモンのデータベースサイトを作っていました。デザインは全然ですが、一応それなりの機能が揃ってきたので、このブログで紹介したいと思います。 Top Page | Datebase & Calculator for Pokémon Black …

Docutilsのインラインマークアップを自作する

以前、Docutilsのディレクティブを自作する - saito’s blogでreStructuredTextのディレクティブを自作する方法を紹介しました。サンプルプログラムでは、はてな記法のリンク作成支援に似た機能をreStructuredTextに追加しました。しかし、ディレクティブはイ…

Docutilsのディレクティブを自作する

現在、Djangoの勉強を兼ねて簡単なCMSを作成しています。CMSに必要な機能の1つに、Wiki記法やはてな記法のような軽量マークアップ言語のサポートがあります。DjangoではデフォルトでTextile、Markdown、reStructuredTextの3種類のマークアップ言語が利用可能…

高階関数としてのデコレータに関する考察

デコレータはPython2.4で追加された構文で、関数やメソッドのラッピングを行ないます。 @deco1 def foo() pass @deco2(args) def bar() pass このプログラムは以下のプログラムと等価です。 def foo() pass foo = deco1(foo) def bar() pass bar = deco2(arg…

コメント投稿後のページの変更

Djangoの日本語ページに載っていなかったので補足。render_comment_formを使ってデフォルトのコメントフォームを表示する場合は、対応するview関数でnextという名前の変数でコメント投稿後のURLを指定します。render_comment_formを使わない、またはcomments…

Pythonのcontextlibが便利

Python2.5から使用可能なwith文を使用すると、try...except...finally パターンをカプセル化することができます。 (Python2.5の場合、次の一文をファイルの先頭に記述する必要があります。) from __future__ import with_statement このwith文を使うと、例え…

PythonでRubyのStruct風の構造体を実現する

Rubyでは,Structクラスを用いることによって,特定のフィールドを持つクラスを簡単に作成することができます。 Foo = Struct.new("Foo", "foo", "bar") f = Foo.new(1, 2) p f.foo # 1 p f.bar # 2 一方、Pythonの場合、namedtupleというライブラリで同様の…