2010/01/07

Twitter Bot を Google App Engine に移した件

とにかく無価値なBotですが、そんな無価値なBotのためにRackspace Cloudのインスタンス代(約1円/時間)を払うのももったいないと言うことでGoogle App EngineへBotを移行させてみました。

もともとUbuntu Server上で動かしていたBotは

  • Pythonで組まれたスクリプト
  • 形態素解析に MeCab
  • 定期実行はCron

という構成でした。

Google App EngineはネイティブにPythonを動作させることの出来る希有なサービスですので移行は非常に単純でした。ほぼコピペ。
このほぼというのがミソで、一部追加しないといけないことがあるそうなので、素直に追加しておきましょう。

ちなみにキモの python-twitter は 0.6 を使用していますが、Api クラスにおいてファイルキャッシュを使っているために、素のままでは GAE で使えません。今回は以下のような Monkey patch を twitter.Api を利用する前に書いて、その場しのぎを…

link: GAE/Python で Twitter bot を作る(準備編) - SPEAKER BREAKA
詳しくはリンク先をご覧ください。関数を一つ定義し直す必要がありますが、コピペで終わるので全然面倒じゃありません。
(コピペで貼ろうとしたら、Macのエディタだとうまくいかない・・・)

 

1番の問題点の形態素解析。
MeCabはLinux等のプラットフォームに最適化されていますし、品詞の切り分けには巨大にしないでも辞書データが必要になります。
Google App Engine上でMeCabを動かすなんて到底無理な話ですので、いつぞや話題になったYahoo日本語形態素解析を思い出したわけです。
Yahoo! 日本語形態素解析APIを Python から使う | itFun.jp

さらに、Ubuntuでは苦労して書いたCrontabも、Google App Engineなら結構単純。
ただ、スペルミスには注意してくださいね;p
Google App Engine/Python で cron.yaml | itFun.jp

 

ここまでは良いとしても少し疑問に思っていた点として、Python から Twitter へ投稿するこういうので利用するライブラリ達。
解決法としては、一回ローカルにダウンロードでしてそれを一緒にアップロードしてしまうという当たり前のようなこと。
今回はPython-twitterを使うに当たって

  • twitter.py
    twitter.pyc
  • simplejson/
    __init__.py
    __init__.pyc
    _speedups.c
    decoder.py
    decoder.pyc
    encoder.py
    encoder.pyc
    scanner.py
    scanner.pyc
    tool.py
.pycは少なくとも1回は実行すると作られるファイルです。
もしかしたらこれがないと上手く動作しないかも・・・

ちなみに、今回自分の構成はmain.pyに記述して
  • BeautifulSoup.py
    BeautifulSoup.pyc
    app.yaml
    cron.yaml
    index.yaml
    main.py
    simplejson/
    twitter.py
    twitter.pyc
    yomi.py

こうなってます。
今回はYahoo日本語形態素解析のXMLから必要なデータを抜き出さないといけないのでBeautifulSoup(Beautiful Soup: We called him Tortoise because he taught us.)を準備してください。
以上で終わり。
ね、簡単でしょ。


Kindle DX も国際展開(日本からも注文可能)

あのKindleをより大きくしたKindle DXが日本からも買えるようになりました。

Kindle DXは電子ペーパーディスプレイが通常版の6インチから9.7インチに、解像度が800 x 600 から1200 x 824になった大型版。グローバル対応版の価格は従来モデルとおなじ489ドル。

link: Amazon Kindle DXも国際展開、1月19日から

通常のKindleより2.5倍も大きなディスプレイで、これまで小説など以外にちょっと読むのが大変だったコンテンツにはもってこい!
専門性の高いコンテンツはこっちの方が圧倒的に良さそうですよね。

ただ、日本人の感性から見ると小さい方が良いのかも。
それ以前に日本語に対応していないことが1番大きな問題かな;p


2010/01/06

ついにGoogleが携帯産業にNexus Oneで殴り込み


Nexus One

もうね、ネットで調べれば山ほど情報が出てるのでそれでおなかいっぱいですよ。現時点ではiPhoneすら上回る最上級のスマートフォンの登場には間違いありません。

