スキップしてメイン コンテンツに移動

投稿

ラベル(Google)が付いた投稿を表示しています

好きな・嫌いなコンピュータ言語のアンケート

社内で好きなコンピュータ言語と嫌いなコンピュータ言語のアンケートを取ってみた。ことの発端は 自分のツイート なのだが、思いがけず賛同を得ることができたので、実際にアンケートを社内で行うことにしたのだ。各自で社内Wikiを編集してもらってもよかったのだけど、プログラムを作る会社でもあるし、投票システムに興味もあったので、Google App Engine (GAE)で作ってみることにした。以前にGAEで掲示板などを作成していたので、それらを流用して時間をかけずにすぐに仕上げることができた。以下のリンクから実際に投票できる。 好きな・嫌いなコンピュータ言語のアンケート 表示されているコンピュータ言語一覧から、最も好きな言語と最も嫌いな言語をそれぞれ一つずつ、それ以外にも好きな言語や嫌いな言語があれば、それらも選択(複数可)する。投票したい言語が一覧にない場合は「言語の追加」で自由に追加できるようになっている。言語を選択して投票ボタンを押すと、投票数とそのグラフが更新される。表示されるグラフには、「最も好きな・最も嫌いな言語」と「好きな・嫌いな言語」の2つがあり、青のグラフが「好きな言語」、赤のグラフが「嫌いな言語」を表している。「好きな・嫌いな言語」のグラフについては、「最も好きな・最も嫌いな言語」と「好きな・嫌いな言語」を足し合わせた票数となっている。 また、コメントも投稿できるようになっていて、自分の好きな言語を啓蒙するのも良し、嫌いな言語について文句を言うのもアリだ。自由に書き込める。 現時点での社内での票は以下のグラフに示す通りで、幅広く票が入っているように思う。傾向としては、C, C++, C#, ASM, Python, Rubyあたりが人気で、Visual Basic, Java, Perlが不人気みたいだ。 今回作成したコードの簡単な説明を書いておく。上述の「好きな・嫌いなコンピュータ言語」だけでなく、初期変数を設定することで、「好きな・嫌いな動物」「好きな・嫌いな食べ物」などのように、簡単に任意のアンケートを作成できるようになっている。グラフについては Google Chart API を利用しているが、1,000ピクセルを超えることができないので、表示数を1,000ピクセル以内に抑える処理を入れている。また、頻繁にデータベ...

GoogleのURL短縮サービスgoo.glのAPIをPythonで利用する

しばらく前から goo.gl のAPI (Google URL Shortener API)が使えるようになっていたことは知っていたけど、実際に使ったことなかったので試しに使ってみた。import文を含めなければ3行で短縮URLの作成・復元の自動判別を行うことができた。条件演算子などを使えば1行にまとめられる。簡単。 ただし、正規表現は適当だし、エラー処理はしてないので、ちゃんと使う場合はその辺の処理を行う必要あり。あと、本格的に使うのであれば APIキーを取得 すべき。また、 Google APIs Client Library for Python を 使う方法 もある。 http://handasse.blogspot.com/ を短縮URLに変換: % googl.py http://handasse.blogspot.com/ http://goo.gl/RiIiD http://goo.gl/RiIiD を元のURLに戻す: % googl.py http://goo.gl/RiIiD http://handasse.blogspot.com/ googl.py import sys,re from urllib2 import urlopen as U, Request as R from json import loads as J API,URL="https://www.googleapis.com/urlshortener/v1/url",sys.argv[1] if re.match('http://goo\.gl/.+',URL):print J(U(API+'?shortUrl=%s'%URL).read())['longUrl'] else:print J(U(R(API,'{"longUrl":"%s"}'%URL,{'Content-Type':'application/json'})).read())['id'] 追記 (2015/3/26): 現在、API Keyを利用しないとエラーが返ってくるようなので、以下のように修...

Android端末で青空プログラミング! SL4Aの導入からアプリケーションの作成・公開まで

