2月 16
ネットで公開されている「.xls」形式のExcelファイルを扱おうとすると、Office 2008 for MacかNeoOfficeを使うのが基本でしょう。
ただ、やりたいことは、表計算ソフトの使用ではなく、データの表示と加工(CSV形式にしたり、HTMLとして出力したり)なのです。以下のような方法でできるのが理想。
- コマンドラインプログラムで加工
- GUIプログラムで加工
CocoaならどちらでもOKだろうと調べてみましたが、有益な情報にヒットせず。
そういえば、RubyでExcelファイルを扱う記事があったよなと、「Rubyist Magazine – Win32OLE 活用法 【第 2 回】 Excel」をみてみるも、残念なことに、どうもWindows環境じゃないとダメらしい。困った。
一応、Pythonのも調べてみてみたら、こちらのページを発見。
なんと、pyExceleratorを使えば、Windowsなしでエクセルのファイルを扱えるみたい。ただ、気がかりなのは、2005年以来更新されていない点。
そのあたりを更に調べてみると、「pyExcelerator以外の選択肢 – Ni chicha, ni limona -平均から抜けられない僕-」に辿り着きました。xlrdでも、Windows無しでの読み込みが可能だそうです。
早速easy_installでインストールして、READMEとAPIに従って試してみると、あっさり成功。日本語も扱えそうで、一安心。
NewsgroupのFAQsによると、pyExceleratorからフォークしたxlwtを使えば、書き込みもできるらしい。ありがたいですね。
あとは、PyObjCでGUIを付けたいところですが、PyObjCを習得するのが大変そうです。
2月 16
杉並区に続き、練馬区立図書館でもスクレイピングをしてみようと、Pythonのurllib2でアクセスしてみると、ValueErrorに遭遇。
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/socket.py", line 304, in read
data = self._sock.recv(rbufsize)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/httplib.py", line 509, in read
return self._read_chunked(amt)
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/httplib.py", line 548, in _read_chunked
chunk_left = int(line, 16)
ValueError: invalid literal for int() with base 16: ''
取得したデータをread()した時に、問題が発生しているみたい。他のURLでは起こらないので、データの方に問題があるとか?
ググってみると、PythonのIssue Trackerに報告があがってた。
» Issue 3721: invalid literal for int() with base 16: ” – Python tracker
こちらの書き込みに従い、MacPortsでPython 2.6.1をインストールして試してみると、問題なく成功。2.6.xでは修正されているようですね。
ただ、MacではPython 2.5.xをメインに使う予定なので、2.5が修正されないのはちょっと残念。
でも、バグを修正してくれた方々には、感謝。
2月 13
杉並区立図書館の、その日の新着図書が一目でわかるサイトを作ってみました。
» 杉並区立図書館 新着図書 更新情報 (非公式)
公式ホームページでは、一ヶ月間の新着図書が一度に表示されます。でも、毎日チェックしている身にとっては、その日入った本だけが知りたい情報だったりします。
数百冊リストアップされている図書情報から、脳内で前日との差分を取り出すのも、なかなか骨の折れる作業です。こういった単調で、面倒な定型作業は、人間ではなく、機械の方が適任でしょう。
このサイトを作ったお陰で、一度に数分から十数分かかっていた手動によるチェック作業が、数秒に短縮されました。
更新情報は、RSSでも出力するようにしてあるので、直接サイトにアクセスしなくても、livedoor ReaderやGoogle リーダーのようなRSSリーダーでもチェックできます。
このサイトの利点
- チェック時間の短縮
- RSSリーダーでの購読が可能
- ページ移動のためのクリックが不要に(クリック数: 10回→0回)
- 新着図書の履歴を、過去までさかのぼれる
図書館側のメリット
新着図書をチェックしたいだけの利用者の方が非公式サイトを利用するようになれば、公式サイトへのアクセス負荷を軽減できます。RSSはFeedBurnerを介して配信しているので、高負荷になっても安心です。
杉並区立図書館のホームページは、たまに応答が遅くなったりすることもあったので、負荷軽減にもお役に立てるのではないかと思います。
仕組み
- Pythonの標準モジュール、urllib2でHTMLを取得。
- lxmlライブラリで、formの送信や、CSSSelectorクラスによるスクレイピング
- SQLAlchemyでSQLite3のデータベースにアクセスし、取得した図書情報がデータベースに無ければ、新着図書として記録
- PyRSS2Genを使って、RSS 2.0形式で出力
- サイトへのアクセスがあれば、PHPでデータベースから情報を読み込んで表示
以上の手順をcronに登録して、定時(10:00 AM)に自動実行しています。
lxmlによるスクレイピングの方法は、「Ian Bicking: a blog :: lxml: an underappreciated web scraping library」が大変参考になりました。lxmlは、RESTで取得したXMLデータをXPathで解析するために重宝していましたが、スクレイピングにも利用できるとは知りませんでした。cssselectメソッドが、すごく便利です。
まとめ
地域限定な、ちょっと便利なサイトですが、杉並区の図書館をご利用の方はお試しください。
» 杉並区立図書館 新着図書 更新情報 (非公式)
12月 28
なんと、拙作のクリップボード・ユーティリティ、ClipMenuが、初の栄冠に輝きました!