このプロモーションを見ていただければ分かると思いますが、これまでのAndroidモバイルはGmail等の連携が出来る程度だったのに、素晴らしいまでのGoogleサービスとの連携。それを売りに出来るのはGoogleが出したモバイルだからこそ出来る事だと思います。

Nexus One Phone - Web meets phone.
Googleが運営する販売ストアになります。
ただ、日本からアクセスすると

Sorry, the Nexus One phone is not available in your country.

非常に悲しい一言。
現段階では日本から購入することはおろか使用することも出来ませんが、忘れちゃいけないあの人の一言。

QUALCOMM製の1GHz Snapdragonプロセッサ、3.7インチ有機ELディスプレイを搭載し、Wi-Fi、Googleのアプリストア「Android Market」に対応する。メーカーは公表されていない。

link: 嗚呼、Softbankの冬春モデル発表 | itFun.jp

そう、孫社長率いるソフトバンクが来春(今春)に発売予定のAndroidモバイルのスペックですがこれが見事にNexus Oneに匹敵。

めちゃ高速なクアルコムの1GHzのSnapdragonチップが入ってます。画面は3.7インチの480x800のAMOLEDスクリーン。カメラは5MP、LEDフラッシュ付きで、しかもMPEG-4形式の動画を撮ったらワンクリックでYouTubeにアップロードもできちゃう! 

link: Google「Nexus One」について知っておくべき全てのこと : Gizmodo Japan(ギズモード・ジャパン), ガジェット情報満載ブログ

でも、ソフトバンクですか・・・
だとしても、欲しいですね。iPhoneにもやっとやり合える素晴らしいライバルと書いて友と読むような端末が市場に出てきたわけです。おめでとうございます。
さて、今年発売されるであろう、次世代iPhoneに期待しないわけにはいかなくなりました!
ちょうどiPhone 3Gユーザーにとって2年契約の更新時期となるので、ものすごい期待がかかりますね;p

(1番驚いたのはあれだけリークされていながらこの盛り上がりを描ける、Googleのシナリオ)


via Google Nexus One(ネクサス・ワン)ついに発表―TechCrunchが詳細レビューをお届けする


Google App Engine のテストに外部から接続する

その際のアドレスは通常なら"localhost:8080”などしか出来ないので、外部からアクセスする事は難しいのでグローバルアドレスを割り振って、ネットワークを跨いでアクセスできるようには出来ないものかというライフハック。

./dev_appserver.py --port=8081 --address=192.168.0.21 helloworld/

link: Google App Engineをlocalhost以外から使う方法 - Reinvention of the Wheel

アンダーラインを引いている場所を起動の時に追加してやるだけ。
これで、上の画像のように家のMacからアクセスすることが出来ます。
ちなみにMacでも同じ事は出来ますが、Macには標準でインストールされる管理アプリのLauncherが便利なので逆にこの設定の仕方は分かりません;p

Python 開発用サーバー - Google App Engine - Google Code
ここにはこれ以外の起動オプションが書かれています。結構多いのね。

これで、某所のLinuxサーバ上にGoogle App Engineの開発環境を乗せて、いつでも・どこでも・誰からでも開発できる・・・まさに開発環境のクラウド化!!


2010/01/04

RackSpace Cloud を iPhone から起動する