以前、 Android上でPython、Lua、JavaScriptなどを実行するスクリプティング環境ASE (Android Script Environment) について記事にした。現在ASEはSL4A (Scripting Layer for Android)に変更され、機能がさらに進化している。APIの充実やインターフェイスの改良、スクリプト環境は独立になり、HTMLインタプリタ導入やAndroidパッケージ(APK)の作成などもできるようになった。そこで改めてSL4Aのインストール方法、使い方、Pythonによるアプリケーションの作成、QRコードによるソースコードの公開方法などを紹介する。 導入 まず、 SL4Aの公式サイト で最新版のSL4Aをダウンロードする。現時点では sl4a-r2.apk だが、頻繁に更新されるので注意すること。さらに必要なスクリプト環境をダウンロードする。BeanShell, JRuby, Lua, Perl, Python, Rhino (JavaScript)などがあるが、ここではPythonを選んだ。現時点での最新版は python_for_android_r1.apk になる。SL4Aとスクリプト環境は独立しているのでそれぞれをインストールする。 これらのAndroidパッケージは公式のものではないので、ダウンロード後インストールするためには、Android端末の設定で「アプリケーション」の「提供元不明のアプリ」にチェックを入れておく必要がある。 これでSL4AでPythonを使用するための準備は整った。 スクリプトの作成 SL4Aをインストールすると左のようなアイコンが出てくるのでそれをタップして起動する。Pythonスクリプトファイルの作成するには、メニューボタンから"Add"を選択し(スクリーンショット左側)、表示されるダイアログから"Python"を選ぶ(スクリーショット左から2番目)。そうすると、Pythonスクリプトの雛形を伴った編集画面になるので(スクリーンショット中央)、それを更新して作成する(スクリーンショット右から2番目)。ファイル名は自由に付けることができ、作成したスクリプトファイルは"Save & Run...

日本全国ハンバーガーショップ分布地図

以前、 Processing を使って 日本全国のコンビニ店舗の分布地図 を作成したが、今回はハンバーガーショップの分布地図を作成してみた。 個人的にハンバーガーショップには小さい頃から思い入れがあって、小学生の頃、初めてマクドナルドのハンバーガーを食べたときに「なんて美味しいんだろう」と感動した覚えがある。しかし、今でこそ安価な食べ物という認識だが、当時は他の食べ物に比べて割高であまり頻繁に食べられなかった。 その後はだんだんとハンバーガーから離れていったが、モスバーガーと出会ったときに二度目の感動を覚えた。冷たくてジューシーな野菜と熱々のハンバーグが絶妙にマッチしてそれまで食べたことのないハンバーガーだった。少々食べにくくはあったが、逆にそれが溢れる美味しさを表現していたようにも思う。 最近気に入っているハンバーガーは、アトレヴィ 秋葉原2階にある Chelsea Market のアボガドバーガーだ。少々値は張るが、普通のチェーン店に比べて味は飛び抜けていると思う。チェーン店ではないハンバーガー専門店なら他にも美味しいハンバーガーがいろいろとありそう。 閑話休題。以下に作成したプログラムを示す。 This browser does not have a Java Plug-in. Get the latest Java Plug-in here. 左上の店名をクリック: 分布の表示・非表示を切り替える。起動時はマクドナルドのみ表示。 右クリックしたままマウス移動: 地図を平行移動する。 左クリックしたままマウス上下移動: 地図を拡大・縮小する。 プログラムの作成方法は 前回のコンビニ店舗分布地図を作成した方法 とほとんど変わらない。まず、住所をネットから取得する。それを Google Maps API で緯度経度変換し、さらにPythonスクリプトでUTM図法に合わせてXY座標変換する。そのデータをtar/gzipでアーカイブし、Processingを使って読み込み、 日本地図 に表示する。ブログへの貼り付けはProcessingでJavaアプレットにエクスポートできるのでそれを使う。 今回の分布地図を見て、マクドナルドよりもかなり後に出てきたモスバーガーの店...

Google App EngineとSafe Browsing APIを利用して短縮URLチェッカーを作ってみた

