2011年12月25日 (日)

EeePCでHoneyComb

x86版の4.0がビルドされたという話を前回書きました
ICONIAの前面ガラスを落として割ってしまったこともあって我慢できずEeePCを買ってしまいました。
(ICONIAは角から落ちた衝撃で前面ガラスの端が割れました。が、機能はしています)

さて、x86版のHoneycombですが、これもandroid-x86のサイトにあります。EeePCの方はというと、いつものようにアマゾンで調達しました。amazon扱いの1011PX(N455、3セルバッテリ)ではなく、1015PXのWiMAXなし(N570,6セルバッテリ)がマーチャントで安く出ていたのでそっちにしました。

そして、USBメモリを作ってブートして。が、しかしカーネルの起動画面は出るのですがHoneycombの画面にはなりません。もしやと思ってandroid-x86のサイトからandroid-x86-3.2-RC2-asus_laptop.isoをダウンロードして動かしたところこれが大当たりでした。
画面もちゃんと出るし、無線LANも使えます。

ただし、インストーラの関係でまだHDDにインストールしていないのですが。どういうことかというと、EeePCは購入時点でCドライブ、リカバリ、Dドライブ、EFIの4パーティションにHDDが分割されています。Dを消してここに入れようとしたのですが、3.2RC-2付属のインストーラのfdiskがこの領域を割り当ててくれないのです。メッセージからの想像ですが、インストーラのfdiskはchsトランスレーション前提の開始セクタを希望しているらしく、Windows7がつくるMB境界ぴったりの領域には割り当てを行いません。
HDDを取り換えることも考えたのですが、3.2がちゃんと使えるようになるまでの間windowsに戻すたびに交換するのは面倒なので今は必要なときにUSBからブートしています。

EeePCにはデバイスとしてPC接続するためのUSBポートがないので画面のハードコピー等が取れないので画面を紹介できないのが残念ですが、ふつうに3.2です。Androidマーケットにはつながりませんが、独自マーケット用のアプリがついています。

最終的にはWiMAXがつながるといいなと思っています。が、ネットワークのドライバやテザリング関連が入っているかも不明なのでソースからビルドしないといけないかなぁという感じでのんびりやっています。

2011年12月 8日 (木)

x86版ics

少し前の話ですが、Android4.0(Ice Cream Sandwitch)と3.2のソースが公開されました。

それを受けてAndroidをx86に移植するプロジェクトからバイナリが公開されました。

現状、4.0はdevel、3.2はRC2というステータスです。

さて、このバイナリですが、LiveCD(isoファイル)で配布されています。
しかし、インストールするだけのためにCDを焼くのは面倒ですし、ネットブックやタブレットにインストールするにはUSBメモリの方が楽でしょう。

ということでUSBメモリからブートできるようにしてみました。備忘録もかねてここに書いておきます。

用意するもの

  • Windowsが動くPC
  • 仮想CDソフト(Alchol52%を使用しました)
  • syslinux
  • USBメモリ(256mb程度で十分ですが、手元にあった1GBを使用しました)

すること

  1. まず、USBメモリをフォーマットします。ごく普通にfatでクイックフォーマットするだけでOKです。
  2. android-x86のサイトからダウンロードしたisoファイルを仮想CDにマウントします
  3. CDの中身を1.でフォーマットしたUSBメモリにすべてコピーします。
  4. USBメモリ内の\isolinux\isolinux.cfgを\isolinux\syslinux.cfgという名前でコピーします
  5. syslinux.zipをkernel.orgからダウンロードし、展開します。私がダウンロードしたのはsyslinux-4.04.zipでした。
  6. syslinnux.exeを使用してUSBメモリにブートレコードを書き込みます。
    具体的には、<展開したディレクトリ>\win64\syslinux64.exe -mad isolinux <USBメモリのドライブ名>
    を実行します。(64ビット版Windows7を使った場合)
  7. <展開したディレクトリ>\com32\menu\vesamenu.c32でUSBメモリの\isolinux\vesamenu.c32を上書きします

以上でブート可能なandroid-x86が入ったUSBメモリのできあがり

ちょっと前のノートでbootしてみましたが4.0のbrazosネイティブはデバイスがないためかうまくディスプレイが映らないようでした。別に最新版のこだわりはないので3.2が使えるならネットブックをandroidに入れ替えて(もしくはデュアルブートにして)使うのはありかなぁと思っています。なんだかんだ言っても、ソフトキーボードでメールなどの文章を入力する気にはなれないので。

2011年8月31日 (水)

ねんがんのHoneyComeタブレットをてにいれた!

お久しぶりです。ちょっと近くて遠いところへ行っていました。