以前書いたRackSpace Cloud のインスタンスを起動すると同じなんですが、iPhoneアプリの方が何気にインターフェイスが良いというか、使いやすいのでおすすめです。
特に、ある一定の時間だけLinuxサーバが欲しいなんて状況の時に便利かな。
もちろん、Rackspace Cloudに登録していることが大前提です。
ダウンロード [iTunesで開く]
インスタンスを起動している場合はこの画面で一覧できます。
すでに起動しているインスタンスに対しては仮想ハードウェアのリソースのアップグレードや、パスワードの変更・ハード(ソフト)ウェアリブートが選択できます。
これがサーバのインスタンスを起動する画面。
このServerNameですが、実は何でも良いです。あくまでも利用者がサーバを区別する際に利用する程度なので後から変抗すことも簡単にできます。
先ほどの画面をスクロールすると出てくるOSの選択画面。
これで選択できるOSは以前書いたのと同じです。アイコン付きでこっちの方がわかりやすいかも。(と思ったらWebインターフェイスにもアイコンついてました)
そして、ちゃんとインスタンスが起動していることをWebインターフェイスから確認。
少し待てばiPhoneクライアントの方にも更新されます。
ただ、インスタンスの終了はWebインターフェイスからしかできないので注意してください。
しかも、このアプリは無料で利用できます。
もしもiPhone内にSSHクライアントが入っていれば、直接接続することも可能なので便利です。
このアプリを使用するにはAPI Keyが必要になりますが、これはWebインターフェイスのCloud Files(Amazon S3みたいなの)をごにょごにょすると出てきます。
あるいはYou Account → API Access の項目の中に書いていると思います。
実際に非常に単純。
iPhone持ってて、Rackspace Cloud使ってるなら入れて損はありません。

FreeDOS を使ってみた

あらやだ、可愛い。
なんでクジラなのかは皆目見当もつきませんが、可愛いし良いか。Twitterもクジラだった事もあるし。

その昔Microsoftが販売していたMS-DOSと100%の互換性を持つオープンソースのOS “FreeDOS”です。

FreeDOSは、MS-DOSとほぼ100%の互換性をもっており、従来MS-DOS上で動いていた旧式のMicrosoft WindowsシステムもFreeDOS上で動作する。

link: FreeDOS - Wikipedia

だそうです。
なのでMS-DOS時代のゲームとかアプリとかなら動かすことが出来るかも。
ちなみに、PCハードウェアのBIOS更新用として未だに重宝されている・・・かもしれないそうです。

ダウンロードはFreeDOS | Filesから。
自分が今回ダウンロードしたのはfdfullcd.iso (153MB)というやつ。
その下のファイルサイズの多きのはソースコード付きだそうです。

とにかくインストールはめんどくさかったです。
<done>ボタンの連打でしたがそれでよかったのかは分かりません。でも、一応フルパッケージインストールされたっぽいです。

この画面でGEM.BATを実行すると・・・なんと!

GUIが登場しちゃいます!!
ここまで試行錯誤でキャラクターベースの画面とにらめっこしてきただけに、GUIの安心感は異常。
しかし、曲者でWindows以前の環境をうんぬんかんぬん。
要するに使いにくいわけです。

でも、昔はこの環境でいろいろしていたわけですから、凄いなぁ〜
しかも、それがほんの20年前ですよ。20年後の未来なんて全然想像できない。

あと、これ32MBのメモリーの割り当てで全然快適に動きます。
素晴らしい。

via FreeDOS - noticias y blog


2010/01/03

Google App Engine/Python で cron.yaml


まず、声を大にして言いたいのは cron.yamlです。
clonじゃありません。cronです。
何回やっても出来ないような場合は、ここが間違っていないか確認してみた方が良いです。

記述の方法などは公式を見るのが1番
Python 用の cron を使用したスケジュール タスク - Google App Engine - Google Code
ちなみに、descriptionの部分は上の画像の“postTwitter”の部分に当たります。

あと、cronで呼び出すurlですが、そのURLに対してapp.yamlで指定したものが対応しているのでapp.yaml側できちんと指定してあげる必要があります。
今回みたいに5分ごとに実行するとかの場合は気にする必要はありませんが、指定した時間に動作させたい場合はタイムゾーンの指定を忘れずに。(UTCで逆算して指定するのもありかも)


メールアドレスだけで荷物が送れる “メルアド宅配便”

実際には先月16日よりサービスインしています。
ソフトバンクの100%子会社のソフトバンクフレームワークスという会社が提供するのは、メールアドレスだけ分かっていれば荷物の配達が行えるという実は凄いサービス メルアド宅配便です。

実際の流れ(自分がやってみたわけじゃないので注意)は

  1. 差出人がメルアド宅配便に申し込み
  2. 受取人がメールにて承諾
  3. 荷物を配送