最近、Twitterやはてなブックマークなどを使うことが多くなり、字数制限付きのコメントを書くことが増えた。コメント中にURLを入れたいこともままあるのだが、長いURLだと字数をオーバーしてしまう。そのため短縮URLを使っているが、コメント内に直接短縮URLを入れるのがやっかいだった。そこで、 Google App Engine (GAE) を使ってシンプルで高速な短縮URL変換ツールを作成してみた。 しかし、短縮URLは悪意のあるサイトの判別が難しいという欠点がある。見た目で判断できないので開くのを躊躇してしまう。そこで、今回作成したツールでは、短縮URLに変換するだけではなく、それを元のURLに戻す機能も追加した。さらに、 Google Safe Browsing API を利用してフィッシングサイトなどの悪意あるサイトの判別も試みている。 短縮URLチェッカー 使い方はシンプルで、テキストボックスに変換したいURLを入力すればbit.lyの短縮URLがテキストボックス表示され、bit.lyの短縮URLを入力すればもとのURLが表示される。テキストボックスをクリックすれば表示されているURLが選択されるのでクリップボードへのコピーも簡単だ。テキストボックスの下には展開されたURLがリンク付きで表示されるが、もしフィッシングサイトだと疑われる場合は、以下のように警告してくれる。 さて、今回のコード作成だが、bit.lyによる短縮URLの変換は簡単だった。というのも 以前にPythonスクリプトで作った ことがあるからだ。それをそのままGAEに載せればいい。しかし、Safe Browsing APIによる悪意あるサイトの検出は思ったよりも面倒だった。まず、APIの使い方がよく分からない。使う前は任意のURLをAPIで確認するのかと思っていたのだが、そうではなく、MD5でハッシュ化したリストをダウンロードして、調べたいURLをハッシュ化してそれと照らし合わせなくてはならない。今回問題になったのはそのダウンロード容量で、フィッシングサイト用データが700KB程、マルウェア用データが10MBを超えていた。GAEでは一回のダウンロード容量の上限が1MBと決まっており、フィッシングサイト用データは何とかダウンロードできても、マルウェア用データは途中で切れ...

一つのGoogle App Engineアプリケーションで複数のWaveボットを作成する

Google App Engine (GAE) では現在10個までのアプリケーションを登録することができる。そして、GAEを利用してGoogle Waveのボットを作成することができる。しかし、多種多様な利用方法が存在するWaveボットをGAEアプリケーションとして登録していてはすぐに上限に達してしまうだろう。そこで、 一つのGAEアプリケーションで複数のWaveボットを作成するためのいくつかの方法 を利用することになる。サブドメインを利用する方法が一般的だろうか。 しばらく前からサブドメインを利用して複数のWaveボットを作成しようと思っていたのだが、ちょっと面倒に思えて手を付けていなかった。そうしたら、 technohippy 氏による appengine_multi_robot_runner というライブラリが公開され、それがとても便利そうだったので簡単なWaveボットを作成してみた。ただし、 Google Wave Robots API v2 が3月30日にアップデートされて実装の一部が変更されたことにより、appengine_multi_robot_runner.pyがそのままでは動作しなかったので該当箇所を修正した。それについては最後に記述しておく。 追記 (2010/4/15): 現在、 appengine_multi_robot_runner は最新版に更新されているので、後述の修正は必要無くなっている。 作成したのはインチキ日本語ボット([email protected])とインチキ英語ボット([email protected])の二つのWaveボットだ。インチキ日本語ボットでは、書き込んだ日本語を一度Googleにより英語に翻訳し、それを再度日本語に翻訳し直して表示する。インチキ英語ボットは、日本語を英語に翻訳したものを表示する。インチキと書いたが、特にでたらめにするために細工しているわけではない。現在の翻訳技術ではインチキっぽく見えてしまうというだけである。因みに、これらのボットのアイコン画像は Atnet Japan! を利用させてもらった。 どのように動作するか、以下の例文を実際に入力して動作を見てみよう。 「花便り」 「ここ数日は暖かな...

Android Scripting Environment (ASE) Python API簡易リファレンス

