Home > Technical Archive
Technical Archive
TDDは品質担保のためでは無い?
- 2010年2月24日 03:50
- Technical

自分はTDDすらやったことの無い、ある意味時代遅れの開発しかやったことはないのだけど、先のエントリを読むとTDDのテストと単体テストは別物という解釈らしい。
それを聞いたとき、「?」と思ったのが本音だ。テストコードなのに品質とは関係ないのだろうか?と。
TDDに対する私なりの解釈
私はある関数のコードを書くときにJavadocやDoxygenで関数ヘッダをある程度詳しく文章で書く。
そして関数内にコメントの形式でどんなコード(処理)を実装すべきかを書いていく。イメージとしては以下のような感じ。
private List<nnnn> func(int id) {
// xxオブジェクトのインスタンス取得
// XXXDAO経由でidに関連するデータを取得
// 取得したデータからxxxとxxxの条件に合致するものを抽出しリストにする
// リストを生成し返す
}
あとは上記のコメントを実際のコードに置き換えて行けばよい。また自分以外のメンバーに作ってもらうときもこの形式で渡すこともある。
ただこの方式だと、単に文章をコードに置き換えただけでそのコードが正しく動作するものかどうかを検証する手段がない。
なので、上記のようなコメントを先に書く代わりにTDDのテストコードを書いて、その通りに関数本体側を実装する。そうすると、
- この館数ではどういうコード(処理)を書くべきかの情報が残せる(コメントで残すのと同じ)
- 実装したコードが意図した動作をしているか"実行して"評価することができる
という2点が一緒に満たせるというのがTDDというものなのかな、と。
実際に境界値評価だったり網羅性の評価を行う"単体テスト"の場合は、もっとしっかりとテストコードを書く必要があるのだと思うし、その単体テストコードのベースがTDDのテストコードであることは問題無いということだろうか。
TDDと単体テストコードは、誤解を恐れずに言えば前者が"コーディングの補助"、後者が"品質の担保"ということになるのだろうか。
感想
TDDのテストコードが品質担保(これだけでは単体テストとしては不十分で使えない)とすると、開発工数の見積もりにTDDのコーディング工数を入れるのは、TDDに理解の無いSIerなどでよくある開発現場だと説明するのが難しいかもしれないね。
何も言わずに実装工数見積もりの中に含めてしまうか、単体テストコードへ昇華させることを視野に説明して見積もりに乗せるかということになるだろうか。
個人的には、TDDだけならやる意味は少し薄いのかなという気持ちはある。TDDのテストコードを単体テストコードへ昇華させるという前提でやるなら、取り組む価値はあるかと思っている。
- Comments: 1
- TrackBacks: 0
Subversionの次版はGitのように分散リポジトリに対応?
- 2010年2月20日 03:09
- Technical

Subversion 1.7 to enable Git-like features
Subversionの次のメジャーバージョンである1.7について少し触れてある。
ちゃんと文章を読めたわけではないけど、分散リポジトリやオフラインコミットのようなGitを意識した機能が追加されるようだ。
既に使用者が多いSVNに分散の概念が入ってくると、開発スタイルも変化するかもね。新しくMercurialやGitを導入するのは敷居が高くても、Subversuionなら慣れてるからOKという現場も多いだろうし。
今年の夏ごろには1.7が出てくるらしい。
Subversionがタグ付けもコピーっていうのは善し悪しだなと思う。コピーしない本当のタグ付けの機能があってもいいような気はするけど。
- Comments: 0
- TrackBacks: 0
プロジェクトの負のスパイラル
- 2010年2月 1日 00:25
- Technical

ベースラインで成功する プロジェクトマネジメント P24より、"プロジェクトの負のスパイラル"
→無理な計画 |↓ |間に合わない |↓ |徹夜作業(ヘトヘト) |↓ -最低限のことだけやって、あとは謝って許してもらう (成功ではないが失敗でもない→ムリな計画が検証されない)
ありすぎて困る。
よくあるケース
プロジェクトが始まる前、見積もりもしてない提案段階から、いつのまにか価格がお客に提示されている。しかもスケジュールは非常に短い。
開発部隊はそれを見て「この期間と予算ではムリ」と言うのだけど「すでに価格とスケジュールはお客に提示してるから」と言われ、仕方なく十分な人数も揃えられないままプロジェクトを始める。
予想どおり、途中で遅延し始める。この頃から残業と休日出勤が増え始める。
マイルストーン直前になって、マネージャがようやく状況確認をする。そして「この品質ではリリースできない。どうするつもりだ」などと言い始める。
かといって応援要員が追加されるわけでもなく、単に残業が酷くなり、徹夜も出てくる。
マイルストーン当日、十分な成果物がリリースできない。大抵、お客に頭を下げて日程をずらすか、機能を落としてリリース。
最終的な納期はそう簡単に変わらないので、マイルストーンは謝って乗り切っても問題を先送りしたに過ぎない。
重要なリリース日の少し前くらいに、またもやマネージャが状況確認に入る。そしてまた「できてないじゃないか」と大騒ぎになる。
さすがにこれでは、ということで追加要員が投入されるが時既に遅し。要員の立ち上げ期間を考えてないので生産性はあまり上がらないし、投入されたほうは無茶な稼働を強いられる。
この頃になるとマネージャも進捗確認会と称して毎日長時間の会議を設定するが、状況を延々と聞くばかりで何かが解決することは少ない。「対策はどうするんだ」「結局いつできるんだ」くらいしか言われない。
お客に頭を下げつつ、何度か期日を延長して最終リリース。予算はとっくにオーバーしているし、みんな疲れ切っている。
でもまたすぐに納期と予算がどこかで勝手に決まったプロジェクトが立ち上がり...。
謝ればなんとかなる。ただし反省もしない。
...つきあいのある顧客だったり、日本企業同士だと「謝ればどうにかなる」という部分がそれなりにある。あまりにもクリティカルなケースでは無理だけど。
あとはマネージャが経験してきた道にも大きく影響されるような気がする。
マネージャがPGやSEだった時に残業、徹夜当たり前の仕事スタイルでやっていると、一線を離れたマネージャになっても部下に同じ感覚で指示を出してしまい、「休日出勤すればいいよね」「1日12時間としてスケジュール計算すればいいよね」というのが"当たり前"かのように扱われる。
もうマネージャ自身は休日出勤も徹夜もすることがない立場で、そんな無茶な指示を出しても自分の腹は痛まないというのもあるのかもしれないけど。
往々にしてそういう現場はどこにでもあるし、そして何度も繰り返される。
「忙しかったのは仕方ない」「仕事があるだけ有り難いと思え」「次の案件で取り返す」...。
現場の一人一人が自衛するしか無いと思う。
- Comments: 0
- TrackBacks: 0
Androidの各バージョンごとのAPI差分がわかる "Android API Differences Report"
- 2010年1月24日 04:32
- Technical

Androidの公式developerサイトは今まで何度も見ていたつもりだけど、各API Level間での差分を一覧にしているページがあったというのに最近気づいた。
例えば、1.6から2.0(API Level 4から5)でのAPI差分は以下のとおり。
API Differences between 4 and 5
また、2.0と最新2.1との差分は以下のとおり。WallPaper関連のクラスが増えてるのがわかる。
- Comments: 0
- TrackBacks: 0
日本androidの会 福岡支部 勉強会 "beagleboard+android+ブレスト" 参加レポ
- 2010年1月17日 20:53
- Technical

- 1/16(土) 13:00~18:30
- 株式会社Fusicさん(支部長しかじろうさんの会社)の会議室
集まったメンバー
20名くらい。何気に幅広くて濃い
- 本を出してる人(今度はGoの本を書くらしい?)
- ITmediaなどに記事を書いてる人
- 半導体設計をやってる人
- 某メーカーに長年勤めて人脈豊富な人
- gainer(Pepper)を持ち込んでいた人
組み込み系比率が高かった。参加者の半分は超えていたような...。
beagleboardメインの会だったので自然と興味ある人が集まったらこうなったという感じだろうか。
beagleboardにandroidを
ubuntuを使ってSDカードのパーティション切りをするところと、androidソースのmakeを始めるところまではみんなで色んなサイトを参考にしながら。
ただ、androidソースのビルドを始めると数時間かかるので、いちおうmakeは続けつつもeclairのイメージを格納済みのSDから起動させることに。
ubootのコマンドラインをメモしていなくて、調べたりした後ようやく起動。
このイメージはこの間私が自宅で試したときにこちらを参考に作ったものだったので、
- 音が出ない(ALSAが無効)
- USB-LANアダプタ(その場で貸して頂いたApple製)が動かない(デバイスは認識するけどドライバが無い)
- USBマウスがトラックボールとして認識?(マウスカーソルが出ない)←マウスカーソルはパッチを当てないと出ません(コメント頂きました)
という、非常にシンプルな環境。そのため起動してからはキーボードで操作してみるところまで。
それでも、いろいろ試行錯誤したり弄ったりしているうちに時間は押し、続いてブレーンストーミングへ。
ブレーンストーミング
天神・大名WiFi化計画というのがあって、すでに天神・大名のかなりの場所でfonを使ったWifiが使え、今年は天神地下街などでも使えるように準備中のプロジェクトと、
- 天神Wifiのインフラを使って何かしたい
- 天神・大名の街をもっと楽しい場所にしたい
- それにも使えそうな新しいサービス、デバイスができないだろうか
- デバイスはandroidを絡めて何か作りたい(ご当地デバイスになるかも)
というようなポイントで、新しいデバイスやサービスのアイデアを出そう!というもの。
私は以下のようなアイデアを出してみた。
- 街を回遊している人(仕掛け人、GPS付きデバイスを持ってる)を捕まえると何か特典がある
- 街の他の地区の場所などをリアルタイムで中継していく据え置き型のデバイス(他のところで面白いことやってるのを見つけてもらい、人の流れを生み出す)
参加者が多かったからか、たくさんのアイデアが。
みんなが良いね、と思ったいくつかのアイデアについて今後もう少し掘り下げていくことに。
懇親会
会場近くの居酒屋さくらというお店で。
料理もおいしく(牛すじ煮込みが特に)、値段も安くて良いお店。
感想
beagleboard
beagleboardのイメージについては、キーボードでの操作以上の事ができずに少し皆さんをガッカリさせてしまったかも。予想以上に皆さんの食い付きが強くて、皆さんの期待と実際の動きがマッチしてなかったような。
ただ、皆さんの興味が強かったので私があれこれ口を出して進めていくのは面白みが無いなと思ってあえて黙ったところもあります、ごめんなさい。試行錯誤しているほうが皆さんも色々触ったり意見を言ったり参加しやすいし楽しいかと思ったので...。適度にハマってどうにもならなくなったら飽きないうちに次のステップへ、くらいがちょうど良いかと。
でも出来合いのイメージを使うことになるなら、もう少しきちんと調べて仕込んで置いたほうが良かったかなぁ。自分でやったときはeclairが動くならやってみよう!ってだけの目的だったので。ネットワークと音が使えるandroidイメージを用意してネットに繋ぐか動画再生くらいまでデモできてればまた違った展開になったかも。
beagleboard+androidのネタは、ネット上で色んな方がやっているけどそれぞれ微妙なところで手順などが違っていたり、作ったイメージによって動くデバイス、動かないデバイスがあったりするので、参考にするサイトを決めたらあまり他のサイトとゴッチャににならないように手順を進めたほうがトラブルが少ないと思う。この辺りは後でフォローの情報を流すかも。
ブレスト
- ブレストは個人的には、目覚まし時計のアイデアと、自転車に付けるサイコンっぽいデバイス(自転車乗りなので)、他いくつかのアイデアが良かった。もう少し時間を取って、2巡目のアイデア出しができればもう少し練った物が出てきたかも。
懇親会
- 色んな分野に強い人の話が聞けて新鮮。自分の立っている基盤や知識がまだまだ弱いなぁと実感。あとうちの会社は規模が大きいだけで技術やスキルの面では全然知名度無いな(実際無いし)というのも実感。
最後に
また今回も大変楽しい時間を過ごせました。今回がハードウェア寄りだったので次はandroidアプリ開発メインのネタが良かったりするのかな...?いずれにしても、色んな人とお会いできるのでできるだけ参加していきたい。
今回、組み込み系の人もけっこう機会さえあれば集まるんだというのが分かったので、福岡組み込みクラスタっぽいものもできそうな感じ。いろいろ雑談したり情報交換したり、熱い思いをぶつけたり、こだわりを語ったりとかできれば良いなぁ。
他の方の参加レポ(随時追加)
- Comments: 5
- TrackBacks: 0
日本Androidの会 福岡支部 勉強会 "beagleboard+android"(の写真のみ)
- 2010年1月16日 23:51
- Technical

参加レポはまた別途書きます。今日は少し疲れたので写真だけ先に。
最近BeagleBoardを注文した人はことごとく品切れ?によるキャンセルがかかって入手できなかったので、私が所有していたのを今回は提供。
他にも、Gainer互換機(Pepper)を持ち込んだ方なども。
eclairが動作するイメージを EclaironBeagleBoard - android-development-environment - BeagleBoard に eclair をのせる - Project Hosting on Google Code のサイトを参考に作っておいたものを動かしたところ。
最後は天神Wifiなどとも絡めつつ、新しいデバイスやサービスについてブレスト。思ったよりたくさんのアイデアが。
- Comments: 0
- TrackBacks: 0
android(eclair)+beagleboard
- 2009年12月23日 22:58
- Technical

Android-Eclair porting guide to BeagleBoard - Labs.embinux.org wiki
↑を見て、久しぶりにBeagleboardでandroid(eclair)だと思ってrepo syncしてみたのだけど、どうもまだ一部がdonut相当らしく、ubuntu9.10ではビルドできなかった。
まだ試してないけど、↑のほうが本家eclairのツリーにパッチを当てる形のようなので良いかも。
- Comments: 0
- TrackBacks: 0
androidのActivityやServiceは、不安定過ぎると起動させてもらえなくなる?
- 2009年12月21日 00:57
- Technical

まだ調査中ではあるのだけど、そんな動作をするようだ。
例えばandroidのServiceは、常駐させたりして使うこともある。そんなServiceが何らかの原因で例外を吐いて落ちたとき、1度目であればActivityManagerが5000ms以上の間隔を開けた後に再起動してくれる。
WARN/ActivityManager(53): Scheduling restart of crashed service net.swingingblue.testservice/.TestService in 5070ms
でも再起動したあと、さらに例外を吐くと、
WARN/ActivityManager(53): Service crashed 2 times, stopping: ServiceRecord{43c14178 net.swingingblue.testservice/.TestService}
と表示され、"stopping"という状態になる。この状態になるとActivityManagerはServiceを再起動してくれなくなる。
この時、
- ActivityからのstartServce()やbindService()
- AlarmManagerからのIntent発行
でServiceは再び起動するのだけど、それが無い限りServiceは動作しない。
また、60秒の間に2度死ぬようなことがあると、
WARN/ActivityManager(53): Process net.swingingblue.testservice has crashed too many times: killing!
と"crashed too many times"となり、こうなるとAlarmManagerでintent発行によるService起動は
WARN/ActivityManager(53): Unable to launch app net.swingingblue.testservice/10024 for service Intent { act=net.swingingblue.testservice.TestService cmp=net.swingingblue.testservice/.TestService }: process is bad
と"process is bad"として内部で蹴られてしまう。
この状態でも、ActivityからのstartService()やbindService()は有効なのだけど、常駐サービスとしてServiceを使っていて、かつAlarmManagerで自分自身にIntentを飛ばしてるような場合だとエラー時にシステムに救済されるのは最悪1回のみ(60秒間に2度エラー吐くと起動禁止)ということになる。
常駐型のServiceを作ろうと思っている人は気をつけたほうが良いかも。
また、この辺のActivityやServiceの起動管理は、androidのソースの
mydroid/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
を見ると、少しわかると思う。
- Comments: 0
- TrackBacks: 0
android用にbashをビルドしたい
- 2009年12月12日 03:27
- Technical

Androidのフルソースのexternalディレクトリの下に入っている各種オープンソースのソフトウェアのように、bashのソースを展開してAndroid.mkを書けばいいのかと思っていたら予想外に難航。
configureスクリプトを使うソフトはandroidのビルドシステムでビルドできるんだろうか、先に手動でconfigureくらいはしておく必要がありそうな気もするな。
Android.mkも、コンパイル対象のソースファイルを全てAndroid.mkに書いてしまうやりかたと、各ディレクトリのMakefileを使ってmakeするやりかたと二種類あるようだし。
ネットを探すと、ARM用のツールチェインを使ってビルドしておく方法がほとんどだけど、どうせならAndroidのソースをビルドするときに一緒にできたらなぁと思ってるんだけどね...。
- Comments: 0
- TrackBacks: 0
USBで即使える秋月の3軸、加速度センサモジュール
- 2009年11月26日 23:44
- Technical

TDS01V 3Dセンサモジュールキット:doggie's blog:So-netブログ
3Dセンサー(TDS01V)モジュール: センサ一般 秋月電子通商 電子部品 ネット通販
USBで繋いで即使えそうなセンサだな...。3軸センサの無いSmartQ5に付けてAndroidで...ってのも悪くはないかも。
AndroidだとSensorManager?とかにセンサー制御クラスをぶら下げていけば色んなセンサをコントロールできるようになったりするんだろうか...?調べてないので分からないけど。
- Comments: 0
- TrackBacks: 0
androidのeclairブランチはjava6でビルドできるっぽい
- 2009年11月22日 23:46
- Technical

単に私の手元の環境ではエラーが出なかったから、というだけで公式にできるかは不明だけど...。
gitリポジトリから落としてきたeclairブランチをUbuntu9.10とjava6でビルドしてみたら、特にエラーも出ず完了。
openjdkとsunのjava6のどちらともビルドOKだった。
リポジトリ上でeclairブランチの差分を見てみると、cupcakeやdonutでjava6ビルドエラーの要因になっていた@overrideの記述が削除されているようで、java6対応がなされているようだ。
ただ、donutやcupcakeにはバックポートされてないようなので、これらは今までどおりjava5を使う必要があるみたい。
- Comments: 0
- TrackBacks: 0
AndroidとSymbian両対応のSDKをソニエリが公開
- 2009年11月20日 03:57
- Technical

[Web 2.0 Expo]AndroidとSymbian両対応のSDKをSony Ericssonが公開,"Webの作法"で開発:ITpro
いろいろ興味深い物が出てくるなぁ。
今度はSymbianと共通のSDK、しかもHTML/CSS/JavaScriptで開発できるやつだと。PalmPreのアプリみたいな感じなのかな...。
ソニエリのAndroid端末もこのSDKで作られたアプリが載っている?
あと、Androidの場合は本当にネイティブのアプリ(dex/apk)の形式で出力されるんだろうか?すでに公開されてるようなので調べてみたいけど時間が無いのが残念。
- Comments: 0
- TrackBacks: 0
Android2.0,Eclairブランチがgitリポジトリに
- 2009年11月16日 02:26
- Technical

Eclair is now in AOSP - android-platform | Google グループ
Eclairのソースがgitに入って来たようだ。少なくともeclairブランチのタグが切られているので、興味のある人はそちらを追えば良いだろう。
まだ変更点は忙しくて見れていないけど、framework周りについては変更はほとんど無い感じ。おそらく単純にeclairでの機能追加分のソースと、対応デバイスが増えたことによる対応パッチが増えたように見える。
忙しくてまったく情報が追っかけられないのが残念だ。
- Comments: 0
- TrackBacks: 0
Androidの開発をHudsonでビルド管理したい
- 2009年11月10日 08:01
- Technical

まだこれは時間を見つけてチャレンジ中のネタ。
Javaアプリのほうはantのbuild.xmlを書いておくことですぐにHudsonの管理下に置くことができる。あとはC/C++のNativeモジュールのビルドも自動化したい。
あとはJavaアプリをWIndows PCで、NativeモジュールをLinux PCでビルドして、一つのHudson上で管理できないかなぁと思っている。分散ビルド?を使えばできそうな気もするけどまだ試してない...
- Comments: 0
- TrackBacks: 0
SmartQ5でUSB接続でadbを使う方法
- 2009年11月 2日 00:36
- Technical

とりあえず、SmartQ5の新ファームでADB接続する方法。というか単にドライバのインストール方法。
ドライバ自体はAndroid SDKに付いているものでOK。
ただし、標準のandroid_winusb.infファイルにはSmartQ5用のUSBデバイスIDが登録されていないので、そのままではWindowsのドライバウィザードでは「対応するドライバが見つかりません」と言われてしまう。
Windows環境なら、例えばC:\android-sdk-windows\usb_driver\android_winusb.infに以下の行を追加する。
[Google.NTx86] ;SmartQ5 %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_DDDD
[Google.NTamd64] ;SmartQ5 %CompositeAdbInterface% = USB_Install, USB\VID_18D1&PID_DDDD
このあと、SmartQ5の設定メニューから"Usb Setting"->"ADB mode"を選択状態にしてPCに接続し、あとは普通のドライバインストールのやり方でOK。
ドライバインストール後は、コマンドラインからadbを再起動しておくのが良いかも。
adb kill-server adb start-server
ただ、DDMSで見てみても実行中のプロセスが全部リストアップされなかったり、一部参照できない情報があるっぽい。
ただ、Eclipseからの自作アプリの転送と、ブレークポイントを使ったデバッグはできたので、無線LAN環境が無くてもようやくADBでデバッグできる環境が可能になったのは嬉しい。
- Comments: 0
- TrackBacks: 0
SmartQ5の新ファームリリース
- 2009年11月 1日 18:21
- Technical

