Emacs LispとRubyを使ってGoogle Chromeを操作する

私は以前までブラウザはFirefoxを使っていましたが、Firefox4でMacでFlashが見れなくなったり、Firefox5でタブを切り替えても表示が切り替わらない(この現象は検索してもヒットしないので自分の環境だけの可能性有り)といった不具合があってから、メインのブ…

Google App Engineを辞めた

約1年前にGAEを使って立ち上げたこのサイトですが、今回のGAEの料金体系の変更によって無料クオータの限界を超える日が存在することが分かったため、GAEを辞めて既に契約しているVPSに移動することにしました。最初に無料クオータの限界に達していたリソース…

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でファイルの更新検知を行う

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

C言語の正しいヘッダファイルの書き方

最近、仕事でC言語での組み込み系の開発に携わっています。 開発中のコードを眺めていると、ヘッダファイル内にstatic関数のプロトタイプ宣言を記述していたり、ヘッダファイル内で不必要に他のヘッダファイルをインクルードしているなど、ヘッダファイルの…

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ではトランザクション実行時にファ…

serversman@vpsでキャッシュの使用量が0と表示される件について

serversman@vpsでfreeコマンドでメモリの使用量を確かめようとすると、キャッシュの使用量が0と表示されます。 > free -m total used free shared buffers cached Mem: 1024 234 789 0 0 0 -/+ buffers/cache: 234 789 Swap: 0 0 0(ちなみにOSはCentOSです。…

Matlabでポインタ(間接参照)を実現する

私は、このブログではPythonやRubyのことばかり書いていますが、仕事ではMatlabという数値計算ソフトを使っています。 このMatlabというソフトは、ツールとしては非常に便利ですが、ことプログラミング言語として見ると、非常に大きな欠陥があります。 それ…

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 …

VLCのエクステンションで地デジをリアルタイム視聴する

以前のエントリでpt1をGUIで操作するためのプログラムを紹介しました。 スナップショットはこんな感じです。 このプログラムは単に内部でrecpt1を実行しているだけなので、実際に地デジを視聴するにはvlcなどのメディアプレイヤーを別に起動しなくてはいけま…

Emacs LispとRubyとmozreplを使ってFirefoxを操作する

今回は、Emacs LispとRubyとmozreplを使ってEmacsからFirefoxを操作する方法を紹介したいと思います。 mozreplとは mozreplとはFirefoxのアドオンの一つで、Firefoxをtelnetサーバーにしてしまうというものです。このアドオンを導入することで、ターミナルや…

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

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

MacでLinuxサーバーと画面共有を行う

Macでvncを使ってLinuxと画面共有を行う方法について書きます。動作環境はvncクライアント側がMac OS X Snow Leopard、vncサーバー側がubuntu 10.04です。Linux側の設定はこちらのサイトの内容をそのまま使用したので省略します。vnc4serverはデフォルトでポ…

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…

Inkscapeで作った画像をemfに一発変換してPowerPointで利用する

PowerPointでの図の作成に限界を感じたので作りました。以下のプログラムを拡張子.batでデスクトップに保存して、Inkscapeで作った画像をドラッグアンドドロップすると、EMF形式に変換してくれます。 "C:\Program Files\Inkscape\inkscape.exe" -z -f %1 --e…

Pythonのcontextlibが便利

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

ubuntu-serverによる自宅サーバーの作成3(PT2による地デジ録画サーバーの作成)

過去の記事 ubuntu-serverによる自宅サーバーの作成1(ハードウェア作成・OSインストール) ubuntu-serverによる自宅サーバーの作成2(Sambaサーバーの設定) 今回はPT2を自宅サーバーに導入します。 LinuxでのPT2の導入方法、epgrecのインストール方法は Ce…

ubuntu-serverによる自宅サーバーの作成2(Sambaサーバーの設定)

前回の記事で作成したサーバーをNASとして機能させるために、Sambaの設定を行ないます。 まず、Sambaのパッケージをインストールします。 sudo apt-get install samba次に/etc/samba/smb.confを編集します。 sambaで共有フォルダを追加するための記述のフォ…