‘programming’ カテゴリーのアーカイブ

PythonでMovableTypeのXML-RPCインターフェースを叩く

2010年11月26日 金曜日

MovableTypeにはXML-RPCインターフェースが準備されているので、外部から新しい記事を投稿したり過去の記事を取得したりできます。MT自体のリファレンスを探せなかったので、コチラのページを参考にさせて頂きました。

(続きを読む…)

ExcelのVBA使い方メモ

2010年11月23日 火曜日

友人にExcelでごにょごにょするVBA書いてくれと頼まれたのですが、数年ぶりですっかり忘れていましたので、メモ書きです。

MSDNを見ると割とたくさんのクラスがある訳ですが、Excel+VBAでやりたいのは、行ごとにまとまったデータを一度オブジェクトに吸い上げて、何らかの処理を施した後、表に出力するという事が多いので何となく使う分には、必要な語彙数は大して多くなさそうです。そこでとりあえず覚えておけば良さそうな表現を列挙してみました。

(続きを読む…)

Hello Cython World

2010年10月24日 日曜日

lxmlのソースを読もうとしたらcythonというPythonの拡張を書くためのPythonとCの間の子みたいな言語で書かれているという事で、全く知らないままだとlxmlのソースに挑む気が起こらなかったので少し調べてみました。まぁ調べてみたといってもcythonのドキュメントの最初に書かれているGetting Startedを舐めただけなんですけども。

(続きを読む…)

Pythonで実行時間とメモリの測定をする

2010年10月3日 日曜日

しばらくベンチマークコードを書いてなくてすっかり忘れていたので、メモ書きです。今回は例題として、yahooのこのページをBeautifulSoupとlxmlでのスクレイピング比較をしてみる事にしました。比較対象の関数は以下の通りです。どちらのコードも入力・出力ともに同じなので、どちらが実行時間やメモリ使用量が少ないのかを知りたくなりますね。

# BeautifulSoup
def scrape_with_bs(html):
  from BeautifulSoup import BeautifulSoup  
  soup = BeautifulSoup(html)
  rows = soup.find('table', attrs={'class':'channel9'}).findAll('tr')
  channels = rows[0].findAll('td', attrs={'class':'station'})
  programs = rows[1].findAll('td', attrs={'class':'turnup'})
  res = []
  for ch, prog in zip(channels, programs):
    res.append((ch.find('span').string, ch.find('a').string, prog.find('a').string))
  return res
 
# lxml
def scrape_with_lxml(html):
  import lxml.html
  root = lxml.html.fromstring(html.decode('utf-8'))
  rows = root.xpath('//table[@class="channel9"]/tr')
  channels = rows[0].xpath('td[@class="station"]')
  programs = rows[1].xpath('td[@class="turnup"]')
  res = []
  for ch, prog in zip(channels, programs):
    res.append((ch.xpath('span/text()')[0], \
          ch.xpath('descendant::a/text()')[0], \
          prog.xpath('descendant::a/text()')[0]) )
  return res

ちなみに上記の関数から得られる配列をprettyprintすると、以下の様な出力が得られます。各チャンネルごとに、今放送中の番組を取得しています。

[
    [
        "アナログ1ch", 
        "NHK総合", 
        "ニュース"
    ], 
    [
        "アナログ3ch", 
        "NHK教育", 
        "ハーバード白熱教室@東京大学「イチローの年俸は..."
    ], 
    [
        "アナログ4ch", 
        "日本テレビ", 
        "真相報道 バンキシャ!"
    ], 
    [
        "アナログ6ch", 
        "TBS", 
        "THE世界遺産「皇帝たちの地下宮殿」〜..."
    ], 
    [
        "アナログ8ch", 
        "フジテレビ", 
        "笑顔がごちそう ウチゴハン"
    ], 
    [
        "アナログ10ch", 
        "テレビ朝日", 
        "ドライブ A GO!GO!「群馬格安温..."
    ], 
    [
        "アナログ12ch", 
        "テレビ東京", 
        "TOKYO ..."
    ], 
    [
        "アナログ14ch", 
        "TOKYO MX", 
        "芸術史と芸術理論( 10)第1回◇放送..."
    ]
]

(続きを読む…)

久々にC++使ったら進化してて素敵になってた件

2010年9月27日 月曜日

最近、数年ぶりにC++を触っているのですが、いつの間にかかなり使いやすくなっていました。まだ全容は把握できてないのですが、とりあえず印象に残った以下の項目について書いてみたいと思います。

  1. BOOST_FOREACHとautoですっきりループ
  2. tupleで無くなる無駄な構造体
  3. #pragma onceで楽々インクルードガード
  4. std::functionとlamda関数でコンパクトなコード
  5. typeidでリフレクション

主にC++0x周りの話だと思っていますが、勘違いしている可能性も高いです。

(続きを読む…)

ncursesを使ってみた

2010年9月18日 土曜日

ncursesはslコマンドとかnethackを作るためのライブラリで、要はDOSアプリみたいなのを簡単に作れるフレームワークです。今すぐにではないですが、slコマンドとかnethackとかを作ってみたいなぁと思っているので、とりあえず導入だけやってみる事にしました。

(続きを読む…)

[Python] OSX 10.6でMySQLdbのインストールに手間取った話

2010年9月5日 日曜日

表題の件ですが、何も考えずにeasy_install MySQL-pythonとすると、インストールは成功するものの、importしようとすると以下のようなエラーが出て使用できませんでした。

ImportError: dlopen(/path/to/_mysql.so, 2): no suitable image found.  Did find:
	     /path/to/_mysql.so: mach-o, but wrong architecture

(続きを読む…)

時間のインターバルをcron的に扱うPythonモジュール書いた

2010年8月11日 水曜日

ちょっと前の話なんですが、croniterというモジュールを書きました。これは何かというと時間に紐付いた繰り返し処理を扱うモジュールです。例えば「毎週火曜日と木曜日の9時」とか「日曜日の5時から10時まで1時間ごと」にとか、そういう繰り返しを扱いたいときに使う事を想定しています。

(続きを読む…)

Pythonでタイムゾーンを扱うメモ

2010年8月10日 火曜日

日本だと普段扱わないので、忘れがちなタイムゾーンの処理をメモ書きです。ここでは例として、日本時間とアメリカ東海岸標準時の変換してみます。

(続きを読む…)

Pythonでいろんなバイナリファイルを覗いてみる

2010年8月1日 日曜日

プログラマをしていると、ちょくちょくバイナリデータから情報を読みたくなりますね。そんな時は、ブツブツ言いながらバイナリエディタと睨めっこすることになるわけですが、これが結構大変なので、何とか楽にならないかなぁと思って探していると、hachoirというナイスなpythonモジュールが見つかりました。このモジュールを使うとバイナリデータをパースして様々なデータを取得できます。かなり多くのデータフォーマットに対応している(現時点で70種類)のが素晴らしいです。

(続きを読む…)