何から書くか迷ったのですが、とりあえず再開1号はこれにします。

AcerのICONIA TABを買いました。この円高なのでアメリカのAmazonから買って見ました。以前kindleを買うのにアカウントを作ったのものが眠ったままだったのでそれをちょっと起こしました。

アメリカには内蔵フラッシュが32GBのモデルもあるのですが、あいにく在庫切れだったので16GBモデルにしました。そのころはまだ日本では売られていなかったスタンドをつけて、送料を払っても日本で買うより安かったです。

さて、届いたタブレットですが、電源を入れるとアップデートが始まって3.1になりました。なので、タイトルは厳密には間違ってますね。また、技術基準適合証もちゃんと電磁電磁的表示される(つまり、設定を選んでいくとディスプレイに表示されるようになっている)のでアメリカから買ったもので日本で電波を出しても合法です。説明書は各国語表記だし、箱のレベルで日本で売られているものと同じものだと思います。

そんなこんなで手に入れたのですが、アプリの開発はしていません。OSが急に複雑になって、解像度も増したのでプログラミング以外に対する比重が大きくなっているのを感じることと、とにかく、近くて遠いところへ行くのはとても疲れるので。

気が向いたら再開します。

2011年4月18日 (月)

IPv4枯渇

ついにその日が来ました

APNIC(=JPNICも)のIPv4アドレスが枯渇しました。

まぁ、10年も前から無くなるといわれていて、ようやく到達したという感じですが。

さて、ここのところ色々あって停滞気味だったのですが、ネタとしては面白いのでIPv6が早く普及するようツールを作ってみることにしました。

IPv4にはプライベートアドレスというのがあるのですが、v6で実験的にアドレス振りたいときにどうするのよ?というのがことの始まりです。

IPv6でローカルなネットワークアドレスを決める方法というRFCが出ていて、これによると、FC00::/7にLbitというローカルに生成したよというフラグを立て(つまり、Lbitは8ビット目にあるので先頭8ビットはFDとなるらしい)あとは好きに決めていい。ただし、できるだけ分散するように、UTPの時刻やらEUI(まあMACのようなものらしい)やらを使って、SHA1でハッシュを計算して、...というお約束が書いてあります。

じゃぁ、Androidで作ってやろうじゃん。と思って作り始めました。

まず、NTP形式の時刻ですが、64bitで、上位32bitは1900年1月1日からの通算秒。下位32bitは固定小数点形式の秒以下の数値となっています。

まず、問題なのは1900年ですね。CalendarのgetTimeInMillsで取れるミリ秒単位の時刻は1970年1月1日が起算日です。
そこで、問題です。setData(YEAR, 1900)してからgetTimeInMillsするとどうなるのか?これが、驚いたことにというかやっぱりというか負の数値が返ってきます。つまり、今のCalendarから1900年1月1日のCalendarのミリ秒を引けば普通に1900年からの通算秒が求まります。

下位32bitですが、ミリ秒の%1000を取って、2^32倍してから1000で割ればよさそうです。

実際は、ランダムな数を作りだすために時刻を使っているだけなので、厳密に計算しなくてもいい気もしますけどね。

ということで、機器固有部分につづく(かもしれない)

2011年4月 3日 (日)

アプリ2件目を公開しました。

ここのところ地面が揺れたり、ドタバタしてたので遅れていたアプリ第2弾ですが、ようやく公開しました。

内容は、Todoアプリで、テンプレートにやることを並べ立てておくと、週ごとに新しいシートに更新してくれて、週ごとの結果をEvernoteにアップロードできる。というものです。

いわゆるGive a milkというあれです。いつも欠かさずすること、たまにすること、とにかく列挙しておいて、やった/やってないをバシバシチェック入れて、後でいつやったか分かる、まぁ、そんな感じの使い方を想定しています。私がそういうの欲しかったからというのが作った第一の理由です。

でも、今回のソフトについては、言語は(適当な)英語にしました。日本だとそれほどパイがないような気がしたのと、なにより、見かけはあまり手を掛けていないので、どうも、日本向けにすると、そういうとことでマイナス評価になりそう、というところを考慮して、メッセージは英語です。
(でも、画面キャプチャの絵はバリバリ日本語ですが)

まぁ、Betaだから只だよ、と書いて広告もつけずにだしたので、それほど深刻に考える必要も無い気はしますが。

2011年3月29日 (火)

中華Padふたつめがやってきた

来たには来たんですけどね、

率直にいって、あいつら最低です。

まず、傷だらけです。後ろのパネルには無数の引っかき傷があり、かなり鋭利なものでつけたと思われる深い傷もたくさんあります。中古というよりジャンクの体裁です。(もちろん、中古を買ったわけではありません)