SmartQ5の新ファームがリリース。サポート掲示板の内容によると以下のとおり。
主な修正点: G2Dハードウェア2Dアクセラレーション機能追加 -現在縦画面で描画のゴミが解消していないため、横画面時のみ対応 ビデオハードウェアデコーダー機能追加 -iPhone/iPod Touch形式の動画の再生、Youtube HQ再生 電源ボタン短押しでサスペンドモード対応 オートスタンバイモード対応 - 40秒でLCD輝度 25% - 50秒でLCDオフ、パワーセーブモード(サスペンドへは自動移行しない) 3.5G EMOBILEドングル対応 - 3G Dialerアプリケーション追加 -対応機種:D02HW USB OTG対応 -USBデバイスストレージとして動作可能 Wi- Fi接続性向上 Google MapのWi-Fi位置検出対応
横画面での描画は確かに速くなった感じ。リスト画面でのスムーズスクロールを見ると分かる。でも待ち受けからメニューを出す時の速度はあんまり変わらない感じもするかな...。
あと動画再生は、今まで再生できてなかった(音声だけ出て映像が出なかった)ファイルもきちんと再生できてた。YouTubeもようやく見られるレベルに。けど、横画面でも時々、2〜3秒に一回しか描画更新されないときもあって、まだ不安定なところがあるみたい。
あと、USB接続によるADBもサポートされているはずなのだけど、PC側のドライバが無い?ので未確認。Android SDKについてるUSBドライバは使えないだろうしなぁ...。USBのベンダID違うし。
- Comments: 0
- TrackBacks: 0
Android開発者はUbuntu9.10にアップデートしないほうがいいかも
- 2009年11月 1日 02:38
- Technical

と言っても、SDKだけを使うアプリ開発者ではなく、フルソースをビルドして開発する人向けのネタ。
まず、フルソースのビルドに必要なJava1.5がアップデート時に削除されてしまう。
Java1.5(Java5)はSunのサポート期限切れになったのでUbunutuでもサポートしない、というのがその理由なんだけど、AndroidのソースをビルドするにはJava5しか使えない(ビルドスクリプトがバージョンチェックしている)のでさてどうしたものか。
ググってみると、9.04のリポジトリを追加してJava5をインストールする方法があった。
deb http://us.archive.ubuntu.com/ubuntu/ jaunty multiverse deb http://us.archive.ubuntu.com/ubuntu/ jaunty-updates multiverse
↑のjauntyリポジトリを再びシステムに追加して、以下のコマンドでJava5をインストール・切り替え。
sudo apt-get update sudo apt-get install sun-java5-jdk sudo update-java-alternatives -s java-1.5.0-sun
これでJava5の問題は解決、気を取り直してcupcakeブランチをビルドしようとすると、
HOST_OS=linux HOST_BUILD_TYPE=release BUILD_ID= ============================================ frameworks/policies/base/PolicyConfig.mk:22: *** No module defined for the given PRODUCT_POLICY (android.policy_phone). 中止.
とビルドエラーが。
これもググってみると、本家フォーラムに以下のトピックが見つかる。
Dependencies on Ubuntu to build android source code - android-platform | Google グループ
どうも、findutilsもしくはbashのバージョンが新しくなったことで引き起こされるエラーらしい。元々はRedHatで既に発生していた事象のようだけど、Ubuntu9.10でも発生するようになったと思われる。
ではdonutブランチはと言うと、
development/emulator/qtools/trace_reader.cpp: In function 'char* ExtractDexPathFromMmap(const char*)': development/emulator/qtools/trace_reader.cpp:1012: error: invalid conversion from 'const char*' to 'char*' development/emulator/qtools/trace_reader.cpp:1015: error: invalid conversion from 'const char*' to 'char*' make: *** [out/host/linux-x86/obj/EXECUTABLES/bb2sym_intermediates/trace_reader.o] エラー 1
こっちもエラー...。
こっちはリポジトリ上のソースの整合性に問題があるのか、Ubuntu9.10の問題か原因は不明。9.04環境で試せればいいんだろうけどもう手元には無いし...。
ということで、Androidのフルソースのビルド環境を作っている人は9.10にしないほうが無難かと。いずれはAndroid側のこの辺の問題も修正されるのかもしれないけど、いつになるかわからないし。
ビルド環境は安定して動いてる状態からあんまり変えるな、ということですね...。
- Comments: 0
- TrackBacks: 0
Android2.0がリリース。変更点多し
- 2009年10月28日 01:45
- Technical

Android 2.0 Platform Highlights | Android Developers
寝る直前にTwitterで知った2.0リリース。
10月末にリリースというのは本当だったんだな...。
ざっと見ると、
- メールでExchangeをサポート
- カメラでデジタルズーム、マクロ、ストロボ、撮影シーン切り替えサポート
- ソフトウェアキーボードでマルチタッチをサポート
- ブラウザでダブルタップでズーム
- ブラウザでHTML5をサポート
そしてフレームワーク系では
Media Framework
Revamped graphics architecture for improved performance that enables better hardware acceleration.
Bluetooth
* Bluetooth 2.1
* New BT profiles: Object Push Profile (OPP) and Phone Book Access Profile (PBAP)
New Framework APIs
Android 2.0 includes several new developer APIs. For an overview of new APIs, see the Android 2.0 version notes.
For a complete report of all API changes, see the API Differences Report.
描画周り?の改善と、ついにBluetooth(OPP/PBAP)が。
これはSDKとフルソースをダウンロードするしかないでしょ。とにもかくにも。
- Comments: 0
- TrackBacks: 0
Androidで自作アプリをプリインストール状態にする
- 2009年10月26日 02:05
- Technical

自分でシステムイメージを作ってデバイスに焼いたり、エミュレータで使いたい人以外にはニーズないし、本当に正しいやり方かどうかも分からないけど、とりあえずメモ。
1. mydroid/packages/app 以下にアプリのソース一式を置き、Android.mkを作る。
実際は、mydroid/packages/app 以下でなくても mydroid/external の下でもどこでも良いはず。むしろ自作アプリならexternalかまた別のディレクトリが良いかも。
Eclipse+ADTでアプリを作るとAndroid.mkが作られないので、同じくmydroid/packages/appにある他のアプリ(Emailあたり)からAndroid.mkをコピーしてきて、LOCAL_PACKAGE_NAMEを変更すれば最低限はOK。
LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PACKAGE_NAME := TestApp include $(BUILD_PACKAGE) # additionally, build unit tests in a separate .apk include $(call all-makefiles-under,$(LOCAL_PATH))
2. mydroid/build/target/product/generic.mkを編集
generic.mkを編集するので、targetがgenericの場合しか有効にならなさそうな気がするけど、以下のような感じでPRODUCT_PACKAGESに追加したい自作アプリ名を追記する。
PRODUCT_PACKAGES := \
AlarmClock \
<省略>
TestApp
3. make
mydroid全体をビルドし、system.imgなどを作る。
4. エミュレータ起動
とりあえずmakeしてできたイメージからエミュレータを起動してみる。私の場合は以下のようなスクリプトを用意して使ってる。
imagedir=~/mydroid_donut/out/target/product/generic kerneldir=~/mydroid_donut/prebuilt/android-arm/kernel skindir=~/mydroid_donut/development/emulator/skins ./emulator \ -sysdir $imagedir/system \ -ramdisk $imagedir/ramdisk.img \ -kernel $kerneldir/kernel-qemu \ -skindir $skindir \ -skin HVGA \ -system $imagedir/system.img \ -data $imagedir/userdata.img \ -sdcard $imagedir/sdcard.img
こうやって起動したAndroidには、最初から自作アプリがインストール済みの状態(ランチャーメニューに出てくる)になっている。他のtargetでもたぶん方法はほぼ一緒かと。
- Comments: 0
- TrackBacks: 0
SmartQ5でA2DPのOn/Offを繰り返すと再生が途切れる?
- 2009年10月20日 01:52
- Technical

なんとなく、不具合票のようなタイトルになってしまった。
SmartQ5で、MediaPlayerクラスを使ってMP3を再生しているときに、AudioManagerのsetBluetoothA2dpOn()でA2DPのOn/Offを繰り返すと、Offにしたときに本体スピーカーから出る音がブツ切れになってしまう。
setBluetoothA2dpOn(true)で、A2DPに流すとちゃんと聞こえるんだよなぁ...。
作ったサンプルアプリの処理が悪いんだろうか。それともsetBluetoothA2dpOn()を再生中に切り替えないほうがいいんだろうか。それともSmartQ5のBluetooth周りの問題なんだろうか。原因が分からない...。
もう少し調べてみるか。
(追記)
MediaPlayer#start()の時にA2DPがOffになってると、A2DPをOnOffしても音が途切れないな。再生開始するときにA2DP側に音声ルートが設定されていると、A2DPのOffで本体出力の音が途切れる。
これはAndroidかSmartQ5版Androidのバグなんかな...?
- Comments: 0
- TrackBacks: 0
androidのC/C++では、wchar_tは4バイト定義
- 2009年10月17日 15:01
- Technical

Oops!!! wchar_t in Android is 4 bytes!! - android-ndk | Google グループ
AndroidのC/C++でwchar_tは使ってはダメ - 組み込みの人。
これは1ヶ月半くらい前に、うちの会社の人も随分ハマってたわ。
けっきょくソースを遡って4バイトだって見つけたみたいだけど。androidでは、wchar_tの代わりに、ICUというライブラリ?が含まれているみたい、件の彼もそういえばそんなことを言ってたな。
ICU Home Page (ICU - International Components for Unicode)
何かこの辺が関係しそうなものを移植するときには気をつけたほうが良さそうね。
- Comments: 0
- TrackBacks: 0
androidでSDカードにログを出力する方法
- 2009年10月 2日 07:44
- Technical

SDカードにログを出力する方法 - Android(アンドロイド)情報-ブリリアントサービス
これは実機で動作確認したりするときには使えるかもね。
あと、
なお、SDK1.6よりSDカード書き込みのパーミッションが必要になりましたが、1.6にアップデートしたGDDPhoneではパーミッションの記述をしなくても書き込みできるようです。
これは知らなかった。変にハマらないように気をつける。
- Comments: 0
- TrackBacks: 0
謎のbroadcast intent
- 2009年9月24日 00:02
- Technical

androidシステムから飛んでくる、broadcast intent。中にはどんな条件で飛んでくるのかよく分からないものもけっこうあったりする。
一覧を見てみると、それぞれ説明は書いてあるのだけどねぇ...
ACTION_AIRPLANE_MODE_CHANGEDくらいなら当然分かるけど、ACTION_CLOSE_SYSTEM_DIALOGSとか説明読んでもどんなシチュエーションなのかがよく分からない。
ACTION_MANAGE_PACKAGE_STORAGEなんかも用途不明...。メモリが少なくなるとパッケージマネージャがどうのこうのって、android端末を使い込んでる人には分かったりするんかな。
- ACTION_MEDIA_EJECT
- ACTION_MEDIA_REMOVED
- ACTION_MEDIA_UNMOUNTED
この3つとか何が違うの?って思う...。
エミュレータ上で確認できる物もあるんだろうけど、intentを見てると実機じゃないと確認できなさそうなのもあるしな...。
趣味のアプリなら知らないintentは無視で良いんだろうけど、仕事で作る物となると、きちんと色んなケースを考慮しないといけないからどっかで検証したいんだけどね。なかなかそこまで手が回らなかったりして大変。
- Comments: 0
- TrackBacks: 0
Flexアプリを始めた雑感
- 2009年9月21日 17:32
- Technical

AIR&Flexアプリを触り中。ちなみにFlashとかActionScriptの経験は無し。
お金かけずに揃う開発環境ということでFlashDevelopを使ってみることに。Flex3SDKとFlashDevelopをダウンロードし、初期設定は無料でFlashの制作環境が整えられる! FlashDevelopとFlex SDK 3のインストール方法(ビデオ付き) | ClockMaker Blogを参考にして設定する。
設定が終わったら、FlashDevelopで"AIR Flex3 Projector"でプロジェクトを作成。mxmlの中にコードを書くのは好きではないので、mx:Script指定で外部にASファイルを作る。
最初はButtonとLabelを置いてボタンを押したらラベルに文字が出るようなサンプルを作ってみる。
ActionScriptはJavaScriptに似てるのかなぁ...。変数や関数の型を名前の後に書くってのがちょっと変わってる。それ以外はあまり癖は無さそう。
UIの見た目も、CSSとかテーマを適用すれば変えられるようなので追々やってみるつもり。
FlashDevelopの補完は確かに便利。自作のクラスの補完まではやってくれないっぽいし、一部補完が働いてくれないところもあるけど、おおむね良い感じ。
とりあえず作りたいのは、あるサイトをスクレイピングしてデータをリスト表示し、ある変更があればGrowlでアラートを出すって感じのやつなので、
- リスト表示
- HTTP通信
- スクレイピング
- データストア(SQLite?)
- Growl
ぐらいがあれば何とか自分用としてなら中身がグダグダでも作れるかな。
リスト表示
まずはリスト表示。DataGridというのを使うらしいので試してみる。データソース(dataProvidor)にはArrayCollection型のObjectの配列を作っておけばリストに表示されるようだ。Object型が連想配列だってのはしばらく気づかずに混乱してた。JavaのObject型のイメージがあったからかな...。
ちょっとBindable指定がよく分かってないけど、Bindable指定したArrayCollectionかArrayじゃないとDataGridのdataProvidorには指定できないっぽいというのは分かった。
HTTP通信
HTTPServiceというのを使う。
var http:HTTPService = new HTTPService();
http.url = "http://www.swingingblue.net/mt/";
http.addEventListener(ResultEvent.RESULT, onResult);
http.resultFormat = "text";
http.send();
結果を受け取るリスナーと、受け取る形式(今回は生HTMLなので"text")を指定してsend()すれば結果が得られる。
もう一つ、send()の時にAsyncTokenを受け取り、addResponder()でリスナーを登録するやり方もあるようだけど、使い分け方とか違いがよく分からず。
スクレイピング
PHPやRubyにはhtmlSQLやらscRUBYt!などいろいろあるようだけど、AcrionScript向けには無さそうな感じ。
対象のサイトが比較的きれいなタグを吐いてるのでもしかするとXHTMLでアクセスできるかもしれないけど...、たぶん正規表現で抜くしかないのかな。
まずはXHTMLで解析を試してみてダメなら正規表現で。
- Comments: 0
- TrackBacks: 0
OSXでのアプリ開発、AIRかMacRubyか...
- 2009年9月20日 14:07
- Technical

- OSXでサイトを監視して何かあればGrowlでアラートを出す、簡単なUI付きアプリを作りたい
- OSXとWindowsPCを行ったり来たりするので両方で動くといいなぁ
- 両方で動くならAIRアプリかな
- AIRでGrowl使えるんだっけ
- AIRはFlexBuilder無いと作りづらいの?買ってまで作るつもりは無いのだけど。
- FlashDevelopで作れるようだけど…。どこまでできるかよく分からない。
- ではOSX専用アプリだと?Cocoaだ。Objective-Cかぁ…。
- そういえばRubyCocoaというのがあったな
- む、SnowLeopardだとXCodeから標準で選択できないのか。いろいろやればできそうだけど、面倒だな。
- あと動作もちょっと不安定?みたいな記述も見かけた。
- MacRuby?
- RubyCocoaの後継を目指してるっぽい。これが後の本流になるのかな?
- チュートリアル(MacRuby Presentation from RubyFest | Ruby on Rails for Newbies)を見る。
- Objective-Cで書くよりかは遙かに直感的だ。
- ついでにiPhoneアプリ作ろうとしたときに理解できなかったInterface Builderの使い方もデモを見てちょっと分かった気がする
- RubyでGrowlは、ruby-growlなどいくつかあるらしいとtwitterで教えてもらった
- FlashDevelopとMacRubyでそれぞれHelloWorld作ってみて感触を見てみるかなぁ
- ↑イマココ
ということで、理想はWindowsでも使えるAIR、そうじゃなかったらMacRubyでやってみようかと思っているところ。
まぁActionScriptもRubyもほとんど書けないのでどっちから始めてもゼロからに近いんだけどね。
- Comments: 0
- TrackBacks: 0
JNIでnativeからJavaをコールバックするには?...JNIは分かりづらい
- 2009年9月20日 01:26
- Technical

Callback mechanism from native to java ?? - android-ndk | Google グループ
Androidに限らず、JNIを使ってnativeの関数を呼び出すのは良いのだけど、逆に非同期でnativeからJavaにコールバックしたいときはどうするの?というケースは意外と多いんじゃないかと思う。
どうも、AttachCurrentThread()とやって、コールバック元のnativeスレッドをDalvikVMに関連づければ良さそうなんだけど...。
native層でさらに別プロセスとプロセス間通信とかやってたりしたらもう少し厄介なのかなぁ...。でもVMのすぐ下にあるJNIのnative層はVMと同じプロセスなはずだから、getVM()か何かでVMへの参照は取れるって事なのかな...。
JNI関係はそこそこニーズがあるものの、ちゃんとまとまった情報があまり無い感じ。AndroidなんかもNDKや独自ハードへの移植とかを考えると、JNIのノウハウはけっこう大事になってきそうだけどね。
- Comments: 0
- TrackBacks: 0
Android 1.6_r1 Release
- 2009年9月17日 01:26
- Technical

って、出勤前にフルソースをrepo syncしただけで全く差分は見てない...というか見る暇が無い。
SDKは会社でダウンロードしてエミュレータだけ立ち上げてみた。ジェスチャー設定アプリが新しく入ってたかな。WVGAのスキンで起動しようとするとなぜかQEMUが落ちて起動しないという現象があってこれも原因を調べるところまで手が回らず。
NDKも近いうちに1.6対応のがでてくるのかなぁ...。
NDKも次版でOpenGL ESがサポートされるとかGoogleグループで見かけたので、ゲームなんかにはいいのかも。
ちょっと仕事が手一杯でAndroidの案件をやっているのに、Androidに触れてないって状況なので、いろいろ調べたりするのは先の話になりそう。たぶんその頃には色んなブログとかで解説が出回ってるかな。
- Comments: 0
- TrackBacks: 0
AWSの電子認証対応ライブラリ ruby-aaws
- 2009年9月13日 23:49
- Technical

自作PHPアプリでAWSを使っていたけど、電子認証が必要になってからまったく対応する気が無くて放置してた。ライブラリ使わずに自分でリクエスト作って投げてるやつだったし。
いろいろ電子認証対応が面倒そうなので、Railsで作り直してみようかと電子認証対応のライブラリを探していると
RailsでAmazonの商品を, 署名認証に対応した上で扱う - make for h @ppy_things;
で、ruby-aawsというのがあることを知る。
とりあえず簡単なサンプル作って動かしてみるところまでやってみた。
しかし普段rubyを書いてないと、そもそも文法で躓くなぁ...。サンプルコード見てもパッとわかんないや。
- Comments: 0
- TrackBacks: 0
AndroidのMadiaPlayerはSurfaceをどうやってNativeに渡しているか?
- 2009年9月 7日 00:18
- Technical

本家フォーラムより。
Surface to Native - Android Developers | Google Groups
SurfaceオブジェクトをNativeで使いたいということのようだ。
Googleのエンジニアからのレスとして
Sorry, there is currently no API in the NDK for working with surfaces.
NDKには今そういうAPIは無いと。まぁそうだろう。
How is the existing applications passing surface to their native libs? Example Media Player or recorder Java Application to Opencore?
ということで、既存のアプリ、MediaPlayerなどはどうやってJavaからSurfaceをNative(OpenCore)に渡しているのか?
これは、実際にソースを読むと分かるのだけど、frameworks/base/media/java/android/madia/MediaPlayer.java のsetDisplay()でMediaPlayer.mSurfaceにSurfaceオブジェクトのインスタンスが格納される。
そしてMediaPlayer.Create()から、
public native void prepare() throws IOException, IllegalStateException;
nativeのprepare()が呼ばれる。
これがJNI層のframeworks/base/media/jni/androidmediaMediaPlayer.cppのandroidmediaMediaPlayer_prepare()に関連づけられていて、SurfaceオブジェクトはNative層に降りてくる。
jobject surface = env->GetObjectField(thiz, fields.surface);
if (surface != NULL) {
const sp<Surface>& native_surface = get_surface(env, surface);
LOGV("prepare: surface=%p (id=%d)",
native_surface.get(), native_surface->ID());
mp->setVideoSurface(native_surface);
}
JNIのGetObjectField()を使ってJavaのSurfaceオブジェクトを取得し、それからget_surface()を使ってNativeのSurfaceオブジェクトにしている。具体的には以下の行。
const sp<Surface>& native_surface = get_surface(env, surface);
さて、このget_surface()は、以下のような感じ。
static sp<Surface> get_surface(JNIEnv* env, jobject clazz)
{
Surface* const p = (Surface*)env->GetIntField(clazz, fields.surface_native);
return sp<Surface>(p);
}
単にキャストしてるだけに見える。その仕組みとは。
そもそも、JavaのSurfaceクラスと、NativeのSurfaceオブジェクトは一心同体で、JavaでSurfaceクラスのインスタンスを作ると、その時点で対応するNativeのSurfaceクラスのインスタンスも作られる仕組みになっている。
JavaのSurfaceのコンストラクタの中でJNIを通してNativeのSurfaceのインスタンスを作り、そのポインタ(アドレス)をSurface.javaのmSurfaceフィールドに保持して関連づけている。あとは、必要に応じてJavaとNativeでそれぞれのSurfaceインスタンスを取りだして操作しているのだ。
JavaのクラスとNativeのクラスとの関連づけの方法は応用が利きそう。Java側はNativeのことを考えずにインスタンスを使うことができ、そして必要な時にNativeで処理させるって具合で。
- Comments: 0
- TrackBacks: 0
ハードのソフトエミュレーションが発展すれば、「組み込み」の敷居は下がるか?
- 2009年9月 7日 00:08
- Technical

