サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
saitodevel01.hatenadiary.org
前回のエントリ「GAEでポケモンのデータベースサイトを作成しました - saito’s blog」で紹介したサイトでDjangoの国際化機能でJavaScriptの翻訳を行う際に,いくつかハマったことがあったので,ここにまとめておこうと思います. Djangoのリファレンスによると、以下の手順によって、JavaScriptを翻訳することができます。 1. JavaScriptのソースファイル内の翻訳したい文字列をgettext()やngettext()で囲んでおく。 2. 次のコマンドでJavaScriptの翻訳カタログdjangojs.poを作成する。 django-admin.py makemessages -d djangojs -l ja 3. 作成したdjangojs.poを編集する。 4. 次のコマンドで翻訳カタログをコンパイルする。 django-admin.py compi
Mac上のEmacsでcommandキーをメタキーとして使う方法は、こちらのサイトなどで紹介されていますが、ここではMac上で仮想化したLinuxでcommandキーをメタキーとして使う方法を紹介したいと思います。 commandキーはLinuxからはsuperキーとして認識されるので、x-super-keysymという変数の値を変更することによって、commandキーの挙動を変更することができます。 次のようなelispスクリプトを.emacs.elに追加することで、Macと仮想化したLinuxの両方でcommandキーとoptionキーを入れ替えることができます。 (defun mac-window-system-p () (or (eq window-system 'mac) (eq window-system 'ns))) (defun x-window-system-p () (
以前、Docutilsのディレクティブを自作する - saito’s blogでreStructuredTextのディレクティブを自作する方法を紹介しました。サンプルプログラムでは、はてな記法のリンク作成支援に似た機能をreStructuredTextに追加しました。しかし、ディレクティブはインラインで書くことが出来ないので、前回のサンプルでは、 * google記法 : |google記法| * amazon記法 : |amazon記法| * wikipedia記法 : |wikipedia記法| * isbn記法 : |isbn記法| .. |google記法| google:: はてな .. |amazon記法| amazon:: はてな .. |wikipedia記法| wikipedia:: はてな_(企業) .. |isbn記法| isbn:: 4798110523 近藤(20
僕が普段使用するPythonとRubyの変数のスコープについてまとめてみました。 Python 1. if文やfor文などの制御構造はスコープを作らない。 次のプログラムでは、if文の内側と外側のスコープは共通なので、if文内でaが上書きされてa=1が出力されます。 a = 0 if True: a = 1 print "a = %d" % a # a = 1 2. 関数定義とクラス定義では新しいスコープが作られる。 関数定義やクラス定義では新しいスコープが作られるので、関数定義の内側と外側で同名の変数が存在しても、両者は区別されます。 次のプログラムでは、関数foo内で変数aに代入を行っていますが、この場合fooの内側の変数と外側の変数は別物なので、外側の変数が上書きされることはありません。 a = 0 def foo(): a = 1 print "a = %d" % a # a =
現在、Djangoの勉強を兼ねて簡単なCMSを作成しています。CMSに必要な機能の1つに、Wiki記法やはてな記法のような軽量マークアップ言語のサポートがあります。DjangoではデフォルトでTextile、Markdown、reStructuredTextの3種類のマークアップ言語が利用可能です。しかし、せっかく自分のCMSを作るので、マークアップ言語も自分仕様にしたいものです。かといって、パーサーを一から自分で作るのは大変なので、ここではDocutilsを拡張するというアプローチを取ることにします。 DocutilsはPyhtonで書かれたテキスト処理用のツール群及びライブラリで、reStructuredTextという形式で書かれたテキストをHTMLやTeXに変換することができます。Docutils及びreStructuredTextについては以下のサイトを参考にしてください。 htt
私はVPSと自宅LAN内でDjangoで作った個人的なwebサービスをいくつか運用しています。 現在の運用環境はapache+mod_wsgiですが、ネットで色々調べていると、nginxとgunicornとsupervisorを組み合わせるのが旬(?)のようなので、その方法について色々調べたことを書きたいと思います。 具体的には、nginxがリバースプロキシ兼Webサーバとして、キャッシュと静的ファイルの配信を担当し、gunicornがバックエンドとして動的なページ生成を担当し、supervisorがサーバプロセスの監視を行う、という構成です。 環境としては、CentOS 5.X を想定しています。 nginxのインストール CentOSにnginxをイントールする方法はこちらのページに詳しく書かれているので、それを参考にしました。configureの引数のうち、追加した方が良さそうなもの
sqlite3はデータベースが1つのファイルで簡潔するので、バックアップがファイルのコピーで済む等、扱いが非常に簡単です。 そのため僕はDjangoのアプリケーションを作るときは、sqlite3を使用しています。 しかし、sqlite3ではトランザクション実行時にファイル全体がロックされるので、複数プロセス・スレッドから同時に書き込みを行うような用途の場合、別のデータベースエンジンを使用した方が良いと思われます。 僕は今、一定時間ごとにwebページをクローリングして、得られたデータをデータベースに保存するようなプログラムを今書いています。 cronで指定したインターバル以内にプログラムが終了しなかった場合、古いプロセスと新しいプロセスで同時にデータベースへのアクセスが発生してしまい、うまくデータベースへの書き込みが出来ないという自体に陥ってしまいました。 そこで、データベースエンジンをsq
先日会社で退職金の説明会がありました。それによると退職金の一部を確定拠出年金として自分で運用しなくてはいけないとのことで、ポートフォリオを設計する必要あります。今時は各種金融機関がポートフォリオのシミュレーターを公開していますし、Excelを使って計算するという方法もありますが、ここでは例によってpythonでポートフォリオの設計をやってみます。 実は、pythonにはnumpyやscipyといった科学計算のライブラリやcvxoptという最適化計算のライブラリがあるので、それらを利用すれば簡単かつ高速に最適なポートフォリオを計算することができます。 ちなみに、僕はファイナンス理論の専門家ではないので、ここに書いてある記述が正確であるという保証はできません。あしからず。 分散共分散行列を計算する 各投資対象のリスクと投資対象同士の相関係数が分かっているならば、分散共分散行列は行列計算で計算で
プログラマの方々なら、ファイルを更新したときに自動的にあるアクションを実行したいと思うことが、一度はあると思います。 そのようなタスクを実行するプログラムを書くには、ファイルシステムを監視して、ファイルの更新を検知する必要があります。 ファイルの更新を検知する方法として、2つの方法が考えられます。 1つ目の方法は、一定時間間隔でファイルの更新時間をポーリングする方法、2つ目の方法は、OSのAPI(Linuxのinotify等)を使う方法です。 1つ目の方法の場合、監視したいファイルが少数の場合は問題ありませんが、監視したいファイルが増えた場合にパフォーマンスが悪化すると思われます。 2つの方法の場合、OSのAPIを使うためにC言語を書く必要があるため、実装が容易ではありません。 また、基本的にファイル監視のAPIはOS固有のAPIであるため、複数OSで動作しないという問題点もあります。 O
以前のエントリでpt1をGUIで操作するためのプログラムを紹介しました。 スナップショットはこんな感じです。 このプログラムは単に内部でrecpt1を実行しているだけなので、実際に地デジを視聴するにはvlcなどのメディアプレイヤーを別に起動しなくてはいけませんでした。もっとスマートな方法でできないか調べていたところ、vlcのエクステンション作成機能を使えばできそうだと分かったので、実際にやってみました。 vlcのエクステンションを使うにはバージョンの1.1以上が必要だそうで、ubuntu10.04で標準でインストールできるvlcのバージョンではエクステンションを使うことができません。なので、vlcのnightly buildを使うか、もしくはvlcをソースからコンパイルする必要があります。僕はソースからコンパイルする方法を試したので、その方法をここで紹介します。 vlcのコンパイル vlc
最近、仕事でC言語での組み込み系の開発に携わっています。 開発中のコードを眺めていると、ヘッダファイル内にstatic関数のプロトタイプ宣言を記述していたり、ヘッダファイル内で不必要に他のヘッダファイルをインクルードしているなど、ヘッダファイルの書き方が分かっていないと思われる箇所が多々見られました。 実際、C言語の入門書でもヘッダファイルの書き方を詳しく説明しているものは、僕の知っている限りでは存在しないので、C言語を使っていてもヘッダファイルの正しい書き方を知らない人が少なくないのではないかと思われます。 そこで、このエントリでは、C言語のヘッダファイルの書き方について、僕が知っているテクニックをまとめてみました。 インクルードガードを書く ヘッダファイルファイルで他のヘッダファイルをインクルードしていると、いつの間にか同じヘッダファイルを2回インクルードしてしまうことがあります。 例
PythonでWEBページをクローリングする時のTipsをまとめてみました。 urllib2.urlopenのデフォルトのユーザーエージェントを変更する PythonでURLを開くには、urllib2.urlopenします。 urllib2.urlopenは、デフォルトで"Python-urllib/(Pythonのバージョン)"というユーザーエージェントを使用しますが、Wikipediaなど一部のページではこのユーザーエージェントに対し403 Forbiddenを返してきます。以下のコードによってデフォルトのユーザーエージェントを変更すると、403エラーを回避することができます。 import urllib2 opener = urllib2.build_opener() opener.addheaders = [('User-agent', 'your user agent strin
プログラムの単体テストを書く場合や、各種フレームワークを使用してプログラムを書く場合などは、ある規則にそってファイル名を付けると思います。(例えば単体プログラムのソースファイル名は"モジュール名_test.py"(Pythonの場合)など) Emacsのauto-insertモードを使って、特定の名前のファイルを作成したときに、専用のテンプレートを自動生成してくれると便利だと思い、その方法を調べてみました。 ひげぽんさんのブログとその元ネタにほぼ正解が紹介されているのですが、lispのマクロを使って色々な種類のテンプレートを簡単に作れるようにしたので、新しいエントリを書いてみました。 ここではPythonの単体テストのソースファイルの雛形を自動生成するためのElispを書いてみます。 まず、~/.emacs.d/insertにunittest_template.pyという名前のテンプレート
Rubyで末尾再帰最適化をする。を読んで思ったこと。 このエントリやメタプログラミングRubyでメソッドのアラウンドエイリアスを定義する際に、古いメソッドに別名をつけてから新しいメソッドを定義しています。以下はメタプログラミングRubyの例。 class String alias :real_length :length def length real_length > 5 ? 'long' : 'short' end end この方法の問題点はエイリアスしたメソッド(この例の場合real_length)が残ってしまうことです。メソッドオブジェクトを使えばエイリアスしたメソッドを残すことなくアラウンドエイリアスを行うことができると思ったので、実際にやってみました。 以下のプログラムは、Rubyで末尾再帰最適化をする。のプログラムをメソッドエイリアスではなくメソッドオブジェクトを使って書いた
radikoを録音して、iPhoneなどで聞くためのプログラムを書いてみました。 といっても、rtmpdumpで録音、ffmpegでエンコードし、gmailで送信するだけのプログラムです。 僕はこれを使って、朝のラジオ番組を仕事終わりの電車の中で聞いています。 ただし、プログラムを使うには、radikoが受信できてcronが使えるサーバーが必要です。 なので、かなり使えないプログラムであることは間違いありません。 もしこのプログラムを使う場合は、録画するチャンネル、録画時間、Gmailのアカウント情報などを適宜変更してください。 import os import tempfile import smtplib from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart from emai
Macでvncを使ってLinuxと画面共有を行う方法について書きます。動作環境はvncクライアント側がMac OS X Snow Leopard、vncサーバー側がubuntu 10.04です。 Linux側の設定はこちらのサイトの内容をそのまま使用したので省略します。 vnc4serverはデフォルトでポート番号5901を使うようなので、Macから画面共有を行うには、Finderのメニューの「移動」から「サーバーへ接続」を開き、サーバーアドレスに vnc://サーバー名又はサーバーのIPアドレス:5901と入力します。(vnc4serverが使用しているポートは、vnc4serverを見れば分かります。vnc4serverが使うポート番号はvnc4server起動時にrfbportオプションを使って指定可能です。また、Linux側でポート番号5900を使用した場合、Mac側でポート番号を
過去の記事 ubuntu-serverによる自宅サーバーの作成1(ハードウェア作成・OSインストール) ubuntu-serverによる自宅サーバーの作成2(Sambaサーバーの設定) 今回はPT2を自宅サーバーに導入します。 LinuxでのPT2の導入方法、epgrecのインストール方法は CentOS5.4サーバ機にPT2を入れて地デジ録画サーバにする CentOS5.4録画サーバ機にEPG対応録画フロントエンド(epgrec)を入れる を参考にさせていただきました。 リンク先の記事に導入方法の詳細な手順が載っていますので、私の環境ではうまくいかなかった部分だけを載せることにします。 まず、epgrecに必要なMySQLのデータベース作成が参考サイトの方法ではうまくいかなかったので、 次の手順でデータベースを作成しました。太字の部分が実際に入力するコマンド、パスワードの部分には任意の文
私は以前までブラウザはFirefoxを使っていましたが、Firefox4でMacでFlashが見れなくなったり、Firefox5でタブを切り替えても表示が切り替わらない(この現象は検索してもヒットしないので自分の環境だけの可能性有り)といった不具合があってから、メインのブラウザをGoogle Chromeに乗り換えています。 FirefoxからGoogle Chromeに乗り換えるのをためらった理由の1つが、自作したEmacsとの連携機能がChromeに移行すると使えなくなるというものでしたが、google-chrome-clientという別プログラムからChromeにアクセスするためのRubyライブラリの存在を知ったので、Emacs連携機能のGoogle Chrome版を作成しました。 この機能を使うためには、Google Chromeを次のオプションで起動します。 --remote-s
今回は、Emacs LispとRubyとmozreplを使ってEmacsからFirefoxを操作する方法を紹介したいと思います。 mozreplとは mozreplとはFirefoxのアドオンの一つで、Firefoxをtelnetサーバーにしてしまうというものです。このアドオンを導入することで、ターミナルやプログラムからFirefoxを操作することが出来ます。 mozreplはこちらからインストールすることができます。mozreplをインストールしFirefoxを再起動させると、Firefoxの「ツール」メニューにMozReplというメニューが追加されます。そこでStartを実行すると、telnetコマンドを使ってFirefoxにアクセスできるようになります。 ターミナルで次のコマンドを打ってFirefoxにアクセスします。 rlwrap telnet localhost 4242(424
PowerPointでの図の作成に限界を感じたので作りました。 以下のプログラムを拡張子.batでデスクトップに保存して、Inkscapeで作った画像をドラッグアンドドロップすると、EMF形式に変換してくれます。 "C:\Program Files\Inkscape\inkscape.exe" -z -f %1 --export-emf %1.emfPowerPointに画像を取り込んだあと、グループ化を解除して、周りの枠の部分を削除すればOKです。 PNGなどのラスター画像としてエクスポートした場合PowerPoint上で画像を編集することができませんが、この方法ならPowerPoint上でも編集できます。EMFファイルはベクトル画像形式なので画質の劣化もありません。 このバッチファイルの--export-emfの部分をepsなどに書き換えれば、他の画像形式にも対応できます。 追記 (2
デコレータはPython2.4で追加された構文で、関数やメソッドのラッピングを行ないます。 @deco1 def foo() pass @deco2(args) def bar() pass このプログラムは以下のプログラムと等価です。 def foo() pass foo = deco1(foo) def bar() pass bar = deco2(args)(bar) この構文は静的メソッドやクラスメソッドの定義を分かりやすく書きたいという動機から追加されました。 静的メソッドやクラスメソッドの定義は、デコレータ導入以前では以下のように書かれていました。 class C(object): def foo(cls, x): pass foo = classmethod(foo) def bar(y): pass bar = staticmethod(bar) デコレータ構文を使用すると
sshのポートフォワード機能を使ってエリア外からradikoを録音するRubyプログラムを作成しました。(何番煎じかわかりませんが) 一応Rubyのsshライブラリの使い方のサンプルにもなってます。 begin require "net/ssh" rescue LoadError require "rubygems" require "net/ssh" end def command(cmd) puts cmd system cmd end def change_ext(path, ext, new_ext) File.dirname(path) + "/" + File.basename(path, ext) + new_ext end def flv2mp3(flv) mp3 = change_ext(flv, ".flv", ".mp3") if File.exists? flv c
こちらのサイトにEmacsからXcodeを操作して、コンパイルと実行を行う方法が紹介されています。 しかし、キーボード操作をエミュレーションする方法であるからか、たまに失敗することがあるようです。 こちらのサイトにXcodeのコンパイルと実行を自動化するスクリプトが紹介されているので、 これを元に、EmacsからXcodeを操作するためのelispスクリプトを作成したいと思います。 基本的に参照元のシェルスクリプトをelispに移植すればよいのですが、 build targetProject の結果が、日本語環境では"Build succeeded"にならないため失敗してしまいます。 "Build succeeded"の代わりに"ビルドは問題なく完了しました"とすればよいようなのですが、 Xcodeを英語環境で起動することでも解決することができます。 Snow Leopardでアプリケーシ
Rubyでは,Structクラスを用いることによって,特定のフィールドを持つクラスを簡単に作成することができます。 Foo = Struct.new("Foo", "foo", "bar") f = Foo.new(1, 2) p f.foo # 1 p f.bar # 2 一方、Pythonの場合、namedtupleというライブラリで同様の機能が提供されています。 namedtupleはPython2.6以降で利用可能です。 from collections import namedtuple Foo = namedtuple("Foo", "foo bar") f = Foo(1, 2) print f.foo # 1 print f.bar # 2 ただし、Pythonではtupleがイミュータブル(書き換え不可能)なオブジェクトであるのと同様に、このnamedtupleも属性の値
このページを最初にブックマークしてみませんか?
『saito’s blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く