そして、動きません。とりあえずACアダプタをつなぐとLEDが赤く点き、しばらくすると緑に変わるので、模造品ではなく動くことを意図して製造したらしいということは汲み取れるのですが、電源スイッチをいれてもうんともすんともいいません。

まぁ、修理あがりを(実際はロクに直ってないのですが)送りつけたのでしょうが、こちらからすれば、金はらったらゴミ送りつけてきやがった。というのが率直な感想。

とりえあず、返品交渉中。

2011年3月24日 (木)

ACTION_SENDの結果

Androidでは他のアプリに処理をお願いしたい場合にIntentという機構を使います。

メールを送ったりする場合にはACTION_SENDという種類のIntentを発行することになります。(実際はTwitterのクライアントなどもACTION_SENDのIntentFilterを持っているのですが)

今回のお話しは、じゃぁ、実際ACTION_SENDを発行するとどうなるの?というお話しです。

DeveloperサイトにはIntentとExtraの項にEXTRA_EMAILという項目があって、私が読む範囲では発行時にはメール送信先を指定できて、送信後に(ユーザが実際に指定した)アドレスを返してくれるように読めます。

じゃあ、Intentからこれを読み出して、次回メール送るときに渡せば親切じゃん。という発想がでてきますよね?やってみました。

      private OnClickListener textListener = new OnClickListener(){

            public void onClick(View v) {
                  String[] email = {"foo@example.com"};
                  Intent req = new Intent();
                  req.setAction(Intent.ACTION_SEND);
                  req.setType("text/plain");
                  req.putExtra(Intent.EXTRA_EMAIL,email);
                  req.putExtra(Intent.EXTRA_SUBJECT, title());
                  req.putExtra(Intent.EXTRA_TEXT, mSendMessage);
                  startActivityForResult(Intent.createChooser(req, getString(R.string.intent_chooser_title)),PLAIN_SEND);
            }
      };
コードとしてはこんな感じです。これ、実際発行するとどうなるのかというと、ほとんどのMailクライアントはメール送信後にActivity.RESULT_CANCELを返してきます。受ける側はというと、
      protected void onActivityResult(int req, int res ,Intent intent){
            super.onActivityResult(req, res, intent);
            
            Log.d(TAG,"onActivityResult: res = "+Integer.toString(res));
            if (res == Activity.RESULT_OK){
                  String classname = intent.getClass().getName();
                  Bundle extra = intent.getExtras();
                  String[] email = extra.getStringArray(Intent.EXTRA_EMAIL);
                  String[] cc    = extra.getStringArray(Intent.EXTRA_CC);
                  String[] bcc   = extra.getStringArray(Intent.EXTRA_BCC);
                  Log.d(TAG, "email ="+email[0]);
                  switch (req) {
                  case PLAIN_SEND:
                        break;
                  case XHTML_SEND:
                  }
            }
      }
こんな感じのコードで結果を受け取るわけでうすが、そもそも、最初のifのところを通りません。そして、その条件判定を外してExtraが付いているかを見ると、そもそもIntentがnullか、Extraが付いていてもその中がnullかのどちらかです。
すくなくともXperiaにインストールしている標準Mail、Gmail、SPモードメ-ルのどれもがRESULT_CANCELを返してきました。(もちろん、メールの送信は成功していますし、EvernoteクライアントはちゃんとRESULT_OKを返したので、chooserなりの中でResultが書き換えられているということはないはずです)。まぁ、1.6のエミュレータのMailクライアントは送信後に呼び出し元に戻りさえしないので、進歩しているといえばそうなのかもしれませんが。
ということで、小さな親切機能はボツになりそうです。

2011年3月21日 (月)

ひとまず完成

一ヶ月の歳月を経て、ようやくできあがりました。

簡単にいうと、やることのリストを毎週チェックして、Evernoteにアップロードできるソフトです。

よく言われるGive a milkというやつですね。とにかく、やることをリストアップしておいて、やったかやってないかを確認し、Evernoteにアップすれば、これまでにどのくらいやった/やってないを集計できます。

まぁ、そこまで凝らなくても、毎週リストをリフレッシュしてくれます。

というわけで、Evernoteのサポートに、APIキーをサービスしてるサーバでも使えるようにしてくださいね、というお願いのメールを出しました。

まだ、見かけはあまり手を入れてないのですが、基本的な部分はちゃんと動くはずです。AsynkTaskでのアップロード、パスワードの暗号化、などなど、必要な部分はきちんと作ってあります。

