Pelican の blog をカスタマイズしたい

この blog を書き始めて少し経ち、少々変更したいことなども出てきました。

  • とりあえず blog 内を検索するフォームを導入したい
  • デザインもちょっと変更したいかも
  • コメントフォームも付けようかな(DISQUS ?)

まずは 公式のドキュメント を読み込まないといけませんね。英語だけど!

more ...

Python shelve モジュールで手軽にデータを保存する

Python でちょっとしたデータの保存に使える shelve というモジュールを試してみました。 SQLite などの DB を使うよりも手軽に、それでいてテキストファイルと違って Python のデータオブジェクトをそのまま保存できるのです。リスト型や辞書型などのデータを保存しておいて再利用が可能なのでスクリプト間でのデータの受け渡しにも使えそうですね。

データを保存するサンプルです。リストと現在時刻をそれぞれ myshelve という shelve に保存します。

import datetime
import shelve


def save_data(some_data):
    d = shelve.open('./myshelve')
    d['obj'] = some_data
    # 現在の日時
    today = datetime.datetime.now()
    updated = today.strftime('%Y/%m/%d %a %H:%M:%S')
    d['updated'] = updated ...
more ...

AWS(Amazon Web Services) リージョン表記について

AWS をスクリプトやコマンドラインツールから利用しようとするとリージョンの指定が必要になります。

そのときに Web インターフェースから触っているときは US standard とか Asia Pacific といった表記なのに、スクリプトのサンプルでは us-east-1 などの少し違う表記になっていて自分が利用しているリージョンではどう書けばいいのか迷うことがありました。

そういうときは公式ドキュメントのこちらのページを見れば一発で解決です。リージョン名は見たところ共通のようですが、各サービスによって対応しているプロトコルに違いがあったりもするのですね。

more ...

Python から im.kayac.com で Google Talk にメッセージを送る

iPhone や Google Talk(Jabber)へ通知を送信できるサービス im.kayac.com を試してみました。 アクセスには http の POST かメールを用いるのですが、思っていたよりも手軽で特に難しいことはありませんでした。iPhone は使っていないのでやってみたのは Google Talk への通知だけです。

まず im.kayac.com のサイトでユーザー登録をすると自分用のアクセス URL が割り当てられます。Google Talk で api@im.kayac.com というアカウントをコンタクトに加えて自分用の認証コードをメッセージとして送るだけで認証は完了です。

メールを使う場合はアドレス宛てにメールを送るだけですので省略します。POST でのアクセスは Python の場合は以下のように書けば OK でした。

Python 3 の場合は urllib.request を、Python ...

more ...

Divvy のショートカットキー設定のエクスポート・インポート

ウィンドウの配置を切り替えるアプリケーションはいくつかありますが、私は Mac と Windows の両プラットフォームで使える、Divvy を使用しています。

会社の Windows 機と自宅の Mac mini および Macbook Air にインストールしていて、特に会社のマシンではこれなしではやっていけないくらい多用しているのでした。

どういうソフトウェアかは、以下の動画を見ればすぐわかるでしょう。3 分半くらいです。

Divvy by Mizage - Screencast from Mizage on Vimeo.

調べたら Divvy ってちゃんと英単語としてあるんですね。

で、先日バージョンアップした際にオンラインのマニュアルを読んでいたら、Mac 版であればショートカットキーの設定をエクスポート・インポートできることがわかりました。

マシンを再セットアップするときや複数台の間で設定を統一したい場合などに便利なのでメモしておきます。

まずエクスポートは Safari ...

more ...

最近、関数型言語(というか OCaml)が気になっている

関数型言語という言葉を初めて聞いたのは確か Twitter がバックエンドのシステムを Scala で書き換えたという話が話題になっていたころか、Perl ハッカー Audrey Tang 氏が Perl6 の処理系を Haskell で書いたという話で賑わっていたときか、そのあたりだったと思います。

その時はあまり関心もなく、Scala とか Haskell とか、関数型と呼ばれるプログラミング言語があるんだなとただそう思っただけでした。

最近になってようやく静的型付けか動的型付けかという議論を読んだりしてそこで言及されているメリット・デメリットが気になり始めました。

きっかけは Python 関連のエントリでなにかとお世話になっている YAMAGUCHI::weblog のYAMAGUCHI さんが翻訳されていた下記の記事です。

これを読んで、OCaml ってすごいのではという興味の炎がメラメラと燃え始めたところなので、いろいろ調べた URL を備忘のため記載しておきます!

OCaml

more ...

Python BeautifulSoup でスクレイピングする

Python で html をスクレイピングするためのライブラリは lxml や PyQuery、Scrapy 、BeautifulSoup などいくつかありますが、私は BeautifulSoup を使っています。

バージョンが 3 系と 4 系がありますのでインストール時に注意が必要です。 beautifulsoup4 が 4 系で、 BeautifulSoup が 3 系となります。それさえ間違わないようにすればあとは pip でサクッとインストールするだけですので簡単ですね。

ドキュメントの日本語訳を公開してくださっている方がありますのでこちらを読めばだいたい大丈夫そうです。

今回ちょっとしたスクリプトを書いていて使った部分を書いてみます。

たとえば以下の様な html があるとします(iTunes Store の html を一部改変してます)。

<div ...
more ...

Python の高階関数とは

関数型言語、関数型プログラミングについて少し興味があり昨日今日と少し調べて解説記事などを眺めていました。その中で出てきた高階関数というのは Python でもあったなと思い、調べておきます。

高階関数とは「関数を引数に取ったり、戻り値として関数を返したりするような関数」のことを指します。何となく map とか reduce とかそういう感じかなと思ったのですがそれらに限定されるものではないですね。

「パーフェクト Python」にあった例を試してみます。 まず、普通に for ループで書く場合はこうなります。

# 素直にループで書く
def pick_odd(seq):
    ret = []
    for item in seq:
        if item % 2 == 1:
            ret.append(item)
    return ret

# シーケンスを作成
seq = [x for x in range(30)]

# 結果を表示
print ...
more ...