SQLAlchemy で データを PostgreSQL に保存するアプリを組んでみた

個人的に SQLAlchemy を利用してみたかったのと、最近 PostgreSQL が流行っていそうなので触ろうかと思って、 Twitter の TL からデータを取得して、そのデータを保存するアプリを組んでみました。

続きを読む

Vimperator 特定のサイトで自動で Vimperator のキーマップを無効にする方法

1. (Windows) %USERPROFILE%\_vimperatorrc ファイルを作成する。

その他の OS だと、たぶん ${HOME}/.vimperatorrc で良いと思う。

2. 1 で作成したファイルに以下の記述をする。

ドットはバックスラッシュ2個でエスケープするようだ。

ignorekeys clear
ignorekeys add mail\\.google\\.com
ignorekeys add www\\.google\\.com/calendar

3. 以下のコマンドにて rc ファイルを読み直す。

source ~/_vimperatorrc ( もしくは ~/.vimperatorrc )

変更

2013/09/07 11:45 最初に clear すればよいので、 ignorekeys を利用するように変更しました。

RhodeCodeをローカルに立て、Systemd の起動設定書いた

何かやる際、ローカルで mercurial リポジトリ管理できたら便利かなと思った。

ローカルで動かすとしたらそれようの RhodeCode という管理ツールがあると聞き、入れてみた。

環境は Fedora 19。

セットアップしよう。

RhodeCode 1.7.1 documentationInstallationSetup を参考に進めよう。特にハマらないと思う、依存関係でいろいろ入ってくる。

非同期タスク実行に Celery を利用でき、そのメッセージキューイングに Rabbitmq-server 入れると良いかも。

自動起動されると楽だよね。

例えば init script 書いておいて、システムの起動時に起動してくれると楽だよね。

Fedora 19 だと標準で Systemd ってものが入っている、今までの init script の代替。

この Systemd 、最初は init script みたく 1 ファイルでかけるかなと思って、頑張った。どうしてもうまく行かなくてふと Shell Script を書いてそれを呼ぶようにしたらうまくいった。

どんな Systemd, Shell Script かいたのか

rhodecode.sh

以下のように start/stop を引数にとると起動/停止する shell script を書いた。

PASTER が local/bin なのは、 WORK_DIR 配下に virtualenv をたてたため。

#! /bin/sh
WORK_DIR="/path/to/rhodecode"
PASTER="$WORK_DIR/local/bin/paster"
APP_INI="production.ini"
SERV_PID="$WORK_DIR/rhodecode.pid"
CLRYD_PID="$WORK_DIR/celeryd.pid"

function serve_start() {
    $PASTER serve ${APP_INI} --daemon --pid-file=${SERV_PID} start
    $PASTER celeryd ${APP_INI} --pidfile=${CLRYD_PID}
}

function serve_stop() {
    $PASTER serve --stop-daemon --pid-file=${CLRYD_PID}
    $PASTER serve --stop-daemon --pid-file=${SERV_PID}
}

if [ $1 = "start" ]; then
    serve_start
fi

if [ $1 = "stop" ]; then
    serve_stop
fi
rhodecode.service

Systemd 向けの設定ファイル。

[Unit]
Description=RhodeCode Server
After=syslog.target network.target

[Service]
Type=simple
User=hoge
Group=hoge
WorkingDirectory=/path/to/rhodecode
ExecStart=/path/to/rhodecode/rhodecode.sh start
ExecStop=/path/to/rhodecode/rhodecode.sh stop

[Install]
WantedBy=multi-user.target

使い方

以下のように進めれば動く。

$ cd /etc/systemd/system/
$ sudo ln -s /path/to/rhodecode/rhodecode.service .
$ sudo systemctl load rhodecode.service
$ sudo systemctl enable rhodecode.service
$ sudo systemctl start rhodecode.service

SFTPのモックサーバをたてユニットテストをする

SFTP サーバを介してデータをやりとりするシステムのユニットテストを書くかもしれないので、どのように組むのか試してみました。

ひとまず、 Django で試します。

続きを読む

文字列リテラルと引用符

Python 言語リファレンス 字句解析 文字列リテラルの結合 (concatenation)より、複数の文字列リテラルは、互いに異なる引用符を使っていても (空白文字で区切って) 隣接させることができ、その意味は各々の文字列を結合したものと同じになります。 ... この機能は文法レベルで定義されていますが、スクリプトコンパイルする際の処理として実現されることに注意してください。 より、以下の用になる。

$ python
Python 2.7.3 (default, Sep 26 2012, 21:53:58) 
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more info
rmation.
>>> print(
...     'hoge'
...     'fuga'
... )
hogefuga
>>> print(                                                    
...     '{0}'.format('hoge')
...     'fuga'
  File "<stdin>", line 3
    'fuga'
         ^
SyntaxError: invalid syntax

なるほど。