今号のInterfaceを読んでいて、ハードウェアエミュレータの将来性について素人なりに思った。
いきなりハードに挑戦しなくても、ある程度のところまではエミュレータ上でドライバを作ったりできるんじゃなかろうか。そうすると、移植までの作業効率が上がったりしないだろうか。
JTAG-ICEやオシロが手元になくても、ソフトエミュレータで似たような情報が取れたり見られたりができれば違うんじゃないかなぁ。実際のハードとはバスの繋がり方とかで細かくは違うのだろうけど。
組み込み=ハードが無いと学習できない、っていう最初のハードルの高さを超えることができるかも。もちろん、目の前でハードが動いたりするほうがインパクトはあるし実感は違う。けどそれはその次の2番目のステップでも良いのかもしれない。
Interface誌の今回の特集だとAtmel互換の専用エミュレータを使っていたけど、例えばARMエミュレートのQEMUをベースに、周辺バス(GPIOとかI2Cとか)のエミュレートができて、バスの状態とかデバッガのような情報をGUIとかで見ることができたら、学習用のシステムとしてはけっこう良さそうな気がする。学習用の評価キットもボード込みだとけっこうな値段がしたりするけど、ソフトなら扱いも楽だし。
Linuxを移植する学習ができたり、ドライバ作成の学習ができたりとか便利じゃないかなぁ。そういう環境がフリーで整えられたら...。
- Comments: 0
- TrackBacks: 0
[android]ServiceとActivityを別プロジェクトにしたいのだけど
- 2009年8月27日 01:16
- Technical

ServiceとActivityは、ほとんどセットのようなものとして扱われるのだけど、実際はServiceを特定のActivity以外にも公開することができる。
そう考えると、eclipseのプロジェクトもServiceとActivityと分けて作ったほうが良いときもあると思う。
この時に、Activity側に必要なのはAIDLファイル。Service側と同じファイルを参照するように設定したほうがいいと思う。
どうも、AIDLをコンパイルしてgenディレクトリ以下にできるclassファイルのバージョンがService側と違うと、Activity実行時にVerify Errorという例外が起きてActivityが動かないっぽい。
もっと簡単な方法としては、Serviceをラップするクラスを作ってActivityはそのクラスを使うようにすればいいんだろうけどね、今回作ってるものではそこまでしなかったけど。
- Comments: 0
- TrackBacks: 0
[android]masterブランチにOpenCORE 2.05がマージ
- 2009年8月22日 08:43
- Technical

Announcing OpenCORE 2.05 release - android-platform | Google グループ
変更箇所は多岐にわたるっぽいけど、ざっと見て目玉になりそうなのは何だろう?
バグフィックスも多いので、Media関係の品質は上がったんだろうね。Donutに向けて。
ただ、Issue 3319 - android - sdp RTSP streaming not work correctly - Project Hosting on Google Codeのバグは直ってないらしいというのは分かった。
- Comments: 0
- TrackBacks: 0
androidのenvsetup.shに隠されてる(?)便利なコマンド
- 2009年8月14日 01:57
- Technical

