AndroScheme
マーケットへのリンク Android端末向けのSchemeインタプリタです。 京都大学大学院情報学研究科の湯淺 太一教授(http://www.yuasa.kuis.kyoto-u.ac.jp/~yuasa/index_J.html)が作られた、Javaアプリケーション組み込み用のLispドライバであるJAKLD(http://www.yuasa.kuis.kyoto-u.ac.jp/~yuasa/jakld/index-j.html)をAndroid向けアプリに組み込みました。 JAKLDはMPLに基づいていますが、AndroSchemeに組み込むにあたり、JAKLDの各ソースのパッケージ化と一部の改変を行いました。よって以下に修正コードへのリンクを掲載します。 下記の修正コードもMPLライセンスの下、自由に利用することが可能です。 修正コード
どん。
こんばんは。 AndroScheme完成しました。大分前に(汗) ライセンスの問題でまだ公開できてません(涙 期末試験近いですが、新しい制作物をというわけで、 どん。 久々の電子工作です。一年以上ぶり?? カメラつくってみたいなーと思い立ったが吉日、大半の部品の選定が終わっていました(笑 PMICにLTC3555を使っているんですが、その周辺に同じパッケージのパーツがならんでいるのはインダクタも抵抗もコンデンサも2012で統一してしまったがためです。 インダクタがこれで正常に動くかどうかは知りません(汗 PMIC周りのパーツが全て半田面にあるのは、そもそもLTC3555は4層基板向けの製品なので電源回路下には切れ目のないグランドプレーンが必要とかで、とりあえずそれを実現するために全てのパーツを片面に配置しています。 構成的にはLPC2148を中心としてTCM8240MD(CMOSセンサ)、LCD、SDカードを接続しています。 プログラム的にはメインルーチンはひたすら画面領域分のメモリのデータをLCDに流していて、CMOSセンサから垂れ流されてくる画像のクロック出力をEINTのトリガとして発生させたルーチンの中で、画面領域分のメモリを更新(?)みたいな形の予定。 シャッターボタンが押されたらセンサのレジスタを書き換えて解像度を大きくし、出力先をSDカードに切り替える感じの予定です。
移植できたっ!!
JAKLDを正常に起動・動作させることに成功しました!! 結局問題だったのは、言語仕様ではなく、IOクラスのWriter consoleOutputを変更できるようにしたのと、JAKLDをパッケージ化した事が原因でした(涙 まず、一つ目consoleOutputをinitメソッドの引数として指定できるように変更したものの、初期化中のエラーがIO.printlnで出力されても、通知されないようになっていたため、初期化中の例外を発見するのが遅れました。 JAKLDを標準入出力でなく、メソッドの引数と戻り値でやりとりするため(?)に、Jakldクラスを作成してJAKLDとのインターフェイスにしていたんですが、JAKLDを初期化するメソッドがvoid Jakld.init()だったため、初期化中のエラーを取得出来ていなかった模様…。 ので、String Jakld.init()に変更してJAKLDからのエラーを文字列として返すように変更しました。ホントはエラーハンドラとか使いたかったんですが、なにぶんやっつけ仕事なので(笑 で、変更後機動してみたみたところ、Class char, Class num,… がないというエラーが初期化中に吐かれていることが判明。 以前から、Hashtable Subr.methodTableがnullになっている事には気づいていたので、methodTableを初期化しているメソッドfindMethodをデバッグしていた所、 private static Method findMethod(String cname, String mname) { Method[] methods = (Method[]) methodTable.get(cname); if (methods == null) try { methods = Class.forName(cname).getMethods(); Class.forName(String arg)が呼ばれているのを発見!! きちんと構造を理解していないので、よくわからないですがとりあえず、 //methods = Class.forName(cname).getMethods(); methods = Class.forName(“jakld.” + cname).getMethods(); //2010/12/28 yoshipon JAKLDでパッケージ化した事によって正常に参照できていなかったみたいです(涙 これでだいたい動くようになりました。 あとは、Androidのインターフェイスとしての調整とMPL準拠の配布の準備をして、Android Marketに上げてみようかなあと思います。。。 load系の組み込み関数をどうするかはまだ考えていません。
IS03でデバッグ
今までずっとAndroid SDK and AVD Managerからusb_driverのインストールを行えなかったんですが、どうやら、Managerを起動するときに管理者権限で起動するとインストールできるみたいです。 インストールはThird party Add-ons -> Google Inc. add-ons(dl-ssl.google.com) -> Google Usb Driver package, revision4を使いました。 ちなみに、このドライバはそのままではIS03のデバッギングには使えず、使用するには少々細工する必要があるみたいです。 詳しい事は、IS03で早速実機デバッグ|日記っぽいこと(http://www.yamagoya-life.com/blog/?p=832)に書かれています。 が。 ここでもう一つ、android-sdk-windows\usb_driver\android_winusb.infの編集にも管理者権限がいるんですね(涙 こういう時にsudoがあればなんて思っちゃいます…。 編集時の管理者権限の取得はよく分からなかったので、スタートメニューからメモ帳を右クリックして「管理者として実行」から実行して、「ファイル->開く」からandroid_winusb.infをひらいて編集しました。
Chromemarks
詳しい仕組みは分かんないんですが、chromeMarksなるGoogle Chromeのブックマークと同期するアプリを発見しました。 まだ現段階ではAndroid側のブラウザのブックマークと同期とかは出来ないみたいなんですが、それでもChromeのブックマークをAndroidから参照出来るのは無茶苦茶便利です(笑)
ひと通り最低限の実装は終わったんですが(涙 謎…。 ソースはそこまで改変していない(パッケージ化と、初期化ルーチンの微妙な変更のみ)ので、インタプリタ自身がエラーを吐く原因がわかんない…(涙 デバッガでトレースした結果、3つめの(+ 1 1)なんかは、+演算子を識別するところまでは正常に動作するけど、実際に+の演算(“add”?)の段階になると、+の演算に関連付けられている処理(methodをオブジェクトとして扱っているっぽい(多分))がnullになっているので、ぬるぽが発生するらしぃ…。 あ゛ー。 どうすればいいんだー(涙 あ。ちなみに、(define x 10)が正常に走っているのは、defineは関数として呼ばれていないからです。 defineとかtrace/untraceなんかは、完全に組み込み関数として実装されています。 じゃぁ、+/Listなんかはどうなっているかというと、どうやら、抽象化された関数のうちのひとつとして登録されているみたい…。 分かりづらくてスイマセン(汗
AndroScheme
連続投稿こんばんはm(_ _)m 大分元気になってきました。明日の合奏は全然参加できるハズです。。。 はい。 タイトルのAndroScheme。 えっと、京都大学情報学研究科 湯淺 太一 教授 が作られたjavaのSchemeインタプリタのライブラリ(MPL)があるんです。 JAKLDといいます。 (じゃくるど、じゃくるでぃーとか言います。個人的にはじゃくるでぃーを強くお勧めします。僕はSICPをしくぴーと発音する人です。LISPはあくまでりすぷです。) 授業中いちいちtypeP引っ張り出してターミナル開いてJAKLD起動するのも面倒くさいので、IS03でJAKLDを起動したい!!←授業で使う処理系はJAKLDでかつ、課題に使う処理系もJAKLD すでに、iアプリには組み込みされているらしい(iアプりすぷ)ので、普通にAndroidアプリにも組み込み出来るはず。 Androidのアプリ作るのはもともと興味があったので、まぁあと2週間、IS03発売までちょっとがんばってみます。 –JAKLDメモ— JAKLDの組み込みに関して、 doc.txt読んでいたらJAKLD特有(?)の拡張機能がいくつかあることを発見っ!! 例えば、(1+ x)は(+ x 1)と等価です。インクリメントするのにリストの要素が少ないのはなんとなく気持ちイイですよね(笑 i = i + 1;よりi++;みたいな。
Android 開発環境構築
こんにちはm(_ _)m 風邪引きました(涙) kusbの方々にはいろいろご迷惑おかけしております。。。 未だ風邪がなおらず、鼻もつまってぼーっとして課題もできそうにない上、IS03の情報は出尽くした感じなので、AndroidのSDKインストールしようかなってことでインストールはじめました。 基本はここを参考にしました。 ただ、微妙にAndroid SDKバージョンが違うみたいで手順通りの方法だと仮想デバイスを新規追加できないよう…。 (ちなみに、HelloWorldのページはこちら 。リンク切れしてるみたいです。) 解決策としてはとりあえず、ダウンロード、適当なディレクトリに保存したAndroid SDKの中のSDK Manager.exeを実行するだけ。 どうやら、ダウンロードしたばっかのSDKにはライブラリ群はあんまり入っていないみたいで、後からダウンロードする必要があるみたいです。 SDKManagerを起動したらコンソールが立ち上がり、 AVD(Android Virtual Device)マネージャが起動します。 初回起動時はここでライブラリ群(?)のインストールを行うか聞いてくるので、ダイアログにそって進んでいけば基本的なものは大体インストールされる模様…。