Android Scripting Environment (ASE) について、「 Android上でPython、Lua、JavaScriptなどを実行するスクリプティング環境が凄い 」で紹介した。今回はAndroid端末の機能を利用するためのPython APIの使い方をリファレンスとしてまとめてみた。Python 2.6の標準モジュールは最初から利用できる。また、twitterモジュールなど、いくつかの標準外のモジュールがデフォルトでインストールされている。詳細については利用する環境で確認して欲しい。 ASE上のPythonスクリプトの編集画面でメニューボタンを押し、そこから"API Browser"で簡単なリファレンスを読むことができる。また、ASEのWikiとして Wiki pages - android-scripting 、サンプルプログラムとして test.py が参考になる。 以下にASE Python APIの簡易リファレンスを示すが、APIのすべてを記しているわけではない。足りない部分については随時追加していく予定だ。 Androidモジュールを使用する import android droid = android.Android() 現在のクリップボード取得と貼り付け clip = droid.getClipboard()["result"] droid.setClipboard("Hello, world!") GDataの使用 import gdata.docs.service client = gdata.docs.service.DocsService() # クライアント. client.ClientLogin(username, password) # 接続. feed = client.GetDocumentListFeed() # ドキュメントリストのAtomをフィード. GPSで現在の位置情報を取得 droid.startLocating() # 開始. location = droid.readLocation()["result"] lat = location[...

Google Waveを使わないと人生損する

「Google Waveを使わないと人生損する」…これはちょっと大げさかもしれないが、1年半前に書いたブログ記事「 Evernoteを使わないと人生損する 」で言及したEvernoteと同じぐらい、Google Waveが重要な技術になると感じたのは本当だ。当初、 Google Wave は自分にとって、 Google App Engine (GAE) などでプログラミングできる単なるおもちゃだった。しかしながら、今になってやっと、オンラインコラボレーションプラットフォームであるGoogle Waveの潜在能力の高さを知ることになった。 大量のメールに埋もれる情報と予定の立たないミーティング 最近、仕事上のメールのやりとりが頻繁ですぐに流されてしまうことが多く、大事な知らせを失念してしまったり、大量のメールから目的の情報を探し出さなくてはならなくなったりと、メールの扱いに手を焼いていた。さらに、直接顔を合わせるミーティングにおいても、この時期は皆忙しいようで、集まりたいときにすぐに集まれない状況が続き、何かと仕事が滞りがちになっていた。 そこで、昨年にアカウントを取得していたGoogle Waveに目を付けたのだ。今までGoogle Waveを仕事で利用しなかったのは、もともと GAEと連動させてWaveボットなどを開発する のが目的であり、コラボレーションツールとしてはあまり興味を持っていなかったからだ。それに、知人や同僚にもアカウントを持っている人がいなかった。 しかし、メールでのやりとりがひどく非効率に感じられ、必要なときにミーティングもできないというこの状況を打破すべく、Google Waveのアカウントを職場で配ってみることにした。そこでまずは、IT関連の最新技術に明るい同僚に利用してもらい、しばらく一緒に使ってみたのだが、特に問題となるような点もなく、使い勝手もそれほど悪くはなかったので、他のメンバーにもアカウントを配ることにした。 本当に新しいことは理解され難い Google Waveアカウントを配ったメンバーに早速使ってみてもらったところ、おおむね好評を得られて…というほど甘くはなく、やはり第一印象は「難しい」、「使いづらい」、「メールでいいんじゃないの」という意見だった。誰もGoogle Waveの名前すら聞いたことがな...

Google Wave Robots API v2でボットを書き直してみた

先日、 Google Wave の Robots APIバージョン2 がリリースされた。更新内容の概要は「 Google Wave Robot API v2のリリースエントリを翻訳しました 」が分かりやすい。そこで、以前に作成した 「てめーはおれを怒らせた」ボット をバージョン2のAPIで書き直してみることにした。しかし、すぐに修正できるだろうとナメていたら意外と時間が掛かってしまった。 初っ端でいきなり動かない。ほとんど チュートリアル と同じ程度に削っても動かない。エラーを頼りにAPIのソースコードなどを読んだりしているうちに、自分のプログラムの問題ではないんじゃないかと思い、動作確認していた環境をSandboxからPreviewに変更してみたら、問題なく動くようになった。ここでかなりの時間ロス。さらに、インターフェースも大きく変わっていて、新しいAPIでどのように実装するのか調べるだけでも結構時間を取られた。 書き直したソースコードは以下の通り。本当にこれで良いのか自信はないが、ちゃんと動作するようだ。因みに、ボットのアカウントは [email protected] だ。Google WaveのContactsパネルから登録すれば使うことができる。 慣れていないので手こずってしまったが、以前のバージョンに比べて、できることは増えているし、APIの構成も分かりやすくなっている。それに、ちゃんと Google Wave Robot Python API v2 のドキュメントが整備されているのが嬉しいところ。何か面白いボットを作ってみたいな。 追記 (2010/3/15): Sandboxでも正常に動作するようになったみたい。 billowlet.py #!/usr/bin/env python # -*- coding: utf-8 -*- """billowlet.py by nox, 2010.3.6""" import re, urllib, urllib2, random from google.appengine.ext import db from waveapi import events from waveapi import robot from ...

