YAMAGUCHI::weblog

土足で窓から失礼いたします。今日からあなたの息子になります。 当年とって92歳、下町の発明王、エジソンです。

Python

virutualenvとvirtualenvwrapperとpipを使う

はじめに なにかテスト環境を作ったり、開発を行うときにパッケージをインストールしなければいけないけど、環境を汚したくないなっていうときにvirtualenvが便利だ、という話は前から聞いてたんですが必要に駆られるとときがなかったので使ってませんでした…

Pythonで複数のWAV形式の音声ファイルを結合する

きっかけ 友達が飲み会での会話を録音したんだけど、細切れに録音したので結合しなければならなくなった。しかしMacで結合するのにAudacityとかGarageBandとかがあるっぽいけど20個もファイルがあるとめちゃくちゃ重くなったり、アプリケーション自体が落ち…

Google Wave Robot 事始め

動機 最近はTwitter Botを作るのも飽きたので、仕事でも使うことになるかもしれないGoogle Wave Robotを触ってみました。Python Hackathon #3で id:a2c さんにざざっと概要や勘所を教えてもらったので、そのメモを書きます。 参考 Google Wave API — Google …

第1回 Komagome.py 開催されました

成り立ち 第6回 Python温泉で@aodag, @hirokinko, @jbkingが駒込周辺に住んでいることが発覚。その後1回僕の家で鍋をして「とりあえず集まるか」ということでルノアールのある巣鴨に集結しました。でもKomagome.pyです。 場所・時間 場所:喫茶室ルノアール …

Linuxから自宅のエアコンを操作できるようにしたかった

はじめに たまにエアコンのリモコンがどこに行ったかわからなくなったりするので、PCからエアコン操作できたらいいな、と思って作ろうとした。結局断念したんだけどね。 使ったもの ハードウェア BUFFALO PCastTV2対応 PC用学習リモコンキット PC-OP-RS1出版…

Gmailの新着メールをiPhoneにお知らせするスクリプト書いた

動機 im.kayac.comのアカウント取って、iPhoneアプリを珍しくお金払って買ったのに最初にちょろっと遊んだくらいで全然使ってなかった。なんかすげーもったいないので、とりあえずタイトルのアプリ作ってみた。 参考 im.kayac.com 面白法人カヤック。面白い…

Deliciousへ追加したブックマークをBloggerへ日次で追加するスクリプト書いた

家に帰ってきてやる気が起きなかったんでタイトルのスクリプト書いた。 参考 Delicious - Discover Yourself! Delicious APIはTwitterとおんなじように、HTTP-Authもサポートしてるけど、新しいバージョンではYahoo!のアカウント使ってOAuthでできますよ、と…

TwitterのOAuthを使って90日以上発言してない人をremoveするスクリプト書いた

はじめに 最近「フォロワー1000人目指そう」とか #followmejp とかつながりたがる流れが多いけど、TwitterのTLがあふれちゃうとやる気なくしちゃうことが前にわかったので縮小の方向に進めてます、こんにちは。 また最近はOAuth推奨っぽいのでOAuthでfollowi…

Twitterのログを自動でBloggerに投稿するスクリプト書いた

動機 Twitterのログを残すスクリプトを書いた - YAMAGUCHI::weblog Twitterのログを残すスクリプトは書いたけど、どうせならどこかにログの形にしておきたいなと思ったので作ってみた。 作ったもの log2blgr.py - 0x7d8 - 某所同期の勉強会用レポジトリ - Go…

Twitterのログを残すスクリプトを書いた

動機 最近FriendFeedとかを使ってTwitterにあらゆるログを流しているのはいいけど、記録してないのでログを残したくなった。しかし巷にでているウェブサービスはどうもしっくりこないのでとりあえず最低限ローカルに残すようなスクリプトを作ろうと思って書…

ATNDからGoogle Calendarに自動で登録するスクリプトを書いた

いきさつ Python温泉 #6で@yoshioriが「自動化できるところは自動化しないとー」と言っていて「たしかに!」と思ったので思いついた自動化をしてみようと考えた。でもって、ATNDでイベント登録して忘れてることがちょいちょいあるので忘れないようにGoogle C…

第6回Python温泉

関連リンク 第 6 回 Python 温泉 無事終了 - Twisted Mind 20091023-25 第6回Python温泉 - a set on Flickr Python温泉 - kuma8の日記 2009/10/24 第6回 Python温泉 に参加中. buildbot と buildout のはなし - 清水川Web Python温泉に来ています - kuenishi…