androidのフルソースをビルドするときに使うenvsetup.sh。
普段はビルドで’mm’するための準備にくらいしか使ってないけれど、実はいろいろなコマンドが拡張されるのだ。
試しに、envsetup.shを読み込んでから’help‘とコマンドすると…
$ source ./envsetup.sh $ help Invoke ". build/envsetup.sh" from your shell to add the following functions to your environment: - croot: Changes directory to the top of the tree. - m: Makes from the top of the tree. - mm: Builds all of the modules in the current directory. - mmm: Builds all of the modules in the supplied directories. - cgrep: Greps on all local C/C++ files. - jgrep: Greps on all local Java files. - resgrep: Greps on all local res/*.xml files. - godir: Go to the directory containing a file. Look at the source to view more functions. The complete list is: add_lunch_combo cgrep check_product check_variant choosecombo chooseproduct choosetype choosevariant croot findmakefile gdbclient get_abs_build_var get_build_var getbugreports getprebuilt gettop godir help isviewserverstarted jgrep lunch m mm mmm pid print_lunch_menu printconfig resgrep runhat runtest runtest_py set_sequence_number set_stuff_for_environment setpaths settitle smoketest startviewserver stopviewserver tapas tracedmdump
m,mmの他に、
- cgrep … C/C++ファイルのみのgrep
- jgrep … Javaファイルのみのgrep
などもあるみたい。
で、オマケはその下にあるコマンドの羅列。
“Look at the source to view more functions.”とあるように、envsetup.shの中身を直接見て動作を確かめるといいのだけど、個人的に特に使える!と思ったのが”gdbclient“コマンド。
Native層のデバッグは、gdbとgdbserverを使ってリモートデバッグをするわけだけど、シンボルの読み込み設定だったりServer側とClient側でそれぞれポートの設定やらプロセスにattachしておいたりだとかデバッグを始めるまでの手順がけっこう多い。
gdbclientコマンドだと、エミュレータでデバッグ対象のアプリプロセスもしくはプロセスを起動しておけば、
- client側のシンボルの読み込み(システム系ライブラリなどほぼ全て)
- target側のgdbserverの起動と、デバッグ対象プロセスへのattach
- target側のadb forwardの設定
- client側gdbの起動
までを1コマンドでやってくれる。
一番便利なのが、attachするプロセス番号を勝手に探してgdbserverでattachしてくれるところだと思う。
このgdbclientコマンド以外にもいろいろ使えそうなコマンドが拡張されるので、envsetup.shのソースは一度眺めてみると良いかも。
- Comments: 0
- TrackBacks: 0
日本発・独自拡張のAndroid? 「OESFの組み込み向け拡張プラットフォーム」
- 2009年8月12日 08:44
- Technical

2008.8.11 Androidの組込みシステム向け拡張プラットフォームのロードマップを発表 - Open Embedded Software Foundation
組み込み向けAndroidが11月に登場----OESFが開発 - ニュース:ITpro
国内で面白い動きが出てきたな。
OESFという団体は初耳だったんだけど、参加企業をみているとハード、ソフトともけっこう加盟しているようだけど、うちの会社は予想通り入ってない...。
うちの会社はこういう企業集合には「必要にならない限り入らない」みたいなところがあるので投資的に参加というのはほとんど無いのだけど。受託メインで仕事してるからというのもあるのかな。
それはそれとして、このOESFの成果物は来年にApacheライセンスで公開されるのだとか。
どれくらいのレベルのものが出てくるかわからないけれど、本家ソースとの差分とか、取り込みとかどうするんでしょうね。
独自バージョンを提供するのはいいけど、ある程度Android本体の動きにも追従してメンテしないと結局本家バグフィックスのパッチ当てとかで使うのが面倒になったりしないのかな。
ともあれ、国内ではおそらく初めてのAndroid絡みでの大きな動きなので、注目していきたいところ。うちの会社も関係すればいいのにな。
- Comments: 0
- TrackBacks: 0
Androidネット上の小ネタ
- 2009年7月29日 01:45
- Technical

最近Androidネタを書いてないので少し。
Android 2.0 "Donut"の開発者プレビューが登場 - マルチタッチは非サポート | 携帯 | マイコミジャーナル
たぶん今回リポジトリに上がってきたコード意外にも、後から追加で入るコードもあるんじゃないかなと思う。大きな機能がまたさらに追加になるかどうかは分からないけど、細かい変更は正式リリースまでに結構入ると予想。まだいろいろ騒ぐ段階ではないのかもね。
HTC Heroにはマルチタッチが入っているけど、今のdonutのスタンスだとマルチタッチは「HTC独自の実装」ということになるのか。HTCがAppleにライセンス料払っていたりするんだろうか。
そして、地味にCDMAサポートは大きいね。
sipdroid - Project Hosting on Google Code
SIPのAndroid上での実装。
ざっとソースコードを見た感じだと、JNIを経由してNative層でsocketを制御しているようだ。Javaのsocketでは何かダメだったんだろうか。
でもJNIの実装部分はもしかすると何か参考になるかも。まだまだ実装例が少ないからね。
Two SurfaceViews in a FrameLayout - Android Developers | Google グループ
2つのSurfaceViewを一つの画面の中で重ね合わせたい、そして一つを透過させたい、という内容だと思うんだけど...。画面表示の効果的に、半透明で何かを重ねて表示するとか画像の上に文字を表示するときに半透明にするとか色々考えられるだけに、もう少し詳しく英語の内容を理解したい。
- Comments: 0
- TrackBacks: 0
AndroidのNative層からbinderを使うときの資料が本家フォーラムに
- 2009年7月20日 17:05
- Technical

devi prasadさんという人が、Native層でbinderを使う時の資料を作って本家フォーラム上でレビューを募集しているようだ。
↓deviさんがframeworkとplatformとマルチポストしているので二つリンクを載せておきます。
- Binder documentation - RFC/peer review - android-framework | Google Groups
- Binder documentation - RFC/peer review - android-platform | Google グループ
確かにここはとっても分かりづらい部分で、私も2週間くらいソースを見ても自分で使えるようになれるまで理解できなかった。何となく、やってることはソースから分かるのだけどね...。
RefBase、IBinderとか、派生したBnxxxxxクラスとかBpxxxxxクラスとかが入り乱れて混乱しますよ...。
いずれは、Native層のコーディングが今より解禁されていったときにGoogleから何らかのドキュメントは出てくると思うのだけど、今のうちから少しでも理解できているといざという時に役立つ可能性は高いかなと思う。
- Comments: 0
- TrackBacks: 0
Android情報まとめ
- 2009年7月19日 03:02
- Technical

自分のはてブの棚卸しも兼ねて、ここでまとめておく。
Native層まわりをずっと調べてきたので、アプリ周りの情報源は少ないし、おそらく有名なサイトも漏らしてる可能性大。
国内コミュニティ
- 日本Androidの会
- 日本Androidの会 | Google グループ
- Android-Embedded-Japan | Google グループ
- 組み込みワーキンググループ
- android-group-japan-fukuoka | Google グループ
- 福岡支部
- Android-SDK-Japan | Google グループ
本家ガイド
本家コミュニティ(Google Group)
- Android Beginners
- Android Developers
- android-framework
- Android Discuss
- android-ndk
- Android Linux Kernel Development
- android-porting
フルソース(Native層開発向け)
- Get source (Android Open Source Project)
- 環境設定と実際のダウンロードのやり方
- android.git.kernel.org
- android's Profile - GitHub
- GitHubのは公式かどうか不明。repoコマンドから使えるのかな。
Androidプロジェクト
- Open | review.source Code Review
- パッチレビューサイト。バグパッチなどをマージされる前に調べたい時に。
- Issues - android - Google Code
- イシュー管理サイト。こちらもバグかどうかを調べたい時に。
ブログ/Wikiなど(国内)
- adakoda
- Taosoftware
- Android(アンドロイド)情報-ブリリアントサービス
- Androidチュートリアルインデックス
- アプリの基礎からサービスの作製などけっこう幅広い内容
- tips : tips/02.プログラミングなど/Java関連/Androidメモ.txt
- フルソースのダウンロード、bashやbusyboxのインストール、Webkitのプラグインなど
- Androidのrepoコマンドでデフォルトではダウンロードされないリポジトリをダウンロードする « 突然消失するかもしれないブログ
- AndroidでJNIを使う方法 - Android(アンドロイド)情報-ブリリアントサービス
- javahコマンドで静的にCのヘッダファイルを生成する方法
- Androidのコンパイル環境を整える方法 - Android(アンドロイド)情報-ブリリアントサービス
- 16000字超の漢字と11000字超のハングルが入った軽量CJKフォント Droid Sans Fallback - しろもじメモランダム
- Androidのフォントの話し。容量節約のために部品を組み合わせて表示している
ブログ/Wikiなど(海外)
- Android JNI Tips
- start [Android Virtual Machine Wiki]
- Android Build System
- Draft版のままだが、Android.mkの書き方など載ってる
- motz diary
- Native層の開発やモジュールの解析
- Board :: anddev.org - Android Development Community | Android Tutorials
- 非公式のフォーラム
- Cupcake Emulator do not mount SD card image - Android Developers | Google グループ
- CupcakeをビルドしたエミュレータでSDを認識しない場合の対処法
x86向けビルド
- Comments: 0
- TrackBacks: 0
[書籍]Google Androidプログラミング入門
いま発売されているAndroid本の中では一番ボリュームが多い。650ページくらいある。
私が買う決め手にしたのは、以下のポイント。他の本にも載ってるかもしれないけど、特に目に付いたので。
- Service周りの記述が多い。ServiceからActivityへのコールバックについても載っていた
- IME開発についても触れられている
- JNIについても書かれている
- 載ってる内容はすでに自力で調査済みだけど、今からNDKとかでJNIやろうとする人のとっかかりには良いかな
- それぞれの項目が十分なページ数を割いている
仕事でAndroidのアプリまわりをやろうとしている人には良いんじゃないかなぁ。入門書からプラスアルファのところまで手を伸ばしたい人には良い情報源になりそう。
あとはGoogle本家の各フォーラム、日本Androidの会のフォーラム、SDKドキュメント、Google検索を活用すると情報はけっこう入ると思う。ただし日本語での情報は入門的な記事以外はまだまだ少ないので積極的に英語にもあたったほうが良いかな。
| Google Androidプログラミング入門 | |
![]() | 江川 崇 アスキー・メディアワークス 2009-07-01 売り上げランキング : 20119 Amazonで詳しく見る by G-Tools |
- Comments: 0
- TrackBacks: 0
日本Androidの会・福岡支部立ち上げの会に行ってきた
- 2009年7月12日 03:03
- Technical

時間が取れたので参加してきました。
40名くらいは集まったんですかねー。私は会場のちょうど真ん中、赤い服着た女性の方の後ろにいました。
なんとすでにドコモのAndroid端末を入手していた強者の方も数名いらっしゃって驚き。あとiPhone率の高さは異常だった気が...。
個人的には、今日は組み込み屋の人はいないだろうなぁ、福岡はWebのデザイナーさんやWebアプリ屋さんのコミュニティが強力だから、今回もその延長線かなと思ってちょっとアウェイな気分だったんですが、組み込み系の方も少ないながら数名いらしたようですね*1。
全体的には予想通り、端末ユーザーの方とWeb系の方が大部分だったようです。
日本Androidの会事務局長のnoritsunaさんによる説明の内容も、ちょうどAndroidってどんなの?という人向けにはマッチしてて良かったと思います。ご本人はグダグダと言いつつ、noritsunaさんの軽快なトークが続いてました。
そして、日本Androidの会・福岡支部の支部長は、しかじろうさんに決定!
早ければ8,9月あたりに勉強会やるかも、とのこと。
どうにも顔見知りの人が一人もいないのと所用で懇親会は参加せずに帰ってきたけど、また機会があれば勉強会に参加するかも。
のりつなさん、きしださん、そして参加の皆さん、お疲れ様でした!。
とりあえず私はNative層のFramework部分を仕事がらみで調査してたりして、このブログでも小ネタをいくつか書いています。逆にアプリを触るほうまで手が回ってないですね。組み込みとかNative層ネタであればこのブログに公開していこうと思っています。ニーズはあまり無いでしょうけど。
以下、箇条書きでメモしてたことをとりあえず。★がついてるのは私のコメント。
====
- Androidの会について
- もっとも活発なワーキンググループは3つ(SDK、勉強会、組み込み)
- ★Androidの会のGoogleGroupを見ててもそんな感じ
- キャリア、メーカー、ユーザー間のサイクル
- BeagleBoardをベースに「オレオレ携帯」を作れる
- ブリリアントサービスさんが弁当箱大のものを作った。WSIMを使って。
- ★ブリリアントサービスさんは、ポーティングやNative層の情報を積極的に公開していて参考になる。JNIを調べてる時に公開されてる資料で助けられた
- DalvikVM上でいろんな言語が動いててJava以外でもアプリが作れたりする。もちろんGoogle的には非公式。
- Ruby、Lisp、Javascript、Pythonなど
- 全てがオープンな環境
- その気になればなんでもできる
- ★携帯端末に限らず、下回りだけ移植して使うとか好きなコンポーネントだけを使うというやり方もできる。実際、AndroidのLinuxカーネルではなくDebianなどにAndroidの差分を移植して、ということをやっている人もいる
- ホーム画面(待ち受け)もアプリなので差し替えができる
- ★HTC HeroやoPhoneはホーム画面を独自のに差し替えてるはず。特にHTC Heroはtouch FLOというHTCお得意のUIが入ってる
- Cupcakeの次バージョンDonutについて
- DalvikVMのブラッシュアップ(バグが多いので品質向上、パフォーマンスも?)
- 全体的な高速化が入るかも
- リリースは秋から冬くらいか?
- 何を入れてくるのか、いつリリースするのかはGoogle次第で情報が無い
- ★先日海外で発売されたHTC HeroはDonutベースという噂があるので、HTC Heroに載っている機能がDonutに入るのでは。Heroに先行で入ってるが、AdobeがFlashエンジンを10月くらいに?公開するはず。
- ★HTCはOHAに加盟してるのでGoogleと協力可能で、かなり先行して新機能の提供を受けてると思われる
- oPhoneはすごい
- AndroidにiPhoneそっくりのUIを乗せた端末。中国のBORQS社製。
- 実はBORQS社はGoogleよりAndroidの技術力は高いかもしれない?
- ★oPhoneについては初耳。こんな端末があったのか。調べてみたらソースも公開されてるようだけど、これ動かしたらiPhoneルックなUIを見れるんだろうか?時間があればやってみたい。
- 開発系の話し
- ContentProvider
- 他のアプリからもデータを参照させることができる。
- どこまでのデータを見せるか権限をかけることができる。
- ★まぁそうだよね。ちょうどここは勉強しようと思ってたのでちょうど良かった
- データはSQLiteに限らず、SDカードにも置ける
- オレオレ携帯を作る
- ハード関係で支援してくれる企業
- パーツの小売り
- 回路設計、基板制作...P板ドットコム
- 筐体作製...MEFS
- 団体...EMS-JP
- ★今日一番聞いてて楽しかったところ。
- ★P板ドットコムは回路設計までやってくれるのは知らなかった。基板制作は知ってた。筐体まで作ってくれる会社あるんだな...。
- ★コストの話しでトータル50万くらいと言っていたけど、市販の携帯電話のハードの原価などを考えると、カスタムメイドでもそこまで高いという印象はない
- ★特に今はBeagleBoardをはじめ安価で高性能な評価用ボードがあるので、色々試すだけならもっと安価にできる。BeagleBoardについてはこのブログでも色々書いてきてる
- AndroidMarket
- UIが使いづらい
- スクリーンショットが載せられない
- 説明分があまり多く書けない
- ユーザーの反応が厳しい(アメリカのMarket)
- 既存アプリと機能が被るアプリを出すと叩かれる空気がある。自分のが高機能であっても。
- ★Market上の空気感の話しはとても興味深かった。iPhoneはどうなんだろう?
- Marketには無審査で登録される
- ある一定レベルの「通報」があるとMarketから消される
- アプリのセキュリティは、ユーザーが自分で身を守るのが前提
- インストール時に要求されるパーミッションを確認して怪しくないかを判断
- ★この辺の「悪意あるアプリ」の防御は、一般ユーザーには敷居が高い感じ。「初心者お断り」。Googleらしいといえばそうなんだけど。
- HT-03Aと同じ端末がGoogle DevPhoneにラインアップされる(2〜3ヶ月後)
- ★現行DevPhoneのG1は同僚が買っていたけど、これはHT-03Aベースが出るなら下手すると買ってしまいそうだな...
- 開発者のうち20%は日本人
- 現時点では国内で有償配布はできない。
- ★有償アプリの話しに入った途端に、食いつく人多数。やはりビジネスチャンス狙ってる人が多いんでしょうか
- ドコモも独自マーケットを開く。こちらはドコモ課金。
- ★キャリア課金は良い方法。国内は携帯でカード決済の文化があまり無いはず。
- ★ドコモのマーケットと本家Marketと分散してしまわないだろうか?ドコモのマーケットは審査が厳しそうな予感。
- *1: 携帯端末の開発経験者は私だけだったっぽいけど
- Comments: 2
- TrackBacks: 0
AndroidでJavaとNativeとのやり取り(JNIは絶対必要?Socketなどは...?)
- 2009年7月 5日 01:12
- Technical

本家フォーラムにちょっと興味深いネタが。
Registering a java method as a callback function - android-ndk | Google Groups
NativeからJavaのメソッドをコールバックで呼びたいんだけど...という質問。
そのレスの一つが
Use a native method to create the pipe and return the read end to the Java side, and that should be it.
JavaとNativeプロセスの間をパイプを使ってやったらどう?ってことらしい。
ああ、Javaってパイプ開けるのね...と思うと同時に、JNI使わなくてもNativeとやりとりしても(Android的に)いいんだろうか?という疑問が沸いた。
こないだリリースされたNDKでもJNI経由が前提っぽいし、今の時点ではオフィシャルにはNativeはJNI経由でということなんだと思う。
ただ、Androidのソースを見ているとJavaからsocketを使ってNativeとやり取りしている場所がある。
mydroid/frameworks/base/services/java/com/android/server/MountListener.java の中で、Nativeプロセスの"vold"に対してsocketを使っている。
おそらく、SDカードのマウント状態を監視している(と思われる)Nativeのvoldプロセスと、UI上やアプリへのintentでSDの抜き差しなどを通知しないといけないJava側のMountServiceとでいろいろやり取りしてるんだと思う。
...で、この方法、使って良いのかな?
もちろん、公式アナウンスが無いから表向きは「ダメ」なんだろうけど。今後SDKやNDKのバージョンアップとともに解禁になったりするのかな。対象デバイス固定の専用アプリなんかでは、どう実装しようが自由と言えば自由なんだろうけどね。
個人的にはframework部分も早くNDKで正式サポートして欲しい。気になる機能がたくさんあるし。
- Comments: 0
- TrackBacks: 0
AndroidでNativeのデバッグが(未だに?)できない件
- 2009年7月 4日 00:34
- Technical

Debug Native JNI code on Android emulator - Android Developers | Google Groups
いまだに本家フォーラムにこの事象の質問が上がってくるということは、まだ直ってないのかなぁ...。
一ヶ月くらい前に同じ現象で悩んだまま放置してたんだけど。
NDKに付いているgdbserverとgdbはcupcakeのバージョンと一緒なのかな?新しくなってたりしないんだろうか。
でも上手くいっている人もいるっぽいし、よく分からん。
- Comments: 0
- TrackBacks: 0
Androidのエミュレータでsystem.imgとかを差し替えるときに気をつけること
- 2009年7月 2日 01:50
- Technical

Androidのエミュレータが使うシステムイメージなどのファイルは、例えばWindows環境だと
C:\android-sdk-windows-1.5_r2\platforms\android-1.5\images
にある、system.img、userdata.img、ramdisk.imgだったりすると思っていたのだけど、AVDを作って一度でもエミュレータを起動すると、
C:\Documents and Settings\[ユーザ名]\.android\avd\[AVD名].avd
の、userdata-qemu.imgやcache.imgのほうを見に行くようになるようだ。
なので、フルソースをビルドして出来上がったsystem.imgを差し替えて使いたい場合は、
- AVDを新規作成する
- emulatorの起動引数でsystem.imgの場所を明示的に指定する(-systemオプションなど)
のどちらかをする必要あり。
…たしかに、よく考えればAVDが違うんだからそれぞれのシステムファイルイメージもAVDごとに分かれて管理されるようになるよね…。
- Comments: 0
- TrackBacks: 0
Anrdoid NDKは、まだまだ...
- 2009年6月28日 23:44
- Technical

AndroidでNativeコードを書くためのNDKがリリースされて、ドキュメントなどをいろいろ読んだりしてみたけれど、まだ現時点では実用レベルでは無いかなぁというところ。
Googleもドキュメントの中でそう書いているし、Nativeコードの正式サポートは次期donutからというのもあるんだろうけど。
ただ、AndroidのNativeコードにおけるGoogleのポリシーというのは少しずつ見えてきた感じがする。
SystemV系IPCの非サポート、というか使用禁止*1がまず目に付くところ。セマフォや共有メモリが使用できないので、Unixからプロセスなどを移植してくるときなどに制約に引っかかるケースがあるかも。
後は今後のAndroidのバージョンでframework部分がどれくらい解放されるのかが気になる。オープンソースなので非公式で使うこともできるだろうけど、Binderは他とのやりとりで使えないと困るだろうし、Surfaceなんかも独自のMediaPlayerやカメラや映像系デバイスと連携させるなら使いたいところだし...。
HTC Heroにはdonutが載っているという噂もあるし、次期SDK/NDKがいつリリースされて、どこまでNative側が使えるようになるかは個人的にも追っていきたい。
- *1: SYSV-IPC.TXTに書かれている
- Comments: 0
- TrackBacks: 0
Android 1.5 NDK, Release 1
- 2009年6月26日 09:17
- Technical

Android 1.5 NDK, Release 1 | Android Developers
NDK出てきましたね。
中身は確認してないけど、ドキュメントとか多少は含まれてるんだろうか?それとも単にフルソースからの抜粋だけなのか...。
あとで確認しよう。
- Comments: 0
- TrackBacks: 0
開発用にAndroidシステムのセキュリティレベルを下げる
- 2009年6月19日 09:10
- Technical

Native層からSurfaceを扱うコードを書いたのだけど、ACCESS_SURFACE_FLINGERの権限が無いと警告が出てAPIが動いてくれない。
Androidはセキュリティ確保のためにシステムリソースへのアクセスに制限がかかっていて、特にACCESS_SURFACE_FLINGERの場合は署名付きアプリにしないといけないようだ。
で、署名付きアプリの作り方はググるといろいろ出てくるのだけど、正直なところ実際の開発中はいちいちこの手順を踏んでると面倒なことこの上ない。
…ということで、システム側のセキュリティレベルを下げて署名無しアプリ(デバッグ用署名)でも動作するように設定してみる。
frameworks/base/core/res/AndroidManifest.xmlにパーミッションごとのセキュリティレベルが書かれている。
ACCESS_SURFACE_FLINGERの場合は、
<!-- Allows an application to use SurfaceFlinger's low level features -->
<permission android:name="android.permission.ACCESS_SURFACE_FLINGER"
android:label="@string/permlab_accessSurfaceFlinger"
android:description="@string/permdesc_accessSurfaceFlinger"
android:protectionLevel="signature" />
とprotectionLevelが”signature”となっていて、署名が必要な事を示している。
これを、”normal”に変更すると署名が無くても、アプリ側のAndroidManifest.xmlにACCESS_SURFACE_FLINGERのパーミションを付けておくことで関連するAPIが動くようになる。(もしかすると、ソースツリー全体のmakeが必要かも)
パーミッションレベルは、リファレンスの<permission> | Android Developersを見てみると、
- normal
- dangerous
- signature
- signatureOrSystem
の4つがあるようだ。詳しい解説まで読んでないけど、dangerousってなんだろうな。
とりあえず開発中はこの設定で進めておいて、リリース用テスト環境などで別途セキュリティ面のテストするほうが開発効率は良さそうな気がする。
(参考)Accounted error when display video frame with surfaceflinger - android-framework | Google グループ
- Comments: 0
- TrackBacks: 0
Androidというプラットフォームに関わる開発者の一体感
- 2009年6月18日 02:02
- Technical

仕事でやらないといけないことがどんどん積み上がっていく...。
技術調査にも時間を割きたいし、今まで調べた内容についてもメンバーに展開できるように資料を作りたいのだけど、設計も進めないといけないしって感じでまぁ時間が足りてない。
技術調査した内容を展開する作業を優先するほうが、周りのメンバーの手戻りが減る分、生産性には寄与しそうではあるな。なんとか時間を作ってメモ書きでも残すかなぁ。
AndrdoidのNative層の解析も進めたい。まだまだ描画周りを掘り起こしていって仕組みを解明していきたいのだけど。
未だにGDBでブレークポイントを設定しようとするとエラーになるので、仕方なくあちこちにログを埋める手法で動作を見ていくしか今のところ無さそう。GDB何でうまく動かないんだろう...。
今までクローズドな組込の仕事が長く続いていたので、オープンな環境のAndroidを触ることができるのはけっこう楽しい。まぁ資料が圧倒的になさ過ぎるのだけど、ネット上にいろいろ情報があったりして、世界の開発者が同じプラットフォームでいろいろ試行錯誤してるっていう、なんとなく同じベクトル向いてるなって感じられるのが良いね。
まぁこれはiPhoneだったり、Linuxだったり、新しいソフトや開発環境が出てきたときに起こることなんだけど、今回は自分がAndroidという波に乗れた感じがしてそれだけでちょっと楽しい。
- Comments: 0
- TrackBacks: 0
AndroidのフルソースからビルドしたエミュレータでSDを認識しない場合
- 2009年6月 9日 01:48
- Technical

タイトルそのままなんだけど、私の環境で発生して解決できたようなのでメモ。
AVDを使わずに、フルソースをビルドして出来上がった各種イメージファイル(out/target/product/generic/system.imgなど)を使ってエミュレータを起動した場合(emulatorのパラメータで-system/-ramdisk/-kernelなどを付けたとき)、-sdcardでSDイメージファイルをちゃんと指定していてもエミュレータがSDイメージを認識せずに「SDが刺さっていない」ことになってしまうことがあるようだ。
mksdcardでイメージを作り直したりしても同じで、しばらくハマっていたところで本家フォーラムで回避策を発見。
Cupcake Emulator do not mount SD card image - Android Developers | Google グループ
実際のバグトラッキングページはこちら↓。
どうもソースをmakeしたときに、out/target/product/generic/system/etc/ の下にvold.confというファイルが作成されないかららしい。
ちなみにvold.confの中身はというと、
## vold configuration file for the emulator/SDK
volume_sdcard {
## This is the direct uevent device path to the SD slot on the device
emu_media_path /devices/platform/goldfish_mmc.0/mmc_host/mmc0
media_type mmc
mount_point /sdcard
ums_path /devices/platform/usb_mass_storage/lun0
}
と、SDのマウントの設定が書かれている。これが無いとそもそもエミュレータがSDを認識しないようになってる模様。
さてvold.confが正しく生成されるために、ここにある差分をマージする。
diff --git a/core/main.mk b/core/main.mk
--- a/core/main.mk
+++ b/core/main.mk
@@ -209,6 +209,14 @@ ifeq (,$(filter %:system/etc/apns-conf.xml, $(PRODUCT_COPY_FILES)))
$(warning implicitly installing apns-conf_sdk.xml)
endif
endif
+# Install a vold.conf file is one's not already being installed.
+ifeq (,$(filter %:system/etc/vold.conf, $(PRODUCT_COPY_FILES)))
+ PRODUCT_COPY_FILES += \
+ development/data/etc/vold.conf:system/etc/vold.conf
+ ifeq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)
+ $(warning implicitly installing vold.conf)
+ endif
+endif
# If we're on an eng or tests build, but not on the sdk, and we have
# a better one, use that instead.
ifneq ($(filter eng tests,$(TARGET_BUILD_VARIANT)),)
パッチ適用後もう一度makeすると、vold.confが生成される。またsystem.imgも更新されるようだ。
これでエミュレータを起動すると、今度はきちんとSDが認識されるようになる。
…これで半日くらい潰した…。
- Comments: 0
- TrackBacks: 0
Android解析進まず
- 2009年6月 8日 02:45
- Technical

週末もいろいろAndroidの解析をやってみたのだけど、ほとんど進んでない。
一番知りたいSurface周りはまったくと言って良いほど。Surafce,ISurface,SurfaceComposer,SurfaceComposerClient,SurfaceFlingerなど関連クラスがいろいろあるのだけど、その関連性もよく分かってないまま。
システム構成には"SurfaceManager"というSurfaceの重なりなどを司っている部分があるはずで、単純なSurfaceオブジェクトをManagerの管理下に置かないといけないのか、置くための手順はあるのかなどなど謎が多い。
ついでにSurfaceを内部で扱ってる感じのVideoViewとCameraクラスを見てるんだけど、これ内部でSurfaceクラスとのフレンドクラス指定とかやってるんだよな...。
Surface::getISurface()を使うためらしいんだけど、フレンドクラス指定とかやられると、第三者が似たような機能のクラスを作るとすると、Surfaceクラスの元ソースにfriendを入れないといけないってことだよなぁ...。うーん、元ソースは汚さずに拡張したいんだけどなぁ。
あとは、エミュレータでのNativeフレームワークのデバッグ方法について。かなり頑張ってみて、少し光が見えてきた感じ。フルソースをビルドするとシンボルが別個に生成されるのでそれをGDBに読ませれば大丈夫そう。
- Comments: 0
- TrackBacks: 0
Androidのコア部分のデバッグは...?
- 2009年6月 6日 23:48
- Technical

AndroidのNativeのシステム、ライブラリなどのデバッグをしたいのだけど、やり方が今ひとつわからない。
gdb使うのは間違いないけど、ソースレベルデバッグするためのシンボルとかはあるんだろうか。フルソースをビルドすると作られたりするのかなぁ...?
やりたいのは、エミュレータにgdbリモート接続して、mediaserverなどの動きを見たいのよね。
自分で作ったNativeモジュールなら、gcc -g でデバッグ情報埋めたものをエミュレータに転送すれば大丈夫そうなんだけど、システムモジュールはどうなんだろうと。
ソースだけ追っていても動作が分かりづらいのでデバッグトレースしたいと思ったのだけど、gdbの経験が無いからかさっぱりやり方がわからない。
- Comments: 0
- TrackBacks: 0
AndroidのNative層でのログ出力
- 2009年6月 5日 02:26
- Technical

まだ調査中だけどとりあえず動いているのでメモ。
(1)LOG出力の際のタグの定義と、Log.hのインクルード
warningが出るのでLOG_TAGはundefしておいたほうが良いはず。
#define LOG_TAG "JNI-Test" #include <utils/Log.h>
ちなみにLog.hの場所は以下。
frameworks/base/include/utils
(2)Android.mkにlibutilsとlibcutilsをリンク対象に含める
これを含めないとLOGV()でログが出力されなかったり、LOGD()やLOGI()を使おうとするとビルドエラーになったりする。
ちなみにEnabling LOGD messages in Webkit - Android Developers | Google グループでのやり取りを参考にした。
LOCAL_SHARED_LIBRARIES:= \
libutils\
libcutils
(3)LOGD()やLOGI()などをコードに埋め込む
GDBでデバッグが面倒な時もあるのでログは重要だと思う。LogCatで手軽に見ることができるので。
- Comments: 0
- TrackBacks: 0
Androidのソースツリー内にあるJNIのサンプルソース
- 2009年6月 4日 23:13
- Technical

AndroidでJNIを使うサンプルがソースの
development/pdk/ndk/samples/samplejni
以下にあるのを発見。
NDKというのが、"Android Native Development Kit"といってShared libraryを作るための一式らしい。samplejniサンプルは、.soを含んだ.apkを作るところまでのサンプルになっているようなので、アプリパッケージにNativeのライブラリモジュールも含めたい場合には参考になるかも。
あと、javahを使ってヘッダファイルを生成せずに、JNI_OnLoad()から動的にJNIに関数を登録する方法のサンプルにもなるかな。
ただ、まだNative層のライブラリのドキュメントが整備されていない(?)*1ので、ほかのソースを見ながら手探りでやっていくしかないんだけどね...。
- *1: なんだかdoxygenのconfigが入ってるのでdoxygenで生成できたりするんだろうか
- Comments: 0
- TrackBacks: 0
Anrdoidのエミュレータ起動中にSDをマウント・アンマウントする
- 2009年5月31日 12:10
- Technical

エミュレータ起動時にSDカードイメージを指定する例はたくさん見かけたけど、起動後に動的にやるのはあまり見かけなかったのでメモ。
SDからファイルを読むようなアプリで突然SDを抜かれたり、差されたりしたときの挙動を確認したいときに。
- (1)emuratorコマンドでエミュレータを起動する(SDイメージ有りのAVDを使う)
- (2)"adb shell"コマンドでエミュレータに接続
- (3)"sdutil unmount /sdcard" でSDが抜かれる
- (4)"sdutil mount /sdcard"でSDが差される
- Comments: 0
- TrackBacks: 0
x86で動くAndroidのLiveCD"live-android"
- 2009年5月29日 04:57
- Technical

Android本家フォーラムを眺めていたときに見つけたもの。
LiveCD形式のためPCにインストールしなくてもAndroidを動かしてみることができる。
VirtualBoxでブートさせてみたところ、時々Androidのエラーが表示されるけれどキーボードでフォーカスを移動することで操作できる。一部起動しないアプリがあった(メーラーとか)。
キー操作は以下。
- カーソルキー:フォーカス移動
- Enterキー:決定
- ESCキー:一つ前の画面に戻る
使い方を読むと、コンソール画面にも切り替えられるようなので、多少の解析やカスタマイズもできるかもしれない。
まだバージョンが0.1なので、今後ポインティングデバイス対応とか入ると面白いことになるかも。
- Comments: 0
- TrackBacks: 0
64bit版Javaはスワップすると異常に遅くなる?
- 2009年5月27日 23:02
- Technical

Androidのビルドがメモリ不足でスワップしすぎで終わらず - きままな日記帳
と、64bit版UbuntuでAndroidのソースビルドが終わらない件、32bit版Ubuntuをインストールしなおして試したみたらあっさりとビルドが終わった。
64bit版の時は、javaプロセスがメモリを90%以上掴んだままずっとスワップしてて終わらなかったので、64bit版javaが物理メモリを食い潰したときのスワップで異常に遅くなるんだろうと結論。メモリが十分にあったら64bitでも快適に動いたかもしれないし、そこは分からないけど。
DDR1のメモリを1GB×2枚にしようかと値段を見たら、DDR2の2倍くらいの値段なのね...。さすがに古いマシンをそこまでして延命するつもりもないし、32bit版Ubuntuで普通にビルドできるようになったので、とりあえず現状の環境で行くつもり。
- Comments: 0
- TrackBacks: 0
Androidのx86向けでビルドエラー
- 2009年5月21日 01:22
- Technical

ここのところAndroidづいてるな…。
今日はx86用のビルドに挑戦。
第1回 話題の携帯向けOS「Android」をx86パソコンで動かしてみよう:ITproを参考にしてみたのだけど、エラーが出てビルドが通らない。
Copy: out/target/product/eee_701/installer/root/system/bin/netcfg Copying installer base files... Copy: out/target/product/eee_701/obj/lib/libdiskconfig.so -> out/target/product/eee_701/installer/root/system/lib/libdiskconfig.so Copy: -> dirname: オペランドがありません 詳しくは `dirname --help' を実行して下さい。
cupcakeだし、環境はそんなに変わらないはずなんだけどな。
本家フォーラムを覗いてみたら、About make installer_img command error for x86 - android-porting というスレッドで修正パッチを発見。
external/e2fsprogs/Android.mk: --- a/Android.mk +++ b/Android.mk @@ -1,3 +1,3 @@ ifneq ($(TARGET_SIMULATOR),true) -# include $(call all-subdir-makefiles) + include $(call all-subdir-makefiles) endif
この修正でビルド中。とりあえずさっきのエラーは無くなったっぽい。まだビルドが終わりそうにないので、このまま明日の朝まで放置。
(追記) 今度はGoogle map系の何かでエラーになってた。あとで調べる。
Notice file: system/extras/timeinfo/NOTICE -- out/target/product/eee_701/obj/NOTICE_FILES/src//system/xbin/timeinfo.txt Install: out/target/product/eee_701/system/xbin/timeinfo make: *** `out/target/product/eee_701/system/etc/permissions/com.google.android.maps.xml' に必要なターゲット `vendor/google/frameworks/maps/com.google.android.maps.xml' を make す るルールがありません. 中止.
(追記) com.google.android.maps.xmlのエラーは、noruletomaketarget - patch-hosting-for-android-x86-supportに回避方法が載っていた。
- Comments: 0
- TrackBacks: 0
Android.mkのドキュメント
- 2009年5月20日 01:23
- Technical

AndroidでJNIを使う方法 - Android(アンドロイド)情報-ブリリアントサービス
このサイトを元に、JNIの実験をしていたのだけど、AndroidではMakefileの代わりにAndroid.mkというファイルを書くようだ。
よくあるMakefileと書式が少し違うようだけど、ドキュメントが無いかなと思っていたらようやく見つけた。
ドキュメントを見ながらどう書けば良いのか解析していこう。
- Comments: 0
- TrackBacks: 0
androidの起動中のプロセス一覧を見てみた
- 2009年5月17日 21:11
- Technical

Androidを少し調査中。
コマンドラインからエミュレータ起動後、別のコマンドラインから
adb shell
とやれば、エミュレータのシェルにリモート接続できる。
とりあえず、エミュレータが起動した時の内部プロセス一覧を見てみた。思ったより少ないな…。エミュレータだからかなぁ。
ハードウェアを叩くような機能も、アプリのプロセスからNativeライブラリ経由ってことだからか?Nativeライブラリからプロセスを生成したりとかそういうことは無いのかな?
まぁ、JNIとどう整合性持たせるのかよく分かってないけど、何かハードウェアからデータを受け取るところと、アプリからJNI経由で呼ばれるread()みたいなものとレイヤを分けたりはしないんだろうか。
androidもそうだし、Linuxでのそういうハードを叩くプログラミングの知識が無いからなぁ。例えばビデオキャプチャーカードが刺さっていたとして、キャプチャデータを認識されたデバイスファイル経由でどんどん読んでいくようなイメージでいいんだろうか。
# ps ps USER PID PPID VSIZE RSS WCHAN PC NAME root 1 0 280 188 c008de04 0000c74c S /init root 2 0 0 0 c004b334 00000000 S kthreadd root 3 2 0 0 c003cf68 00000000 S ksoftirqd/0 root 4 2 0 0 c00486b8 00000000 S events/0 root 5 2 0 0 c00486b8 00000000 S khelper root 10 2 0 0 c00486b8 00000000 S suspend root 42 2 0 0 c00486b8 00000000 S kblockd/0 root 45 2 0 0 c00486b8 00000000 S cqueue root 47 2 0 0 c016f13c 00000000 S kseriod root 51 2 0 0 c00486b8 00000000 S kmmcd root 95 2 0 0 c0065c7c 00000000 S pdflush root 96 2 0 0 c0065c7c 00000000 S pdflush root 97 2 0 0 c006990c 00000000 S kswapd0 root 99 2 0 0 c00486b8 00000000 S aio/0 root 267 2 0 0 c016c884 00000000 S mtdblockd root 302 2 0 0 c00486b8 00000000 S rpciod/0 root 536 1 740 312 c0141bb0 afe0c1bc S /system/bin/sh system 537 1 808 264 c01654b4 afe0c45c S /system/bin/servicemanager root 538 1 836 364 c008e3f4 afe0c584 S /system/bin/vold root 539 1 668 264 c0192c20 afe0cdec S /system/bin/debuggerd radio 540 1 5392 684 ffffffff afe0cacc S /system/bin/rild root 541 1 72416 20856 c008e3f4 afe0c584 S zygote media 542 1 17720 3528 ffffffff afe0c45c S /system/bin/mediaserver root 543 1 800 300 c01f3b04 afe0c1bc S /system/bin/installd root 546 1 840 356 c00ae7b0 afe0d1dc S /system/bin/qemud root 548 1 3336 156 ffffffff 0000e8f4 R /sbin/adbd root 567 548 740 324 c003aa1c afe0d08c S /system/bin/sh root 568 567 680 332 c016674c afe0c1bc S logcat system 569 541 199668 25440 ffffffff afe0c45c S system_server radio 609 541 105624 17316 ffffffff afe0d3e4 S com.android.phone app_3 612 541 100124 18432 ffffffff afe0d3e4 S android.process.acore app_0 636 541 98212 14144 ffffffff afe0d3e4 S com.google.android.apps.maps app_5 640 541 95372 13572 ffffffff afe0d3e4 S android.process.media app_1 659 541 94276 12708 ffffffff afe0d3e4 S com.android.alarmclock app_16 669 541 95520 13236 ffffffff afe0d3e4 S com.android.mms app_3 681 541 97344 13000 ffffffff afe0d3e4 S com.android.inputmethod.latin app_17 699 541 97004 14432 ffffffff afe0d3e4 S com.android.development app_15 707 541 104260 14808 ffffffff afe0d3e4 S com.android.term app_15 714 707 740 328 c0141bb0 afe0c1bc S /system/bin/sh root 719 548 740 328 c003aa1c afe0d08c S /system/bin/sh root 721 719 884 336 00000000 afe0c1bc R ps #
- Comments: 0
- TrackBacks: 0
ubuntuでeclipseはapt経由でインストールしない
- 2009年5月16日 19:45
- Technical

apt経由で入れると、古いバージョン3.2がインストールされるのね。
eclipse本家サイトからtarを落としてきてホームディレクトリに解凍して使うのが一番手っ取り早い。
androidのプラグイン(ADT)がインストールでエラーになるからおかしいな...と思っていたら、バージョンが古かったという話。
- Comments: 0
- TrackBacks: 0
会社ネットワークでgitが使えず苦戦中
- 2009年5月12日 02:46
- Technical

会社PCのUbuntu on VirtualBoxにAndroidのソース一式をダウンロードしようとしているのだけど、会社のHTTPプロキシに引っかかってgitを使ってうまくダウンロードできずに苦戦中。
gitをHTTP Proxy経由で利用したい場合の対処法 - RX-7乗りの適当な日々
基本的には、上のブログの記事を参考にさせてもらったのだけど、プロキシにポート9418が開いてないからなのか、Androidのrepo initの際に途中でエラーになる。gitのブランチ情報までは取得できる時があるので、設定は大きく間違っていないと思うのだけどね。
うーん、ちょっと困ったな。
- Comments: 0
- TrackBacks: 0
android 1.5のソースのビルドが失敗する場合の回避策
- 2009年4月30日 14:03
- Technical

ちょうど公式のビルドガイドGet source (Android Open Source Project)を見ながら、VirtualBox上のUbuntu9.04でやってみたのだけど、ビルド途中でエラーになる…。
これは正式リリースされたばかりのv1.5で。
external/qemu/sockets.c: In function 'sock_address_init_resolve': external/qemu/sockets.c:637: error: 'EAI_NODATA' undeclared (first use in this function) external/qemu/sockets.c:637: error: (Each undeclared identifier is reported only once external/qemu/sockets.c:637: error: for each function it appears in.) make: *** [out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/sockets.o] エラー 1
正式リリースのcupcakeブランチでもエラーになるのでおかしい…と悩んでいたら、ちょうど昨日の日付でフォーラムに書き込みが。
android 1.5 build failure .. - android-platform | Google グループ
該当部分のコメントアウトで回避…みたいな話しになってる中、一番きちんとした解決法は以下のように修正することのようだ。
+#if defined(EAI_NODATA) && EAI_NODATA != EAI_NONAME
case EAI_NODATA:
+#endif
case EAI_NONAME:
err = ENOENT;
break;
android 1.5 build failure .. - android-platform | Google グループ
【そのほかビルド関係の参考資料】
Androidのコンパイル環境を整える方法 - Android情報-ブリリアントサービス
- Comments: 0
- TrackBacks: 0
androidでJNIを使うケースを調べてみた
- 2009年4月30日 13:49
- Technical

プライベート方面と、仕事方面でもandroidに絡むかもしれないことになったので、軽く調査。
androidはSDKのエミュレータを動かしたことしかないので、レイヤ構成とか開発のやり方とかを調査中。
大まかな感じをつかむには以下の記事あたりが良いかも。
[Think IT] 第1回:Androidと組み込み開発 (1/3)
DalvikVM上でのJavaによるアプリの作り方はあちこちに書かれているので良いとしても、今回一番知りたいのは、
- いろんなハードへの移植(ARMベース)
- 基本的にはハードに乗っているチップに対応したドライバを探すか書けば良いはず。
- androidが標準でサポートしていないデバイスのサポート方法
- ドライバはもちろん、ミドル層、そしてVM上のアプリからどうやって制御するのか?
ざっと調べた感じだと、新規のデバイスはアプリからはJNI経由でnativeで作ったライブラリを呼び出し、ライブラリからLinuxのデバイスファイルを叩く(ドライバは別途)という感じでいいんだろうか。
ただどこかで読んだけどアプリからのJNI経由での制御は、まだ非公式の制御ルートという噂も。
しかも、Androidアプリで高速描画チューニングをするコツ(1/3)-@ITを読むと、JNI経由だとnativeを呼び出す際のオーバーヘッドが馬鹿にならないとも。大量のデータ転送系のデバイスとか大丈夫なんだろうか...?
AndroidでJNIを使う方法 - Android情報-ブリリアントサービス
Androidの実機への移植の実際 Androidの実機への移植の実際
手を付け始めたばかりなので、まだまだ調べることがたくさん。
Linuxでのモジュール・ドライバの開発経験が無いのでその辺も知っておかないといけなさそうな気もするな...。
- Comments: 2
- TrackBacks: 0
Ubuntu9.04アップグレード...失敗
- 2009年4月25日 14:27
- Technical

VirtualBox上の8.10からアップグレードしたら、ログイン画面が表示されなくなってしまった。
xubuntuからアップグレードしたのがまずかったのかなぁ...。
9.04にアップグレードするときに、パッケージのダウンロードが途中で止まってしまったように見えたので、キャンセルしてやり直したりしたのがダメだったのかも。あまり変な操作をするものじゃないね。
ちなみに会社PCで同じくVirtualBoxで動かしているほうは問題なくアップグレードできてるみたいなので、単に私の操作がまずかったか、ネットワーク環境がおかしかったかってあたりかも。
中身を消して再インストールをしたくないので、なんとか修復しようとしているけど、前途は長そう。
(追記)
Alt+F2でgdmから別コンソールに入って、そこからapt-get dist-upgradeをし直したら直ったっぽい。
- Comments: 0
- TrackBacks: 0
CakePHPで名前付きパラメータを受け取る
- 2009年4月 9日 01:04
- Technical

CakePHPでGETでパラメータを渡してActionを呼び出す場合、名前付きかそうでないかのパラメータでControllerでのパラメータの受け取り方法が違う。
まぁ公式サイトのドキュメントにも書いてあるのだけどね。
名前付きのパラメータ :: Routesの設定 :: 環境設定 :: CakePHPによる開発 :: マニュアル :: 1.2 Collection :: The Cookbook
パラメータ名を付けない場合はコントローラの関数の引数に順にセットされるけど、パラメータ付きの場合は関数の引数ではなく、$this->passedArgs[”]を使え、と。
URL: /donations/view/recent/2001
Mapping: DonationsController->view('recent', '2001');
URL: /contents/view/chapter:models/section:associations
Mapping: ContentsController->view();
$this->passedArgs['chapter'] = 'models';
$this->passedArgs['section'] = 'associations';
これに気づかずに、しばらく値が受け取れなくて悩んでしまった。普通にHTMLヘルパーで
$html->link("リンク", array("action"=>"detail", "asin"=>$item['ASIN']));
なんてやると、普通に名前付きパラメータになるしね。
- Comments: 0
- TrackBacks: 0
ffmpegをMinGWでビルド(Windowsで使えるdll,libも作る)
- 2009年3月28日 23:09
- Technical

Windows環境でffmpegのAPIをC言語から叩きたい。ということで、ffmpegをソースからビルドすることにした。
以下のサイトを参考にしながら、手始めに外部のライブラリを取り込まずに最小構成でのビルドで。
FFmpeg APIで、さまざまな動画を操る - 前編:CodeZine
FFmpeg APIで、さまざまな動画を操る - 前編:CodeZine を Windows(Mingw/MSYS) で試してみた - A More Beautiful day
MinGWのインストール
Automated MinGW Installerを使うと楽かも。 Automated MinGW Installer
ただし、私が使ったときはインストールオプションで"MinGW make"を選択するとダウンロードに失敗した。インストーラが感知しているバージョンと、実際にサーバにあるバージョンが異なるようだ。
インストーラ起動後、インストーラを起動させたまま、同じフォルダに作られるmingw.iniの内容を書き換えると上手くインストールできる。
[current]
make=mingw32-make-3.81-20080326-2.tar.gz|727
↓
make=mingw32-make-3.81-20080326-3.tar.gz|727
w32apiのインストール
標準でインストールされたw32apiはバージョンが古く、このままではffmepgのconfigureで弾かれる(3.13以上が必要)ので、w32apiの最新版を入れる。MinGWをインストールしたディレクトリに上書き解凍すればOK。
w32api-3.13-mingw32-dev.tar.gz
gcc4.2.1のインストール
gcc3.4.5でもビルドは通るし、exeも生成されるのだけど、いざ実行させてみると
Compiler did not align stack variables. Libavcodec has been miscompiled and may be very slow or crash. This is not a bug in libavcodec, but in the compiler. You may try recompiling using gcc >= 4.2. Do not report crashes to FFmpeg developers.
とメッセージが出る。これでも特に動作はするのだけど、この警告メッセージが気になるのでgcc4.2.1を入れる。
これを入れると、gcc4.2.1は"gcc-sjlj"という名前で入るので、
- gccコマンド = 3.4.5
- gcc-sjljコマンド = 4.2.1
と使い分けができる。
ffmpegのソースを取得
今回は2009-03-27のnightlyを使った。リビジョンはr18200。これを適当なディレクトリに解凍する。
configureの前準備
configureを行う前に、スクリプトの中で使われているprコマンドを入れる必要がある。 参考にしたサイトはこちら↓。coreutilsを入れる。
猫科研究所(felid labo) - 今更MinGW(6)
configure
ffmpegのソースディレクトリに移動して、configure。まずは、
./configure --helpとして、どのオプションが指定可能かを先に見ておいたほうがよい。 ネットで検索して出てくる記事(1〜2年前くらい)でのconfigureのオプションは、最近のffmpegのバージョンでは使えなくなっていることが多いので。 gcc4.2.1を使うようにするのと、最低限必要らしい"--enable-memalign-hack"、ライブラリを生成するための"--enable-shared"を付けてconfigure。
./configure --cc=gcc-sjlj --enable-memalign-hack --enable-shared
ビルド
おそらくconfigureはエラー無く終了するはずなので、make。 make完了後には、ffmpeg.exeと、libavformat、libavcodec、libswscale、libavutil、libavdeviceのそれぞれのフォルダに、.defと.dllファイルが生成されるはず。 ビルドして生成されたffmpegのバージョンは以下の通りFFmpeg version SVN-r18200-snapshot, Copyright (c) 2000-2009 Fabrice Bellard, et al. configuration: --enable-shared --enable-memalign-hack --cc=gcc-sjlj libavutil 50. 2. 0 / 50. 2. 0 libavcodec 52.22. 3 / 52.22. 3 libavformat 52.32. 0 / 52.32. 0 libavdevice 52. 1. 0 / 52. 1. 0 libswscale 0. 7. 1 / 0. 7. 1 built on Mar 28 2009 02:39:23, gcc: 4.2.1-sjlj (mingw32-2)
補足
ただしここまでの手順だと、.def,.dllはできても.libが生成されない。
.defと.dllだと、プログラムから使うときにGetProcAddress()しなければならず、少し面倒。なので.libにしてリンクしてしまったほうが楽。
.libも作られるようにするには、VisualStudio2008などをインストールしたときに入る、libコマンドへのパスが通っている必要がある。
なのでVIsualStudio向けの環境変数設定を行うために、vcvarsall.batを実行しそのコマンドラインからmsysを起動してffmpegのビルドを行えばOK。
ffmpegのmake中に
Microsoft (R) Library Manager Version 9.00.30729.01 Copyright (C) Microsoft Corporation. All rights reserved. ライブラリ libavdevice/avdevice-52.lib とオブジェクト libavdevice/avdevice-52.exp を作成中
と表示されていたらOK。
- Comments: 0
- TrackBacks: 1
FlexでMXMLファイルからコード部分を分離(今さらだけど)
- 2009年3月21日 22:57
- Technical

すでにAIRやFlexをやっている人からすれば、何を今さらなネタなんだろうけど、個人的にずっと疑問に思ってきたことが実はちゃんとできたんだねってことで。
MXML ファイルからコードを分離する方法 - orz blog
まだFlexがベータだったころ、ネットで見ていたサンプルコードはことごとく、ロジックコードはXMLのCDATAの中に埋め込んでたものばかりだった気がする。
それを見て「こんな書きづらいことさせるのか」と思ったのがずっと頭の中にあって、AIR/Flexを触ることは無かったんだけど、実はちゃんと別ファイルに切り出して書けるのね。
思うところがあって今日少しFlexを触っていたときに気づいた。
↓のような書き方もあるみたい。他との違いはよく分かっていないけど...。
<mx:Script source="xxxxxxxxx.as"/>
ちなみに今日使ったツールはAIR GEAR。ちょっとしたアプリならHTMLベースもFlexベースも作れて良い感じ。AIRパッケージ化まで簡単に行えた。ただXMLエディタはEclipse標準のかもしれないけど、ちょっと使いづらいかな...。
フリーのEclipse用AIRプラグイン「AIR GEAR 1.0.0」リリース、WYSIWYGでAIR開発OK!:CodeZine
- Comments: 0
- TrackBacks: 0
[学習]大きなデータをViewにそのまま引き渡して良いんだろうか?
- 2009年3月10日 00:08
- Technical

CakePHPでWebアプリを作りながら思った。
Viewに大きなデータを引き回すのは正しいんだろうか?
例えば、Amazon ECSで検索結果をXMLで取得する。10件分。itemsearchで"Medium"とか"Large"を指定するとかなりの情報が返ってくるのだけど、これをControllerで受け取ってそのままViewにディスパッチしてしまっても良いのかどうか。
けっこう大きなデータがViewに渡ってしまうけど、フレームワークの動作が重くなったりしないんだろうかとちょっと気にかかる。
本当はControllerで受けて、Viewに渡す前にある程度必要なデータを選んでViewに渡すほうがよかったりするのかな...。Webアプリではそこまで気にしなくてもいいのかな。Amazon ECSから返ってくるくらいのXMLなら全く無問題とか...?
なんだかあまりこの辺のデータの大きさに言及した記事とか見たことないなと思って。
でも実際、PHPのmemory_limitが8Mだったりすると、AmazonのResponse XMLを格納しようとしてメモリ不足のFatal Errorが発生したりするから、やっぱりよろしくないんだろうな。
- Comments: 0
- TrackBacks: 0
CakePHPのHttpSocketをプロキシ対応にする
- 2009年3月 8日 02:39
- Technical

開発環境がプロキシの内側で、HttpSocketがそのまま使えずに困ったので。
素人がかなりアドホックに修正したので、かなり乱暴な修正かもしれないけどとりあえず晒しておく。
使うときは、
$socket = new HttpSocket(
aa( 'proxy',
aa('host', '127.0.0.1',
'port', 8123)
)
);
のようにすると良いかと。
======
$ diff -u http_socket_org.php http_socket.php
--- http_socket_org.php 2008-12-19 11:16:01.000000000 +0900
+++ http_socket.php 2009-03-08 01:25:01.250000000 +0900
@@ -114,6 +114,10 @@
'protocol' => 'tcp',
'port' => 80,
'timeout' => 30,
+ 'proxy' => array(
+ 'host' => null,
+ 'port' => null
+ ),
'request' => array(
'uri' => array(
'scheme' => 'http',
@@ -191,6 +195,14 @@
if (isset($host)) {
$this->config['host'] = $host;
}
+
+ // for proxy use.
+ if (!empty($this->config['proxy']['host']) && !empty($this->config['proxy']['port']))
+ {
+ $this->config['host'] = $this->config['proxy']['host'];
+ $this->config['port'] = $this->config['proxy']['port'];
+ }
+
$cookies = null;
if (is_array($this->request['header'])) {
@@ -728,7 +740,14 @@
$request['uri'] = $this->parseUri($request['uri']);
$request = array_merge(array('method' => 'GET'), $request);
- $request['uri'] = $this->buildUri($request['uri'], '/%path?%query');
+
+ // if proxy use. switch buildUri() argument.
+ if (isset($this->config['proxy']['host']) && isset($this->config['proxy']['port'])) {
+ $request['uri'] = $this->buildUri($request['uri']);
+ }
+ else {
+ $request['uri'] = $this->buildUri($request['uri'], '/%path?%query');
+ }
if (!$this->quirksMode && $request['uri'] === '*' && !in_array($request['method'], $asteriskMethods)) {
trigger_error(sprintf(__('HttpSocket::buildRequestLine - The "*" asterisk character is only allowed for the following methods: %s. Activate quirks mode to work outside of HTTP/1.1 specs.', true), join(',', $asteriskMethods)), E_USER_WARNING);
- Comments: 0
- TrackBacks: 0
NetBeansとxdebugでリモートデバッグ
- 2009年3月 7日 22:02
- Technical

NetBeans6.7開発版でPHPのリモートデバッグ。
普通は同じマシン上にapacheなどを立ててデバッグするケースが多いのか、ネットを検索しても
xdebug.remote_host="localhost"
としている例が多いのだけど、デバッグするPCと実際にサーバマシンが違う場合は
xdebug.remote_host="NetBeansを使うPCのIPアドレス"
を指定する。
それ以外にも、デバッグを開始するURLというかパスを正しく指定しておかないと、NetBeans側で指定したブレークポイントがサーバ側に正しく反映されないケースがあるみたい...。
ちょっと具体的なパターンがよく分かってないけど、xdebugのプロトコルをキャプチャしてみてたら、存在しないパス名のファイルに対してブレークポイント設定が通知されていたりしたので。この辺もう少し調べてみたほうがハマらなくていいかも。
今のところ、NetBeansの設定で「開始ファイル」を、"app/webroot/index.php"にすると上手くデバッグできる感じ。
- Comments: 0
- TrackBacks: 0
本当に組み込み業界のほうが開発手法を改善しやすいのか
- 2009年3月 4日 01:41
- Technical

やはり,ソフト開発手法の確立を組み込み技術者に期待する - 日経エレクトロニクス - Tech-On!
こんな記事が目にとまったので読んでみたのだけど、あまり納得できなかった。
IT業界では優れた開発手法を実践すると開発者がいる企業の売り上げや利益が減ってしまい,組み込み業界では優れた開発手法を実践すると売り上げや利益が増えることが多いためです。
組み込み=すべて内製、なら正しいかもしれないけれど、下請けでソフト会社使ってるようなところはあまり当てはまらない。下請けに「この値段で」と言いつつ大量の作業を渡すメーカーもあって、下請けが渋ると「次から仕事出さないよ?」とか言うパターン。
ようするに下請けが無茶な要求を利益出るか出ないかくらいのお金で受けさせられるので、メーカーは開発手法を改善しようがしまいが、あまり腹は痛まない。
ソフトウエアの開発しやすさと拡張性を高められる開発手法が,製品の競争力に直結するわけです。こうなると,開発手法にも関心が払われてきます。
これも下請けに押しつければ何も変わらない。下請けのほうがいかに自分たちが死なないようにするか頭を使うようにはなるかもしれないけど。
中規模の開発案件であれば,例えば数人程度の開発者が新しい手法を共有しながらプロジェクトを進めることが可能です。
中規模でかつ新規開発の案件なら手法の改善はできると思う。ただ、開発者の間でコンセンサスが取れることが前提。既存の拡張案件ならちょっと時間はかかるかも。
最初は中規模の比較的小さいところでソフトウエア開発手法が確立していき,その手法を理解し実践する開発者が増える。そういう開発者が増えてくれば,規模の大きいところでもその手法を採用できるようになる。
メーカー系だとどうなんでしょうね。中小のデバイスメーカーならできるだろうけど、大手メーカーと言われるレベルのところだと、組織が大きい故に決定権を持つ役職の人が手法改善の重要さを分かってない場合が多いんじゃないだろうか。
メーカーでも、若手の社員さんとかは技術や手法の勉強をしていたりしてるのだけど、部門全体とかになるとどうしても過去のやり方の枠を抜けきらない。
そしてやっぱり、しつこいようだけど下請けが関係するかどうか。メーカーの人は要求仕様を決めるだけで、基本設計以降は下請けに投げるケースだと、メーカーは「これ作って」というだけが仕事。
そして少し大きなプロジェクトになると下請けも数社入っているので、プロジェクト全体としての開発手法の統一が難しくなるし、下請け会社の間でも、それぞれの会社の手法があったりしてなかなか思うようにはプロジェクトが進まない、となる。これはIT系でも変わらないけれど。
なので元記事はちょっと楽観的過ぎるかなぁというのが感想。デバイスメーカーがソフトも内製してるケースくらいしか上手くいかない気がする。
余談。最初に元記事読んで「えっ」と思ったのは、「IT業界」の中に「組み込み業界」って入らない風に書いてること。一般の人に「IT業界」ではなくて「組み込み業界で働いてます」なんて言ってもわからないよなぁ...。
- Comments: 0
- TrackBacks: 0
MISRA-Cの規格って無料では手に入らないようだ
- 2009年3月 3日 01:41
- Technical

コードの品質というあたりを色々考えたり調べ物したりしている時に、ふとMISRA-Cのコーディング規約ってどんなのだろうと気になって調べてみたんだけど、どうも無料では手に入らないっぽい。
コーディング規約なので、そんなに突拍子も無い内容ではないと思うんだけど...。
日本語での情報
規格書
日本語訳された規格書は、自動車技術会というところでテクニカルペーパー"TPTP-01002 (J) 自動車用C言語利用のガイドライン(第2版)"という名前で販売されているのだけど、
一般価格: 10,500円 会員価格: 8,400円 送料: 300円
という値段。個人じゃ無理。なんかJIS規格書みたいな感じの商売。
解説書
で、規格書では無く「解説書」というものであれば以下の本があるようだ。約4000円なので安くは無いけど。
| 組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド | |
![]() | MISRA‐C研究会 日本規格協会 2006-10 売り上げランキング : 177207 おすすめ平均 ![]() MISRA-C:2004は、MISRA-C:1998の改訂版Amazonで詳しく見る by G-Tools |
また、MISRA-Cに一部が似ているコーディング規約としてまとめた以下の書籍もある。
| 改訂版 組込みソフトウェア開発向けコーディング作法ガイド[C言語] (SEC BOOKS) | |
![]() | 独立行政法人 情報処理推進機構 ソフトウェア・エンジニアリング・センター 翔泳社 2007-07-25 売り上げランキング : 26829 おすすめ平均 ![]() 何を書くときのガイドかAmazonで詳しく見る by G-Tools |
Web上
Web上では、技術レポート「MISRA-Cルールに基づいたプログラミング」というサイトに一部だけ、抜粋されて出てきている。
英語
規格書
本家MISRAのWebサイトより、購入できる。書籍形態で40ポンド、PDFで10ポンドらしい。
- Comments: 1
- TrackBacks: 0
近ごろ興味を持ってるもの(コンピュータ関係)
- 2009年3月 1日 03:57
- Technical

最近、興味を持っているものの一覧。
自分への備忘録も兼ねて、たまに書いていこうかと。興味が移るのが早い人なので、何か見て「面白そう」と思ったときにメモしとかないとすぐに忘れちゃうのよね...。
でもこれだけ全部やろうと思ったら、時間が全く足りないのだけは確実。なので優先度つけてやっていくしかないね。そのうちに別のに興味持ったり、持たなくなったりって感じで項目も入れ替わっていくだろうし。
組み込み、電子工作系
- Marvellの"SheevaPlug"Linuxキット($99)
- 安価なARMデバイス。I/Oもいろいろ出ているようだ
- JTAGデバッガ
- ARMデバイスを本格的にやるなら必要。↑のデバイスとか、BeagleBoardで使いたいのだけど何を買えば良いのかちんぷんかんぷん。
- Olimexのこのあたりか、Flyswatterとかいうやつか。CPUチップによっても使えたり使えなかったりするんだろうか。まだ詳しくない。
- Linuxカーネル、ドライバ周り
- 組み込みLinuxをやるならこの辺の知識も
- BeagleBoard
- 買ってからLinuxをちょっと動かしただけで満足してしまってるので、何か次のステップへ。
- Arduino
- 電子工作と組み合わせて何か作りたい。
- ブレッドボード
- 電子工作の基礎を勉強するときに。
Webアプリ、LL系
- CakePHP
- 今勉強中。昔作ったプレーンPHPの小さなアプリと同じ物を作る学習中
- Rails
- Rails2.3とか出たみたいだけど、またいろいろ変わってるとかいう噂
- Ruby1.9
- 高速化されたのでいずれは。互換性など1.8と違ったりでハマるポイントありそう。
- Rubyそのもの
- 1.9とか言う前に文法もろもろ勉強しないと。頭の中での動作イメージをさくっとコードに落とせるくらいにはなりたい。
- NetBeans
- RubyとPHPでの開発に使い始めた。JavaFXとかにも対応するし、そのうち6.7が出る
- JavaFX
- Adobe AIRとどっちが取っつきやすいだろうか...
その他
- emacs
- テキストエディタ勉強会を見て、n回目のチャレンジ。編集系のコマンドを新しくいくつか覚えた。でも常用には至ってない。
- 未だにvimとどっちを覚えればいいのか迷う
- 画像処理のアルゴリズム
- 微妙に仕事と絡んでるので
- 画像処理、信号処理にかかわる数学
- 画像処理、信号処理のアルゴリズム勉強するには、数学分からないと辛い。でも数学は勉強の中で一番苦手だったからなぁ...
- iPhone/Cocoa開発
- Xcodeの使い方と、Objective-Cから勉強しないと。iPhone関係も書籍が揃い始めてるから手をつけたいんだけど。
- Sage
- オープンソースの数値計算ソフト。Mathmaticaっぽいやつらしい。数学分からないので使うこと無いかもしれないけど、何だか面白そうではある。
- Mac
- Mac miniの新型に期待。もしくはMacbookの買い換えも視野に入れる
- Netbook
- 外でPCを使いたいシチュエーションが増えるのなら。
- Comments: 0
- TrackBacks: 0
CakePHPで自作のちょっとした関数はどこに置けばよい?
- 2009年3月 1日 02:34
- Technical

CakePHPを勉強していてちょっと迷ったこと。
アプリ内部で使うちょっとした自作のユーティリティクラスや関数ってどこに置けばいいのか?
最初はvendorsディレクトリか?とも思ったけど、vendor()経由じゃないと呼び出せないということでちょっとやりたいこととは違う感じ。pluginsも同様で違うっぽい。
いろいろ調べてみて今のところは、
- モデルの中で使う場合、behavior
- コントローラの中で使う場合は、component
- ビューの中で使う場合は、helper
というのが無難そうではある。正解かどうかは分からないけど、ドキュメントとか見る感じだとそう読める。
hehaviorもcomponetもhelperも、作り上の制約はあまり無さそうだし、今回はビューの中で使いたいのでhelperとして作ってみるかな...。
- Comments: 0
- TrackBacks: 0
Ubuntuのapacheで個人ディレクトリのpublic_html以下を使う
- 2009年2月10日 03:02
- Technical

たいしたネタでは無いけど、メモ。
apacheをインストールしただけだと、/var/www/ 以下がDocument Rootになるのだけど、ここはsudoしないとファイルを置くことができない。
ユーザーのホームディレクトリのpublic_htmlを対象に含めたいときは、UserDirモジュールを使うように設定する必要がある。
設定ファイルは、 /etc/apache2/mods-available/ にuserdir.confとuserdir.loadとあるので、これへのシンボリックリンクを/etc/apache2/mods-enabled/ に作れば良い。
cd /etc/apache2/mods-enabled sudo ln -s ../mods-available/userdir.conf userdir.conf sudo ln -s ../mods-available/userdir.load userdir.load
とりあえず開発用とかテスト用にはこうしておくとローカルユーザ権限でファイルアップロードできるのでいいと思う。
- Comments: 0
- TrackBack (Close): 0
NetBeansのPHP開発でSFTPを使うには
- 2009年2月 9日 02:25
- Technical

NetBeans6.5だと、PHPのプロジェクトでリモートWebサーバへのファイルアップロードはFTPしか選択できない。
でもさすがに開発環境と言えども、最近のLinuxなんかはSSHはデフォルトで入っていても、FTPは標準では入らないのでわざわざこのためだけにFTP立てるのも...と思っていたら、どうも開発中の次期NetBeansではSFTPも使えるようになるらしい。
Recently, many of you asked for not only FTP support but also SFTP - yesterday we fulfilled your wish so everyone can easily try it now. Of course, one has to download the development version of NetBeans or wait for the first milestone of the next NB version (after NB 6.5).
SFTPを使いたい場合はマルチリンガル版の7.0Nightlyビルドを使うといいのかも。
当然、Nightlyビルドなので実用に耐える安定度かどうかは別だけど。
- Comments: 0
- TrackBack (Close): 0
Beagleboard用のAngstromイメージいろいろ
- 2009年2月 5日 01:29
- Technical

Index of /unstable/autobuild/beagleboard
Beagleboard用のAngstromイメージほか、uimage、ubootなどもろもろが揃ってる。
自分でビルドするのが面倒な時はここから持ってくるといいのかも。
- Comments: 0
- TrackBack (Close): 0
Ubuntuのディスククローン(容量の大きなディスクに丸ごと移し替え)
- 2009年1月25日 15:45
- Technical

OpenEmbeddedの環境をビルドしていたら、Disk full。
VirtualBox上のUbuntuでやっていたのだけど、ディスク容量を8GBしか作ってなかったのが原因。もともとOpenEmbedded環境を作るとか想定してなかっただけなんだけど。
VirtualBoxで新しい30GBの仮想ディスクを作成し、ディスククローンを行うことにした。
手順は、以下のサイトにあるとおり2台のディスクを繋いで、UbuntuのLiveCDからddrescueコマンドでコピーするというもの。
インストール済みUbuntuのクローンを新しいハードディスクに作成する - SourceForge.JP Magazine
ただ、私の環境ではUbuntu8.10の日本語版インストールCDから起動すると、cfdiskの画面が文字化けしてしまったので、ターミナルからexport LANG="en_US.UTF-8"で英語モードに切り替える必要があったくらいか。
- Comments: 0
- TrackBack (Close): 0
UbuntuでOpenEmbedded環境を構築しようとしたが...
- 2009年1月25日 03:54
- Technical

入手したBeagleBoard用のAngstromのビルド環境を作るべく、Ubuntu上でOpenEmbedded環境の構築にチャレンジ。
といっても、このBeagleBoardAndOpenEmbeddedGit - eLinux.orgサイトを見ながらやればできるようだったんだけど、最近のバージョンのOpenEmbeddedはbitbakeの1.8.12を必要とするらしい。
今のUbuntuには1.8.10しかパッケージが無いので、けっきょくOpenEmbeddedをビルドできず。
org.openembedded.stableであれば、bitbake1.8.10でも良いのだけどこのstableにはbeagleboard用のconfigが含まれていないようなので使えず。
仕方がないので、Ubuntuのパッケージが用意されるまではtarballのを入れてみるか。
- Comments: 0
- TrackBack (Close): 0
九州Ruby会議01に行ってきたメモ
聞き違い、記憶違いなどあるかもしれませんが、メモ。
#が付いてるのは、私の個人的なつぶやきです。
会場
- 九州産業大学 12号棟 情報科学部棟
- #九産大は10年ぶりに行ったけど、けっこうきれいなキャンパス。
- #会場は情報科学部の建物だけあって、教室の各席には電源とLANソケットが標準装備。
- #最近の大学はすごいねぇ...。
オープニング
- 角谷さんあいさつ
- #生の角谷さん見た。
セッションA
基調講演
- Rubyst九州 新井さん
- スライドなしで30分
- Rubyについて仕事で使うにはどうか?
- 新井さんのところでは実務でけっこう使っている。
- RoRは小さいプロジェクトから。いきなり大きなのをやると失敗する。
- Ruby/RoRに仕事ですぐに飛びつくな!
- #話し方は穏やかながら、内容は熱いトークだった。
- #RubyやRoRを実務で活用することができれば、福岡のような東京から見た地方でもなにかアドバンテージのある仕事ができるかも。
福岡県のRubyの話
- 福岡県商工部の中島さん
- F-Ruby
- 福岡県のRubyの取り組み
- フクオカRuby大賞
- Rubyに関することなら何でも応募できる。
- 人材育成
- 東京方面との仕事や企業のマッチング
- #物腰が柔らかい中島さん、良い意味で公務員のイメージが壊れた。
- #このような方が尽力すれば何か成果が出そうな気がする。
- #全セッション終了後に、会場の出口で一人一人にチラシ配っていたし...。
- #でもなぜ福岡がRubyなの?というところは謎が残った。
- #Q&Aの時に質問が出ていて、答えていたようだけどちょっと全部聞いてなかった...。
AIPについて
- すでに5年以上活動している。
- 目的はITスキルの教育
- 最近はF-RubyとタイアップしてRubyの講座も多く開催している。
- AIPカフェ
- 壁一面のホワイトボード
- 天神・大名Wifi
- すでにかなりの数を設置済み。
- 市役所前広場はCiscoとタイアップ
- 地下街も近いうちに使えるように。
- #AIPカフェのように集まれる場所が常にあるというのは良い。これは他の地域のコミュには無いのでは?
RBCについて
- Rubyを活用してビジネスに繋げていくコミュニティ
- 毎月勉強会をやっている
- とにかくRubyを楽しもう
- 楽しいと好きになる。好きになるともっと知ろうと思うから。
中国でのRuby/RoRの話
- RubyもRoRもこれから浸透していく段階ので、早めに攻めれば良いかも。
- すでに外資系がものすごく投資・進出している!日本式のようにしていると負けるかも。
- #これは近年のオフショア先の国はどこも同じような状況。外資系がかなりの先行投資をしている。
- #やはり日本式なオフショアのやり方では、失敗する可能性高いいんじゃないのかなぁ。あと語学力。
セッションB
Andrew Huntのビデオ講演
- #壮大な話から、最後に急激にRubyのスケールに話を落としてきた感じがした。最初から3分の2くらいまではすごくフワフワした感じ。
九工大での学生自己評価システム
- 学習目標を明確に立てられていない学生に対して、それを支援するシステムをRoRで。
- 自己評価システム
- 学習目標に対応した講義(必須講義、など)が分かるようになっている。
- 単位取得状況も分かる?
- その時々に応じた自分のコメントとかを入れられる。
- 状況がレーダーチャートで表示される。
- #自己評価というのをどこまでお膳立てするかだなぁ
- #正直、こうやってシステム作ってお膳立てしないと何勉強して良いかわかんないってのも...
- #学生がこういうシステムを使うかどうか、使うように仕向ける運用も大事かも。
九州大学の教員データベースの話
- 教員の自己の活動点検を記録していくシステム。RoRで。
- 最初は富士通がCGIで作ったけど、重かった
- 入力する項目が最大62項目あるので、入力の負荷が高い。一括アップロード機能など工夫しているが、もっと下げるのが今後の課題。
9Arrowsの紹介
- RoR、ExtJS、Air、Flexなど先進的なパッケージを取り入れたWBSベースのタスク管理システム
- 小さい企業が集まってLLCを作って開発。今は開発者がかなりいるらしい。
- #以前ダウンロードだけして動かしてない。
- #AIRでオフラインに対応しているのは良いかも。
- #このシステムとしてのウリはなんだろう?技術的なウリは上記のとおりなんだろうけど。
Ruby開発入門
- 会場アンケート(Rubyの開発環境は?)
- Windowsを使っている・8割くらい?
- Unix系がその次に多い
- NetbeansがJRuby/CRubyが一気にインストールされて初学には良いらしい。
- しかもビジュアルデバッガ付き。
- #普段のコーディングは手慣れたテキストエディタで行って、デバッグをNetBeansで使い分けると良いかも。
セッションC
クックパッドの佐野さん
- http://cookpad.com/
- #名前は知ってたけど、一度もアクセスしたことなかった...
- 九州でRubyで起業する人は今がチャンス。
- 地方は東京より「儲からない期間が多少あっても生き延びれる」
- 自分の好きなことを事業にする
- 事業化するための鍵
- 情熱
- 世界でNo.1になれる
- 儲かる
- インターネット→人と人との新しいつながりを創造する
- 30代女性の4人に1人は利用
- #へー。30代独身の私は知らなかった。
- #ものすごくシンプルながら強いメッセージ性のある話だった。
セッションC2
- MalTechという会社
- 飯塚の九工大に留学→起業っぽい
- インドネシアで第2位のキャリアとサービス提供の契約をした
- Interaphony 3Gというサービス
- TV電話機能で芸能人の日記などコンテンツがみられる
- TV電話機能で特定のダイアルにかけると、映像と選択式メニューが出てくる
- それを選択していくといろいろなサービスがある。
- 端末側は単に表示させるだけの機能でTV電話機能さえあれば何もいらない
- #インタラクティブな映像配信のようなかんじだろうか?
- 全てサーバ側でデータをもっているっぽい(ビデオメッセージとか)
- でRubyはどこ?
- バックエンドのサービスを取りまとめたりするところのシステムでRubyが使われてる。
- 1.4億の携帯サービス(公式)のバックエンドでRubyが使われているのがポイント
- #どうやってキャリアに営業したんだろうなぁ。
OpenID
- OpenIDのプロバイダサイトをRoRで作った。
- #OpenID自体あんまり使ったことない...
サーバ管理などをRubyスクリプト
- スライド
- サーバ管理上でRubyのスクリプトで簡単にしたい
- 設定項目をYamlで書いてそれをバッチに流し込むとかいろいろ。
- あとはNagiosプラグインもいろいろ作っていた。
- #サーバ管理系の定型作業をRubyで作るのはRubyの学習にもちょうどいいかも。
- #コードのボリューム的に小さめだと思うし。ある程度やりたいことがはっきりしているし。
ゲノム解析
- 次世代パーサは全ゲノム配列を数時間で解析する能力を持つ
- データ量の大きな情報を解析するのにRuby使ってる。
- #ゲノム自体の話が楽しかった。
学生にRubyを知ってるか聞いてみた
- 学生さんが発表
- 九大のプログラムやってる学生にRubyって知ってる?と聞いてみた。
- 存在は知ってるけど、使える人はごく少数。(ほとんどC/C++)
- #Rubyを使う動機が少ないみたいね...。
Ruby1.9.1で変わったこと
- ささださん
- Ruby1.9.1は2009/01にリリース予定。あくまで予定。品質重視。
- いろいろ構文が改良されている
- 順番を保障するHashとか。
- #確かに新しい構文のほうが理解しやすそう。Ruby1.9.1に期待。
GCの話
- GCにもいろんなアルゴリズムがある
- 改良の余地あり
- #けっこうディープな話で面白かった
- #理論的な細かいことは分からないけどなー
- #オブジェクトの参照カウントを管理する、ということしか分からないや...
演算子をオーバーライドしてどうのこうの
- 演算子をオーバーライドすることによって、いろいろ活用しよう!ってことらしい
- #んー、使い方によってはおもしろそうだけど。面倒そう。
- けっきょく簡単にやりたいならLispのほうが、だって。
セッションD4
- DBのRailsへのマイグレーション
- #んー、Rails使いじゃないのであまりピンと来なかったけど、きっとできれば便利なんでしょう。
- #でもフィールドがたくさんあるテーブルとかでもちゃんと移行できるんだろうか?
クロージング
- スタッフ勢揃い。お疲れさまでした!
その他
- 会場でノートPC使っている人、意外とLinux(Ubuntu系?)使ってる人多し。
- Macはそれほど多くなかったな。
- ノートPCでUnixが安定して動くようになったからだろうか。
- セッション聞きながらRubyでコーディングしている人もチラホラ。何作ってるんだろ。
- エディタはemacs系もしくはvi系が多かった。
- 当日のUstreamは http://www.ustream.tv/channel/kyushu-ruby-kaigi で見られる
- ブログ書いたけどトラックバック先が分からないのでとりあえずそのまま公開してみる。
- ふだんは組み込みやっていて、Rubyもほとんど初心者だけど十分に楽しめた。
- いやほんと参加して良かった。懇親会は所用で参加しなかったけど...。
- スタッフの皆様、スピーカーの皆様、素晴らしいイベントでした。お疲れさまでした。
- Comments: 0
- TrackBack (Close): 0
CMSのconcrete5を使ってみた
- 2008年11月 7日 23:49
- Technical

MOONGIFTさんのところで紹介されていたCMS「concrete5」をインストールして軽く使ってみた。
とりあえずLAMPの環境ということでUbuntu Serverに。
PHPはGDサポートが必要なので、apt-get install php5-gd しておく必要あり。
あとはconcrete5のREADMEにあるように、MySQLに空のデータベースとそれにアクセスできるユーザーを登録しておく。
あとはconcreteにアクセスして、サイト名やMySQLの設定情報などを入力すると、MySQLにテーブルが作成されて、すぐにインストールが完了。
どうも、サイト名のところは日本語が通らないで文字化けした。それ以外のテキスト部分は日本語はきちんと表示されるけど、日本語ファイル名をアップロードすると文字化け。
使い勝手から言うと、これはすごい。
大まかなレイアウトを決めて、そこにテキストや画像、Flashやビデオ、RSSなどのコンポーネントを置いていくような感じでサイトを作ることができる。
管理画面ではアクセス状況がグラフで表示されるし、コンポーネント(Block)の管理などすべてブラウザ上からできる。
ただ日本語が正しく表示されないところがあるので、日本語向けに何らかの修正をしないといけないだろう。
それから管理画面や編集画面を日本語化すれば、これはかなり普及しそうな雰囲気。
例えば簡単な社内イントラネットのサイトとか、編集がWYSISYGなので、ちょっとした仲間内や組織内でサイトを立ち上げる場合で、HTMLやWiki書式を知らない人が関わるようなケースには良さそうな気がする。
- Comments: 0
- TrackBack (Close): 0
ユーザー認証なしでSVN使えるのね...
- 2008年10月21日 09:39
- Technical

あとから考えたら、できて当たり前、だったんだけど。
事前にコミットユーザーを認証登録しておくのが当たり前だと思っていたので、認証なしでコミットできるってすっかり忘れていた。
社内の他チームにソースをリリースすることになって、SVNのリポジトリパスを教えてもらったけど、コミットユーザー名は何も言われなかった。なので「認証のためのユーザー登録して欲しいんだけど」と言いに行ったら「そんなことするんだっけ?何もしなくてもウチのチームは使ってるけど」と。
ふと、「認証が無いときのコミットユーザー名は何になるんだろう?」と思って調べて見ると、その時にクライアントマシンにログインしているユーザー名になるみたいね。
そこのチームは、Windowsのファイル共有を使って、file:/// の形式でリポジトリを共有していたというわけ。svnserveもapacheも使ってなかったというわけで...。
今までApacheでBasic認証する環境でしかSVN使ったこと無かったので、ある意味新鮮ではあったな。
- Comments: 0
- TrackBack (Close): 0
増える「状態」と「フラグ」で、プログラムは破綻する
- 2008年10月17日 09:47
- Technical

私の周りで起きてきたトラブルプロジェクトを見てみると、コード内の状態管理が破綻してしまってバグ多発、というケースがほとんどのような気がする。
- 仕様変更が入る
- 仕様変更分を新たな「状態」として定義を増やす
- すでにコーディングした場所の修正を最小限にしようとして、「フラグ」を追加したりする
- そういうのを繰り返すうちに意味合いのよく分からない「フラグ」が増えてくる
- バグが発生した時に修正しづらい、修正してもデグレードする
...という悪循環。
こういうケースはウチだけでは無くてどこにでもある話しなんだろうけれど、他機能の状態まで判定して処理分岐しないといけない、なんてなるともっと話しがややこしくなる。
管理する状態の数が少なければ、テーブル化するなりという手があるんだろうが、数十にも渡る場合はどうすればいいんだろう?
ときどき聞く設計時の「モデル検査」の手法でも状態マトリクスを作成して検査するわけだけど、状態の数が増えると二次関数的にマトリクスが増えていくわけで...
根本は、「状態」を減らすことなんだろう。
「状態A=n かつ 状態B=m かつ 他機能状態C=x の場合は」というような複合条件を、一つ下のレイヤで判断させ、上位レイヤにはそれ自体の判定結果を返すようにするとか。そうすると少なくとも上位レイヤのコードは見やすくなるはず。
ただ判定処理のレイヤは気をつけないとすぐに「状態判定関数A()、状態判定関数A_forXXX()」のようにイタズラに関数が増えていって収拾が付かなくなることになりかねない。
特に仕様変更が入りやすいプロジェクトは設計時にすべてを洗い出せない分、「あとから追加」のワナに嵌りやすい。
業務アプリにしろ組み込みソフトにしろ、この辺をいかにうまく作れるかでトラブルになるかならないかの分かれ目になるんだろうな。ちょっといろいろ調べてみよう。
- Comments: 0
- TrackBack (Close): 0
VirtualBoxを使ってみる
- 2008年9月14日 23:39
- Technical

昔はVirtualPC、そしてここ最近はVMware Playerを使っていたのだけど、VirtualBoxもバージョンが2.x系になったというのでインストールしてみた。
たしか1年半以上前に一度使ってみようとしたのだけど、不安定だったのと速度が遅くて使うのを止めた気がするのだけど、新しくなってどうなったんだろうか...
Windowsホストで使ってみた場合
速度的にはVMwareと変わらない感じ。ベンチマーク取ったわけではないけど。ただ一つ残念なのは、ネットワークの設定。NATもBridgeも仮想NICを手動で追加して、さらにコンパネのネットワークから既存の物理NICと「ブリッジ接続」しないといけない。
VMwareはそんなことせずにNATもブリッジも使えたし、設定ツールでNAT時のポートフォワーディングまで設定できる。ネットワークに関しては明らかにVMwareのほうが上かなぁ。
VirtualBoxのほうが優れているのは、仮想マシンをGUIから作成できること。VMware Playerはあくまで"Player"なのでできないからね...。あとは見た目がすっきりしてることかな。VMware Playerはウインドウの縁が太くてデザイン的にどうかなってところ。
OSXホストで使ってみた場合
続いて初代Macbookにインストール。すでにParallelsにXPを入れて使っているので、Gentoo Linuxをインストールしてみた。
ネットワークの設定はOSX版のほうが断然良く、Windows版のように自分で仮想NICを追加したりしなくても、物理NICの一覧から接続したいものを選択するだけであっさりと完了。
こちらも動作速度はXP同士で比較したわけではないけど、Parallelsと遜色ない感じ。Gentooをちょっと動かしただけだけど、安定しているしけっこう使えるかも。ただUSBやサウンド、共有フォルダまで試してない。
ちょっとUnixをインストールしてみたいという用途ならVirtualBoxは使える。ヘビーに常用するレベルに耐えられるかはわからないけど、それでもけっこういい線行ってそうな感じがした。
- Comments: 0
- TrackBack (Close): 0
派生開発プロセス「XDDP」
- 2008年9月 3日 09:37
- Technical

ちょっと興味が出てきたので軽く調べてみようと思う。
コーディング前の設計を手厚くして仕様の漏れや抜けを無くすってことなんだと思うんだけど、先入観で「手間かからないかなぁ」という思いはある。
あと頻繁な仕様変更に耐えられるのか、とか、とにかくマイルストーンの短いプロジェクトに適用できるのか、とか。
そのまま適用は無理でも、いいとこ取りできないかなと思ってみる。
- Comments: 0
- TrackBack (Close): 0
オープンソースの音声認識エンジン"Julius"
- 2008年8月29日 09:50
- Technical

社内のとあるところから聞いた。こんなのがあるんだな。
本格的に認識させようとしたら辞書の精度上げたりとかしないといけなさそうで、ちょっと知識が無いとハードルが高そうだけど、標準で配布されてる辞書でもそれなりの認識をしてくれるのかな?
ぜんぜん試してないけど、ちょっと面白そうではある。
- Comments: 0
- TrackBack (Close): 0
Twitterクローン「しゃべる」をTwitterIrcGatewayから使う
- 2008年7月 3日 23:52
- Technical

社内に立てた「しゃべる」。
使っていたユーザーから「画面の色が目立つので、仕事中にページを開いているとサボってると思われるw」と言われたので、背景色を目立たない色とかに変えたりしていたのだけど*1、たしかTwitter APIをサポートしてるとか書いていたよなぁ...と。
なのでWebからではなくてTwitterクライアントツールを用意すればいいんだと気づき、ソースが公開されているものの中から、TwitterIrcGateWayからの接続にチャレンジしてみることに。
ソースのAPIエントリのURLを変更して、しゃべるに接続してみたのだけどタイムラインが取れていないっぽい。
ちょっとデバッグしてみると、TwitterIrcGateWayからは以下のような要求を出していた。
どうも、sinceオプションがついていると
<?xml version="1.0" encoding="UTF-8" ?> - <hash> <request>/statuses/friends_timeline.xml</request> <error>処理を中断しました。</error> </hash>と、なるようだ。ちなみにsinceオプションを付けないとちゃんとデータが返ってきている。
まだ未サポートなのかバグなのかわからないけど...
- *1: 作者のtechmonkeyさん、ごめんなさい
- Comments: 1
- TrackBack (Close): 0
Rubyのn度目の勉強中
- 2008年6月28日 23:26
- Technical

なんども中途半端になって放置してたRubyの勉強をまた少し初めて見た。
たまに仕事中に「これLLでさっと処理できるんじゃないかなぁ」みたいなシチュエーションがあるんだけど、PerlもRubyもそれ以外のLLも「さっと書ける」レベルには無く、作るのに言語リファレンス引きながら時間かかってしまう。
そういうシチュエーションを最近何度も経験してたので、今回はRubyを、まずはごくごく簡単なスクリプトが書けるところまで勉強しようかと。
基本的には、いつも使っているC言語や、ちょっとしか使えないPerlとの「書き方」の差を覚える感じ。言語によって、配列の初期データ指定が()だったり[]だったり、{}だったりとか、そういう差を。
あとRubyなのでClassまわりも。
| たのしいRuby 第2版 Rubyではじめる気軽なプログラミング | |
![]() | 高橋 征義 ソフトバンククリエイティブ 2006-08-05 売り上げランキング : 19544 おすすめ平均 ![]() Ruby入門書としてはこれが一番お薦め。 プログラミング初心者にとっては少し難易度が高いかも 変数のスコープと寿命について詳しく書いて欲しかったAmazonで詳しく見る by G-Tools |
- Comments: 0
- TrackBack (Close): 0
LoudTwitterをMT4に設定(Atom APIを使って)
- 2008年6月23日 04:47
- Technical

何十回も設定しなおして、ようやくポストが上手くいったみたい。
LouidTwitterはXMLRPCだとぜんぜんポストされなかったので、Atom APIを使うようにしてみたらあっさりと。
Movable TypeでAtom APIを使うやり方ってググってもほとんど出てこなかったんだけど、URLは
http://ドメイン/mtの場所/mt-atom.cgi/weblog/blog_id=1/
っていうような指定をするらしい。blog_idは書き込みたいブログの番号。MTを自前で立てていて、ブログを1つしかやっていないならおそらく1で良いと思う。
ユーザー名とパスワードは、XMLRPCの時と同じ。パスワードはMT4の場合はユーザー設定の画面に出ている「Webサービスパスワード」のほうを指定する。
とりあえず4時すぎに一日分のTwitterログをポストするようにしてます。しばらくやってみて鬱陶しかったら止めるかも...。
- Comments: 0
- TrackBack (Close): 0
firefox3野良ビルド
- 2008年6月21日 23:20
- Technical

Windows上でのビルドは環境構築がややこしいかと思っていたけど、日本語の公式ページや、綾川版のページを見ながらやったら、すぐに構築できた。
とりあえずあまりオプションをいじらないで、SSE2最適化をかけた自前ビルドは完了。ちょっとだけ速くなったような気がしないでもない。
本命はPGI/PGUのオプションを使ったプロファイルデータを使った最適化だけど、PGUでリンク中にLNK1257のリンカエラーで異常終了してしまう。メモリが足りないのか、元のプロファイルデータが多すぎたのか...。
いまはコンパイルオプションを少しずつ変えながら、リンカエラーが出ない組み合わせを模索中。
mozillaのWindows版はVisual C++のコンパイラを使っているので、SSE3とかマルチコアCPUに最適化しきれてないような気がする。Intelのコンパイラ(有償)とか、gccでコンパイルできればまた少しは違ってくるんだろうけどね...。
- Comments: 0
- TrackBack (Close): 0
OpenGL ESでカラーマスク
- 2008年6月20日 23:39
- Technical

特定の色を透過色として、その色だけマスクして描画する方法がわからない...。
アルファブレンディングを工夫すればできないかなぁとは思っているけど、OpenGL ESなのもあって、フル機能じゃないんだよね。
- Comments: 0
- TrackBack (Close): 0
iPhone開発環境でちょっと挫折
- 2008年6月15日 23:44
- Technical

iPhone SDKのドキュメントを見たりxcodeをいじってみたりしていたんだけど、どうにも私の頭では理解が進まない。
beta7になってxibファイルが2つになったり、delegateが増えたりしてるようで、これだけで少し混乱中。
xcode起動して、適当にプロジェクト新規作成して*1、それから何すればいいのか途方に暮れる。...10何年前にVisualC++ 4.0を初めて触ったときと全く同じ感じ。
Interface Builderで部品を配置したあとに、何か関連づけるはずなんだけどそのあたりがやっぱりパッとわからない。ドキュメントも英語だし、初心者向けでは無いのか分かったような分からないような。
OSX、iPhone、Objective-Cと、まったくの素人が手を付けようとしたときに、まず何から勉強すれば良いんだろう。Objective-Cからかなぁ。
- *1: 新規作成の時に出てくるプロジェクトの種類の違いもよく分かってない
- Comments: 0
- TrackBack (Close): 0
シリアルポートに流れるデータをPortMonを使ってキャプチャ
- 2008年5月21日 00:59
- Technical

数年ぶりにCOMポートなんぞを触ることに。
シリアルポートをどんな形式のデータが流れているかを調べるのに、SysInternalsのPortMonというツールが重宝する。
4年くらい前にUSBシリアルポートのドライバを作ったときに知ったツールなのだけど、COMポートのパラメータ設定から送信、受信の流れに至るまでログ取りできてデバッグにずいぶんと役に立った。
今回は仕様が公開されていないプロトコルの解析をして、そのエミュレータっぽいものを作ろうとしているので、そのデータを見るのに久しぶりに活躍してもらった。
SysInternalsのツールはけっこうお世話になっているなぁ...
- Comments: 0
- TrackBack (Close): 0
MT4の編集画面でエディタフォームに入力できない場合は
- 2008年5月20日 01:18
- Technical

MovableType4に入れ替えてから、MacBookのFirefoxでMT4の編集画面からエントリが入力できずに困っていた。
ちょうどFirefoxも3.0betaを使っていたのでそのせいかと思っていたのだけど、ググってみたらこういうことだったらしい。MT4内のドメインの設定と、実際にアクセスしているドメインが違うと編集画面はほとんど動かなくなってしまうらしい。
たしかに、自分のブックマークを旧ドメインのfindup.dyndns.orgのままにしていて、www.swingingblue.netにしてなかった。ブックマークを修正したらきちんと動くようになった。
参考にさせていただいたサイト:BLOG × WORLD ENDING
- Comments: 0
- TrackBack (Close): 0
VMWare Player用の設定ファイルと、空ディスクイメージまで作ってくれるサイト"EasyVMX!"
- 2008年5月17日 13:07
- Technical

Fedora6から9にアップグレードするテストで、手元のPCのVMWare Playerで環境を作ろうと思いvmxファイルを作ってくれるツールがあったよなぁ...とググっていたら、EasyVMX!というサイトを見つけた。
ここは必要事項を入力すると、vmxファイルに加えて空のディスクイメージファイルまでをzipにまとめてダウンロードできるようにしてくれる。なんだか至れり尽くせり。
もうディスクイメージをどこかからダウンロードしてきたり、qemuのツールで作ったりしなくていいのが楽で嬉しい。
- Comments: 0
- TrackBack (Close): 0
FedoraCore6から9にアップグレードできるか?
- 2008年5月16日 01:12
- Technical

FedoraCore9がリリース。会社で管理しているサーバでFedora6相当のマシンがあるんだけど、順番にyumしていってFedora9までアップグレードできるのかなぁ...。
古いままだとセキュリティFIXのパッチもでなくなるし、かといってOSから再インストールする暇も無いしそんなに長い時間サーバを止められないし。
検証環境を作って試してみるのがいちばん良いのかも。そのサーバはFedora5でインストールしたものを6にあげている環境なので、Fedora5から順番にアップグレードのテストをやってみるかな。
- Comments: 0
- TrackBack (Close): 0
iPhone Developer Program購入
- 2008年5月15日 01:35
- Technical

iPhoneでアプリを作るところまでできるかどうかわからないけど、自分のiPod touchで自作アプリを動かしてみたいという欲望だけで99ドル払ってみた。
まだOSX用のアプリ開発チュートリアルを終わらせたばっかりで、iPhone向けの勉強はまだ全然していないんだけどね。とりあえずXcodeを使ったMVCの開発の手順は何となく理解したかな。アウトレットの辺りがちょっとあやふやなところがあるけど。
この払った99ドルが無駄にならないようにiPodのほうも時間を見つけてサンプルコードとかを動かしていきたいなぁ。
- Comments: 0
- TrackBack (Close): 0
Cocoaプログラミング...
- 2008年5月 7日 00:04
- Technical

「たのしいCocoaプログラミング」の本を読みながらXcodeを触ってみたのはいいんだけど、これってXcode2.0向けだったのね。LeopardはXcode3.0。なんかIntefaceBuilder周りの使い方がけっこう変わっていて本に載っている通りには進められないみたい。
ADCのドキュメントはXcode3.0対応なんだけど、英語も日本語も分かりづらい(特に日本語訳はイマイチ)。
語句もレスポンダ、とかアウトレット、とか違うところがあるので脳内変換できるまでは戸惑いそう。なんかViewとControllerのあたりのXcodeとIntefaceBuilderの操作がスッと頭に入ってこない感じ。
- AppController(というか、コントローラクラス)はXcode上でクラスを作るのか?それともIntefaceBuilder上で作るのか?
- 画面部品とコントローラクラスを関連づける方法は?アウトレットを使う?
- Xcodeでコントローラクラスには何を記述すればいい?
などなど、超基本的なところでつまずいている。
もう少しサクッといけるかと思ったけど、頭悪くなったのかなぁ...
- Comments: 2
- TrackBack (Close): 0
OpenGL ESをWindowsで開発したい
- 2008年4月25日 01:28
- Technical

とあるきっかけでOpenGL ESを少しだけやることになるかもしれないのだけど、開発環境がそのデバイス用のものだといろいろ手順が多くてコンパイルして実行確認、というサイクルに時間がかかる。
OpenGL ESならAPIは決まっているんだし、Windows上でエミュレートできれば、ある程度の実装はWindows上で行ってしまって、Cのソースをそのデバイスに持って行ってコンパイルできれば開発も楽になるだろうなぁと。
それでWindowsでも動くOpenGL ES実装を探していたのだけど、なんとなく使えそうなのが
と2つあったけど、まだ実際に試してないのでシステム要件が何かあるかもしれないね…。
- Comments: 0
- TrackBacks: 0
iTRON
- 2008年3月28日 23:45
- Technical

iTRONを少し調べたほうがよくなってきた。
オープンソース実装でTOPPERSというのがあるらしいので、それを見てみるか…
- Comments: 0
- TrackBacks: 0
iPhoneSDK
- 2008年3月 7日 23:11
- Technical

ベータながら出たね…。
早速ダウンロード中だけど、2GBもあるのか。
でも正式版SDKが出るときには有料会員にならないといけないのか。
しかもアプリはAppStore経由でとあるけど、たとえば自分だけで使いたいアプリなんかはどうするのか?デバッグ用に本体に転送できそうではあるからそれをそのまま使う形になるんかな。
ちょっとまだ謎が多い。
- Comments: 0
- TrackBacks: 0
DekiWikiをXAMPP環境にインストール…失敗
- 2008年1月10日 23:49
- Technical

社内の新しいWikiに、DekiWikiを使ってみようと思い立ってインストールしようと格闘したけれどけっきょく失敗。
本家サイトのXAMPP環境向けのインストールチュートリアルのとおりにやってみたのだけど、インストーラまでは動作するものの、Wikiにアクセスしようとすると
Site settings could not be loadedYour site settings could not be loaded. This is most likely the result of misconfiguration of your API (or your API's location)
とエラー。HTTPエラーは504。
エラーを出している周辺のソースも見てみたんだけど、要するにDekiServerに接続できていないか、DekiServerが504を返しているんだろうとは思うんだけどなぁ。ただ、DekiServerもブラウザから直接アクセスするときちんと動作しているようだし、原因不明お手上げ。
本家サイトのフォーラムも見てみたけど、同じような症状になっている人はいるけど解決しているような風ではないし。
高機能なWikiの分、ソフトの構成も複雑っぽいね。.NET Framework使ってたりとか、mod_rewriteとかが必要だったりインストールは難しいね。時間があればまたいずれチャレンジしてみるけど、社内WikiはすぐにインストールできるPukiWikiPlusにしてしまった。
- Comments: 0
- TrackBacks: 0
JavaからIPMessengerを使う
- 2007年12月27日 23:53
- Technical

JavaのWEBアプリからLAN内のIPMessengerへメッセージが送信できるライブラリがないか探していたら、Project Amaterasにあった。
封書で送るかどうかも選べるし、とりあえずの目的は達成できそう。
受信ログをため込むようにすれば、全体に流れているメッセージのログを取って公開することも可能だな…。たまたま受け取れなかった人にはちょうどいいかもしれない。
- Comments: 0
- TrackBacks: 0
JavaのSVNクライアントライブラリ・SVNKit
- 2007年12月26日 23:43
- Technical

Javaプログラムからコミットログを取得して加工したかったので、Javaから扱えるSVNライブラリを探してみたら、SVNKitというのがあった。
サンプルを見る限り、コミットログの取得も簡単にできそうなので明日ちょっと試してみる。
- Comments: 0
- TrackBacks: 0
EclipseでGroupSessionをデバッグする方法
- 2007年12月23日 04:39
- Technical

会社で使っているGroupSessionというフリーのグループウェア。StrutsベースのWebアプリでソースも公開されているのでちょっとした改造やプラグインの作成もできる。
開発環境を整えるためにいろいろ試行錯誤したけど、できてしまえばなんてことはなかった。ただ、公式サイトを見てもこのあたりの情報は無かったような…。使うのがメインで自分で手を入れるようなことをしている人は少ないのかも。
まず環境。
- Eclipse 3.3(Europa) for Java EE Developers
- Tomcat 5.5 (MacPortsからインストール)
- GroupSession2.0系のWARファイル
1.GroupSession2のWARファイルをEclipseにインポート
WARファイルをインポートすることでプロジェクトも新規作成される。自分でプロジェクト作っていろいろ設定するよりかなり楽。
Tomcatの設定もこのときに。基本的にはTomcatのインストールディレクトリの位置を指定するだけ。
2.プロジェクトにソースディレクトリの追加
インポートしたままの状態では、すべてのソースファイルがプロジェクトに認識されていない。認識されていなかった、WEB-INF/plugin以下のディレクトリにあるソースディレクトリをプロジェクトに追加していく。
必要なディレクトリを追加すると以下のようになる。
3.JUnitのjarをプロジェクトに組み込み
JUnitの単体テスト用のソースでビルドエラー表示が出るので、JUnitのjarをプロジェクトに設定。ここまでの設定を行うと、Javaソースのエラー表示はすべて消えるはず(JSPのエラー表示は残るが特に問題ないようだ)。
4.Tomcatをデバッグ起動してデバッグ
あとは適当な場所にブレークポイントを張ってJavaソース、JSPともデバッグすることができる。
GroupSessionは便利ではあるのだけど、かゆいところに手が届いていないような仕様もあって少しの改造でなんとかなりそうなら、要望を出すより自分でいじったほうが早い。
あと、上記の方法でプロジェクトを作るとGroupSessionに付属のantビルド用のbuild.xmlは使えないかも。ソースやclassファイルの格納場所が変わってしまうので。
build.xmlを修正すれば大丈夫だと思うけど、そこまでやれてない。もしかすると本番環境向けのビルド設定を別にしないといけないと思う。ここに書いたのはあくまでローカルでTomcat起動してデバッグするためのやり方。
- Comments: 0
- TrackBacks: 0
MacPortsでTomcatをインストールしてみた(2)
- 2007年12月23日 01:55
- Technical

やっぱりTomcatのデーモンは自動起動はしてなかったようだ。
ターミナルでコマンドを叩いたときに起動していたらしい。コンソールにはエラーで途中終了したように見えていたけど。
あと、MacPortsでTomcatをインストールした場合は、/opt/local/share/java/tomcat5/conf以下にある.sampleの設定ファイルをそれぞれリネームしておかないといけない。とりあえずそれぞれの設定ファイルの中身はいじらなくても動かすことはできる。
- Comments: 0
- TrackBacks: 0
MacPortsでTomcatをインストールしてみた
- 2007年12月22日 22:35
- Technical

初めてのMacPorts。
EclipseとTomcatの連携がしたかったんだけど、何にも見ずにMacPortsからTomcat5をインストールしたら、Tomcatの管理者パスワードが不明。admin/なし、じゃなさそう。
あとはインストールすると勝手にデーモンとして起動してしまっているようだ。でも実際のplistファイルを見ていると、disableに見えるんだけど…謎。
- Comments: 0
- TrackBacks: 0
SVNのリポジトリ構成を検討中
- 2007年12月19日 01:56
- Technical

新規の仕事で使うSVNリポジトリのフォルダ構成を考え中。
複数のサブチームがそれぞれ分担して開発するわけだけど、サブチームどうしの結合開始まではそれぞれのサブチームごとにTrunkのようなものを用意し、結合開始時点で結合用のTrunkを用意したほうがいいのか、最初から結合向けのTrunkを一つだけ用意してそこにそれぞれコミットしてもらうほうがいいのか…
それぞれのチームの開発ペースやコミットポリシーが異なるという前提なら結合前と後でTrunk的フォルダを分けたほうがいいだろうけど、その分結合は誰かもしくはツールで毎回やらないといけないんだよなぁ。
開発序盤から一つのTrunkというのもお互いのコミットが干渉しているようで嫌かな。実際ソースファイルは基本的にチーム間で分離しているので共有するファイルはほとんどないはずではあるのだけど。
今のところ結合前後でTrunkを分ける方向にしようかと思っているけど、とりあえず明日周りの人に聞いてまわってみるかなぁ。
- Comments: 0
- TrackBacks: 0
WebBrowserコントロールは意外と使える?
- 2007年12月 6日 23:33
- Technical

C#でアプリを作っていて、
- Webページのような、文字や画像を表示してリンクをクリックできる表示領域
- ただし、通信はHTTPを使わず独自形式
- リンクをクリックするとURLではなく独自形式のコンテンツに遷移
というようなことをしたかった。
MSDNヘルプでWebBrowserコントロールの説明を読んでいると、やりたかったことが実現できそう。
HTMLをプログラムから、WebBrowserコントロールのDocumentTextプロパティに流し込めば通信をしなくてもWebページが表示できるし、Javascriptでwindows.externalクラスを使うと、.NETアプリの特定の関数を呼ぶことができ、onClickと組み合わせるとHTMLのリンクのクリック処理を完全に制御できるっぽい。
これは使い方によっては使い道のありそうなコントロールのような気がする。単純にHTTPを使ったWeb表示ではなくて、アプリローカルに閉じたコンテンツの表示にも使える。文字や画像やスクリプトも使えるしHTMLを少しローカルアプリ用に作ればHTMLの表現はほぼすべて使えるわけだし…。
明日以降もちょっとこのコントロールでいろいろ遊んでみるつもり。
- Comments: 0
- TrackBacks: 0
C++/CLIとアンマネージとの連携が面倒すぎる
- 2007年11月22日 02:04
- Technical

.NET FrameworkからWin32APIを叩くのが面倒すぎる。
いちおうC++/CLIを使ってネイティブAPIをラップするクラスを作っているのだけど、まともにマネージ型との型変換を考えると面倒で…。String型からchar*の配列にするのもすんなりできないっぽい*1し、ネイティブのGUID型とマネージのGuid型とやりとりする仕組みもないし、バイナリデータを扱うのでネイティブのbyte配列をどう扱えばいいかというのもあるし…
.NET Framework上だけで全ての事が済めば苦労しないんだろうけど、実際はネイティブのAPIでしかできないこともまだまだあるし、既存のC/C++のコードを読んだりするシチュエーションはあるからなぁ。
たしかにC#とかからマーシャリングの定義をいちいち書くのに比べればC++/CLIのほうが柔軟性はあるんだろうけど…。最近、このへんの相互変換でハマりまくっているので愚痴。まぁ私のスキルも全然足りてないんだけれど。
- *1: pin_ptr使えばいいのかな…
- Comments: 0
- TrackBacks: 0
いまさらながらStrutsをかじってみようかと
- 2007年11月21日 02:23
- Technical

本当に今さら感というか時代遅れというか、Strutsを少しだけかじってみようかと。しかもバージョン1系。
なぜかというと、チーム内でGroupSessionというフリーのグループウェアツールを使っているのだけどそのプラグインを作るために必要なのです。要はGroupSessionがStruts1.xベースのツールだから。
ちょうどStrutsのようなJavaのWebフレームワークが広まり始めるかどうかというときに、仕事でJavaから離れてしまってはや数年。なのでStrutsやらRailsやらフレームワーク系が盛り上がっているときにぜんぜん仕事で触れてないのを復習しようかと。すでにその頃は組み込みっぽいほうをやっていたし。
できればあまり学習時間をかけずにグループウェアの拡張ができるようになれればいいんだけどね…
- Comments: 0
- TrackBacks: 0
"Android"のSDKが公開
- 2007年11月14日 02:08
- Technical

とりあえずダウンロードしただけ。動かしてない。
会社の休み時間にちょっと触ってみようとダウンロードを試みたけど、なんかプロキシか何かにひっかかってダウンロードできなかった。
アプリを作るためにどれくらいのコード量を書かないといけないのか、また画面まわりを制御するのにアプリレイヤでどれくらいコードが必要なのかが興味あるところ。記事などを見た感じではAPIがかなり高レベルまでまとまっていそうな感じだけど、どうなんだろう。
PDC時代からのソースをずっと拡張、また拡張で来ている日本の携帯メーカーの開発に比べて、すごく効率の良い開発ができるのなら、日本メーカーも安い大量のPGを抱えて根性でソースを保守し続ける開発もアホらしくてやってられないというふうになるのかも。
- Comments: 0
- TrackBacks: 0
プログラムからBluetoothを使う面倒さ
- 2007年10月22日 03:12
- Technical

最近、Bluetoothアダプタを買ったので、WindowsプログラムからBluetoothを制御できるか調べていたんだけど、面倒というかいろいろ思ったようにいかないのね。
まず、BluetoothスタックがMicrosoft純正のものと、ベンダ製のが存在すること。買ったプリンストンのPTM-UBT3Sという小さなデバイス。これにはドライバとしてToshiba製のBluetoothスタックがついている。
このスタックだと、Microsoftが用意しているBluetooth APIも、Winsockを使ったBluetoothデバイス制御もできない*1。Microsoft純正ドライバで認識させないとプログラムから制御はできないということ。*2
Bluetooth APIが使えたところで、できるのはデバイス認識とリモートデバイスの検索とペアリングまで。実際に各プロファイルを使ってデータ通信したりするのには自力で作らないといけないようだ。OBEXを使ってファイルのやりとりをしたくても、標準のライブラリが無いので自作するか商用のライブラリかフリーのライブラリを探さないとダメ。
おおげさかもしれないけど、なんとなくBluetoothが垢抜け無いというか広まらないのはこういうところにあるんじゃないのかな。単純に製品付属のアプリでファイル転送したりするという普通の使い方をするには問題ないのだけど、独自にアプリケーションから制御できればもっといろいろ使い道が出ると思うんだよね…。USBと違って無線なわけだし。
ベンダのドライバではAPIが使えない、Microsoftのドライバだとプロファイルが少ない、APIが使えても実際のプロトコルは用意されていない…。このままだとWireless USBとかあの辺の新しい規格に持って行かれたりしないのかな。
けっこう開発者泣かせなBluetoothです。
- Comments: 4
- TrackBacks: 0
福岡のIT系コミュニティ
- 2007年10月21日 06:22
- Technical

こうして見てみると、主要なものはあるんだなぁといった感じ。
東京のように大物ギークがいるとか、しょっちゅうイベントや集まってるとかいうところまでは無いかもしれないけど、それでも活動している方々がいるだけでも福岡も捨てたものじゃないかもと思ってしまう…けど自分は何にも力になっていなかったりするのがね。
Java:Javaコミュニティ@九州
Ruby:Rubyビジネス・コモンズ
PHP:PHP in Fukuoka
Web系(Lightweight Language):福岡で働くWebの人々
組み込み:九州組込みソフトウェアコンソーシアム
人材交流:AIPコミュニティ
セキュリティ:セキュリティとんこつ - ばりかた
- Comments: 0
- TrackBacks: 0
OSXにpdnsdを入れる
- 2007年10月 8日 23:38
- Technical

エントリするほど難しくは無いんだけど。
ソースをダウンロードしてきて、configure,make,make installで良い。
あとはOSXの起動時にデーモンとして自動起動させるだけなんだけど、/etc/init.d/ なんてものは無い。OSXの場合はlaunchdというものらしいんだけど、その設定をGUIで行うツールがLingon。MAC REVIEWというサイトで見つけた。
これで設定ファイルを直接触ることなく、デーモンとして追加。常にローカルで起動するようにしておき、プライマリDNSを127.0.0.1に向けることでDNSキャッシュを使うようにした。
- Comments: 0
- TrackBacks: 0
WMWare PlayerのNATをホストPC以外に公開する
- 2007年9月30日 12:48
- Technical

VMWare PlayerでNATを使ってネットワークにつないでいる場合、デフォルトではホストPC意外からの接続はできない。
でもWMWare Playerに付いてくるvmnetcfg.exeを使うと、ホストPCとの間でポートフォワーディングの設定ができる。
たとえば、ホストPCのIRCポートへの要求をNAT上のWMWareにフォワーディングしたい場合は、VMWare側のIPアドレスと、IRCのポート番号6667を以下のように設定する。
これでWindows上にUnix系のOSをWMWareで立てて、両方のサービスをネットワーク上に提供することが可能。どうしてもWindows環境をベースにしないといけない場合とかには使えるかも。
- Comments: 0
- TrackBacks: 0
Windows環境でruby/LDAPを簡単にインストール
- 2007年9月 8日 23:59
- Technical

LDAPの内容を表示するrubyスクリプトをrubyの勉強がてら作成中。
ネットを調べてみるとrubyでLDAPを扱うにはruby/LDAPを使っているケースが多かった(RailsだとActiveLDAPらしい)。
ただこれ、Windows環境だと自分でコンパイルするのが面倒。MinGWでもMSVCでもできるらしいんだけど…
さらにググってみるとすでにコンパイル済みのバイナリを置いてくれているサイトを発見。ありがたく使わせてもらうことにした。
- Comments: 0
- TrackBacks: 0
"W-ZERO3[es]でLinux"のためにbuildrootの環境を作る(まとめ)
- 2007年7月13日 02:04
- Technical

とりあえず、zImageの作成までできたのでまとめ。
ポイントとしては、buildrootはなるべく最新版を使うこと。どうも前回環境構築したときのsnapshotと昨日今日あたりのバージョンでは動作が違う。snapshotを新しいのにしたらすんなりと行った。
とりあえず手順をおさらい。
- ubuntuは標準では開発環境がインストールされていないので、sudo aptitude install build-essentialで開発環境をインストール。
- buildrootのsnapshotを本家サイトからダウンロード。もしこの後の手順やビルドでうまくいかないときは、svnからチェックアウトしてくるか次のsnapshotが出るのを待つのが吉かもしれない
- buildrootをコンパイルするために必要な、flex、gettext、bison、texi2html、libncurses-devをインストール
- 作者Wikiサイトには、binutilsなどをあらかじめダウンロードしておくように書いてあるが、実際はこの後のmake中に勝手にダウンロードしてくれる
- buildrootを解凍したディレクトリで make menuconfig
- Linuxカーネルと同じようなコンフィグ画面が出るので、CPUをarm(xscaleサポート)など、作者Wikiサイトに書いてあるように設定
- 設定が済んだら、make。クロスコンパイルに必要なbinutilsやgccは勝手にダウンロードしてくれる
- 途中、binutilsのmake中にmakeinfoが見つからないというエラーで止まる場合は、buildroot/toolchain_build_arm/binutils-2.17/missing を以下のように修正する
--- missing.old 2007-07-08 22:18:09.000000000 +0900
+++ missing 2007-07-08 01:04:28.000000000 +0900
@@ -106,9 +106,9 @@
# Now exit if we have it, but it failed. Also exit now if we
# don't have it and --version was passed (most likely to detect
# the program).
case "$1" in
- lex|yacc)
+ lex|yacc|makeinfo)
# Not GNU programs, they don't have --version.
;;
tar)
- buildrootのmakeがエラー無くすべて通ったら、buildroot/build_arm/staging_dir/usr/bin 以下にarm-linux-gcc など、ターゲット環境(ARM用Linux)向けのコマンドがいろいろと作られていることを確認
- buildroot/ 以下にrootfs.arm.cpioファイルが出来ていることを確認。
- buildroot/build_arm/staging_dir/usr/bin を環境変数PATHに追加
buildroot関係の手順はここまで、以下はLinuxカーネルのビルド
- buildroot/build_arm/に、linux-2.6.21あたりのカーネルがあるのでシンボリックリンク"linux"を張る
- cd linux
- 作者Wikiにあるとおりにコマンドを打つ
- make ARCH=arm CROSS_COMPILE=arm-linux- mrproper
- make ARCH=arm CROSS_COMPILE=arm-linux- allnoconfig
- make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig
- コンフィグ画面では作者サイトにあるとおりに設定。もしかするとConsole Display Driverの設定で"VGA text console"をはずし、"Frame buffer console support"を入れた方が良いのかも?
- カーネルのビルド。make ARCH=arm CROSS_COMPILE=arm-linux-
- ビルドがエラー無く終わったら arch/arm/boot/ にzImageが生成されていることを確認。
あとは、[es]にコピーしてloaderから起動!
…だけど、作者曰くの"カーネルを一部修正する必要あり"というのと、LCDドライバの調整をしていないのでそのままでは100%?起動しないのでは。私の[es]だと画面が真っ白になってフリーズした。
カーネルデバッガが使えれば、こういう起動時のデバッグもできるんだろうが、kgdbを組み込んでもシリアルポートが使えないからリモートデバッグもできないだろうし…。
- Comments: 0
- TrackBacks: 0
"W-ZERO3[es]でLinux"のためにbuildrootの環境を作る(その3)
- 2007年7月10日 02:30
- Technical

環境構築は時間が取れないので進展なし。
もうひとつ、自分がハマったところをメモ。
buildrootのmake中に↓のような感じのメッセージが出て、cpコマンドのエラーでビルドが止まる場合…。
cp: missing destination file operand after `./buildtool/toolchain_build_arm/xxxxx'
cpコマンドの引数が足りない。コピー元の指定が無いままcpコマンドを実行している。
こんなときは、make menuconfigでbinutilsやgccなどビルドエラーが出たツールのコンフィグファイルを設定している箇所に変な文字が入っていたりする可能性を疑うと良い場合がある。
--- Binutils Options
Binutils Version (binutils 2.17) --->
() Additional binutils options ←こんな感じの場所
たとえばbusyboxのコンフィグファイル指定で見ると、buildroot/.config に空白の設定項目があったら、思い切ってコメントアウトしてみると上手くいくことがある。でも上手くいかないことも。きっと別の原因があるものと…
BR2_PACKAGE_BUSYBOX_CONFIG=""
しかし、こんなところの殴り書きでも読んでくれる人がいるものだ…。
- Comments: 0
- TrackBacks: 0
Linux 2.6.22リリースでVirtualPCでキーボードが効かないのが直っている?
- 2007年7月 9日 23:55
- Technical

いちおう、2.6.22以外での回避策としてカーネルのブートパラメータに"i8042.noloop"を追加してブートすると良いらしい。これも未確認。commit d2ada5597d33a9108acb2caf912f85cbc9caab1e Author: Roland ScheideggerDate: Tue May 8 01:31:40 2007 -0400 Input: i8042 - fix AUX port detection with some chips The i8042 driver fails detection of the AUX port with some chips, because they apparently do not change the I8042_CTR_AUXDIS bit immediately. This is known to affect at least HP500/HP510 notebooks, consequently the built-in touchpad will not work. The patch will simply reread the value until it gets the expected value or a retry limit is hit, without touching other workaround code in the same area. Signed-off-by: Roland Scheidegger Signed-off-by: Dmitry Torokhov
- Comments: 0
- TrackBacks: 0
"W-ZERO3[es]でLinux"のためにbuildrootの環境を作る(その2)
- 2007年7月 8日 23:49
- Technical

ubuntuでarm(xscale)向けのbuildroot環境作り。
binutilsのコンパイル途中、makeinfoが見つからないと怒られてエラーになっていたのを、binutilsに入っているmissingスクリプトを書き換えて回避。makeinfoコマンドの終了コードがエラーになっているっぽいので強引に無視するように修正。makeinfoコマンド単体ではちゃんと動作していたようだったので。
--- missing.old 2007-07-08 22:18:09.000000000 +0900
+++ missing 2007-07-08 01:04:28.000000000 +0900
@@ -106,9 +106,9 @@
# Now exit if we have it, but it failed. Also exit now if we
# don't have it and --version was passed (most likely to detect
# the program).
case "$1" in
- lex|yacc)
+ lex|yacc|makeinfo)
# Not GNU programs, they don't have --version.
;;
tar)
途中、busyboxのビルドでエラーが出たりしながら、なんとかbuildrootのmakeはすべて通ったっぽい。
…でも、よく見てみると build_arm/staging_dir/bin の下にarm用gccが無い…。make中にgcc本体のビルドが通っていたのは見たので何でできていないんだろう。またハマり。
- Comments: 0
- TrackBacks: 0
"W-ZERO3[es]でLinux"のためにbuildrootの環境を作る
- 2007年7月 6日 01:38
- Technical

W-ZERO3でLinuxをポーティングしている作者のサイトで、開発環境のメモが公開された。
それによると、クロスコンパイル環境はbuildrootというのを使っているらしい。
この間、Gentooでcrossdevを使って環境を作ろうとしてうまくいかなかったので、今度はUbuntuでチャレンジ。
- Ubuntuに開発環境をインストールする。aptでbuild-essentialを。
- buildrootのsnapshotを本家サイトからダウンロード
- buildrootをコンパイルするために必要な、flex、gettext、bison、texi2html、libncurses-dev、texinfoをaptでインストール
- buildrootを解凍したディレクトリで make menuconfig
- Linuxカーネルと同じようなコンフィグ画面が出るので、CPUをarm(xscaleサポート)など、作者サイトに書いてあるように設定
- 設定が済んだら、make。クロスコンパイルに必要なbinutilsやgccは勝手にダウンロードしてくれるっぽい
…ということで今日はここまでの手順をやってみた。
けど、make中にmakeinfoが無いって警告が出た後ビルドが失敗する。makeinfoはtexi2html、texinfoのパッケージをインストールして、パスも通っているんだけどね…
- Comments: 0
- TrackBacks: 0
PSPやW-ZERO3でLinuxを
- 2007年6月29日 02:14
- Technical

こういうガジェットでLinuxが動くと言うだけで、使い道が無くても面白そうだと思う自分はいったい…
W-ZERO3[es]でLinux、PSPでLinuxとちょっと自分の中でブームです。
両方ともベース環境はuCLinuxという組み込み機器向けのコンパクトな?Linuxカーネルのようです。クロス開発環境を揃えればソースはあるので開発しようと思えばできるし、知識のある人ならドライバ解析にチャレンジしてみるのもいいかも。
特にW-ZERO3のほうは毎日のようにリリースされていて、周辺機器がちょっとずつ動くようになってきているみたい。
- Comments: 1
- TrackBacks: 0
W-ZERO3[es]でLinux起動
- 2007年6月27日 02:30
- Technical

スラドを読んで初めて知って、帰宅してからまとめWikiからダウンロード。どうも人によってうまくいったりいかなかったりするようで。
私の環境ではハズレ。ただソフトもいろいろ入れてるし、プレーンな環境では無いからかも。
- Comments: 0
- TrackBacks: 0
linux2.6.20はVirtual PC 2007などでマウスが使えないらしい
- 2007年5月15日 02:19
- Technical

もとは、Virtual PC 2007にubuntu linux 7.04 Feistyをインストールしようとして、マウスが効かないのに気づいた。
ググって見ると、ubuntuの本家フォーラムにもあるように、linux2.6.20、正確には2.6.19あたりからi8042ドライバの挙動が変わったらしく、マウスの動作がおかしくなっているようだ。
kernel.orgを覗いてみると、現在はlinux2.6.21が出ているのだけどこれでfixされているのかな…。どちらにしてもubuntuなどのディストロがカーネルをアップデートしないとインストールし辛いわけだけど*1。
- *1: ubuntuのフォーラムでは、マウスキーの設定をすることでとりあえず回避する方法が書いてある
- Comments: 0
- TrackBacks: 0











![改訂版 組込みソフトウェア開発向けコーディング作法ガイド[C言語] (SEC BOOKS)](http://ecx.images-amazon.com/images/I/41zx-1Qx%2BUL._SL160_.jpg)











