にたまごほうれん草アーカイブ

はてなダイアリーで書いてた「にたまごほうれん草」という日記のアーカイブです。現在は「にたまごほうれん草ブログ」を運営中です。

新しいブログ作った

せっかくさくらのレンタルサーバ環境とドメインを持っているのにいまいち活用できていなかったので、WordPressでいろいろやってみようと新たにブログを作りました。

にたまごほうれん草 別館

こちらのはてダでは技術関係のメモを書き散らかしてるけど、別館では読書記録やもうちょっと整理した記事を書けたらいいなと思っている。

大胆にも年始に「本を100冊読む」という抱負を立ててしまったので、それを記録する場所として使うのにちょうどよさそう。

ただ、WordPressをいじってて早速いろいろ躓いたので、そのメモはやっぱりこちらに書き散らしていくのです。

hotpepper/tabelog記法ってなんぞや?

foomoo 記法から hotpepper 記法に変更しました - はてなダイアリー日記
この記事によって今さらながらはてなの記法によってレストランを紹介できることに気付いたので試してみる。

むらもと

食べログ むらもと

私が一番お気に入りのラーメン屋さん。Hotpepperでは見つからなかったので食べログで。

Mac OS X ターミナル + zshで日本語入力

zshコマンドラインで日本語を入力しようとしたら文字化けしてなんでだ!と調べて回ってたら、Macportsでインストールしてたzshのバージョンが4.2.7だったというオチでした。
zshは4.3以降でないとUTF-8を扱えない*1ので、Macports

$ sudo port install zsh-devel +mp_completion

としてインストールしましょう。(+mp_completionはMacportsのコマンドで補完が利くようにするオプション)
その後、ログインシェルに設定する方法は自分で調べてね!*2

port search zshした結果

$ port search zsh
zsh @4.2.7 (shells)
    Zsh is a UNIX command interpreter (shell)

zsh-devel @4.3.11 (shells)
    Zsh is a UNIX command interpreter (shell)

Found 2 ports.

なので、安易にport install zshとしちゃうと困るよ、という話。

easy_installでエラーが起きたときの対処

結論から書くと、setuptoolsをアップデートしてやり直せばOKだった。

# easy_install -U setuptools

エラーが起きた状況

SQLObjectをインストールしようとしてeasy_installを実行したら下記のようなエラーが出た。

# easy_install SQLObject==devSearching for SQLObject==dev
Reading http://pypi.python.org/simple/SQLObject/
Reading http://sqlobject.org
Reading http://sqlobject.org/
Reading http://sqlobject.org/devel/
Best match: SQLObject dev
Downloading http://svn.sqlobject.org/SQLObject/trunk#egg=SQLObject-dev
error: Unexpected HTML page found at http://svn.sqlobject.org/SQLObject/trunk#egg=SQLObject-dev

ぐぐってみたら、最初のコマンドを実行しろとあったのでそのとおりにやったらできた。

デコレータを使う

クリスマスの休日にやることではないかもしれないが、Pythonのとあるライブラリの中のコードで使われていたついでに調べたのでメモ。
関数の上部に「@デコレータ名」という形式で装飾を付けることで、関数に対して付加的な動作を加えることができるもの。

書き方

下記のdecorator関数のように、関数をネストして内部関数を返すような形で定義すると、some_func関数の上部に「@decorator」としてsome_funcに適用することができるようだ。

#! /usr/bin/env python

def decorator(func):
    def inner(*args):
        return func(*args)+" is decorated"
    return inner

@decorator
def some_func():
    return "some_func"

print some_func()
#=>some_func is decorated

意味としては、

some_func = decorator(some_func)

と同義なので、シンタックスシュガーのひとつだと考えていればよさそう。
複数の関数に対して共通の処理を付加したい場合などに使うのでしょう。
もうひとつの使い方としては、デバッグ時に関数のチューニングのために実行時間を計測したり、などに使えそう。

#! /usr/bin/env python

import time

def measure_time(func):
    def inner(*args):
        start = time.time()
        ret = func(*args)
        end = time.time()
        print "[%s] %f" % (func.__name__, end - start)
        return ret
    return inner

@measure_time
def some_func():
    for i in range(10000000):
        i*i
    return

some_func()

配列から重複要素を取り除いた配列を作る

Rubyでいう、uniqメソッドみたいな効果。
set使えばよさそうね。

a = [1,2,3,4,5,1,3,4,5,6,4,2,2,3,4,5,3,4]
list(set(a))
#=> [1, 2, 3, 4, 5, 6]

Rubyの場合、

a = [1,2,3,4,5,1,3,4,5,6,4,2,2,3,4,5,3,4]
a.uniq
#=> [1, 2, 3, 4, 5, 6]