Code Camp #4 in Harumi

前回に引き続き参加。またも午後休。ついに使用言語が全員ばらばらなためCode Campと名前を改め開催。*1 Kawasaki Code Camp #4 - Twisted Mind Code Camp #4 - kuma8の日記 Kawasaki Code Camp #4 in Harumi - kuenishi's blog Shibu's Diary: Tornadoウェ…

初心者がbitbucketを使ってみた

Tornado Documentation — Tornado 2.3 documentation Tornadoドキュメント翻訳 — Tornado v0.2 documentation 今回公開されたばかりのTornadoのドキュメントを翻訳する際にbitbucketを使ってSphinxのデータを管理した。ほぼ初めてMurcurial触るし、初めてSph…

第3回Python旅館

午後休を取って参加。 第三回 Python 旅館 2009-08-07 14:00 - 08 11:00 - Twisted Mind 14:30 開始直後 Python旅館といいつつ、ErlangとJavaとPythonがだいたい同じくらいの比率。参加人数はまだ5人。買い出し。ペプシNEXが売ってない。 第3回 Python旅館 …

名言BotをGoogle App Engineに移行した

動機 名言集.com (wisesaw) on Twitter これまで名言Botを自鯖で運用してきたのですが、こいつが電気代をだいぶ食うのでなんとかならないかなあと思っていました。 Scheduled Tasks With Cron for Python - Google App Engine — Google Developers そんな折…

IDE初心者がPython用にEclipseの設定してみる

動機 Emacsやviばかり使うのもいいけど、これからJavaの開発やったりするのにIDE使えないと厳しいなと思ったのでなれるためにIDEでPython開発(というかDjango開発)の環境を作ってみようと思ったため。 方法 Eclipseのインストール まずはEclipseをインスト…

Django Hackathon Disc.8 に参加してきた

感想 Django Hack-a-thon Disc.8 | Djangoと日本の仲間たち いままでPythonで遊んでて、知ってはいたけど使ってなかったDjangoを使い始めるよいきっかけとなりました。特にハンズオンではどの入門書でも触れるような箇所は余り触れずにむしろ入門書後に躓く…

PythonでCのラッパを書く

動機 ふと思い立った。簡単なサンプルを書いたつもりだったけど、思わぬところでちょっとはまったからメモ。 方法 サンプルコード 基本的にはこちらの写経。 PythonからCプログラムを呼び出す | 象歩 Cのラッパを書いたのは2度目だけど、前回はバインディン…

型チェックをする

動機 Pythonに限らず動的型付けな言語は変数を扱うときに型に気をつける必要があります。いままでは割とざーっと作ってしまっていたので型の扱いはKnownでやっていたのですが、ソースを公開したりしているので多少気をつけていこうかなと思いました。 方法 t…

Python用にauto-complete.elを設定する

動機 開発にはずーっとEmacsを使っているけれど、最近M-/の補完を不便に感じるようになったので、補完窓が出るような拡張を入れてみたくなった。 方法 下記サイトの方法をそのまま実行しただけです。 EnigmaCurry まずMercurialをインストールして、rope, ro…

mixiダイアリーのバックアップ用スクリプトを書いてみた

動機 ある日突然外国の方から「君が作ったmixi APIを使ってみたら、うまく動かないんだけど。」っていわれました。どうも奥さんが日本人でmixiダイアリーのバックアップを取りたいらしい。が、そもそも俺がPythonで書いたmixi APIはmixiツールバーのものが基…

lxmlをインストール

lxmlをインストールしようと思ったらこけた。 [Python][lxml]依存ライブラリ?が足りなくてインストールではまる - 30からのBlog ここを参考にして $ sudo port install libxml2 $ sudo port install libxslt $ sudo easy_install lxmlこれでOKです。さて今…

名言Botを実装した

動機 最近落ち込んだりすることが多いんで、たまに拝見している名言集サイトの名言をTwitterに投げてくれるBotを作り、定期的に名言を読んで元気づけられようと思った。 作った物 名言Bothttp://twitter.com/wisesaw/:image=http://b.hatena.ne.jp/entry/ima…

2chまとめサイトのまとめを実装してみた