最後になって広告を24時間に一度はロードしなさい、とAPIの仕様書に書いてあってビビりましたが。ただ、テストしてる限りは読み出さなくても使えるようでした。現在地震の関係でEvernoteのアカウントは全部プレミアム扱いなので、もともと読まなくてもいいのか、今限定でチェックが機能していないのかはよくわかりません。

そして、次のネタを探しているのですが、これだ!というのは今のところなくて、とりあえず歓送迎会シーズンに向けて割り勘のアップデートでもしようかなと思っています。

(実はもう手をつけた)

2011年3月 7日 (月)

中華PadとEthernet

今日は雪でした。

日中に降ったにもかかわらず、北関東のこのあたりでも数センチ積もりました。

さて、中華Padネタです。

実は、私が持っている中華PadにはUSBのAコネクタが付いています。ここにイーモバイルなとが出しているUSB型の通信アダプタをつないで使うのが目的のようで、サイトにも3Gアダプタが使えると書いてあります。そのほかに普通にUSBメモリも認識できます。どうやら、キーボードもつながるようです。(試してはいません)

さて、今回のネタは、ここにEthernetアダプタつないだらどうなるの?です。

それが、動くんです。まぁ、動くと使えるの間には結構な距離がありますが。

今回試したのは、PlanexのNE200TX-G2というアダプタです。往年の名機、NE2000を彷彿とさせるネーミングです。まぁ、たぶん名前のとおり、NE2000コンパチのチップをUSBドライバにくっつけたものでしょう。実はNE2000現物も持っていたりするのですが、NE2000といえばISAなアダプタなわけです。DMAなどとは無縁の、のどかな時代の製品です。その上、NE2000はストリング命令でスピードを稼ぐ構造になっているのですが(今では当たり前ですが、その当時は画期的でした)USBを経由すればストリングもへったくれもありません。つまり、このアダプタも動くには動くのですが、かなり遅いです。それでもやっぱり、日本においては認定を通ってない無線LANは違法無線局なわけで、堂々と通信できるというのはメリットがあります。

Linux 2.6.29あたりでWiMax(IEEE802.16)もサポートされたはずなので、実はWiMaxのUSBアダプタもうごくんじゃない?と思っているのですが、さすがにこれはだめもとで試すというわけには行きません。貸し出しをしてくれるようなので、時間ができたら借りてみようかなと思っていますが。(貸し出しはエリア内かどうかを試すためのものらしいですが、堅いこといいっこなしで)

なお、USBポートにアダプタを差すと、構成変更が起きてすべてのアプリが止まるようです。お試しになるときにはご注意ください。

ひさしぶりにアレ、行ってみたいとおもいます。そう、Amazonのアレ。でも、中華Padに低速Etherアダプタ。こんなアフィリエイトばかり書いてるから売り上げないんだよね。

2011年3月 6日 (日)

砂場遊び

開発もそろそろ折り返しくらいのはずなんですが、進捗ははかばかしくありません。

結局、土日で進んだのはサーバへアップロードする処理をほんの少し書けただけです。

というのも、サーバがxmlを受け取ってくれません。せめて、どの部分が気に入らないか教えてくれればもっとデバッグがはかどるような気がするのですが、例外の中に理由として Content is not allowed in prolog. といってくるだけで、まるで木で鼻をくくったような対応です。

デバッグがはかどらないもうひとつの理由として、Webクライアントしかsandboxにつなげられない、というのがあります。Android上のアプリでsandboxへつなげないので、ちょっとしたこと、たとえばノートを引っ張ってきて表示する、とかでもプログラムを書かなければならず、それもすぐに動くわけではないのがかなりネックになっています。何をするにもログインからはじめなければいけないので。

まぁ、愚痴を言っていても仕方ないのであせらずいきましょう。砂場遊びなのか、砂に遊ばれているのか。sandboxといえば、SecondLifeでスクリプト書いていたのを思い出しますね。規模は違えど、あれもJava風の言語だったように思います。もうほとんど忘れてしまいましたが。

現在は動くかどうか確かめる段階なのでまだバックグラウンド処理にしていないのですが、そういったこともやらなければいけないし、先は長そうです。

ところで、以前公開したアプリですが、ようやく100ダウンロードを超えました。約1ヶ月で100。うーん、決して多いといえる数ではないですね。メディアで紹介されなければこの程度で普通なのでしょう。やっぱり、探しつらいですよね。できれば、3月、4月の宴会シーズンに一度アップデートして目立つところに並べたいのですけどね。

日本語版のアプリのマーケットを立ち上げようという動きもあちこちであるようですが、私については静観しています。もっとさ、世界で勝負して、夢だけでも大きく持とうよ。