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

投稿

2月, 2010の投稿を表示しています

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["result"][…

「ハッカーと画家」を読んで

ポール・グレアムの「ハッカーと画家 コンピュータ時代の創造者たち」を読んだ。もっと以前に読んでいてしかるべき本であったが、読みそびれていた。もっと技術的な話だと思っていたのだが、(プログラマであれば)気軽に読めるとても面白いエッセイ集だった。

個人的に興味深かったのは、第4章の「天邪鬼の価値」で、ジョブズとウォズニアックが錠開け装置をいじっている写真だ。リチャード・ファインマンがマンハッタン計画で重要書類の入っている金庫を破ることを楽しみにしていたり、グレアムが学生の頃のMITではピッキングが流行ったりしていたそうだが、それを読んで、自分が子供の頃のことを思い出した。古いダイアル式南京錠が家にあったのだが、それは錠が閉まっていて親に聞いても番号が分からないという。そこでどうやったら開けることが出来るかを考えるうちに面白くなり、次第に夢中になっていった。ダイアルは3桁の数字なので、10*10*10=1000通りを試したら必ず開けられる。しかし、そんな面倒なことはしたく無い。悪用されても困るので詳しくは書かないけど、しばらくいじっているうちにキーの動きに法則があることに気がついた。こうなれば簡単で、最大で10+10+10=30通りを試すだけでよくなる。これで開かない錠前を開けることができた。今で言えばセキュリティに欠陥があるということなのだろうが、困難だと思われることに挑戦し、それを克服することは、とても強い達成感となる。子供ながらにそう感じた。ファインマンもMITの学生もそう感じたのだろう。これがハックする理由の原点だろうか。

第13章の「オタク野郎の復讐」を読めば分かるけど、ポール・グレアムは熱心なLispハッカーで、Lispを非常に高く評価している。確かに他の言語の意義についても説いてはいるけど、「他のプログラミング言語はとうとう(Lispの生まれた)1958年に追いつこうとしている」と書いていることからもLispが最も良い言語だと考えているのが分かる。確かにLispは良い言語だと思うけど、個人的には万人にLispを勧めることはできないなぁ。

自分の場合は、普段はC++とPythonを利用していて(多くの場合はこれで事足りる)、最近は並列化のためにTBBやCUDA、それとErlangを使ったりしている。もちろんAndroidで開発するときはJavaだし、グラ…

Erlang基礎文法最速マスター

先日、Lua基礎文法最速マスターを書いてみたが、予想以上に自分自身への学習効果が高かった。そこで、普段使っているPythonと同じぐらいに使いこなしたいと思っていたErlang(アーラン)の基礎文法最速マスターを書いてみることにした。

Erlangが関数型プログラミング言語であることもあり、書き下すのは思ったよりも大変だったが、学習効果はかなりあったと思う。言語を習得したいときはこのようなまとめを書いてみるのが良さそうだ。

ただ、手続き型プログラミング言語に比べて異なる部分があまりにも大きいので、すべてを説明することは難しく、これを読んだだけですぐに使えたりはしないかもしれない。また、間違っていたり、足りない部分などがあったら、教えて頂けるとありがたい。

1. 基礎対話環境 コマンドラインからerlを実行すると対話環境(シェル)になります。コマンドの最後にはピリオド(.)が必要です。help()で簡単な説明を読むことができます。

$ erl 1> A = 10. % Aに10を束縛. 10 2> B = A * 5. % BにA * 5 (50)を束縛. 50 3> hello. % helloはアトム(定数のようなもの/後述). hello 4> b(). % 現在の束縛変数を表示. A = 10 B = 50 ok 5> A = 20. % 変数は一度しか代入(束縛)できない. ** exception error: no match of right hand side value 20 6> f(). % 束縛変数をすべてクリアする. ok 7> A = 20. % 再度束縛できる. 20 8> q(). % Erlangシェルを終了させる. ok

画面出力 io:formatで書式指定の出力を行うことができます。

~p : 整形して出力. ~s : 文字列を出力. ~f : 浮動小数点数を出力. ~w : Erlangの標準構文として出力(アトムならそのまま、文字列ならリストとして出力など) ~n : 改行.

io:format("Hello world~n"). % "Hello world&quo…

Lua基礎文法最速マスター

最近、基礎文法最速マスターというプログラミング言語の解説が流行ってるようなので、便乗してみた。個人的にはC++やPythonの方が慣れ親しんでいるのだが、自分でも勉強できるように普段使っていない言語を書いてみることにした。以前にここのブログで言及した言語、Processing、Erlang、Lua、PowerShellなどの中でもErlangとLuaに興味があったので、比較的書きやすいLuaを選んでみた。

何故Luaなのか? Wikipediaによると、Luaはブラジル・リオデジャネイロのカトリカ大学で生まれた手続き型言語だ。高速な動作、高い移植性、組み込みの容易さが特徴だ。また、ホストプログラムへの組み込みが容易であることもあって、コンピュータゲームなどで利用されている。有名どころでは、PlayStation HomeWorld of Warcraftなどがある。また、小飼弾氏もなんてめんこい言語と述べているように評価が高い。

さて、早速Lua基礎文法最速マスターを書いてみる。上述のように自分にとっては勉強を兼ねて書いているので、間違いや記述漏れなどがあるかもしれない。コメントなどで指摘していただけるとありがたい。また、C言語の連携など、足りない部分については随時追加していく予定だ。

追記(2010/2/9): 「C言語とLuaの連携」を追加した。

1. 基礎対話環境 Luaは対話環境として実行できます。

$ lua Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio > print("Hello world") Hello, world > print(1 + 2) 3 > print(type("Hello world")) string

print関数の代わりに = を利用することもできます。

> = "Hello world" Hello world > = 1 + 2 3 > = type("Hello world") string

print関数print("Hello world") print(1 + 2)

コメント ハイフン2つ(--)から行末までがコ…