動機 mod_pythonを使って、とりあえず何か簡単なものだけでも実装したかった。ちょうどそのとき2chのまとめのまとめサイトを見ていたので、それを実装することに。 作った物 毒男アンテナ ('A`) 使った物 Apache2.2 mod_python mod_pythonのpublisherハンド…

tg-adminがみつからない

症状 TurboGearsをeasy install経由で入れたはずなのに、tg-adminがPATHにないとか言われる。 原因 エラーメッセージ通り。 $ sudo find / -name tg-admin /opt/local/Library/Frameworks/Python.framework/Versions/2.5/bin/tg-adminPATHに入れてませんよ。…

HTMLParser.HTMLParseErrorがでた

状況 はてなブックマークにタグ検索用のAPIがないからつくってみたんだけど、前に動いてたのに急にHTMLParseError吐くようになった。 問題のエラーはこんな感じ。 EOF in middle of construct, at line 57, column 1 原因 ここにあるのと原因は一緒でした。 …

mod_pythonのpublisherハンドラが便利だった

動機 GET変数とかを処理させたいなあと思っただけで使ってみたけど、予想以上に便利だった。 使い方 Apacheの設定 httpd.confには下記の様な設定をしておく <Directory "/path/to/dir"> AddHandler mod_python .py PythonHandler mod_python.publisher PythonDebug On </Directory>PythonHandlerにm…

mod_python + GenshiでHTMLを表示してみる

動機 mod_pythonを入れたあとはGenshiとの連携が必要だなと思った。 方法 Genshiの簡単な使い方はここに書いたとおり。 テンプレートエンジンGenshiを使う - YAMAGUCHI::weblog 上記のエントリで書いたテンプレートから生成されるHTMLをmod_pythonで表示させ…

Tigerでmod_pythonを動かす

動機 テンプレートエンジン動かしたら次はやっぱりWebサーバから叩かないといけないでしょう。 試行錯誤 とりあえずMacPortsでmod_python25を入れる $ sudo port install mod_python25 (略) ---> Activating mod_python25 3.3.1_1 Error: Target org.macpo…

PythonでHTTPS接続をする

開発機はMacなんですが、Pythonからurllib2でhttps接続しようと思ったら urllib2.URLError: <urlopen error unknown url type: https>というエラーがでて接続ができない。あれー、おかしいなと思って調べていたら見つけた。 py25-socket-ssl - 北海道苫小牧市出身のPGが書くブログ $ sudo port upgra</urlopen>…

テンプレートエンジンGenshiを使う

動機 そろそろPythonでもテンプレートエンジンとか使って動的ページを表示したいなあと思った。でもいわゆるテンプレート用の文法を覚えるのが面倒なので、なるべくHTMLでテンプレートを書けるものでかつ実績*1があるものということでGenshiを選択。 参考 Ge…

HTMLParserでHTMLを解析する

動機 そういえばXMLだけじゃなくてHTMLの解析もやってみたくなったから。 方法 HTMLもXML系のパーサ使えばいいんだろうけど、HTMLParserってのがあるので使ってみました。使い方としてはざっくり下のコードみたいな感じ。 from HTMLParser import HTMLParser…

pysqlite3.xでSQLiteを動かす

動機 なんとなく動かしてみようと思った。 方法 なんかライブラリリファレンスのサンプルだと微妙に文が足りない。 404 Not Found たぶんこっちの方がいいと思う。 Python IRC bot using Twisted で、こんな感じでテスト。 import sqlite3 """ test.dbにはte…

はてなブックマークのAPIのラッパ書いた

動機 折角WSSEのクライアント書いたからmixi APIだけじゃもったいないと思って。。。 参考 まあ当然オフィシャルを見ながらです。 はてなブックマークAtomAPIとは - はてなキーワード できた物 WSSE.py (HatenaBookmarkClientクラス) 使い方 from WSSE imp…

Text Nodeからデータが取り出せない

症状 typeを見るとDOM Text Nodeになってるインスタンスをdataプロパティを使ってデータを取り出そうとすると「NoneTypeだよ」的なエラーが出る。 状況 mixi API用のコードの中に出てくる。更新情報を取得する関数の中でのコードで起きるエラー。レスポンス…

mixi APIでマルチバイト文字列を扱う

動機 自分で書いたmixi API(あくまで非公式)のPythonラッパがマルチバイト文字列系が全然だめだったので修正した。 WSSE.py メモ MixiClientクラスの各メソッドはunicode型で投げてあげてください。中でUTF-8に変換してやりとりしてます。

マルチバイト文字列のエンコード・デコード

動機 自分が書いたコードがマルチバイトに全然対応してなかった。ショック。というわけでunicodeで受け渡しするようにしました。 mixi APIで遊んでみた - YAMAGUCHI::weblog 方法 今回はPython2.5での話をしています。encode()、decode()メソッドを使えばOK…

Python3.0リリース

Python 3.0登場、日本で利用できるレベルへ到達 | エンタープライズ | マイナビニュース でました。上記サイトに書いてあるけど一応転記。 Unicodeへの全面移行を実施。str型はUnicode文字列を表現し、それ以外のデータ/バイナリデータはbytes型で表現する。…

WSSE認証を利用したAtom APIとか

動機 いろんなWeb APIを触ってみようと思った。 できた物 WSSE.py (ファイル前半) WSSE認証 このへんを見ながらちょこちょこと作り始めました。 はてなフォトライフAtomAPIとは - はてなキーワード So-net blog:AtomAPI仕様 送信プロトコル WSSE認証をする…

mixi APIで遊んでみた

動機 Macにはmixiフォトアップローダが無かったり、mixi stationの調子が悪かったりして頭に来たので、スクリプトで同様のアプリケーションを作ってみようと思った。 できた物 WSSE.py (ファイル後半) 使い方 一通りの使い方はこんな感じ。 mc = MixiClien…

minidomを使ってXML解析を行う

動機 PythonはXML関係のパーサが標準ライブラリに複数用意されてます。2.5.2で使えるものだと、Expat, SAX2, DOMなんかがあります。 その中でminidomを使っていたときにはまったのでメモ。 サンプル こんなXMLがあったとして、entryを要素を得たいとします。 …

urllib, urllib2を使ってGET/POST

注意(追記:2013.03.22) もうこの情報は古いので、いまはHTTP系の処理はrequestsを使ったほうがいいです。 Requests: HTTP for Humans — Requests 1.1.0 documentation 動機 Web API使ってるとでてくる使い回しをメモ。 方法 まずはオーソドックスに GET im…

XML-RPCの利用

動機 ウェブサービスを利用する場合XML-RPCを使うことがあるため、使い方を調べてみた。 使い方 Pythonでは2.2で標準ライブラリに加わったxmlrpclibを使えば一瞬でできます。 18.24 xmlrpclib -- XML-RPC クライアントアクセス import xmlrpclib urls = ['ht…

staticmethodとclassmethodの違いでC++的な静的メソッドを考える

動機 C++のようなstaticメソッドを作ろうとしてはまったのでメモ。 参考 [Python] クラスの挙動まとめ #1 - 大カフェイン クラスの挙動まとめ #2 - 大カフェイン Python のクラスメソッド – デコレータ @classmethod, @staticmethod を使って | すぐに忘れる…

readlines(size)が期待通りの動作をしない

404 Not Found ここを参照すると、 readlines([sizehint]) readline() を使ってに到達するまで読み出し、EOF 読み出された行を含むリストを返します。オプションの sizehint 引数が存在すれば、EOFまで読み出す代わりに完全な行を全体で大体 sizehint バイト…

forループでのイディオム

動機 Pythonはfor-loopと言いつつ実際は他言語で言うところのfor-each的な使い方をするのでしばらく使っていないとダメコードを書いてしまう。そのためのメモ。 表現 range()を使って 普通のループとかはこんな感じで。 for i in range(1,10): print i zip()…

ジェネレータを用いた再帰関数に関する考察

相変わらずジェネレータではまってるわけです。今回は自分で実装する際に詰まったところ。 ジェネレータを使って再帰関数を作るというのは、心持ちとしては関数型言語の遅延評価を利用した無限リスト表現なんかと通ずるところがあると勝手に思ってるわけです…

switch-case文に関する考察

いまPythonでshellスクリプトを書いてちょっと勉強をしています。shellコマンドはシンプルなので作るにはいい題材だし、挙動それ自体はいい勉強になるんですよね。で、shellコマンドのオプションを処理するときに、Cとかではgetopt()とか使ったりしますが、…

ジェネレータ

またまたPythonでスクリプトを書いていたときにいままで意識してなかったことに出くわしたのでメモ。 os.walk関数を使って指定したディレクトリ以下のファイル、ディレクトリを表示するようなスクリプトを書いていた際に、os.walkの挙動が気になったので調べ…