Android上でPython、Lua、JavaScriptなどを実行するスクリプティング環境が凄い

ASE (Android Scripting Environment) を使って簡単にPython, Perl, JRuby, Lua, BeanShell, JavaScript (Rhino), それにシェル(将来的にはさらにたくさんのスクリプト言語)を Android上で実行できる のはご存じだろうか。ASEのインストールからスクリプトの作成、実行まで、すべてAndroid単体でできる。もちろん、PC上でコーディングしたい場合は、USBで繋げてPC上のスクリプトをAndroid端末上で実行することもできるし、PC上のコードをAndroid端末にコピーすることもコマンド一発だ。さらに、各種センサー、位置情報、SMS、テキストの読み上げなどもスクリプト上で操作できるというのだからこれを使わない手はない。 そこで、試しにPythonスクリプトを書いてみた。Android端末のGPS機能で 緯度経度を取得 して、 逆ジオコーディング で現在の住所を表示するスクリプトだ。Google Maps APIのURLなどを含めた雛形だけPCからAndroid端末( HT-03A )にコピーして、通勤時の電車の中で書いたのが以下のコードだ。 # -*- coding: utf-8 -*- import android, time, json, urllib url = "http://maps.google.com/maps/geo?ll=%.16f,%.16f&sensor=false&output=json&hl=ja&oe=UTF8&key= Google_Maps_API_Key " droid = android.Android() droid.startLocating() for i in range(10): location = droid.readLocation() if location["result"]: break time.sleep(1) lat, lng = location["result"]["network"]["latitude"], location[...

Google Wave: 「てめーはおれを怒らせた」ボットを作ってみた

「てめーはおれを怒らせた」ボットといきなり言われても何のことだか分からないと思うけど、要はユーザの発言に含まれる特定の文字に反応して動作する Google Wave のボット [email protected] を作成したのだ。 追記 (2010/3/7): Google Wave Robots API v2 がリリースされたので、 新しいAPIでボットを書き直してみた 。古いAPIは今後使用できなくなるようなので、今のうちに新しいAPIに移行した方が良いと思う。 先日、Google Waveの開発者用アカウントをGoogleからもらえたので早速何か作ってみることにした。どうせならGoogle App Engineを利用したかったので簡単に作れそうなボット(bot)を作成してみたわけだ。因みに元ネタの ジョジョの奇妙な冒険 とは言い回しが似ているというだけで内容とは関係ないので悪しからず。 このボットはユーザの発言内容に含まれる特定の文字に反応して動作し、ネコみたいな喋り方にさせられたり、英語や中国語で喋らされたり、笑いっぱなしにさせられたり、どもらされたりと、ユーザの発言がいろいろ変化する。因みに、「ごめんなさい」もしくは「ゆるして」と言うことで、動作を取り消すことができる。画像は実際の使用例だ。 ボットのアカウントは [email protected] で、使い方はGoogle WaveのContactsパネル内にある+ボタンでこのアカウントを追加するだけだ。そして、このボットアカウントをWaveに参加させればよい。因みに、ボットに使われている仔猫のアイコンについては フリー素材ROKO の画像を利用させてもらった。 以下に「てめーはおれを怒らせた」ボットのデモのリンクを張っておくが、こちらは Wave Sandboxアカウント 所持者のみが利用できる。 「てめーはおれを怒らせた」ボット デモ 実際に使ってみて、このGoogle Waveはとても面白いWebアプリケーションだと思った。今回のアプリケーション作成でも将来性を強く感じることができたので、これから多くの人が使うことでどのように発展していくのか楽しみだ。 以下にGoogle App Engine上のソースコードを示しておく。ところで、stringモジ...