とプロセスは単純。
差出人と受取人の個人情報に関してどのようになっているのかいまいち見えませんがメルアド宅配便Q&A、利用シーンとしては、オークションの配送やBlogやWeb企画のプレゼントなんかに良いかもしれません。
匿名Blogをいきなり信用するのは大変ですが、これなら・・・

この送料990円が高いと見るとか安いと見るかは送るもの・相手次第かな。
もし、チャンスがあったら使ってみたいと思います。


2010/01/02

Yahoo! 日本語形態素解析APIを Python から使う

以前作ったTwitter Botですが、動いている内容はとても単純。
ここまで単純ならわざわざMeCabを使わなくても良いのではと思ったので、以前話題になったYahoo! Japanが提供するWeb APIの日本語形態素解析を使ってみました。
Yahoo!デベロッパーネットワーク - テキスト解析 - 日本語形態素解析

まず下準備として、YahooのIDを持っておく必要があります。意外とGoogle依存なのでYahoo! Japanのアカウントの用意で手間取ったのは内緒:p
あと、Yahoo! Japanのアカウントは各国共通じゃないのでFlickrとかの海外Yahoo!サービスのアカウントじゃログインできないので注意してください。

あとは、非常に簡潔にまとめてくださっている方がいらっしゃいますので、そちらを読んでいただければ・・・
YahooWebAPI"日本語形態素解析"を使って日本語文をひらがなに変換、索引用語のソートに利用 - Object Design

これだと、別にファイルを用意しないといけないので、少し改造して予め入力してあげようと言うことで

word = u'庭には二羽ニワトリがいる。'
yomi = reading(word)
print (word+'->'+yomi).encode('utf-8')

ちなみに1行目に #coding:utf-8 をつけてないと文字化けします。
すると結果は

$ python yomi.py
庭には二羽ニワトリがいる。->にわには2わにわとりがいる。

ここまでしてくださっていると説明の必要もありません。

 

帰ってくる答えを変えたい場合は def reading(text,appid=appid,results='ma',filter=''): のfilterの引数に日本語形態素解析に戻り値として欲しい品詞番号を入れておくと、名詞だけを抜き出せたりします。
あとは、形態素解析のどれを拾うかの設定

帰ってくるXMLはこのような形なので

<word_list>
<word>
<surface>庭</surface>
<reading>にわ</reading>
<pos>名詞</pos>
<baseform>庭</baseform>
</word>

ソースコード中の

readings=soup('reading')

に対応しています。
が、このまま変更しても結果は帰ってこないので

postdata= {
'response' : 'surface,reading',

この response の引数を ‘’ にするか、結果として欲しいものを指定してあげる必要があります。
何が変わるかというと、例えば形態素の基本形を知りたいは reading を baseform に変えてみると

$ python yomi.py
お待ちしております。->お待ちするておるます。

こんな風に、帰ってくる形が変わります。

Web APIですが、扱いやすいですし環境依存しない(MeCabの場合は最低条件としてMeCabが動く環境が必要)ので面白いんじゃないかな。
特に1つあたりの情報量の少ないTwitterとか・・・Twitterとか・・・には好都合な気がします。ちなみに制限は1つのリクエストあたり 100KBまでで、24時間以内に50,000リクエストとなっております。


2010/01/01

Google 2010年の New Year Easter Egg

今年のは結構派手。
ドカンドカンと花火が打ち上がります・・・が、やり方がいまいち分からない。

去年は新年あけましておめでとうございます 2009!こんなに素敵なことをしていたのに今年は静かな感じ。
TVCMに力を注いでいるという話ですので、もしかしたら新年CMとかもあったかも。


鳩山由紀夫が「なう」

screenshot by wonderlanddalicejp.

新年あけましておめでとうございます。
早速ですが、素敵なニュースです。

 

本当に始まっちゃいましたね。
今回は空気の読めない放送作家のいたずらじゃない・・・と思います。

ちなみに公式Blog鳩cafeのURLはちゃんとgo.jpなので信頼しても良いんじゃないかと。
Twitterのアカウント方は鳩山由紀夫 (hatoyamayukio) on Twitterこちらになります。

Blogのデザインがシンプルで良いなぁ と思うのは自分だけじゃないはず;-)