» 発表! 第3回 PISCES 賞(その1) : PISCES
PISCES 賞
今回いただいた賞は、第3回 PISCES 賞。
PISCES 賞とは、「年末はソフトの開発者さんもお休みモードで、書きたいネタがあまり出てこないんだよねぇ〜」ということで2006年に安易に創設された、Tom が感動したソフト5作品に贈られる権威のかけらもない賞であります。
候補作は、その年に最初のバージョンがリリースされ、かつ PISCES で紹介したことがあるソフト。つまりは「来年もがんばって開発してくださいよ〜」と開発者にエールを送るとともに、暗に「来年もアップデートして、うちのブログにネタを提供してね(ハート)」とプレッシャーをかける賞でもあります。
受賞作は選考委員の Tom 個人の独断と偏見によって選出され、受賞したソフトの開発者には Tom の熱いまなざしが贈呈されます。
熱いまなざし、ありがとうございます
来年もネタを提供できるように、がんばります!
12月 06
クリップボード履歴や定型文を利用できる、Mac OS X用ユーティリティ、ClipMenuのバージョン0.3.3をリリースしました。
今回は、機能の追加等はなく、不具合の修正のみです。発見したメモリリークも修正してありますから、バージョンアップをおすすめします。
主な変更点
- XMLファイルから読み込んだスニペットが、メニュー内に現れなかった問題を修正。
- 環境設定パネルで、メニューのフォントサイズを変更できなくなっていた問題を修正。
ダウンロード
ダウンロードはこちらからどうぞ。
» ClipMenu – naotaka.com
12月 04
拙作のClipMenuが、Mac Fan 2009年1月号に掲載されました!
以前にも、『別冊Mac Fan スグ使えるフリーソフトでおもてなし』に収録していただいたんですが、Mac Fan本誌の方でも紹介していただけました。うれしいです
取り上げていただいたのは、特集3の「メニューバー・Dockを鍛えろ!」。効率よくMacを使えるように、メニューバーとドックを強化しようという企画です。便利なオンラインソフトが、見やすくまとめられています。
ClipMenuは、70ページの「素早く操作するタイプ – したい操作をいつでも一発で行える」に登場。今回は、K2さんに作って頂いたニューアイコンが掲載されています。印刷されても、良い感じですね
お隣は、画面キャプチャをとるソフトInstantShot!。奇遇にも、InstantShot!は愛用しているユーティリティで、ClipMenuのスクリーンショット作成にも利用させていただいています。おすすめのツールです。
まだパラパラと見ているところなんですが、第4特集の「非開発者向けiPhoneアプリ開発講座」も、開発からApp Store公開までの流れが解りやすくまとまっていて良いですね。将来、参考にさせていただきます。
Mac Fan編集部の皆さん、ライターの皆さん、ありがとうございました!
市原隼人さんの、カッコイイ表紙が目印です。
11月 26
ClipMenu 0.3.2のリリースも済んだので、Google App Engineの勉強を開始。ClipMenuのウェブサイトを、GAEを使って作成しようと計画中なのです。Djangoを利用すれば、多言語化したサイトができそうなので。
まずは、スタート ガイドのチュートリアルをしようと、App Engine SDKの1.1.7をインストール。helloworldで必要なファイルを作成し、dev_appserver.pyを実行したら、いきなり躓きました。
AttributeError: 'module' object has no attribute 'HTTPSHandler'
初っ端からエラーが出ると、テンション下がっちゃうよ。
たぶん同じ問題に遭遇した人がいるだろうと、Google Groupsで検索。予想通り、解決策が示されていました。
どうやら、必要なPythonのライブラリが足りていないようです。MacPortsでpy25-socket-sslをインストールすると、無事にdev_appserver.pyでウェブサーバーが起動しました。
そのサーバーの出力を見てみると、まだImportErrorが出ている模様。
Could not initialize images API; you are likely missing the Python "PIL" module. ImportError: No module named PIL
ついでにpy25-pilもインストールしておこうと思ったら、今度はインストールの途中でエラーが。
unable to execute -DNDEBUG: No such file or directory
error: command '-DNDEBUG' failed with exit status 1
Error: Status 1 encountered during processing.
またググってたどり着いたのがこちらのページ。
leopardにtrac – studio suncrest
ただ、言及先を見てみても、よくわからない。Pythonをインストールし直したりするのも、ちょっと嫌だし。とりあえず、もう一度試してみようと、zshの履歴からコマンドを再実行してみたら、なぜか成功しちゃった!
% sudo port install py25-pil
Password:
---> Building py25-pil with target build
---> Staging py25-pil into destroot
---> Installing py25-pil 1.1.6_0
---> Activating py25-pil 1.1.6_0
---> Cleaning py25-pil
どこが問題だったのか、ちょっと釈然としないんですが、ともかくApp Engineのチュートリアルが進められるようになって助かりました。
有益な情報、ありがとうございました!
Recent Comments