いや、もうさっぱりブログが続いていない隠者でございます。
実はブログに書いてないだけで、勉強会に参加したり、Qtのカンファレンスに参加したりと面白いイベント目白押しだったわけですが、なかなかこうブログにするに至らなくて。情けない限りです。
来年こそ、色々頑張って、あれこれ書き記していきたい、今年のやり残しを来年こそはこなしたいと決意を新たにしてみたりしております。
ま、こんなのんびりブログですが、来年もどうぞよろしくお願い致します。
2010年12月31日金曜日
2010年11月25日木曜日
BeagleBoard-xMのAndroid起動microSDのパーティションをSD Cardとして認識させる
昨日のベンチマークの引き続きのためにmicroSDを探して部屋中ひっかきまわしていた隠者です。こんばんは。いやぁ・・・・みつかりませんでした。これは買わないとだめかな。
さて、そのようなわけで、今夜はベンチマークの続きではなく、中間でちょっと小技をひとつ。@himamuraさんが集めてるベンチマークを行うソフトの0xBenchmarkは、SD Cardが挿入されてると実行結果をテキストとXMLとに残してくれます。
ところが、beagleBoar-xMには、NORやNANDはありません。そのためAndroidの起動ディスクとしてmicroSDを使う事になります。
少しサイズの大きめなmicroSDカードを用意して、起動ディスクの他、SDカードとしても認識させてしまいましょう。
fdiskを使ってコマンドベースで起動用にmicroSDを設定し直す方法は、@pakuqi さんがブログにまとめて下さっています。
さて、この手順の中で領域を切るときに、64MBをMLO,u-boot,kernel用のFAT32領域、残りをすべてユーザーランド用にext3にされています。
が、例えば4GBのmicroSDなら、ユーザーランドとしてext3にするのは、2GB程度として、残りはすべてSDカード領域用にFAT32にして下さい。
え?手順?fdiskにはヘルプもあるし古くから使われているので、Google先生に聞いてもいいでしょう。僕はPF部の他の方々のようには優しくはなく、手取り足取り書き記す気はありませんのであしからず。
パーティションとしては
dev_mount sdcard /sdcard 3 /devices/platform/mmci-omap-hs.0 /devices/platform/mmci-omap-hs.0/mmc_host/mmc0
さて、そのようなわけで、今夜はベンチマークの続きではなく、中間でちょっと小技をひとつ。@himamuraさんが集めてるベンチマークを行うソフトの0xBenchmarkは、SD Cardが挿入されてると実行結果をテキストとXMLとに残してくれます。
ところが、beagleBoar-xMには、NORやNANDはありません。そのためAndroidの起動ディスクとしてmicroSDを使う事になります。
少しサイズの大きめなmicroSDカードを用意して、起動ディスクの他、SDカードとしても認識させてしまいましょう。
fdiskを使ってコマンドベースで起動用にmicroSDを設定し直す方法は、@pakuqi さんがブログにまとめて下さっています。
さて、この手順の中で領域を切るときに、64MBをMLO,u-boot,kernel用のFAT32領域、残りをすべてユーザーランド用にext3にされています。
が、例えば4GBのmicroSDなら、ユーザーランドとしてext3にするのは、2GB程度として、残りはすべてSDカード領域用にFAT32にして下さい。
え?手順?fdiskにはヘルプもあるし古くから使われているので、Google先生に聞いてもいいでしょう。僕はPF部の他の方々のようには優しくはなく、手取り足取り書き記す気はありませんのであしからず。
パーティションとしては
- FAT32 64MB (起動用)
- EXT3 2GB (ユーザーランド用)
- FAT32 残りすべて (SD CARD領域)
という形にします。基本領域3もmkfs.vfatで初期化して下さい。
その後、ユーザーランドの /system/etc/vold.fstab に以下のような設定を追記します。
その後、ユーザーランドの /system/etc/vold.fstab に以下のような設定を追記します。
dev_mount sdcard /sdcard 3 /devices/platform/mmci-omap-hs.0 /devices/platform/mmci-omap-hs.0/mmc_host/mmc0
この設定でパーティション3をSDカードの領域として認識してマウントしてくれるはずです。お試しください。
2010年11月24日水曜日
BeagleBoard-xMのベンチマーク結果
大変長いことご無沙汰しておりました、hermit4です。
ネタは色々尽きないもののなかなか時間が取れませんで。全然更新されてないじゃんって怒られたので、 @himamura さんにPF部でお願いされていた、Beagle Board-XMのAndroidでのベンチマークを実施しました。
ちなみに、@himamura さんは、色々なデバイスをベンチマークとって下さりまとめてくださってます。
なお、今回の環境は、@sola_dolphin_1さんのfroyoを動かしやすいようにgithubにいれてくださって手順もまとめてくださっているので、基本的にそちらの手順に従って作成したものです(一部スクリプト部分については、手作業でやってますけど)。
使用したmicroSDは、SanDiskのものですが、残念ながら低速なclass 2の品です。いや、どこかに早いやつを数枚確保してあったはずなのですが、どのダンボールにしまってしまったのか発見できず・・・・・今夜家に帰って探しだせたら、ついでなのでそれぞれでベンチマーク比較してみたいなぁと思います。
結果は以下のとおりです。面倒なのでテキストをそのまま貼り付けます。XMLはグーグルドキュメントに置いてhimamuraさんにD飛ばしておいたので、近いうちにhimamuraさんの表に反映してもらえるかなぁとか思ってます。
Linpackの結果はあまり芳しくないように見えます。SGXを入れると描画周りでは改善が見られますけど・・・・これは満足出来る結果と言い切れるかどうか。
・TI's Android SGX SDKなし
============================================================
Linpack
------------------------------------------------------------
Mflops/s :9.437201527000578
Norm Res :1.7100673392687894E14
Precision:2.220446049250313E-16
============================================================
Scimark2
------------------------------------------------------------
Composite:
13.017866789720463
Fast Fourier Transform:
8.362614298864644
Jacobi Successive Over-relaxation:
22.74927993955477
Monte Carlo integration:
3.5335332771692993
Sparse matrix multiply:
11.804034582132472
dense LU matrix factorization:
18.63987185088113
============================================================
Draw Canvas
------------------------------------------------------------
Round 0 fps = 26.645351
Round 1 fps = 26.534584
Round 2 fps = 26.586315
Average: fps = 26.0
============================================================
Draw Circle
------------------------------------------------------------
Round 0: fps = 17.958694
Round 1: fps = 18.061409
Round 2: fps = 17.919006
Average: fps = 17.333334
============================================================
Draw Circle2
------------------------------------------------------------
Round 0: fps = 27.795794
Round 1: fps = 28.506271
Average: fps = 27.5
============================================================
Draw Rect
------------------------------------------------------------
Round 0: fps = 16.717749
Round 1: fps = 17.554125
Round 2: fps = 16.478989
Average: fps = 16.333334
============================================================
Draw Arc
------------------------------------------------------------
Round 0: fps = 23.337223
Round 1: fps = 23.331778
Average: fps = 23.0
============================================================
Draw Image
------------------------------------------------------------
Round 0: fps = 25.04759
Round 1: fps = 25.046337
Average: fps = 25.0
============================================================
Draw Text
------------------------------------------------------------
Round 0: fps = 21.483816
Round 1: fps = 21.457693
Round 2: fps = 21.217909
Average: fps = 21.0
==================OpenGL Cube
------------------------------------------------------------
Round 0: fps = 29.707972
Round 1: fps = 29.665668
Round 2: fps = 29.6349
Average: fps = 29.0
============================================================
OpenGL Blending
------------------------------------------------------------
Round 0: fps = 13.765573
Round 1: fps = 13.761972
Average: fps = 13.763773
============================================================
OpenGL Fog
------------------------------------------------------------
Round 0: fps = 14.064105
Round 1: fps = 14.110342
Average: fps = 14.087223
============================================================
Flying Teapot
------------------------------------------------------------
Round 0: fps = 24.663345
Round 1: fps = 23.784607
Average: fps = 24.223976
============================================================
Garbage Collection
------------------------------------------------------------
Stretching memory:
binary tree of depth 16
*Total memory:4071392 bytes
*Free memory:1238152 bytes
Creating:
long-lived binary tree of depth 14
long-lived array of 125000 doubles
*Total memory:7479264 bytes
*Free memory:2709896 bytes
Create 37448 trees of depth 2
- Top down: 948msecs
- Bottom up: 984msecs
Create 8456 trees of depth 4
- Top down: 1015msecs
- Bottom up: 987msecs
Create 2064 trees of depth 6
- Top down: 1015msecs
- Bottom up: 930msecs
Create 512 trees of depth 8
- Top down: 950msecs
- Bottom up: 985msecs
*Total memory:7479264 bytes
*Free memory:2212904 bytes
Completed in 8992ms.
=========================================
・TI's Android SGX SDKあり
2010/12/06 追記
暇村村長さんの日記が現在トラブルで表示できないようなので、BeagleBoardだけ表にしておきます。
ネタは色々尽きないもののなかなか時間が取れませんで。全然更新されてないじゃんって怒られたので、 @himamura さんにPF部でお願いされていた、Beagle Board-XMのAndroidでのベンチマークを実施しました。
ちなみに、@himamura さんは、色々なデバイスをベンチマークとって下さりまとめてくださってます。
なお、今回の環境は、@sola_dolphin_1さんのfroyoを動かしやすいようにgithubにいれてくださって手順もまとめてくださっているので、基本的にそちらの手順に従って作成したものです(一部スクリプト部分については、手作業でやってますけど)。
使用したmicroSDは、SanDiskのものですが、残念ながら低速なclass 2の品です。いや、どこかに早いやつを数枚確保してあったはずなのですが、どのダンボールにしまってしまったのか発見できず・・・・・今夜家に帰って探しだせたら、ついでなのでそれぞれでベンチマーク比較してみたいなぁと思います。
結果は以下のとおりです。面倒なのでテキストをそのまま貼り付けます。XMLはグーグルドキュメントに置いてhimamuraさんにD飛ばしておいたので、近いうちにhimamuraさんの表に反映してもらえるかなぁとか思ってます。
・TI's Android SGX SDKなし
============================================================
Linpack
------------------------------------------------------------
Mflops/s :9.437201527000578
Norm Res :1.7100673392687894E14
Precision:2.220446049250313E-16
============================================================
Scimark2
------------------------------------------------------------
Composite:
13.017866789720463
Fast Fourier Transform:
8.362614298864644
Jacobi Successive Over-relaxation:
22.74927993955477
Monte Carlo integration:
3.5335332771692993
Sparse matrix multiply:
11.804034582132472
dense LU matrix factorization:
18.63987185088113
============================================================
Draw Canvas
------------------------------------------------------------
Round 0 fps = 26.645351
Round 1 fps = 26.534584
Round 2 fps = 26.586315
Average: fps = 26.0
============================================================
Draw Circle
------------------------------------------------------------
Round 0: fps = 17.958694
Round 1: fps = 18.061409
Round 2: fps = 17.919006
Average: fps = 17.333334
============================================================
Draw Circle2
------------------------------------------------------------
Round 0: fps = 27.795794
Round 1: fps = 28.506271
Average: fps = 27.5
============================================================
Draw Rect
------------------------------------------------------------
Round 0: fps = 16.717749
Round 1: fps = 17.554125
Round 2: fps = 16.478989
Average: fps = 16.333334
============================================================
Draw Arc
------------------------------------------------------------
Round 0: fps = 23.337223
Round 1: fps = 23.331778
Average: fps = 23.0
============================================================
Draw Image
------------------------------------------------------------
Round 0: fps = 25.04759
Round 1: fps = 25.046337
Average: fps = 25.0
============================================================
Draw Text
------------------------------------------------------------
Round 0: fps = 21.483816
Round 1: fps = 21.457693
Round 2: fps = 21.217909
Average: fps = 21.0
==================OpenGL Cube
------------------------------------------------------------
Round 0: fps = 29.707972
Round 1: fps = 29.665668
Round 2: fps = 29.6349
Average: fps = 29.0
============================================================
OpenGL Blending
------------------------------------------------------------
Round 0: fps = 13.765573
Round 1: fps = 13.761972
Average: fps = 13.763773
============================================================
OpenGL Fog
------------------------------------------------------------
Round 0: fps = 14.064105
Round 1: fps = 14.110342
Average: fps = 14.087223
============================================================
Flying Teapot
------------------------------------------------------------
Round 0: fps = 24.663345
Round 1: fps = 23.784607
Average: fps = 24.223976
============================================================
Garbage Collection
------------------------------------------------------------
Stretching memory:
binary tree of depth 16
*Total memory:4071392 bytes
*Free memory:1238152 bytes
Creating:
long-lived binary tree of depth 14
long-lived array of 125000 doubles
*Total memory:7479264 bytes
*Free memory:2709896 bytes
Create 37448 trees of depth 2
- Top down: 948msecs
- Bottom up: 984msecs
Create 8456 trees of depth 4
- Top down: 1015msecs
- Bottom up: 987msecs
Create 2064 trees of depth 6
- Top down: 1015msecs
- Bottom up: 930msecs
Create 512 trees of depth 8
- Top down: 950msecs
- Bottom up: 985msecs
*Total memory:7479264 bytes
*Free memory:2212904 bytes
Completed in 8992ms.
=========================================
・TI's Android SGX SDKあり
============================================================
Linpack
------------------------------------------------------------
Mflops/s :9.300885244349358
Norm Res :1.7100673392687894E14
Precision:2.220446049250313E-16
============================================================
Scimark2
------------------------------------------------------------
Composite:
12.901394988451766
Fast Fourier Transform:
8.276270877619176
Jacobi Successive Over-relaxation:
23.01006648834552
Monte Carlo integration:
3.5054776431257824
Sparse matrix multiply:
11.034482758620722
dense LU matrix factorization:
18.680677174547643
============================================================
Draw Canvas
------------------------------------------------------------
Round 0 fps = 60.950832
Round 1 fps = 61.000404
Round 2 fps = 61.27451
Average: fps = 60.666668
============================================================
Draw Circle
------------------------------------------------------------
Round 0: fps = 26.071087
Round 1: fps = 26.399155
Round 2: fps = 26.403801
Average: fps = 26.0
============================================================
Draw Circle2
------------------------------------------------------------
Round 0: fps = 55.126793
Round 1: fps = 55.370983
Average: fps = 55.0
============================================================
Draw Rect
------------------------------------------------------------
Round 0: fps = 22.381378
Round 1: fps = 23.085802
Round 2: fps = 24.789291
Average: fps = 23.0
============================================================
Draw Arc
------------------------------------------------------------
Round 0: fps = 39.1604
Round 1: fps = 38.898396
Average: fps = 38.5
============================================================
Draw Image
------------------------------------------------------------
Round 0: fps = 42.448425
Round 1: fps = 42.21547
Average: fps = 42.0
============================================================
Draw Text
------------------------------------------------------------
Round 0: fps = 33.564556
Round 1: fps = 33.26311
Round 2: fps = 33.59839
Average: fps = 33.0
============================================================
Linpack
------------------------------------------------------------
Mflops/s :9.300885244349358
Norm Res :1.7100673392687894E14
Precision:2.220446049250313E-16
============================================================
Scimark2
------------------------------------------------------------
Composite:
12.901394988451766
Fast Fourier Transform:
8.276270877619176
Jacobi Successive Over-relaxation:
23.01006648834552
Monte Carlo integration:
3.5054776431257824
Sparse matrix multiply:
11.034482758620722
dense LU matrix factorization:
18.680677174547643
============================================================
Draw Canvas
------------------------------------------------------------
Round 0 fps = 60.950832
Round 1 fps = 61.000404
Round 2 fps = 61.27451
Average: fps = 60.666668
============================================================
Draw Circle
------------------------------------------------------------
Round 0: fps = 26.071087
Round 1: fps = 26.399155
Round 2: fps = 26.403801
Average: fps = 26.0
============================================================
Draw Circle2
------------------------------------------------------------
Round 0: fps = 55.126793
Round 1: fps = 55.370983
Average: fps = 55.0
============================================================
Draw Rect
------------------------------------------------------------
Round 0: fps = 22.381378
Round 1: fps = 23.085802
Round 2: fps = 24.789291
Average: fps = 23.0
============================================================
Draw Arc
------------------------------------------------------------
Round 0: fps = 39.1604
Round 1: fps = 38.898396
Average: fps = 38.5
============================================================
Draw Image
------------------------------------------------------------
Round 0: fps = 42.448425
Round 1: fps = 42.21547
Average: fps = 42.0
============================================================
Draw Text
------------------------------------------------------------
Round 0: fps = 33.564556
Round 1: fps = 33.26311
Round 2: fps = 33.59839
Average: fps = 33.0
2010/12/06 追記
暇村村長さんの日記が現在トラブルで表示できないようなので、BeagleBoardだけ表にしておきます。
設定 | Android 2.2 SGX Driver |
Android 2.2 | |
---|---|---|---|
Linpack Mflops |
9.30 | 9.43 | |
Compo site |
12.90 | 13.02 | |
FFT | 8.28 | 8.36 | |
SOR | 23.01 | 22.75 | |
Monte Carlo |
3.51 | 3.53 | |
Sparse Mult |
11.03 | 11.80 | |
LU | 18.68 | 18.64 | |
Draw | Canvas | 60.67 | 26.00 |
Circle | 26.00 | 17.33 | |
Circle2 | 55.00 | 27.50 | |
Rect | 23.00 | 16.33 | |
Arc | 38.50 | 23.00 | |
Image | 42.00 | 25.00 | |
Text | 33.00 | 21.00 | |
Cube | 60.00 | 29.00 | |
OpenGL | Blending | 65.74 | 13.79 |
Fog | 65.60 | 14.09 | |
Flying Teapod |
60.60 | 24.22 | |
Gabage Collection |
8961.00 | 8992.00 |
2010年9月27日月曜日
町田支部発足とPF部第二回勉強会とGoogle Developer Day 2010 Japan
久しぶりにブログを書いてみる隠者でございます。
本日のブログは先週参加したイベントの感想と、今週参加予定のイベントについてです。
実はひっそりとスキルアップのために、色々と過酷な環境に身を置いておりまして、えらく忙しくやってます。
でまぁ、9月は、イベント目白押しでして、先週からの今週にかけてのお話
・日本Androidの会 町田支部発足会参加
9月18日(土)に日本Androidの会の町田支部の発足が行われました。
ATNDの開始時間だけをみて13時からと思い慌てて自宅を出発。途中の駅でPF部のメンバーのsola氏と遭遇し、バスで会場に。
ところが、会場の中にも参加者らしき姿はなく、どうやら隠者とsola氏の二人が一番乗り。
入り口で待っていてもわからないからと、会議室まで出向いたのですが・・・やっぱり誰もいない。実は、ATNDの下の方には、14:00からと書いてあったようで、正式には14:00からが正しかったようで・・・・早すぎました。
ぽつぽつと人が現れるものの、なんとなくどうしたものやらという雰囲気。そこに町田支部長参上(実は、正式に支部長を名乗った事は無かったそうなのですが、他に立候補者もおらず、異議もでなかったため、町田支部長に決まったようです)。
内容としては
町田は人数はあまり多くないようで、こじんまりしているので、これならPF部同様、気楽に参加に来れそうな雰囲気です。
・横浜PF部 第二回勉強会
9月19日(日)にPF部第二回が行われました。今回はのんびり聞きながらちらほらとつぶやいていましたけど、聞きながらつぶやくって意外と難しいですね。結構ぽろぽろと聞き漏らしていたようで。
内容についてはPF部のサイトにも軽く書いてありますので、こちらをご確認ください。
今回は
そして、今週参加予定のイベントは
9月28日(火)に、東京国際フォーラムにて行われる予定となっています。
本日のブログは先週参加したイベントの感想と、今週参加予定のイベントについてです。
実はひっそりとスキルアップのために、色々と過酷な環境に身を置いておりまして、えらく忙しくやってます。
でまぁ、9月は、イベント目白押しでして、先週からの今週にかけてのお話
・日本Androidの会 町田支部発足会参加
9月18日(土)に日本Androidの会の町田支部の発足が行われました。
ATNDの開始時間だけをみて13時からと思い慌てて自宅を出発。途中の駅でPF部のメンバーのsola氏と遭遇し、バスで会場に。
ところが、会場の中にも参加者らしき姿はなく、どうやら隠者とsola氏の二人が一番乗り。
入り口で待っていてもわからないからと、会議室まで出向いたのですが・・・やっぱり誰もいない。実は、ATNDの下の方には、14:00からと書いてあったようで、正式には14:00からが正しかったようで・・・・早すぎました。
ぽつぽつと人が現れるものの、なんとなくどうしたものやらという雰囲気。そこに町田支部長参上(実は、正式に支部長を名乗った事は無かったそうなのですが、他に立候補者もおらず、異議もでなかったため、町田支部長に決まったようです)。
内容としては
- 各自自己紹介
- 平野さん「Androidの普及に向けて」
平野さんのコミュニティーへの思いと今後の活動について - 石川さん「横浜支部の運営について」
支部立ち上げに関する提言 - octoba net「売れるアプリのヒント」
アプリレビューを通じて得た売れるアプリの法則 - 簡単な売れるアプリ検討ゲーム
といった流れとなりました。人前の発表は苦手だとおっしゃってた平野さんの人を惹き付け笑顔を誘う話し方には心底すごいなぁと思いました。僕もPF部で発表するようになったのですが、どうにも話すのにいっぱいいっぱいでしてねぇ・・・・見習いたいものです。
そうそう、アプリのレビューを時折見せていただいていたoctobaさんの事務所が、まさか2年前まで済んでた割とご近所さんにあったのは知りませんでした。世の中って狭いなぁ(ってまぁ、町田支部なんだから当たり前なのか)。
町田は人数はあまり多くないようで、こじんまりしているので、これならPF部同様、気楽に参加に来れそうな雰囲気です。
・横浜PF部 第二回勉強会
9月19日(日)にPF部第二回が行われました。今回はのんびり聞きながらちらほらとつぶやいていましたけど、聞きながらつぶやくって意外と難しいですね。結構ぽろぽろと聞き漏らしていたようで。
内容についてはPF部のサイトにも軽く書いてありますので、こちらをご確認ください。
今回は
- @klasicistaさんの 「CELinux Forum テクニカルジャンボリー34レポート」
- @sola_dolphin_1さんの「BeagleBoard-xMでAndroid」
- a_yokoyamaさんの「プラットフォーム学習環境の構築の軌跡」
@klasicistaさんの発表は、実は僕が参加していた@l_b__さんや、@sola_dolphin_1さんに、PF部で誰か発表してくれるよね的に無茶ぶりしていたところ、参加されていた@klasicistaさんが快く引き受けてくれるという流れになりまして。僕が犯人でした。無茶ぶりしてごめんなさい。
そんな無茶ぶりをしてたくせに、その後情報を仕入れてなかったのですが、発表で紹介していただいた資料がかなり興味深くて、発表後ダウンロードして電車の中でちらほら追いかけてます。はい。
@sola_dolphin_1さんの発表は、BeagleBoard-xMでのAndroidを動かす件での発表。この中でのmicroSDが遅い!という話は、隠者も感じていて、原因を調べてみたいなと考えている一つです。
最後のa_yokoyamaさんの発表。横山さんは、プラットフォーム学習を始めたばかりですというので、初学者として環境構築からやってはまった内容をぜひ話していって下さいという事になり、今回の発表に臨んで下さいました。すごく苦労されている様子が見て取れて、がんばってるなぁと感じました。
そして、今週参加予定のイベントは
・Google Developer Day 2010 Japan
9月28日(火)に、東京国際フォーラムにて行われる予定となっています。
いやぁ、夏休み残しておいて本当に良かったです。というわけで、火曜日は、本家の開発者イベントに初参加です。といっても、PF部向けのイベントではないので、場違いでぽかーんとして過ごしているかもしれませんけど。
夜はこっそり名古屋つ部の懇親会にも参加登録させていただいたので、このイベントに集まってきた方々の熱い気持ちを見せていただきつつ、PF側の人としてどんな事がやっていけそうか夢想してみるのもいいかなとか思っております。
夜はこっそり名古屋つ部の懇親会にも参加登録させていただいたので、このイベントに集まってきた方々の熱い気持ちを見せていただきつつ、PF側の人としてどんな事がやっていけそうか夢想してみるのもいいかなとか思っております。
2010年9月16日木曜日
横浜Android PF部のsites出来ました
hermit4@横浜Android PF部です。
いや、まぁ、他にもいくつかに所属はしてますが真面目に活動しているのはPF部なので。
勉強会が月一ペースで開かれており、その記録をどこかに残すのに、独自ドメインで公開できると良いよねという話があって、Google Sitesでのサイト作りをお手伝いしてみました。
Yokohama Android Platform Club
なにせ、Google Sitesでのサイト作りは初めてですので、つたないページでごめんなさい。
時間ができたら、もうちょっと勉強してカッコよくしたいなぁと思ってます。
ちなみに横浜AndroidPF部は、日本Androidの会 横浜支部の中で、Androidのポーティングや、Nativeに関する情報って少ないよねという話から、勉強会を作ろうかということで、 @l_b__さんが中心となり立ち上げた部です。
立ち上げの契機が日本Androidの会 横浜支部だったため、一応、横浜支部の一勉強会という形となっていますが、横浜支部のMLは結構メールの量も多くて埋もれてしまいがちで、実は横浜には住んでいない隠者のような人もいるため、別途MLと活動内容を書き留めるwiki的な役割としてsitesが開設される事となりました。
まだまだ出来立てほやほやで、第一回の勉強会が終わり、今週末に第二回の勉強会をという段階ですが、月に1回、物好きが横浜に集まって勉強してますので、Androidのポーティングや、Native側のFrameworkについて興味があるという物好きなあなたのご参加をお待ちしております。
なお、今のところ発表者の多くが大勢の前で話すなんて事に慣れていない技術者ですので、Ust等の映像記録はありませんが、上記のサイトで、第一回で使われた勉強会の資料は公開されていますので、興味がある方はぜひぜひご参加下さい。
いや、まぁ、他にもいくつかに所属はしてますが真面目に活動しているのはPF部なので。
勉強会が月一ペースで開かれており、その記録をどこかに残すのに、独自ドメインで公開できると良いよねという話があって、Google Sitesでのサイト作りをお手伝いしてみました。
Yokohama Android Platform Club
なにせ、Google Sitesでのサイト作りは初めてですので、つたないページでごめんなさい。
時間ができたら、もうちょっと勉強してカッコよくしたいなぁと思ってます。
ちなみに横浜AndroidPF部は、日本Androidの会 横浜支部の中で、Androidのポーティングや、Nativeに関する情報って少ないよねという話から、勉強会を作ろうかということで、 @l_b__さんが中心となり立ち上げた部です。
立ち上げの契機が日本Androidの会 横浜支部だったため、一応、横浜支部の一勉強会という形となっていますが、横浜支部のMLは結構メールの量も多くて埋もれてしまいがちで、実は横浜には住んでいない隠者のような人もいるため、別途MLと活動内容を書き留めるwiki的な役割としてsitesが開設される事となりました。
まだまだ出来立てほやほやで、第一回の勉強会が終わり、今週末に第二回の勉強会をという段階ですが、月に1回、物好きが横浜に集まって勉強してますので、Androidのポーティングや、Native側のFrameworkについて興味があるという物好きなあなたのご参加をお待ちしております。
なお、今のところ発表者の多くが大勢の前で話すなんて事に慣れていない技術者ですので、Ust等の映像記録はありませんが、上記のサイトで、第一回で使われた勉強会の資料は公開されていますので、興味がある方はぜひぜひご参加下さい。
2010年9月5日日曜日
ちょっとオアズケ中
たいして世の中の役に立てていないblogの主の隠者でございます。
書きたいネタはあるんですが、調べている時間がなかなか取れていません。
どれから手をつけようかと考えあぐねているところ。
まぁ、2ヵ月後くらいにはAndroidの発表がまためぐってくるでしょうから、Androidも一個必須なんですけどねぇ。
- HALの続き。HALを使わないハードウェア操作周りの調査
- QtでOAuth入門。QOAuthも使いながら、ちょっとOAuthについて書いてみようカナ。
- Androidの音声周りのフレームワーク辺りを物色。BeagleBoard-xMを使いながら。
- Androidのセンサー系入門。BeagleBoard-xMにとりあえず三軸センサーをつないでみる
- ちょっと組込みIOまわりのお勉強
辺りをとりあえず今後のネタとして考えてるんですけどね。
まぁ、その前に、転職も本気で考えなきゃとか思ってますが・・・・。
とりあえず、GDDのクイズが合格点だったとかいう間違いだと思われるメールが届いているので、休みを確保できるよう、今週は仕事に精をださなきゃと思ってます。
そんなわけで、しばらくあまり意味のない日記やメモ書きの日が続くかもしれません。
が、さすがにBlogでやろうと思ってることとか書いておいてやらないと、やるやる詐欺だ!とか言われて怖くなるでしょうから、やりたい事として上げておきました。
2010年9月2日木曜日
Mac用 Qt Binary版
実はAndroidよりよっぽどQtラブな隠者でございます。
普段Linux環境では Qtは自分でビルドしたものを使っているのですが、Macでは、横着をしてバイナリ版をインストールして使っています。
そんな他人任せなMac環境にちょっとQtを使ったライブラリを追加しようとしてディレクトリ構成がよくわからずに悩んだので、メモ書き程度に。
・開発ツール群 + Qt Demo(GUI)
/Developer/Applications/Qt
・シンボリックリンク
・プラグイン
・言語環境用ファイル
・ライブラリ、ヘッダファイル
・設定ファイル
・ドキュメント
/Developer/Documentation/Qt/
・サンプルコード
・アンインストーラ
普段Linux環境では Qtは自分でビルドしたものを使っているのですが、Macでは、横着をしてバイナリ版をインストールして使っています。
そんな他人任せなMac環境にちょっとQtを使ったライブラリを追加しようとしてディレクトリ構成がよくわからずに悩んだので、メモ書き程度に。
・開発ツール群 + Qt Demo(GUI)
/Developer/Applications/Qt
- Assistant.app
- Assistant_adp.app
- Designer.app
- Linguist.app
- qhelpconverter.app
- pixeltool.app
- qtdemo.app
- qdbusviewer.app
・開発ツール群(CUI)
/usr/bin/
- qdbusviewer.app
- lconvert-4.6
- lrelease-4.6
- lupdate-4.6
- macdeployqt-4.6
- moc-4.6
- qcollectiongenerator-4.6
- qdbus-4.6
- qdbuscpp2xml-4.6
- qdbusxml2cpp-4.6
- qhelpgenerator-4.6
- qmake-4.6
- qt3to4-4.6
- rcc-4.6
- uic-4.6
- uic3-4.6
- xmlpatterns-4.6
・シンボリックリンク
/Developer/Tools/Qt
(上記GUI/CUIアプリのシンボリックリンク。なお-4.6は省かれている)
・プラグイン
/Developer/Applications/Qt/plugins
- accessible
- codecs
- designer
- graphicssystems
- iconengines
- imageformats
- phonon_backend
- script
- sqldrivers
・言語環境用ファイル
/Developer/Applications/Qt/
- phrasebooks
- translations
・ライブラリ、ヘッダファイル
/Library/Frameworks
- Qt3Support.framework
- QtAssistant.framework
- QtCore.framework
- QtDBus.framework
- QtDesigner.framework
- QtDesignerComponents.framework
- QtGui.framework
- QtHelp.framework
- QtMultimedia.framework
- QtNetwork.framework
- QtOpenGL.framework
- QtScript.framework
- QtScriptTools.framework
- QtSql.framework
- QtSvg.framework
- QtTest.framework
- QtWebKit.framework
- QtXml.framework
- QtXmlPatterns.framework
- phonon.framework
・設定ファイル
/usr/local/Qt4.6
- mkspecs
- q3porting.xml
・ドキュメント
/Developer/Documentation/Qt/
- html
- qch
・サンプルコード
/Developer/Examples/Qt
(多いので略)
・アンインストーラ
/Developer/Tools/uninstall-qt.py
qmake用のスペックファイル群は/usr/local/Qt4.6/mkspecsの中となります。
ライブラリの配置が特殊で悩みますけど、自作のライブラリの場合は、/usr/local/libにでも入れて、mkspecsを用意してあげるとよいのかもしれません。
改めてみると、見慣れぬツールもいくつかあるので、今度調べてみようかなと思ってます。
2010年9月1日水曜日
Beagle Board-xMについて調べ中なう
(9月に入って憂鬱な隠者でございます。
いや、そろそろいろいろ決着をつけなければならない問題が積まれている状態でして。
というわけで、現実逃避がてら、BeagleBoard-xMを調べてみてたりします。
まぁ、Androidを動かすというミッションは、既にsolaさんが情報公開してくださってますので、僕はのんびりと、マニュアルを眺めるところから。
システムマニュアルは、BeagleBoard Hardware Design から、入手ができます。
マニュアルのIntroductionには
まぁ、僕と同じく組込み系の経験が浅いアプリ屋だと、 DSPってなんぞやとか思うわけですが、デジタルシグナルプロセッサ (Digital Signal Processor)といって、デジタル信号処理に特化したマイクロプロセッサで、画像処理とか動画のエンコード、デコードといった処理をこちらで行うことで高速に処理することができるようになるという代物です。これが付いていると出来る事の可能性が広がります。
PMIC(電源管理)用のチップとしては、TPS65950が載っているようです。
なおxMに付属のmicroSDに入ってる中身と、その起動の様子は先日のエントリーを参照してください。
ちなみに、Beagle Boardのマニュアルは164ページ。CPUのリファレンスマニュアルは3642ページ。もちろん英語です。全部読むつもりなら結構な覚悟が必要そうですよね。
とりあえず、せっかくなので、僕はしらばくu-bootのコードを追いかけながら、この石について少し勉強しといてみたいなぁとか思ってたりします。
いや、そろそろいろいろ決着をつけなければならない問題が積まれている状態でして。
というわけで、現実逃避がてら、BeagleBoard-xMを調べてみてたりします。
まぁ、Androidを動かすというミッションは、既にsolaさんが情報公開してくださってますので、僕はのんびりと、マニュアルを眺めるところから。
システムマニュアルは、BeagleBoard Hardware Design から、入手ができます。
マニュアルのIntroductionには
The processor used on the BeagleBoard-xM is compatible with several Cortex A8 processors manufactured by Texas Instruments. Currently, the processor is a DM3730 processor, which has yet to be announced by Texas Instruments. The only documentation that is available is the AM3715. The key difference between the AM3715 and the DM3730, is that the DSP is not included on the AM3715.と書かれています。というわけで、CPUはAM3751にDSPが含まれているDM3730ですね。マニュアル中にはまだアナウンスされていないとなっていますが、本日の時点で、既にTIのサイトでは、Activeになってます。
まぁ、僕と同じく組込み系の経験が浅いアプリ屋だと、 DSPってなんぞやとか思うわけですが、デジタルシグナルプロセッサ (Digital Signal Processor)といって、デジタル信号処理に特化したマイクロプロセッサで、画像処理とか動画のエンコード、デコードといった処理をこちらで行うことで高速に処理することができるようになるという代物です。これが付いていると出来る事の可能性が広がります。
PMIC(電源管理)用のチップとしては、TPS65950が載っているようです。
TIのWebを見ると統合パワー・マネージメント IC、3 DC/DC、11 LDO、オーディオ・コーデック、USB HS トランシーバ、チャージャー内蔵って書いてます。電源管理とオーディオコーデックはこちらのチップの役割のようです。
Beagle Board-xMには、残念ながらNORもNANDもありません。
DM3730には、GPMC Busという外部メモリコントローラのバスがあるのですが、マニュアルを見ると
8.10.3 GPMC BusThe GPMC bus is not accessible on the BeagleBoard. Its connectivity is limited to the POP memory access on the top of the processor and therefore is only accessible by the NAND memory.The memory on the GPMC bus is NAND and therefore will support the classical NAND interface. The address of the memory space is programmable.
ということで、使えないようです。こっそりNORを付けてu-bootまでは高速起動できないだろうかとか思ってたので残念です。
ま、そのようなわけで、BeagleBoard-xM君を起動すると
- BootRomが最低限の初期化を行ない、microSD Powerの設定をTPS65950へ行う
- BootRomはその後、GPMC(xM君は利用なし),MMC1(microSDが接続)の順に検索しMLOをさがす
- MLOからX-Loaderが起動。u-boot.binをメモリに展開
- u-bootが起動し、uImageを読み込む・・・
といった流れで起動するようです(*1)。詳しいことはまだわかってませんけど、MLOというのは、どうやらBootRomが理解できるような署名を付けた X-Loader でしょうか。
なおxMに付属のmicroSDに入ってる中身と、その起動の様子は先日のエントリーを参照してください。
ところで、Power Connectorの項目を見ると
と書かれています。つまり、電源の供給は、USB OTGを接続すればできるってことですねぇ。電力食うようなボードを追加しなければ、USB供給で動くんですか。知らなかった。もしかして、古いBeagle Boardもできたんでしょうか。5.16 Power ConnectorPower will be supplied via the USB OTG connector and if a need arises for additional power, such as when a board is added to the expansion connectors, a larger wall supply 5V can be plugged into the optional power jack. When the wall supply is plugged in, it will remove the power path from the USB connector and will be the power source for the whole board. The power supply is not provided with the BeagleBoard.
ちなみに、Beagle Boardのマニュアルは164ページ。CPUのリファレンスマニュアルは3642ページ。もちろん英語です。全部読むつもりなら結構な覚悟が必要そうですよね。
とりあえず、せっかくなので、僕はしらばくu-bootのコードを追いかけながら、この石について少し勉強しといてみたいなぁとか思ってたりします。
2010年8月31日火曜日
BeagleBoard-xM届きました
万年金欠どころか、最近では借金まみれとも噂される隠者でございます。
組込みと呼ばれる業界の難しいところは、勉強のためにハードウェアを購入しないとならないことですよね。おかげさまでいつもお財布が悲鳴を上げています。
まぁ、そんなわけで仕入れた、期待の新星 BeagleBoard-xM。この性能でこのお値段はびっくりですよね。
左側が、BeagleBoard RevCで、右側がBeagleBoard-xMのA2です。
ちょっとサイズが大きくなりました。
USBが4つに、そして待望のEthernetが追加されてます。
USB OTG portはBeagleBoardからかわりないですが、以前はピンコネクタのみだったシリアルポートが今回はボードに直付けされてます。これは便利です。はい。
音声の出力とVideoは、前回同様のようです。DVD-D(HDMI)がついてますね。
JTAG pinも以前と同じですが、今回はカメラ用のピンコネクタがついてます。その右上にちっちゃくあるのはGNDピンですね。今回は豪勢にピンやコネクタが付きまくりです。裏面はというと
ついてます。右上にLCD関連ピンコネクタ。その下はExpansionコネクタです。Power,McBSP,I2C,MMC2,UART,McSPI,GPIO,PWMがここにでているようです。
ちょっと見づらいですが、左上にあるのが、Micro SDのスロットで、その右にこっそり4pin分のMcBSP2 portも出ています。
その下の方にあるのは、Auxiliary Access Headerで、MMC3, GPIO,ADC,HDQとマニュアルに記載されてます。
Beagle Boardよりも色々用意されているようです。しかもコネクタまで実装してくれている豪勢さ。いやぁ、すばらしいです。
CPUは、Texas Instruments Cortex A8 1GHz processor
Memoryは、Micron 4Gb MDDR SDRA(512MB) 200MHz
今回は、NANDこそ無いものの、かなりリッチな環境になっているのは間違いありません。
ついでに、今回はmicro SDが付属していました。中身は
というわけで、こちらのmicro SDから起動してみました。
電源投入と同時にシリアルコンソールには色々でましたけど、なんだか起動は遅いです。特に、ramdisk.gzの展開に時間がかかるのか、このファイルの読み込みに結構時間がかかりました。
以前は、電源を入れてすぐにHDMIから犬の絵が表示されていましたけど、このMicroSDカードには入ってないようです。おかげで、シリアルをつながないと、途中でとまっているのではないかと、かなり不安に感じます。
こちらは、起動完了後のログイン画面です。
とりあえず、今週は色々と忙しいので、お遊びができるかどうかちょっと怪しい所なんですが。まぁ、時間があれば、まずはAndroidから動かしてみないとなぁと思ってます。
組込みと呼ばれる業界の難しいところは、勉強のためにハードウェアを購入しないとならないことですよね。おかげさまでいつもお財布が悲鳴を上げています。
まぁ、そんなわけで仕入れた、期待の新星 BeagleBoard-xM。この性能でこのお値段はびっくりですよね。
左側が、BeagleBoard RevCで、右側がBeagleBoard-xMのA2です。
ちょっとサイズが大きくなりました。
USBが4つに、そして待望のEthernetが追加されてます。
USB OTG portはBeagleBoardからかわりないですが、以前はピンコネクタのみだったシリアルポートが今回はボードに直付けされてます。これは便利です。はい。
音声の出力とVideoは、前回同様のようです。DVD-D(HDMI)がついてますね。
JTAG pinも以前と同じですが、今回はカメラ用のピンコネクタがついてます。その右上にちっちゃくあるのはGNDピンですね。今回は豪勢にピンやコネクタが付きまくりです。裏面はというと
ついてます。右上にLCD関連ピンコネクタ。その下はExpansionコネクタです。Power,McBSP,I2C,MMC2,UART,McSPI,GPIO,PWMがここにでているようです。
ちょっと見づらいですが、左上にあるのが、Micro SDのスロットで、その右にこっそり4pin分のMcBSP2 portも出ています。
その下の方にあるのは、Auxiliary Access Headerで、MMC3, GPIO,ADC,HDQとマニュアルに記載されてます。
Beagle Boardよりも色々用意されているようです。しかもコネクタまで実装してくれている豪勢さ。いやぁ、すばらしいです。
CPUは、Texas Instruments Cortex A8 1GHz processor
Memoryは、Micron 4Gb MDDR SDRA(512MB) 200MHz
今回は、NANDこそ無いものの、かなりリッチな環境になっているのは間違いありません。
ついでに、今回はmicro SDが付属していました。中身は
- md5Sum.txt
- MLO
- ramdisk.gz
- ramfs.img
- u-boot.bin
- uImage
- user.scr
というわけで、こちらのmicro SDから起動してみました。
電源投入と同時にシリアルコンソールには色々でましたけど、なんだか起動は遅いです。特に、ramdisk.gzの展開に時間がかかるのか、このファイルの読み込みに結構時間がかかりました。
以前は、電源を入れてすぐにHDMIから犬の絵が表示されていましたけど、このMicroSDカードには入ってないようです。おかげで、シリアルをつながないと、途中でとまっているのではないかと、かなり不安に感じます。
こちらは、起動完了後のログイン画面です。
とりあえず、今週は色々と忙しいので、お遊びができるかどうかちょっと怪しい所なんですが。まぁ、時間があれば、まずはAndroidから動かしてみないとなぁと思ってます。
2010年8月30日月曜日
JAG 横浜支部 PF部の勉強会で発表してきました
人前で話すのが苦手な隠者でございます。
でも、こればかりは何時までも避けていてはけして上達しないわけで。とりあえず、PF部くらいの少人数、非Ustな環境なら、多少は話せるのではないかと、第一回目の簡単な発表を行なってきました。
反省点
でも、こればかりは何時までも避けていてはけして上達しないわけで。とりあえず、PF部くらいの少人数、非Ustな環境なら、多少は話せるのではないかと、第一回目の簡単な発表を行なってきました。
反省点
- 時間ばかり気にして、話の「間」がうまく取れてなかったなと思います。聞いてくださってるみなさんが、ちゃんと内容を咀嚼できるように緩急をつけて話すべきなんですが・・・話し始めるとそこを考える余裕はさっぱりありませんでした。
- 資料の文字のサイズが小さすぎたかも。まぁ、最初は壁に写していたこともあって、文字が潰れてさっぱり見えませんでした。人数を考えれば、実は紙を数枚用意して回すとか気を使ってみればよかったかも。
- もうちょっと終わった後の質問が出やすいようなネタを仕込んでおければよかったのだけど・・・・。一応、みなさんの知識レベルを共有する意味で、これ知ってる人?とか聞いてみたので、今後は、もうちょっと楽しくみんなで考えられるネタが仕込めるといいなぁとか思ってます。
- 資料作成が遅くて事前公開できてなかったのは失敗でした。あと、keynoteはとっても素敵なんだけど、keynoteのエフェクトに頼りすぎると後で公開したときに後悔するはめに。
- もうちょっと発表するときの自分に余裕が欲しい・・・・。
とまぁ、反省すべき点が多々ある発表ではございましたが・・・。とりあえず、この週末を乗りきれて何よりです。9月は色々忙しいですし、でしゃばって発表しすぎるのもなんなので、9月の集まりは他の方々の発表を楽しみにしつつ、何かのネタを温めておきます。はい。
一応、こちらが発表資料のPDF版です。
Blogとほとんどかぶってますし、大したものではないのでお役に立つかわかりませんが、興味があればお持ち下さい。
2010年8月27日金曜日
Androidのソースの構成を軽くおさらいしてみる
珍しく割とこまめに投稿している隠者でございます。
いやまぁ、今週末のネタ作りのために色々考えなくてはならないわけで・・・・。考えたネタをさらにkeynoteにまとめなければなので、時間も、ネタも足りない気がしてならないですが。
しかも、話す内容まで考えないと・・・うわぁぁん。てな状況です。はい、まだ資料になってません。
さて、今回のおはなしの肝は、最初のAndroidネタの日記の絵が3枚でほぼ全てなんですが、それだけだと持ち時間30分程度なんて時間はつぶせません。いや、話すのは最後なので、もしかしたら時間が押していて、軽く終わるという可能性もあるのですけど。
# 誰ですか?みんなあまり話すことがなくて、時間が大きく余ってるかもよとかいう人は!
ともかく、とりあえずPF部的アーキテクチャ図について軽くお話した後、ソースの構成まで立ち入って軽く見て、最後に、ソースを追いかける時に便利な、envsetup.shのお話をして、後は、アーキテクチャ図にいちゃもんをつけていただいて、議論がいい感じになったあたりで、ちゃんちゃんと行きたいなと思ってまして。そういう意味では、ちょっと日記が前後してしまいますが、まぁ、今日はソースの構成を軽くおさらいです。
というわけで、Android 2.2のソースコードでトップディレクトリを見てみましょう。
ソースコードは大きく分けると、Androidのシステムを構成するソース・ファイル群と開発環境を構成するファイル群とに分けられます。
* Androidのコード群
* 開発環境コード
ポーティングを意識してコードを読んでいくとすると、目を通しておくべき箇所を敢えて選ぶとすると。
といった所でしょうか。もう少し詳しく踏み込みたい所ですが、まぁ、アーキテクチャの概要という趣旨から外れるので、PF部での発表ではここまででしょうかねぇ。というわけで、今日、明日は、資料作りに専念するため、更新はなしかと思いますので、あしからず。
いやまぁ、今週末のネタ作りのために色々考えなくてはならないわけで・・・・。考えたネタをさらにkeynoteにまとめなければなので、時間も、ネタも足りない気がしてならないですが。
しかも、話す内容まで考えないと・・・うわぁぁん。てな状況です。はい、まだ資料になってません。
さて、今回のおはなしの肝は、最初のAndroidネタの日記の絵が3枚でほぼ全てなんですが、それだけだと持ち時間30分程度なんて時間はつぶせません。いや、話すのは最後なので、もしかしたら時間が押していて、軽く終わるという可能性もあるのですけど。
# 誰ですか?みんなあまり話すことがなくて、時間が大きく余ってるかもよとかいう人は!
ともかく、とりあえずPF部的アーキテクチャ図について軽くお話した後、ソースの構成まで立ち入って軽く見て、最後に、ソースを追いかける時に便利な、envsetup.shのお話をして、後は、アーキテクチャ図にいちゃもんをつけていただいて、議論がいい感じになったあたりで、ちゃんちゃんと行きたいなと思ってまして。そういう意味では、ちょっと日記が前後してしまいますが、まぁ、今日はソースの構成を軽くおさらいです。
というわけで、Android 2.2のソースコードでトップディレクトリを見てみましょう。
ソースコードは大きく分けると、Androidのシステムを構成するソース・ファイル群と開発環境を構成するファイル群とに分けられます。
* Androidのコード群
種別 | ディレクトリ | 概要 |
---|---|---|
Applications | packages | アプリケーション |
Application Framework | framework | Android Framework |
Android Runtime | dalvik | Dalvik VM |
Library | external | サードパーティ製ライブラリ(正確には、qemuのようなSDK用のプログラムや、pingのようなインストールするコマンドも含まれる) |
HAL | hardware | ハードウェア抽象化レイヤのコード |
System | system | bluetooth tools, システムファイル, wlan等システムに必要なファイル類 |
Bionic | bionic | libcおよびローダ等、基本となるライブラリ・プログラムのコード |
* 開発環境コード
種別 | ディレクトリ | 概要 |
---|---|---|
Build関連 | build | ビルド用のMakefile,シェルスクリプト等 |
prebuilt | バイナリ提供のツール類(クロスコンパイラ等) | |
device | デバイス固有のMakeファイル、スクリプト関連 | |
SDK関連 | sdk | Software Development Kit code |
NDK関連 | ndk | Native Development Kit code |
ツール関連 | development | Platform engineering tools |
テスト関連 | cts | Android CTS (Compatibility Test Suite) |
Bootloader関連 | bootable | ブートローダリファレンスコード |
ポーティングを意識してコードを読んでいくとすると、目を通しておくべき箇所を敢えて選ぶとすると。
- hardware
ハードウェアを有効に利用できるようにするのに実装が必要 - system
デバイスファイルを作っているinit等、いくつかのプログラムに手を入れる必要があるかも。init.rcのオリジナルも置いてあるので個々は意外とよく探索することになります。 - device
デバイスに合わせたビルド環境の構築のために必要 - framework
トラブルが起きた時に、logcatの内容からコードを追いかけて行くのによく読む場所
といった所でしょうか。もう少し詳しく踏み込みたい所ですが、まぁ、アーキテクチャの概要という趣旨から外れるので、PF部での発表ではここまででしょうかねぇ。というわけで、今日、明日は、資料作りに専念するため、更新はなしかと思いますので、あしからず。
2010年8月25日水曜日
ソースを追うのに便利なenvsetup.shのコマンド
Javaはあまり詳しくない隠者でございます。
言い訳から始めるのもどうかなと思いますが、とりあえず、Javaは、かなり昔に独学でかじった程度なんです。そんなわけで、出展もはっきり覚えていませんが、Javaというのは、ソースツリーのディレクトリもまたアーキテクチャの一つとしてとらえている言語だったように記憶しています。
隠者は、もともとTags系(etagsとかgtagsとか)を使いません。隠者は、ソースコードを格納するディレクトリも、アーキテクチャをしっかり考え、意味あるものにすべきだと考えてきており、ディレクトリ構成も含めて「アーキテクチャ」として考えられているのであれば、おおよそコードのある位置を覚えてしまう方が、都合がよいからです。そんなわけで、どこに目的のコードがあるかを意識しにくくなるタグジャンプは、記憶力の悪い隠者に便利すぎるツールになってしまうからです。
そのような理由から、普段からソースコードは手作業で追いかけているわけですが、この場合、主にgrepを使う事になります。
ただし、ファイル数が多かったりディレクトリが深くなったりすると、find等もいろいろ組み合わせ結構コマンドを打つのも手間になったりします。
そんなgrepに関して、Androidのbuild/envsetup.shの中に、少しだけ便利になる関数が定義されています。それは
です。それぞれ、Cソースコード、Javaソースコード、Resourceファイル、すべてのソースファイルにPATTERNでgrepをかけて、検索したキーワードを色分けして表示してくれるというコマンドです。長々とgrepコマンドを書くことなく、grepがかけられるので、grepで解析する派のあなたには重宝するツールになるでしょう。
ちなみに、他にもいくつかのコマンドが定義されています。ビルド時に使われるものもあれば、開発作業に有用なものもありますので、中身を一度チェックしてみるとよいかもしれません。
なお、以下にコマンドの一覧と、わかるものには簡単な解説なり、コメントの抜書きなりを記載しておきます。
ずいぶん大量に穴があいてますが、穴埋めは今後の課題ということでお許しください。
言い訳から始めるのもどうかなと思いますが、とりあえず、Javaは、かなり昔に独学でかじった程度なんです。そんなわけで、出展もはっきり覚えていませんが、Javaというのは、ソースツリーのディレクトリもまたアーキテクチャの一つとしてとらえている言語だったように記憶しています。
隠者は、もともとTags系(etagsとかgtagsとか)を使いません。隠者は、ソースコードを格納するディレクトリも、アーキテクチャをしっかり考え、意味あるものにすべきだと考えてきており、ディレクトリ構成も含めて「アーキテクチャ」として考えられているのであれば、おおよそコードのある位置を覚えてしまう方が、都合がよいからです。そんなわけで、どこに目的のコードがあるかを意識しにくくなるタグジャンプは、記憶力の悪い隠者に便利すぎるツールになってしまうからです。
そのような理由から、普段からソースコードは手作業で追いかけているわけですが、この場合、主にgrepを使う事になります。
ただし、ファイル数が多かったりディレクトリが深くなったりすると、find等もいろいろ組み合わせ結構コマンドを打つのも手間になったりします。
そんなgrepに関して、Androidのbuild/envsetup.shの中に、少しだけ便利になる関数が定義されています。それは
- cgrep PATTERN
- jgrep PATTERN
- resgrep PATTERN
- sgrep PATTERN
です。それぞれ、Cソースコード、Javaソースコード、Resourceファイル、すべてのソースファイルにPATTERNでgrepをかけて、検索したキーワードを色分けして表示してくれるというコマンドです。長々とgrepコマンドを書くことなく、grepがかけられるので、grepで解析する派のあなたには重宝するツールになるでしょう。
ちなみに、他にもいくつかのコマンドが定義されています。ビルド時に使われるものもあれば、開発作業に有用なものもありますので、中身を一度チェックしてみるとよいかもしれません。
なお、以下にコマンドの一覧と、わかるものには簡単な解説なり、コメントの抜書きなりを記載しておきます。
ずいぶん大量に穴があいてますが、穴埋めは今後の課題ということでお許しください。
- help
- helpを表示する(一部のコマンドのみ)
- get_abs_build_var
- Get the value of a build variable as an absolute path.
- get_build_var
- Get the exact value of a build variable.
- check_product
- check to see if the supplied product is one we can build
- check_variant
- check to see if the supplied variant is valid
- setpaths
- printconfig
- set_stuff_for_environment
- set_sequence_number
- settitle
- choosesim
- choosetype
- chooseproduct
- choosevariant
- choosecombo
- add_lunch_combo
- print_lunch_menu
- lunch
- tapas
- Configures the build to build unbundled apps.Run tapas with one ore more app names (from LOCAL_PACKAGE_NAME)
- gettop
- topディレクトリを表示する
- m
- プロジェクトのトップディレクトリでmakeを行う。
- findmakefile
- 現在のディレクトリを上に遡りながら、Android.mkファイルを見つける
- mm
- 現在のディレクトリのAndroid.mk内のモジュールをトップディレクトリからmakeする
- mmm dirname
- dirnameで指定したディレクトリのAndroid.mk内のモジュールをトップディレクトリからmakeする
- croot
- トップディレクトリに移動する
- cproj
- ディレクトリを上に遡りAndroid.mkのあるディレクトリに移動する
- pid program
- adb接続した先のprogramのPIDを取得する
- systemstack
- systemstack - dump the current stack trace of all threads in the system process to the usual ANR traces file
- gdbclient [EXE] [PORT] [PROG]
- arm-eabi-gdbを起動し、各種シンボルを読み込んでgdbserverへ接続する
- sgrep PATTERN
- .*\.(c|h|cpp|S|java|xml|sh|mk)に対してPATTERNでgrepをかける
- jgrep PATTERN
- .*\.javaに対してPATTERNでgrepをかける
- cgrep PATTERN
- .*\.cに対してPATTERNでgrepをかける
- resgrep PATTERN
- *\.xmlに対してPATTERNでgrepをかける
- mgrep PATTERN
- .*/(Makefile|Makefile\..*|.*\.make|.*\.mak|.*\.mk)に対してPATTERNでgrepをかける
- treegrep PATTERN
- .*\.(c|h|cpp|S|java|xml)に対して、grep -iをかける
- getprebuilt
- ANDROID_PREBUILTS変数の値を取得する
- tracedmdump tracename
- tracenameのdmtraceを実行する
- runhat [ -d | -e | -s serial ] target-pid [output-file]
- communicate with a running device or emulator, set up necessary state,and run the hat command.
- getbugreports
- /sdcard/bugreportsのバグレポートファイルを取得する
- startviewserver
- stopviewserver
- isviewserverstarted
- smoketest
- SmokeTestApp.apk SmokeTest.apkを再インストールし実行する?
- runtest args
- argsを引数として/development/testrunner/runtest.pyを実行する
- godir regexp
- PATTERNにマッチするディレクトリのリストを表示し、選択されたディレクトリに移動する
- set_java_home
- JAVA_HOME環境変数がない場合に固定値を設定する
2010年8月23日月曜日
Androidのバージョン
なんというかあっという間に一週間だった隠者でございます。
いやぁ、私事でもろもろございまして、早速三日坊主みたいな状況に。
まぁ、でも、実際、発表は来週という状況で、そろそろ色々話の流れを考えなくてはならない状況で、意外と切羽詰ってまいりました。
さて、Androidには、実は大きな弱点がありまして。それは進化が速すぎた事。
日本Androidの会でAndroid関連の書籍の著者の方々も書いてる間にバージョンが上がってしまってというような苦労話をされていました。最近でこそかなり落ち着いている感がありますが、以前は、バージョンの変更に伴いAPIも結構変わったりして、アプリ開発の書籍を買ってきてそのとおりに打ち込んだのに動かないなんて話もよく耳にしたものです。
プラットフォームの移植を考えるときでも、やはりバージョンというのは悩みものです。でまぁ、話をする時には、どのバージョンの話なのか明確にできるように、きちんと把握しておきたいなと思ってます。
実は、バージョンについて、各特徴というのは、wikipediaに出てました。
長くなりましたが、wikipedia英語版から概ね抜粋させていただきました。ちょっとLinux Kernelについて別の列に分けたので若干見にくいかもしれませんが。
プロジェクト名という呼び方が公式にされているかどうかはわかりません。ただ、海外でのプロダクト開発の場合、あるリリースに向けた開発に「プロジェクト名」をつけるのが一般的なようです。そのプロジェクトの成果物としてブラッシュアップしたものが、リリース版になるわけです。
git上にも、プロジェクトを指すタグと、リリースした製品バージョンを示すタグがあることから、そういった一般的な流れに沿って開発が行われているんじゃないかと思います。
ちなみに、この表の発表年月日を見ると、1.5から2.0までの進化の速さは異様でしょう。丁度かなり盛り上がりを見せ始めたところでしたし、この頃はバージョンアップの速さに悲鳴がちらほら聞こえていたものです。
なお、今後については、ソースが見当たらないのでうる覚えな情報ですが、今後は、短気のスパンで出すのではなく、一定のスパンで出すようにしたいという方向にあったはずです。ですので、ここまで無茶な出方は今後しないはずです。
ところで、AndroidのバージョンとLinux Kernelのバージョンの更新は別段同期していません。Android用のLinux Kernelには、いくつかGoogleの独自追加した機能やドライバが必要になるのですが、これはLinux本家で行われているわけでもなく、アップストリームへの還元もいまいちうまくいっていないようです。
PF部として移植の対象として考える場合は、どうしても、Linuxのカーネルと、Androidのユーザーランドの2種類を念頭に入れる必要があります。
なお、面白い事に、Kernel依存の機能というのは、HALをのぞけばほとんどないようで、たとえば、EclairとLinux Kernel 2.6.27の組み合わせでも、基本的な機能の動作は可能です。おそらく、カメラ周りや、センサー周り等、HALを適切に実装していけば、異なるKernelでもそれなりの動きはするのでしょう。
ただし、最近のinit.rc等を読むと、Control Group等のカーネルのごく最近の機能なども積極的に使われていることから、真面目なポーティングを考えるのであれば、できるだけカーネルのバージョンも公式に発表されている製品に合わせてポーティングしたいものです。
いやぁ、私事でもろもろございまして、早速三日坊主みたいな状況に。
まぁ、でも、実際、発表は来週という状況で、そろそろ色々話の流れを考えなくてはならない状況で、意外と切羽詰ってまいりました。
さて、Androidには、実は大きな弱点がありまして。それは進化が速すぎた事。
日本Androidの会でAndroid関連の書籍の著者の方々も書いてる間にバージョンが上がってしまってというような苦労話をされていました。最近でこそかなり落ち着いている感がありますが、以前は、バージョンの変更に伴いAPIも結構変わったりして、アプリ開発の書籍を買ってきてそのとおりに打ち込んだのに動かないなんて話もよく耳にしたものです。
プラットフォームの移植を考えるときでも、やはりバージョンというのは悩みものです。でまぁ、話をする時には、どのバージョンの話なのか明確にできるように、きちんと把握しておきたいなと思ってます。
実は、バージョンについて、各特徴というのは、wikipediaに出てました。
プロジェクト名 | バージョン | 公開日 | Linux Kernel | 新機能 |
---|---|---|---|---|
Cupcake | 1.5 | 2009/04/40 | 2.6.27 |
|
Donut | 1.6 | 2009/09/15 | 2.6.29 |
|
Eclair | 2.0 | 2009/10/26 |
| |
2.1 | 2010/01/12 |
| ||
Froyo | 2.2 | 2010/05/20 | 2.6.32 |
|
長くなりましたが、wikipedia英語版から概ね抜粋させていただきました。ちょっとLinux Kernelについて別の列に分けたので若干見にくいかもしれませんが。
プロジェクト名という呼び方が公式にされているかどうかはわかりません。ただ、海外でのプロダクト開発の場合、あるリリースに向けた開発に「プロジェクト名」をつけるのが一般的なようです。そのプロジェクトの成果物としてブラッシュアップしたものが、リリース版になるわけです。
git上にも、プロジェクトを指すタグと、リリースした製品バージョンを示すタグがあることから、そういった一般的な流れに沿って開発が行われているんじゃないかと思います。
ちなみに、この表の発表年月日を見ると、1.5から2.0までの進化の速さは異様でしょう。丁度かなり盛り上がりを見せ始めたところでしたし、この頃はバージョンアップの速さに悲鳴がちらほら聞こえていたものです。
なお、今後については、ソースが見当たらないのでうる覚えな情報ですが、今後は、短気のスパンで出すのではなく、一定のスパンで出すようにしたいという方向にあったはずです。ですので、ここまで無茶な出方は今後しないはずです。
ところで、AndroidのバージョンとLinux Kernelのバージョンの更新は別段同期していません。Android用のLinux Kernelには、いくつかGoogleの独自追加した機能やドライバが必要になるのですが、これはLinux本家で行われているわけでもなく、アップストリームへの還元もいまいちうまくいっていないようです。
PF部として移植の対象として考える場合は、どうしても、Linuxのカーネルと、Androidのユーザーランドの2種類を念頭に入れる必要があります。
なお、面白い事に、Kernel依存の機能というのは、HALをのぞけばほとんどないようで、たとえば、EclairとLinux Kernel 2.6.27の組み合わせでも、基本的な機能の動作は可能です。おそらく、カメラ周りや、センサー周り等、HALを適切に実装していけば、異なるKernelでもそれなりの動きはするのでしょう。
ただし、最近のinit.rc等を読むと、Control Group等のカーネルのごく最近の機能なども積極的に使われていることから、真面目なポーティングを考えるのであれば、できるだけカーネルのバージョンも公式に発表されている製品に合わせてポーティングしたいものです。
2010年8月14日土曜日
Androidのアーキテクチャ図を描いてみる
日本Androidの会 横浜支部 プラットフォーム部参加中の隠者<hermit4>でございます。
さて、栄えある第一回の勉強会で、何か簡単な発表をすることになりました。
初回顔合わせの会で集まったメンバーは、必ずしもAndroidの下回りに精通している人たち・・・というわけではなく、これから学びたいと思っていらっしゃる方もいて安心しました。正直、仕事としてはAndroidとは無縁のアプリばかりをやってる人なので、場違いだったらどうしようかとも思ってたもので。
まぁ、でも、そういうわけなので、まだまだ初学者な隠者が、同じくこれから勉強をと思う方に初回らしく示せるものが無いかなと色々考えた末、これから、どこを学んでいきたいか、その指針の一助にでもなればと、Androidのアーキテクチャ構成について、簡単に説明してみようかなと考えています。ま、そんなわけで、まずはお手軽に図からということで、アーキテクチャ図を描いてみました。
Androidのアーキテクチャといえば、大方の人が思い浮かべるのが以下の図でしょう。公式のWebページで公開されているアーキテクチャ図はこんな感じです。あ、まだサイズ調整等はしていないので、いまいち見難いのは勘弁してください。
アプリケーション、アプリケーションフレームワーク、ライブラリ、アンドロイドランタイム、Linuxカーネルの5つの層から成り立っています。ところで、実は2008年のGoogle IOで公開されたアーキテクチャ図には、もう一層あって、なお且つ、ポーティング等下周りに着目する人にはそれこそ重要な層なわけです。その層を足した図が、以下のような感じになります。
その層は、Hardware Abstruction Layer - 通称HAL です。まぁ、そのまま、ハードウェア抽象レイヤですね。Dalvik VMより上の層からハードウェアを利用する場合に、直接カーネルにアクセスするのではなく、ユーザー空間に一層設けて、そこでハードウェアへのアクセスを吸収しています。
私見ですが、このような層が設けられている理由としては
・Linud DriverではGPLになるが、HAL部分はカーネルとリンクしないのでGPLに縛られない
・Linuxへの依存をここで吸収することで、上位の層をLinux Kernelに依存しすぎないようにする
等が考えられるかなと思っています。実際、LinuxのドライバだとGPLなの、いやだなぁ・・・と思うベンダーさんもまだいるのではないかと思います。まぁ、隠者はハード屋ではないので、ドライバのコード読まれる事のリスクがどれほどのものなのかはわかりませんが。
何か、特殊な技術が読み取られかねないというなら、ドライバは、至極一般的な作りにして、本当に守りたいアルゴリズムは、ユーザー空間に置く事も可能なのかもしれません。
まぁ、ユーザー空間だけに、パフォーマンス的な制約が気になるところですけど。
ところで、このHAL、ソースコード上では、libhardware.so等になり、Dalvik VMにロードされます。まぁ、つまり一般的な動的ライブラリです。そして、libcはライブラリの中でも少し特殊な立場にあるわけなのは、プログラマな方ならお分かりの事かと思います。ソースコードを調べると、libcはbionicというディレクトリにまとめられています。他にはローダーであるLinkerや、pthread等、Nativeのライブラリ、アプリケーションを作るときに必要なライブラリ群はBionic の下にまとめられているわけです。
というわけで、どうせなので、アーキテクチャ図もちょっと変えてみました。
うーん、どうでしょう。やっぱりいまいちですかねぇ。まぁ、隠者は、HALの部分に大分興味があったりするので、心の声を反映してHALがかなり大きくなってしまってますし。バランスも悪いですね。なかなかどうして難しいものです。まぁ、プラットフォーム関係者向けの資料としては、これくらいの大きさを占めておいてもよいかもしれません。
実際、Androidのポーティングというと、実は、いくつかの段階を踏む事になります。
(1) Android向けドライバの入ったLinux Kernelをターゲット上で動作するようにする
(2) ターゲットのアーキテクチャ向けにAndroidをビルドする。
(3) init.rc等各種設定ファイルをターゲット向けに書き換える
ちなみに、動作実績があまりない環境だと
(4) Dalvik VMのパフォーマンスチューニング
等も必要になるかもしれませんけど。
で、ここまでで最低限の動作はしますが、これに、
(5) 接続するセンサーやGPS,カメラ等のHALを用意する
まで行わないと、各種デバイスがAndroidのアプリケーションから動かない状態になってしまいます。
ついでにいうと、HAL層のグラフィック向けの処理を描かないと、すべてがCPUで処理されるためパフォーマンスがグンと落ちるという事になったりもします。
真面目に動くAndroid機器を作るとなると、どうしてもこのHALをきちんと実装する必要がでてくるわけです。
というわけで、次回の日本アンドロイドの会 横浜支部 プラットフォーム部(長いから次回からはPF部って呼ぶかな) では、このアーキテクチャ図をもとに、アーキテクチャと、簡単なディレクトリ構成と、隠者がソースコードを追いかけたり、ポーティングするときに使っている方法やツール等を、簡単にお話しできればいいなぁと思っています。
P.S.
いや、まぁ、ポーティング話で実は一番大変そうなのが
(6) 動作検証
なわけですが、みなさんどうしてるんでしょうねぇ。
さて、栄えある第一回の勉強会で、何か簡単な発表をすることになりました。
初回顔合わせの会で集まったメンバーは、必ずしもAndroidの下回りに精通している人たち・・・というわけではなく、これから学びたいと思っていらっしゃる方もいて安心しました。正直、仕事としてはAndroidとは無縁のアプリばかりをやってる人なので、場違いだったらどうしようかとも思ってたもので。
まぁ、でも、そういうわけなので、まだまだ初学者な隠者が、同じくこれから勉強をと思う方に初回らしく示せるものが無いかなと色々考えた末、これから、どこを学んでいきたいか、その指針の一助にでもなればと、Androidのアーキテクチャ構成について、簡単に説明してみようかなと考えています。ま、そんなわけで、まずはお手軽に図からということで、アーキテクチャ図を描いてみました。
Androidのアーキテクチャといえば、大方の人が思い浮かべるのが以下の図でしょう。公式のWebページで公開されているアーキテクチャ図はこんな感じです。あ、まだサイズ調整等はしていないので、いまいち見難いのは勘弁してください。
アプリケーション、アプリケーションフレームワーク、ライブラリ、アンドロイドランタイム、Linuxカーネルの5つの層から成り立っています。ところで、実は2008年のGoogle IOで公開されたアーキテクチャ図には、もう一層あって、なお且つ、ポーティング等下周りに着目する人にはそれこそ重要な層なわけです。その層を足した図が、以下のような感じになります。
その層は、Hardware Abstruction Layer - 通称HAL です。まぁ、そのまま、ハードウェア抽象レイヤですね。Dalvik VMより上の層からハードウェアを利用する場合に、直接カーネルにアクセスするのではなく、ユーザー空間に一層設けて、そこでハードウェアへのアクセスを吸収しています。
私見ですが、このような層が設けられている理由としては
・Linud DriverではGPLになるが、HAL部分はカーネルとリンクしないのでGPLに縛られない
・Linuxへの依存をここで吸収することで、上位の層をLinux Kernelに依存しすぎないようにする
等が考えられるかなと思っています。実際、LinuxのドライバだとGPLなの、いやだなぁ・・・と思うベンダーさんもまだいるのではないかと思います。まぁ、隠者はハード屋ではないので、ドライバのコード読まれる事のリスクがどれほどのものなのかはわかりませんが。
何か、特殊な技術が読み取られかねないというなら、ドライバは、至極一般的な作りにして、本当に守りたいアルゴリズムは、ユーザー空間に置く事も可能なのかもしれません。
まぁ、ユーザー空間だけに、パフォーマンス的な制約が気になるところですけど。
ところで、このHAL、ソースコード上では、libhardware.so等になり、Dalvik VMにロードされます。まぁ、つまり一般的な動的ライブラリです。そして、libcはライブラリの中でも少し特殊な立場にあるわけなのは、プログラマな方ならお分かりの事かと思います。ソースコードを調べると、libcはbionicというディレクトリにまとめられています。他にはローダーであるLinkerや、pthread等、Nativeのライブラリ、アプリケーションを作るときに必要なライブラリ群はBionic の下にまとめられているわけです。
というわけで、どうせなので、アーキテクチャ図もちょっと変えてみました。
うーん、どうでしょう。やっぱりいまいちですかねぇ。まぁ、隠者は、HALの部分に大分興味があったりするので、心の声を反映してHALがかなり大きくなってしまってますし。バランスも悪いですね。なかなかどうして難しいものです。まぁ、プラットフォーム関係者向けの資料としては、これくらいの大きさを占めておいてもよいかもしれません。
実際、Androidのポーティングというと、実は、いくつかの段階を踏む事になります。
(1) Android向けドライバの入ったLinux Kernelをターゲット上で動作するようにする
(2) ターゲットのアーキテクチャ向けにAndroidをビルドする。
(3) init.rc等各種設定ファイルをターゲット向けに書き換える
ちなみに、動作実績があまりない環境だと
(4) Dalvik VMのパフォーマンスチューニング
等も必要になるかもしれませんけど。
で、ここまでで最低限の動作はしますが、これに、
(5) 接続するセンサーやGPS,カメラ等のHALを用意する
まで行わないと、各種デバイスがAndroidのアプリケーションから動かない状態になってしまいます。
ついでにいうと、HAL層のグラフィック向けの処理を描かないと、すべてがCPUで処理されるためパフォーマンスがグンと落ちるという事になったりもします。
真面目に動くAndroid機器を作るとなると、どうしてもこのHALをきちんと実装する必要がでてくるわけです。
というわけで、次回の日本アンドロイドの会 横浜支部 プラットフォーム部(長いから次回からはPF部って呼ぶかな) では、このアーキテクチャ図をもとに、アーキテクチャと、簡単なディレクトリ構成と、隠者がソースコードを追いかけたり、ポーティングするときに使っている方法やツール等を、簡単にお話しできればいいなぁと思っています。
P.S.
いや、まぁ、ポーティング話で実は一番大変そうなのが
(6) 動作検証
なわけですが、みなさんどうしてるんでしょうねぇ。
2010年8月13日金曜日
初投稿
というわけで、今回ははじめましての隠者でございます。
基本的にぐうたらなプログラマーでして、日記というものが続いた記憶がございません。
恥を書くのもなんなので、ブログはもう二度としないと心に誓っていたのですが、ここ最近、Androidコミュニティにおいても、そろそろ情報を取得する側ではなく、発信する側に回らないとイケない頃合いなんじゃなかろうと思いはじめまして。
そのようなわけで、なんとなくブログに挑戦してみることにしました。
この先いつまで続くかわかりませんが、この、のほほん日記。生暖かい目で見守っていただければ幸いです。
基本的にぐうたらなプログラマーでして、日記というものが続いた記憶がございません。
恥を書くのもなんなので、ブログはもう二度としないと心に誓っていたのですが、ここ最近、Androidコミュニティにおいても、そろそろ情報を取得する側ではなく、発信する側に回らないとイケない頃合いなんじゃなかろうと思いはじめまして。
そのようなわけで、なんとなくブログに挑戦してみることにしました。
この先いつまで続くかわかりませんが、この、のほほん日記。生暖かい目で見守っていただければ幸いです。
登録:
投稿 (Atom)