投稿

2011の投稿を表示しています

Eclipseのツールチップ(ポップアップ)とUbuntu11.10

Ubuntu11.10はAppearanceからフォントや背景色の設定ができない。これは大きく仕様がかわっためで(gnome2からgnome3+Unityベースになった)、したがって、Web検索で表示される大半のテクニックは一切使えなくなっている。しかも、それを変更するツールが未整備なのである。 そのため、悪影響がある。Eclipseでポップアップウインドウの背景色とフォントの色が共に黒の部分があり、一部見えなくなるのである。 以下を参考にすると色修正可能である。 スクリプトを試したところ、無事にeclipseでトールチップ内を読むことができた。 http://askubuntu.com/questions/70599/how-to-change-tooltip-background-color-in-unity

PAMについて

PAMについてのドキュメント集 (Linux-PAMがみつからないため) (XSSO (X/Open single sign-on service) アーキテクチャーの) X/Open UNIX® 標準化プロセスの一環として標準化 されている。(ibm.comから抜粋) Linux-PAM Linux系で使われいる。 OpenPAM MacOS X,  FreeBSD や NetBSDなどで使われている IBMのサイトの説明が2009年にかかれて比較的最近書かれ、概要がわかると思います。このサイトはプログラミングが中心なので、下部にあるおおまかな概要が役に立ちます。 http://www.ibm.com/developerworks/jp/linux/library/l-pam/ 新しいSyntax /etc/pam.d/に含まれる書式、 control-flagに新しい構文が追加になっている。( http://www.samba.org/samba/docs/man/Samba-HOWTO-Collection/pam.html から抜粋) [value1=action1 value2=action2 ...] value1は以下の設定できる。 success; open_err; symbol_err; service_err; system_err; buf_err; perm_denied; auth_err; cred_insufficient; authinfo_unavail; user_unknown; maxtries; new_authtok_reqd; acct_expired; session_err; cred_unavail; cred_expired; cred_err; no_module_data; conv_err; authtok_err; authtok_recover_err; authtok_lock_busy; authtok_disable_aging; try_again; ignore; abort; authtok_expired; module_unknown; bad_item; and default . action1は自然数か以下のトークンを設定

Ubuntu11.10のカスタマイズ

Ubuntu11.10 から、環境設定が変更になっており、しかも未整備なので、かゆい所がカスタマイズしにくい。その対処を2つ紹介する。 idle-dim-battery アイドルになったらバックライトをoffを無効、つまり、点けたままにする。 バッテリでパソコンを使っているときにドキュメントを読んでいるときと頻繁にOffになり使い物にならない。その機能を止める。現在は電源管理やスクリーンセーバーからこの設定ができないため、イライラする原因にもなっている。 $ sudo gsettings set org.gnome.settings-daemon.plugins.power idle-dim-battery false 尚、上の設定はdconf-editor(旧gconf-editor)によってもできる。 orgから上のキーを設定すれば良い。 org.gnome.settings-daemon.plugins.media-keys内でショートカットを設定 Blenderでよく使うalt+right-clickを使えるようにする。 blenderでface select時、並んでいるfacesを選択するためのショートカットキー。 compiz が動作を奪ってしまっているのが原因。 sudo gconftool-2 --set --type string /apps/metacity/general/mouse_button_modifier '<Super>' これによってSuper+Right-Clickへ変更する、結果、Alt+Right-ClickをBlenderで使える。(追記、Ubuntu12.04でも動作) 尚、SuperとはWinキーの機能が割り当てられているキー 追記:Ubuntu12.10では以下の方法で対処できた。 <Alt>Button3のshortcutが動いているのが原因。CompizConfig->general options->Key bindings->Window Menuを<Alt><Super>Button3へ変更する。2つ項目がありひとつはDisable出来るがもうひとつは起動

HTCがAppleの特許を侵害したと仮決定された案

Patent  5946647 Claims 1, 8 http://www.google.com/patents/US5946647 おおまかに書くと 1999年にみとめられた特許で、サーバーがドキュメント内にある文書をパーサーにかけ、クライアント側で電話番号、住所、メールアドレスを選択することにより、Actionが実行され、そのActionは電話をかけたり、アドレス帳に追加したりする機能。 と、この機能をOFFにしたスマフォを出荷すればいいだけなので、実質上、HTC側には企業イメージが多少さがるぐらいで、Appleにはあまりメリットがないと思う。 Androidでこの機能が使われなくなっても、iOSと比較して、便利なインタフェースもあるので、あまり関係ないのかもしれない。 素人意見だが、正直、発明というよりも早く出した者勝ちのような特許であるw

rfc6455 WebSocket protocol

約1週間前にWebSocketのRFC6455が公開された。 これが全ブラウザで使えるようになると、Ajaxやlong pollingなどよりも、効率的に動作し、クライアント(ブラウザ)とサーバーが相互通信できるようになる。 ajaxは過去のものになる可能性がある。 一応、今週末はrfcを一読する予定だが、 内容は... HttpヘッダーやそのUpgrade機能を応用した接続の確立 ws://, wss:// Data Framing クローズやエラー対処 当たり前だがData frameなど、しっかり設計され、乱数によるマスクによって、snoofingやspoofingに対して強くなっている(32bitsランダム値によってmasking)。 また、将来の拡張も考慮されおり、長く使える仕様になるのではないかと感じる。 参考: http://tools.ietf.org/html/rfc6455 http://dev.w3.org/html5/websockets/

Ubuntu10.04LTSにdovecot sieveを導入

メールサーバーの最大の弱点はSPAMメールが届くということ。 それをオフィシャルな対策によって、ほぼ完璧に取り省く方法。 メールサーバーの設定は以下を参考に設定する。 CAの認証は、無料で認証してくれる所があるのでそれを活用する。 https://help.ubuntu.com/10.04/serverguide/C/email-services.html 上の中の以下を... postfixの設定 dovecotの設定 mail-filteringの設定 をおこなうと。 DKIMフィルタが導入でき、Spamメール判断、ウィルス検知もできるようになる。 しかし、このままではスマフォー(e.g. iPhone)などでは***SPAM***のメールを受信してしまうので、それをsieveによって、自動にJunkフォルダへ転送するシステムを構築するのがこのドキュメントのねらい。 10.04にはdovecot-commonにseiveが入っているのでそれを使う。 protcolはスマーフォーやタブレットの広まりによって、imap,imapsを使う。 /etc/dovecot/dovecot.confを以下に修正 mail_location = mbox:~/mail protocol lda {   ...   mail_plugins =  sieve   ... } plugin {   ...   sieve=~/.dovecot.sieve   ... } /etc/postfix/main.cf mailbox_command = /usr/lib/dovecot/deliver -a "$RECIPIENT" に変更、もしくは追加。 sudo service dovecot restart 各ユーザー /home/ユーザー/mail にメールボックスが作られる .dovecot.seiveは。。。 # send to Junk folder if spam require ["fileinto","regex","envelope","vacation"

MacBookPro Ubuntu 11.10をSSD化のため再インストール

順調に動作していたMacBookPro 17inch(6,1) 500G HDDをSSD Intel 300G(製品番号320)にインストールを試みた。 500G HDD MacOSX Windows7 Ubuntu10.04から11.10へ、順次アップデートして使っていた。 (MBR, GPTの同期がとれ、ほぼ完璧に動作)      ↓ 300G SSD(320 Series SSDSA2CW300G3K5) MacOSX Windows7 Ubuntu 11.10 へクリーンインストール。 MacBookProは普通のPCとは違うため、PC用DISK COPYツールが使えない(ボクの知る限り)しかも、SSDはHDDと比較して高価なめ、大概、容量を縮小することが多い。 したがって、クリーンインストールし、後でHDDからデータをコピーする方法を採用したほうが早いと思われる。MacOSXとWindows7などのバックアップツールを使うほうが楽だが、今回はMacOSXだけ使った、Windows7は容量が少なくなるため入らないので個別に手動COPYする必要があった。またUbuntuは重要なデータはフォルダにまとめてあるので手動COPYでほぼOKである。 あとはUbuntu DocumentにあるMacBookProへのインストールを行う。 で、終わり。 参考: https://wiki.ubuntu.com/MactelSupportTeam/CommunityHelpPages しかし、rEFItのsync部分で以下のエラーがでると厄介だ。 e.g. Current GPT partition table:  #      Start LBA      End LBA  Type  1             40       409639  EFI System (FAT)  2         409640    166425271  Mac OS X HFS+  3      166688768    342470017  Basic Data  4      342470018    565126268  Basic Data  5      565126269    586071581  Linu

Kindle Fire ユーザー再登録

購入したamazon.comのユーザーから、別のamazon.comのユーザーへ変更 購入したユーザのWeb( amazon.com/myk) からKindle FireをDeregisterをおこなう。 登録したいユーザーのWebページのKindle Fireとシリアル番号を登録する。 Setting->Device->Reset to Factory Defaults。 支持に従って新しいユーザーを登録すると*@kindle.comのメールアドレスが自動に得られている。 注意:自己責任でお願いします。 また、もとのユーザーの購入したものは、読めなくなります。

Python3 IMap4 socket sample

IMAP4rev1 sample for python3.2 #!/usr/bin/env python3 # IMAP4rev1 # samples in python3. # select.select # LOGIN, LOGOUT, CREATE, LIST, LSUB # 11/22/2011 macken import getpass import socket import select import sys import fcntl import os HOST = 'your imap4 host' USER_NAME = 'your name' USER_PASSWORD = 'password' PORT = 143 BUFF_LEN = 1024 QUOTE = '"' BLANK = ' ' QUOTE_STAR_QUOTE = QUOTE+'*'+QUOTE QUOTE_QUOTE = QUOTE+QUOTE CRLF = '\r\n' current_index = 0 def next_index():   # For to use the GLOBAL version of  current_index.   global current_index   index =  current_index   current_index+=1   return repr(index) + BLANK def create_folder(s, folder_name):   str0 = next_index() + 'CREATE ' + QUOTE + folder_name + QUOTE + CRLF;   data_send = bytearray(str0.encode());   print('data_send = ' + data_send.decode(), end='')   s.send(data_send)   line = s.recv(BUFF_LEN)   pri

Ubuntu 11.10 Kernel 3.0.0.13(64bits)がbootできない

ubuntu 11.10 カーネル Linux MacUbuntu17 3.0.0-13-generic #22-Ubuntu SMP Wed Nov 2 13:27:26 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux MacBook Pro 17inch(Version6,1)ではbootが失敗。 対策として NVIDEAのドライバーをcurrent-updatesに変更後、無事に起動できた。

Kindle Fire

Kindle Fireが届く。 Debugモードははじめから、Onになっているらしく、わざわざオプションを設定する必要がないらしい。 しかし、unknown storeからのインストールは許可する必要があると思われる。 参考: https://developer.amazon.com/help/faq.html#KindleFire 上記の記事に書いてあることだが。。。 開発ブログ: http://www.amazonappstoredev.com/ スペック *Width: 600px "Height: 1024px Abstracted LCD Density: 169 Target: Android 2.3.4 - API Level 10 RAM: 512 MB Linuxへのインストール方法 usb接続を認識させる方法 1. Open the ~/.android/adb_usb.iniを開く 2. ファイル末に0x1949を追加 3. さらに0x0006を追加 4.  保存 adbサーバーをリスタート 6. ターミナルを開く 7. Execute adb kill-server command  8. Execute adb start-server command  9. Execute adb devicesで確認   うまく行かない場合は... android update adbをおこなってから、再度やってみる

ABNFのノート

インターネットコミニュティのドキュメント(RFCなど)読む祭、重要なのはABNFの理解。しかし、悩ましいのがABNFの勉強である。RFCが英語であるため、日本語で勉強するといちいち翻訳まで頭の中でしなければならない。 そこで英文をもとに理解し、分かり難い箇所を日本語にしてメモにした。 rfc5234(2008年1月) Augmented BNF for Syntax Specifications: ABNF Internet standards track protocol for the Internet community Rule Naming Rule names are case insensitive. The names <rulename>, <Rulename>, <RULENAME>, and <rUlENamE> all   refer to the same rule. Rule form name =  elements crlf Trminal Values         b           =  binary         d           =  decimal         x           =  hexadecimal CR=  %d13 CR=  %x0D CRLF=  %d13.10 command     =  "command string" ABNF strings are case insensitive. "abc", "Abc", "aBc", "abC", "ABc", "aBC", "AbC", and  "ABC". To specify a rule that is case sensitive. rulename    =  %d97.98.99 3.  Operators 3.1 Concatenation:  Rule1 Rule2 接続         foo         

Dartをパッと勉強してみたところ

JavaとJavascriptのいいところ+アルファ setter,getterが言語側でサポートしているため読みやすい publicとprivateの書き方がラクなのと読みやすい interfaceとsuperの考え方がjavaと似ている書きやすい スマートフォン、タブレットの登場以後に設計された言語 Html5/css3以後に設計された言語 Unit TestやLintも書きやすそう。 気になる点 ;が必要(RubyやPython, Goが羨ましく感じるw) =>の関数定義に慣れが必要 力をもっているGoogleが開発(内部資料のリークでさらにイヤな感じに) 他のメジャーなブラウザがnativeで対応するか疑問(CoffeeScriptのほうが有力?) 登場したてで、将来大きく変わる可能性が有り Conclusion ブラウザ言語の欠陥は以前から指摘されていたので(特に大きなアプリを書くとき) Dartの登場は大歓迎。 速く対応のGWTの登場待ちたい。 できればGoogleではなく、どこかの天才に書いて欲しかった。(e.g. python, jQuery)

Bazaarが使いやすい

ubuntu, launchpadで使われているbazaarという分散型バージョン管理ツールが使いやすい。 デザイナーと仕事をするときには便利かもしれない。 gitは教えて使わせるというのが骨がおれる作業だ。 使用頻度がひくいスタッフ(デザイナ、アシスタント)は覚えても忘れやすい。 話は変わるが最近はコードのドキュメント管理にdoxygenも便利だと思っている。 html出力はなかなかよくできている。 さらに使ってみて、良ければレポートしたい。

Android NDK r7

Android 4.0に対応したNDK. http://developer.android.com/sdk/ndk/index.html OpenMAXなどの対応や、GLなどの強化が含まれる。 一番、嬉しいのは 環境変数を設定するだけで、自動にCCacheに対応したこと。   http://ccache.samba.org export NDK_CCACHE=ccache 僕の場合、nativeファイルが多いだけにコンパイルの高速化は大歓迎である。 コンパイル時間 (*.ccが335 ヘッダが400ぐらい) CCacheなしの場合 約8分40秒 CCacheが効いた場合 30秒 その他、細かだが現実的に嬉しいのは。。。 LOCAL_CPP_EXTENSION := .cc .cpp と複数の拡張子に対応になったことである。 いままではひとつだったので少々不便だった。(とはいえ、コード管理上ひとつにするのが望ましい) その他、stlがRTTIに対応した(例外は未対応だが、僕らはC++ではRTTIや例外を使わないため、あまり気にならない @see google c++ style) 残念なのはgdbがいまだに6.6。 pythonマクロが使えないのは不便である。手作業でgdbを7.3にするのが面倒だし、サポートの点で不満だ。 またSequoyahを使ってeclipseに対応して欲しい。

svgの整形ツール

svgをsvgzに扱う前に、無駄なsvg内のタグを削除するツール http://www.codedread.com/scour/

Androidとsvg (アプリケーション用)

現在、svgのライブラリはandroidの標準ライブラリには存在しないため、 以下のライブラリを使うことになる。  svg-android (java) nativeではLICENSEや依存関係が多く、使いかっての良いものは、みつからなかった。 libsvg for android ひょとすると良いかも(調査中) Anti Grain Geometry.   http://www.antigrain.com 希望としては librsvg(libxml, libart) を使いたいがAndroid版のポートはみつからなかった。 参考 http://www.codeproject.com/KB/android/AndroidImageViewSVG.aspx ( http://horribile.blogspot.com/2011/10/android-imageview-with-svg-support.html ) http://www.codeproject.com/KB/android/Android_SVG_support.aspx

Android NDK Tips Links

Google http://developer.android.com/guide/practices/design/jni.html Etc. http://www.netmite.com/android/mydroid/2.0/dalvik/docs/jni-tips.html

Android ICSとJNIのバグ管理強化

Android ndk(JNI)を使って、nativeのプログラムを作成(移植)するとき、一番、神経質に考えているのがメモリ管理である。 Ice cream sandwatchはメモリ管理のバグを発見する機能がディフォルトで追加されているようだ。 以下のblogに書いてある http://android-developers.blogspot.com/2011/11/jni-local-reference-changes-in-ics.html 詳細は上の記事に述べてあるが、項目を列挙すると。 A quick primer on JNI referencesからOld AndroidではJNIEnv*が単なるポインターであり、Delete系を呼んだあとでも使えてしまう。 そのため、バグが見つかりにくい欠点があるし、誤解を招く原因にもなる。 JNIはグローバルとローカルでJNIEnv*があり、スレッドがそれぞれ持っているが、グローバルは他のスレッドから利用可能だ。 AndroidではJNIEnv*は1スレッド専用であり、ほかのスレッドでは使えない。  ICSではそのバグを監視する機能がディフォルト(debug指定時)でONになっている。 例から env->NewStringUTFはローカルリファレンスを返すので、グローバルとしては使えない。 env->NewGlobalRef(s)はグローバルとして使えるが、env->DeleteGlobalRef(s);を呼ぶことを忘れてはならない。 FindClass() はローカルリファレンスを返す。グローバルとしては使えない。 DeleteLocalRef()  を使うべきではない。 呼んだあとでもAndroid場合使えてしまうのでバグが発見しづらい。  PopLocalFrame()以後のPushLocalFrame()で割り当てたリファレンスは使えない。

プログラミング用フォント ベスト10

以下の記事が面白かった。 http://hivelogic.com/articles/top-10-programming-fonts/ UbuntuではDEJA VU SANS MONOを好んで使っているが、 3位だった。 

最新のndk6b用、ツールチェーンDownload

android ndkでgdb7.3などを使いたい場合は以下のサイトから取得すると便利 mingw-and-ndk android-ndk-r6b-gdb-7.3.50.20110709-linux-x86.7zをダウロードすると、オフィシャルではないが、最新のgnu tool-chainを使うことができる。

MacBook Pro 17inch(6,1) とUbuntu 11.10

MacBook pro 17inch Ubuntu11.10へアップデートした。 タッチパッドがキーボード入力時に止まってしまう不都合がある。 これの対処は、マウスの設定でキーボード入力時矢印を消すを無効にすると安定して動作している。 いまのところ、これ以外では大きな問題がなく、 Unityの検索で日本語入力が可能になり便利になった。 ただ、ディスクトップのテーマが簡単になりすぎて、壁紙によってはディスクトップアイコンの文字が読みにくくなった際、フォントの色を簡単に変更できない。 おそらく、変えられるはずだがまだ11.10を使い始めて2時間ぐらいなので、解決したら書く予定。 尚、Mactelのサポートがディフォルトでされているようで、キーボードのバックライト、ディスプレイの明るさ、音の調整はそのまま動作した。  尚、Fnキーの設定は自分好みに変えた。 音がスピーカーから出力されない場合、alsamixerを起動しfront SpがMMになっていないかをチェック、MMはミュートの意味でMキーを押すことによって00になり音がでる。 リリース当初はフォルダーが表示できなくなる現象があったが修正された。 マウスがとまるときがある。 Touch Padの設定でテキスト入力中はカーソルを消すをOFFにすることにより、現象は減る。 いずれ修正されると思われる。  

プログラム、依存性をなくすことほど、つまらないものはなし

汚い設計を理解するのはめんどいし、 時間はかかるし、 バグを埋め込むのが怖いし、 プログラムを知らない上司には説明が手間と、 ツライことばかり。。。 でも、その先は、 ラクすることだと、信じて。

SequoyahとAndroid nativeプロジェクトとgdb

Sequoyah plug-in(シクウォイア)を使えばeclipse上でnativeの管理が簡単になりそうである。 Eclipse Indigo(3.7)では以下のサイトが参考になった。 Ubuntu 11.4+eclipse3.7で動作確認できた。   Windows+cygwin+eclipse IndigoにSequoyahをインストールする例   http://www.permadi.com/blog/2011/09/setting-up-android-jni-projects-in-windows-eclipse-and-sequoyah/ eclipse Sequoyah wiki http://wiki.eclipse.org/Sequoyah eclipse native debug http://www.eclipse.org/sequoyah/documentation/native_debug.php eclipse native debugの補足 実際、ボクが試しのはndk-r6bとeclipse3.7+Android3.1実機(Toshiba)。 実は微妙に設定が異なるので注意が必要(Ubuntu11.4で検証) Debug Configurationsの記述中 GDB debuggerは ndkのルート/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gdb GDB command fileは プロジェクトローカル/obj/local/armeabi/gdb2.setup これは存在しないファイルですが、効率よくするためにこの名前を使う。 後でgdb.setupをrenameする。 Conclusion: ndkのデバッカ起動は非常に面倒であるが、gdbのuiモードが日本語表示非対応なため、eclipse上でdebug出来るのは非常に助かる(変数の文字列は読めないことがあるがソースのコメントが読める)。  とはいえndkも対応になったADTがあれば、こんな手間はいらないのだが。 PS.1 Samsung Galaxy Tab10.1(Android3.1/Google

setHasOptionsMenu、ActionBar,SearchViewそしてFocus

ActionBarにSearchViewを入れて以下のようなActiviteに2つのFragmentが入っていると。。。 [action bar(searchview)] [ListFragment][WebView+Fragment ]  action barのSearchViewに検索キーを打つ入れるたびに、 下の2つのfragmentがリアルタイムに変化するコードの場合を考える。 WebView+Fragment 内にsetHasOptionsMenu(true);の呼び出しが あると(これはよくあるパターンだと思う) そのコール時にAction Barを作り直すため、SearchViewの、 Focusが失われてしまう。 そのため、IUは最悪になってしまう。 これを回避するには2つの解決策が思い浮かぶ。 1. setHasOptionsMenu(true);を呼ばない 2. [WebView+Fragment ]、setHasOptionsMenu(true);から呼ばれるonCreateOptionsMenu内でSearchViewが生成された後、SearchView.requestFocus()を呼ぶ。 尚、requestFocus()は呼ぶコードの位置によってはFocusが移動しないことがある。 1はFragment個別のメニューが設定できないため、使いやすさが失われる 2は検索キーのRestore等もあるのでこの方法をとるのがいい ということで2を採用

Activite + ndk (naitive) Open GL ESを使って開放する際の注意点

GLSurfaceViewを使っているActivityをfinishする(閉じる)とき、TextureをGLSurfaceView側でクリアするため、naitive内で作ったTextureでも、native側でglDeleteTextures()を使ってクリアすると、GLSurfaceView側でもクリアするため、conflictが発生するようである。 したがって、glDeleteTextureはnativeで呼ぶ必要はなさそうである。 もし、glDeleteTexture等をつかうと、他のActiviteでフォントが黒ぬき(黒豆腐?)になり壊れてしまうという現象が発生した。 (TableとPhone両方, osはAndroid 3.1とAndroid2.2.2) Crashはしなかった。

2週間の夏休みはActionBarとFragmentにどっぷり

正直な話、一度きれいに動作した多くのActivityだけでできたアプリをFragment化することは億劫なことで、やる気もなかなか出てきません。 しかたがなく、夏休みの夜はこれに対応することにしました。  いやいやなのでなかなかFragmentとActionBarのことは頭にはいらなくて、苦労しましたが、亀のような遅さで、2週間かけて移植しました。 が、できたコードは美しくなく、混乱もかなりありました。 その後、1週間かけてリファクタリングしてどうにか、馴染めるコードになってきましたが、Android Compatibility Package(androdi-support-v4.jar)を使っているため、Tabletで動かしてみてはPhone動かすという2重手間であまり楽しくないのが現状です。 ボクから観て、複雑さを嫌うGoogle System設計者は、今後Androidはまだまだ改良されるのでは?と思っています。 まぁ、これによって、さらに混乱しそうですが前進を止めることはないでしょう。

match_parentを使うのは"8"以降

ご存知のようにレイアウトの"fill_parent"はLevel 8 APIで"match_parent"へrenameされた。 これはAndroid2.2以降だが、すぐに"match_parent"を使うかは微妙で、現在作成中のアプリがlevel 7対応なのでfill_parentを使うことにしている。 これはGoogleオフィシャルのアプリを見たところそうなっているためで、Leve7非対応になった時点で"match_parent"へ変更する予定。 しなくていいリスクは避けるべきである。

MacBook Ubuntu 11.4 Unity対応、キーボードの円(¥)マークをバックスラッシュへ変更

日本用MacBook proにてUbuntu 11.4 unityを使う際、そのショートカットを利用するにはキーボード、レイアウト設定を、 Apple Aluminium Keyboard(JIS) するとうまくUnityのショートカットが使える。 しかし、現在副作用(Bug?)があって、¥を押すとunicodeの「¥」が表示されてしまい。  terminal, eclipseやemacs上で正規表現の指定などが不便になってしまう。 そこで以下の方法で解決。 ~/.xmodmapというファイルを作成 keycode 132 = backslash bar prolongedsound を一行入力 (注意・日本語キーボードの場合) xmodmap ~/.xmodmap で反映して試す。 うまくけば、起動時に~/.xinitrcを使って反映させれば完成である。 以下のサイトを参考にした。 (自動起動の詳細有り) http://lqwerty.blog44.fc2.com/blog-entry-246.html Thanks!  

Cannot cast from Fragment to X

例えば FragmentManager fm = getSupportFragmentManager(); mMyListFragment =  (MyListFragment)fm.findFragmentById(R.id.my_list_fragment); と書き、 Cannot cast from Fragment to MyListFragment. とエラーが発生したときは、Android Compatibility PackageとAndroid3.0以降のFragmentを混在してしまっている可能性がある。 どちらかにすべて統一しなければならない。 Android1.6からAndroid3.0未満でも動作させるならば、Android Compatibility Package。  

Phone or tablet

フォンかタブレットかをandroidで判断する方法 (ioschedから抜粋) public static boolean isHoneycomb() { // Can use static final constants like HONEYCOMB, declared in later versions // of the OS since they are inlined at compile time. This is guaranteed behavior. return Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB; } public static boolean isTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } public static boolean isHoneycombTablet(Context context) { return isHoneycomb() && isTablet(context); }

Mercurialとgit

gitを使っていて、困ることは、大きなもので二つある。 Windowsのexeバイナリ等を含めると、安定しない点がある。  同名(.exeなし)のlinux用コマンドと混乱するようで、cygwin上で安定した運用が出来ないことである。 その点、google codeで使われているmercurialはいい感じなようで、tortoiseHGと併用するとスムーズにWindows環境でも動作するようである。  もうひとつはデザイナーやアシスタントを含めて教えるのが非常につらい点がある。 visual sorce safe(パフォーマンスを無視すれば)はこのあたりは突出して説明しやすかったが、分散型は結構難しい。 その上、gitはオプションが細かすぎてしまうので、hgのほうが*まだ*説明がしやすい。 mercurialはcommandの流れはgitとよく似ているので、時間があるときに使ってみたいと思う。

OutputDebugStringとVisualStudio

古典的なことなんですが、 Visual Studioの出力ウィンドウ(Output window)にMFC TRACE(),Qt qDebugやWIN32API OutputDebugStringのメッセージ表示がされなくなったときは、出力ウィンドウを右クリックして、コンテキストメニューのプログラム出力(O)にチェックが入っているか確認してください。 ここの位置は何かの拍子にマウスボタンを押してしまい。 アンチェックになりやすい位置です。 そのため戸惑うことがあります。

スマートフォンとタブレットのDisplayMetrics例

samsung galaxy Tab10.1 metrics DisplayMetrics density 1.0 densityDpi 160 heightPixels 800 scaledDensity 1.0 widthPixels 1280 xdpi 160.15764 ydpi 160.0 savedState null HTC desire metrics DisplayMetrics density 1.5 densityDpi 240 heightPixels 480 scaledDensity 1.5 widthPixels 800 xdpi 254.0 ydpi 254.0 savedState null

android:hardwareAccelerated="true"ではWebViewの描画が正常に動作しないこと有り

Android3.0から有効になったManifest.xmlのapplication属性  android:hardwareAccelerated。 android:hardwareAccelerated="true" にするとWebViewが間延びしたような表示になり、正常にHTMLを表示してくれないことがある。 気がつくのに約1日の時間を無駄にしてしまった。  ドライバの問題と思われるが、出来たてで自分が慣れていないOSはこんなものである。    尚、WebView以外では正常に動作しているようなのでActivity単位でandroid:hardwareAcceleratedを指定し、使えるものは使う。 危険だがテーマ描画が乱れるのでしかたがない。 PS Samsung tab10.1 google edition / android3.1にて 

"The specified activity does not exist! Getting the launcher activity."

AndroidManifest.xmlを後で起動アプリを変更したとき。 eclipse(ADT)上で、このエラーメッセージがアプリ起動時に表示されたら、 project->properties->Launch configurations の内容が正しいかをチェックすること。 このエラーが表示されても、とりあえず起動がすることがあるようですが、時間がないときは細かなことは構っていられない。とつい考えてしまいます。 プレッシャがない時には簡単だんだけどねぇw

android ndk r6

r5cが登場したときは、落胆したものだった。 理由は当分NDKの新しいメジャーなバージョンは登場しないだろうと考えたからだった。が、予想に反し7月に入りr6がリリースされた。 (androidのreposを見れば予想できるだろうけど。。。時間が厳しい) しかも、前々からほしいと思っていたstack traceがLogcatで簡単に見ることが出来るようになった。 これでイチイチどこから呼ばれたかをgdbを実行せず見ることができる。 デバック作業の効率化が進んだのである。 いつもndk-gdbを行うフォルダで実行することを考えて以下のシェルスクリプト書き、早速試したところ、 ゆっくりとだがcrashポイントからのcall stackがdumpされ、便利なのが実感できた。(多少、ソースの行番号がずれるバグがあるけど、問題にならない) #!/bin/sh adb logcat | ndk-stack -sym obj/local/armeabi Google, Thanks! PS 直近の不満ですが、gdbはpythonが使えるバージョンにしてくださいw  最新マクロが使えません。 そのため、毎回armeabi版を手動でインストールするのが面倒です。 またこれはndkというよりもgnu向けですがLinux上、gdb uiモードでutf-8を正常表示できないものか? 誰かご存知でしたら教えてください。

android ndk nativeでcrashしたときに便利なツール

追記:ndk r6で簡単で便利な機能が追加になったので存在価値が減りました。 agdb.pyが便利。 nativeでクラシュした情報は/data/tombstomes/内に書き込まれるが、 Logcatでみられるのはその一部。 それを分かりやすく表示してくれるToolである。 ただし一番の苦労はANDROID_SRC_ROOTの設定(別にcommand option有り) androidのソースの位置が必要 で、androidのソースもゲットする必要がある。 尚、Windowsは動作しないと書いてある。  詳細は以下を参照 blog 「just do IT」 http://rxwen.blogspot.com/2011/01/resolve-stack-trace-of-crashed.html  http://rxwen.blogspot.com/2011/01/utility-for-debugging-android-native.html 本体は以下 http://code.google.com/p/rxwen-blog-stuff/source/browse/trunk/tools/agdb.py androidソース http://source.android.com/source/initializing.html   目的のDEBUG情報設定はmake -j4する前に export TARGET_BUILD_TYPE=debug export PLATFORM_VERSION=2.3.3 などとカスタマイズ   

Conccurency

C++マルチスレッドの専門書を探してるのですが、なかなかよいものが見つかりません。 手持ちには3冊ほどありますが、古い本か、新しいものは抽象的で実用的な本がすくない。 探しているものとしてはJava Concurrency in Practiceのような良書なのです。 そんな中、秋頃に(洋書ですが)TR2を扱った本がでるとのこと、ちょと楽しみにしています。 ps みんなそうかもしれませんが、僕個人が現在C/C++を使う目的は第1にマルチプラットフォーム化、第2に高速性です。  実用化というのはその第1がサポートできるかが判断材料になります。例えばこんな 記事 のことです。   

Galaxy S/Tab10.1とndk-gdb

Galaxy SやTab10.1でも同じですが、  ndk-gdbを実行すると $ ndk-gdb -d (android-ndk-r5bでは) ERROR: Could not setup network redirection to gdbserver? Maybe using --port=<port> to use a different TCP port might help? (android-ndk-r5cまたはr6では) ERROR: Could not extract package's data directory. Are you sure that your installed application is debuggable?   と表示されデバイスでデバッカが起動しません。 理由はsumsungがデバック用パッケージを移動しているためで、ndk-gdbが期待したパスに存在しないようです。 これを解決するのはいまの所、ndk-gdbのスクリプトを合わせるか、rootでリンク化でしょうが、パッと探してみたところ情報が少ない。 (当たり前ですが、javaのデバックはできます、nativeの場合です。 尚、SはAndroid2.2, 2.3.3, Tab10.1はAndroid3.0.1, 3.1を試しました 念の為) ちなみに、最近登場したndk r5cですが、ndk-gdbスクリプト以下の部分でexit 1されます。 DATA_DIRが空になるんですなぁ。  adb_var_shell2 DATA_DIR run-as $PACKAGE_NAME /system/bin/sh -c pwd if [ $? != 0 -o -z "$DATA_DIR" ] ; then     echo "ERROR: Could not extract package's data directory. Are you sure that"     echo "       your installed application is debuggable?"     exit 1 fi log "Found data directory: '$DATA

BoostかQtか

どちらを使えばいいか。 たぶんBoostだと思います。 それは将来性を考えた上です。 (しかし、 NokiaがQtをOpenソースとして、orgに独立してしまえば別の話です) 理由はQtはNokiaが持っているので微妙にNikiaさらに、ここと提携したMicrosoftの影響が入るからです。 当たり前ですが Nokiaを見てるとAndroidを無視しています。 そのことで開発者の中には不安に映るでしょう。 しかも、BoostにはC++準標準的な立場で、しかもQtの魅力であるsignal&slotを参考にしたSignal2という仕組みまで入っています。 スマートポインターも素晴らしい(*)。などなど。 と、ここまで書いておいて、実際はQtを使っています。 それはMFCから移行しやすいのが大きいからです(といってもQtはmfcやjavaを参考にし、洗礼されていて綺麗な設計)、そしてBoostにはないGUI(ボクは使っていませんがそのための安心感有)があります。  パッケージとしてまとまりがあり導入しやすく、インディーズとはいえandroid版もしっかりしているのがいいのです。    * Qtのスマートポインタについては ココ  

実用に耐える設計は大工さんのよう

実用に耐えるソフトウェアデザインは各クラスのインタフェースが、 あたかも大工が家の建てるときに木材寸法通りがきれにはまっていくこと。 (Before After というテレビ番組のシーンを浮びます) これと似た感覚がプログラミングしていて感じられることだと、時々実感することがあります。 この感覚が多いとコードへの信頼度や自信が増し、 この感覚がないと、段々イライラしてきて、最後には不機嫌でいる自分に気が付きます。 別の書き方をすると、居心地がわるくなってくる感じです。 そんな中では、 仕事はしたくないですねぇ。 

賢いQTextStream

QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Shift-JIS")) を設定しても、QTextStreamはファイル(Buffer)の先頭にUTF8-BOMがあるとUtf-8としてQStringに読み込みます。 賢いですね。 もちろん、BOMがないとShift-JISとして読んでしまいます。 でも、それを知っていないと思わぬことに時間を取られるかも。。。です。 そんなおそれがあるときはそのディフォルトの振る舞いを切ってしまうのが一番です。 PS Codecは多くのパターンがあり複雑なので、ボクの認識間違いかもしれません。 そのときは教えて頂けると幸いです。

それでも厄介なUTF-8 BOM

UTF-8 BOM対応のツールが増えるなか(Eclipseや、Qt Creator、無論Visual Studio)、どうしても足止めするツールがある。 それはgun-makeそして、qmakeこれらはBOMがあるとParserを止めてしまう。 深く探していないので、オプション等追加すればたいおうするのだろうが、台無しにしてしまっている。 どうしてもShift-jisをまだ捨てられない環境なのでどうにかしてほしい。 ちなみにBOM非対応のGoogle cpplint.pyですがこれはpythonということもあり簡単だったのでBOMがあっても動作するように改造した。(ついでにoutputオプションにeclipse形式を追加、makeに組み込めば使える)

自作コンパイラをeclipseで動作させる

前にちょと書いていたのですが、プラグインは作成しませんでした。 実際はgnu-makeに自作のコンパイラを動かすようにしたら、CDT上で普通に動作したからです。 ただエラー行はconsoleをクリックしてもジャンプしなかったので、フォーマットをgccと同じようにしたらあっさり動作しました。 また、自作コンパイラはCをベースにしているので専用拡張子をC++Editorにしたら、色分けもされ、動きました。 ということで、実用的だったので、プラグイン制作は止めて、先に自作コンパイラをantlrで作成ししなおす流れとします。

Valgrind

現時点では、WindowsやAndroidでは直接Valgrindを動作させることが出来ない。 マルチプラットフォーム化が当たり前の時代になっている現在、コードのほとんどはLinuxで動作する。 したがって、導入をしなければならない。 しかも、すぐにでも。  

自動にテスティング

そろそろ出てもいいのではないか? コードを書くたびに保存もしないのに自動コンパイルされるのは当たり前の今だが、もっと必要なのは、その後、(何もしなくても)自動にテスティングをしてくれる開発システム(IDE)。  どんなのがあるだろうか? 知っていたら教えてください。  

使いたいコード

本当に強力なコードは世の中にだしてから、作り直しが2回は必要。 しかも、そのたびにリリースされ、多くの人に使われなければならい。 例えるとOSでさえ、使い物になるのはVer3.0からである。  この「3」以上まで、リリースされ続けているコードを採用したい。  sqlite3の「3」は使うボクからは印象がいい。(ごまかしはだめですぞ)

Testing codeの量

量ばかり気になって、本質を忘れてはいけないことでしょうが、有名な sqlite3 の本体コード(Version 3.7.5)は73.0KSLOC、テスティングコードは1251倍の91378.6 KSLOC。 ボクの扱うandroidで実行するコードは500KSLOC以上あるがテスティングコードは1倍もないのではないか? あまりにも差がありすぎる。 これはちょと恥ずかしいレベルの話ではないかと思っている。 

Qt Creator 2.2.0 (qmake Qt-4.7.1利用)の変な動作

Utf-8 BOMを勝手に消さないようになり、やっと日本語環境で使えるようになったのだが、複数モジュール管理の使い勝手が悪いIDE。(BOMはVisual C++で必要なため入れてある) qmakeの仕様通りなのかもしれないが、ちょとやなクセがある。 Qt Creator 64bits (binaryをDownload 使う プロジェクトはQt-4.7.1)の変な動作 (環境は日本語のUbuntu11.4-64bitsでQt CreatorはEnglish設定)があり、ハマったのでメモ 社内用ツール向け自作のプロジェクト製作中におきた不都合。。。 releaseコンパイルなのに暗黙にdebugが定義されている。 したがって、 Build Settings内のreleaseオプションにわざわざ以下の定義を入れなければならない。 CONFIG+=release CONFIG-=debug これを入れなければ暗黙に以下が実行される debug {     実行される } release {     実行されない } もし、暗黙のdebugが仕様ならば、debug版でCONFIG+=debugは必要ないと思われる。 勘違いをおこす原因となった。 PS 置換をおこなうとUTF-8 BOMを消してしまうバグ有り

org.eclipse.core.commands.*メモ

IHandler executeサンプル 調査中...

#jae16の感想

今年のGoogle I/O 2011は革新的なことはなかったような気がする。  2月にHoneycombが発表されたので、仕方がないが、Chrome OSなどがもっと具体的になるかと想っていた。 Google App Engineの目立った新しさ 値段が上がる CPUベースではなくインスタンスベースの課金になる 今年じゅうにpreviewがとれる 全文検索 GO for Google app engine Go言語に対応になったが、パッとソースをみたところ、結構面倒なことになっている。 なんとなくだが、まだGo言語自身の未熟さがでていると思われる。 Goに関してはandroid native開発にいつ対応するかも気になる。

eclipseのplug-inをつくりたい

自作のScriptとそのコンパイラーをいままではVisual Studio上で使っていたのですが、Linux上でもスクリプトのコンパイルをしたいためにeclipseのplug-inを作成したい。 しかし、どこのプログラマも同じように、時間が限られているためなかなか手がでない。 どうにかして開始したいと思っている。 どうすれば簡単にはじめることができるのだろうか? はじめは外部ツールとして実行する。(拡張性がない) plug-in commandのサンプルを改良していく。 最終的にperspectiveとしたいので無理やり、これで動作させる。 無謀か?

Samsung Galaxy tab 10.1で作成中のアプリを試す。

Goolge I/O 2011で配布されたGalaxy tab 10.1を、 開発で使ってみた印象を書く。 長所  手元にAndroid3.0以上の実機がなかったので、速さに驚いた。 Android3.0.1の実機テストができるw 実機へのUploadやinstallが高速、Dual CPUと使わないアプリ(huga updateなど)が動いていたいため速い バッテリがもつ 高速なためデバックがやりやすい。 スクリーンが大きく、美しいためデバックがやりやすい。 特にレイアウトやOpen GL等のアプリは細部まで見えるのがいいし、入力がしやすい。 比較的Crashが少ない。 短所 素のままでは日本語入力ができない。 HTC DesireやGalaxy SではWebkitで日本語表示ができるのに、10.1は日本語環境にしているのにかかわらず、見ることができない。  尚、Android3.1のエミュレータでは表示されている。 Wirelessが不安定(iPadと同じような状態だが、Apple Air baseでは安定している。 tab10.1はPC用のWLANハブやApple Air baseでも比較的不安定) PC USBから電力不足が原因か充電しない 素のままではndk-gdbが使えない。  今のGalaxy全てですが。。。        

assetsをnativeから利用する

NDKの欠点としてassetsへのアクセスが標準で準備されていないことがあげられます。そのなかでシステムの設計によっていろいろな方法があると思います。(Android2.1以上対応として書いている) 1Goole I/O 2010秋に説明された方法はoffsetとlengthを取得する方法 2Java上でassetsのコピーを作る方法。 3libzipをnativeに追加して、apkからassetsを読み込む方法。 あたりでしょうか、まだまだ方法があると思いますが。 nativeを扱うプログラマとしては3が一番しっくりきます。 そこでその方法試したところうまく動作しています。 以下のサイトが参考になります。 http://androgeek.info/?p=275  

Ubuntu11.4とAndroid開発環境

よくつかう開発機3台Ubuntu10.10から11.4へアップグレードしました。 はじめにMacBook17inchのUbuntu10.10を11.4にし、 Eclipseやエミュレータ、実機も含め動作したのでそうしました。 Unityの使い勝手はWindows+数字のショートカットがうまく動作しない以外は、 高速に操作ができて、いい感じです。 なおシステム設定はシャットダウンなどのメニュー末尾に移動しています。 その他は最新のUbuntuとして細部にわたって使いやすく感じます。   PS なお,MacBook17inch、Flets-spot用でPPPoEがeth1が無線LANとして認識されていましたがwlan0と正常な名前に認識されました。 そのため、アップデート後、接続できませんでしたがdls-providerの設定を手作業で変更したらうまく動作しました。   

Android開発の本 お気に入り2

Android Layout Cookbookには何度か助けられました。  

Andorid ndkを使ってshared libのデバック情報を削除

案外、android開発ではandroid機のメモリ不足でテストができなかったりして非効率になることがあります。 そんなとき、使用しているライブラリが大きい場合は対処があります。 例えばQtCoreのように大きいライブラリがデバック情報を持っていた場合は再コンパイルすると時間が無駄になるのでstrip -gを使って削除すれば簡単です。 e.g. 23MB -> 2.8M command /usr/local/android-ndk-r5/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-strip -g libQtCore.so.4.8.0 P.S. linux gcc標準のstripはarmを認識できない。

Android開発本の一番お気に入り

新しいプラットフォームの勉強は本家のdeveloperのサイトがいいですが、良い本も手元に欲しいものです。 ボクは10冊ほど購入したり図書館で借りたりして読みましたが、その中で「入門 Android2プログラミング」がおすすめです。 サクサク読めて、前に進めます(これ大事です。ある本は詳細にかかれているのがいいですが、例えばIntentの説明だけで多すぎて、理解できずに前に進めません。。。) しかも、英語が読める方は原本 the busy coders' Guide to Android development Mark L. Murphyさんの http://commonsware.com/ から各種eBookが年間購読ができます。おまけにAdvanced版やBeyond Java版も含まれています。新しいOSが出ても1,2ヶ月でそれに対応した本が読めるのです。 例えば最近3.5になり、HonyCombについての章がいくつか追加になったり、Serviceの内容も濃くなっています。 というわけで、ボクはiPadや興味ある章をプリントアウトして読んでいますw

Android-ndk。Valgrindが使えれば!

ndk-gdbによるマルチスレッドデバック(Level9から)が可能になり(私はgdb 7.1を使っていますw)、Google Testもどうにか使えている。 Qtもnecessitasができた。が、 あとは、そう Valgrindです。 残念ながら、動く気配がまだボクには感じられません。。。  

ubuntu 10.10などでsshのKey認証が動作しない

Ubuntuで、ssh-keygenを使ってキーを生成しid_rsa.pubを接続先のサーバーに転送し、設定しても、つながらないときは ローカル側 の以下のファイルを消して接続してみると動作することがある。 理論的でないため解決に時間がかかったが 動作した 。 $ ssh git@server.foo.ne.jp Agent admitted failure to sign using the key. git@server.foo.ne.jp's password: とパスワードを聞いてくるのでpublickeyが失敗している。 中止して以下を実行すると。。。 $ echo $SSH_AUTH_SOCK /tmp/keyring-OvF8Ar/ssh $ rm /tmp/keyring-OvF8Ar/ssh $ ssh git@server.foo.ne.jp パスワードなしで繋がった。   尚、windowsのcygwin, MacOSではトラブルなくスムーズに動作させることができた。 Ubuntuは漢字入力(特にGoogle Document)とキーリング 関連で大きく使い勝手を悪くしているのが残念である。(もちろん、前者はUbuntuが悪いわけではないがトータルとしての使いやすさの意味) 以上       

QtTestを使わない理由

Qtを使う方なら、なぜ標準のQtTestを使わずGoogle testを使っているのか?と思うかもしれません。 少し長めプログラミング経験から思ったのは、あまりひとつの環境ばかりに依存すると、足元をすくわれることが多いと感じたからです。 Commdore64のBasicからはじまり、DosでCを書きはじめ、ファミコンやスーパーファミコンでアセンブラと格闘し、Palm、携帯java、PHPやWindowsで苦労した経験からです。 もうひとつの理由は、依存が高いと自然に視野が狭くなりあとで思わぬ時間を浪費することも避けたいのです。 ですから、QtはQtCoreだけで十分ではないか?とも感じますw

Google TestとAndroid

Google Test。最近、1.6RCが公開されました。がAndroid ndkには非対応のようです。 実は現在、Android2.2上 Google Test1.5をJUnitとともに使っています。 ただ、うまくstdoutやstderrに出力されない、たとえ、されても不安定なため、完全には動いていません。今は全体が成功したか失敗したかしかすぐにはわからないのです(オプションを使えばファイル出力可能*1)。とはいえ、ないよりはマシで手元にあるWindowsやiOSで作成したTestingコードがほぼそのまま動かすことができるため、時間の節約になっています(*2)。尚、見落としかもしれませんが。。。最新の1.6RCはAndroid ndk正式サポートされるものと勝手に期待していましたがなっていないようです。 *1 e.g. "--gtest_output=xml:/sdcard/gtest_output.xml"を testing::InitGoogleTest(&argc, argv);に渡します。 *2 stdoutやstderrをDDMSでみる方法: android SDKのサイトの方法では2.2などではcrashするため、emulatorオプションやlocal.propをコピーする方法を試しましたが不安定な様子です。 出力の処理が重く限度があるのでしょうか。 P.S. STL(Android's Stlport)がwchar_tを正式にサポートしていないため、1.6RCも1.5と同じ修正箇所で一応ndk-build成功しました。しかし動作確認していません。

Necessitas new Qt Androidサイト

自由なコード開発のために 必要 とされるプラットフォームが正式に公開されるようです。 これでC/C++のコードのマルチプラットフォーム化がしやすくなります。 https://sourceforge.net/p/necessitas/home/ Video http://labs.qt.nokia.com/2011/02/28/necessitas/  

openssl for android ndk r5b

ここで公開されています。 git cloneで取得してndk-buildするだけです。 OpenSSL for NDK r5b https://github.com/eighthave/openssl-android

eclipse+ Qt-plugin + android Qt

android 2.33がリリースされ、さらにC++/Cの開発がしやすくなった。 そこでQtなどが便利なフレームワークになるのだが。。。 eclipse+ Qt-plugin + android Qtと動かしたいが、パッとインストールするだけではうまくいかない。 qt-creator for androidがあるのだから、このあたりからヒントがみつかるかもしれない。   とりあえず、手動として ndk-buildは以下のスクリプトを動かしているので これらをカスタマイズすることによって対処してみる。(ndk/docs/NDK-BUILD.html) $GNUMAKE -f $NDK/build/core/build-local.mk [parameters] (android ndk r5b現在) mocは以下のドキュメント参照 http://doc.qt.nokia.com/latest/moc.html      

Android NDKとGoogle Testing framework

NDKがr5になり、jniによる開発の幅が広がると、気になるのはtesting framework。 java側にはtestingは、はじめから用意されているがNDKでは何もない。 クロスプラットホームを重視したいのでGoogle testing frameworkが使えればいい。と。 思うのは自然な流れである。 しかし、gtest frameworkコンパイルを試してみたが、うまくいかなかった。 無駄なtestingのコードを書きたくないので、ぜひGoogle testing frameworkをAndroid NDK対応にしてほしいものだ。   追記(2011-02-24) 数週間前になるがndk-build用のandroid.mkを書くことによってコンパイルができた。 

Androidテストマシン

Androidの開発で困るのは、Android機が多いことである。 これにかんしては、自分の人脈を駆使するしかなさそうである。 その逆に手持ちにはテストにしにくい機種を揃えるべきだろう。 ついでだがDevPhone G1を持っていてよかったと、少し思っていたりするw  

NTT docomo Galaxy SとDDMSとUbuntu

イメージ
  左からiPhoneG3S, Galaxy S, IPod 2010 fall, もうすぐ使えなくなるSOムーバー,後ろにiPad LinuxはドライバなしでGalaxy Sを認識する。 以下のサイトを参考に http://developer.android.com/guide/developing/device.html すること。 サムスンなので 例: /etc/udev/rules.d$ cat 51-android.rules SUBSYSTEM=="usb", SYSFS{idVendor}=="04e8", MODE="0666"  となる。  環境はUbuntu10.4(64bit) 余談 Windows7(64bit) はイギリスのSamsungのサイトから、Kiesをダウンロードし、インストールすることによってドライバもインストールされ実行可能である。 ndkを使用している場合はcygwinからndk-buildを実行し、eclipse上で実行できた。 さらに余談 android-ndk-r5を使っているが、android2.3から追加になったnative-activityが実機でテストできないのが辛い。 Galaxy Sが2.3にupdateされることを望む。    

開発のベースをubuntuへ

今年からは開発のベースを本格的にubuntu上へ移行しようと思う。 MacBookPro17inch,13inch, vaio, PCはトリプルやデュアルOSへインストールした。 開発モジュールの関係で、Ubuntu10.4(Lucid)を中心に開発を行っている。 ツールはeclipse, Qt Creator(UTF-8BOM対応のため2.1.81)ですべて64bits版である。 その他は主にgitやemacsを使う。 ただ残念なのがLucidではIBusが1.2ベースと古く、Web-App上で日本語入力が安定しない。 MozcやAnthyでも同じであり、10.10以降に移行したいのだが開発モジュールが足かせとなり、不便な思いをしている。 もう少しなんだけどねぇ。

MacBookPro 5,5 MaxOSX , ubuntu10.4, Windows-XP

以下を参考にできる。 https://help.ubuntu.com/community/MactelSupportTeam/AppleIntelInstallation が、最後の最後、Linuxをインストールするときに、grub-pcのバグのため、grubがインストールできない。 理由はmacos-xかXPのパーティションを読み込む際にハングする。 これをさけるには、 sudo chmod -x /etc/grub.d/30_os-prober おこない実行権限を奪うと、ほかのOSをスキャンしないため、ハングしない。 rEFIt を使うため問題はないと思われる。

android Qt creator

AndroidとQtを使うときはQt Creatorが使いやすくなってきた。 僕の環境では、 現在Debuggerは現在のリポジトリでは動作しないが、Releaseは動作している。 http://code.google.com/p/android-lighthouse/   開発環境 ubuntu 10.4 (64bit) MacBook pro 17 (6,1)  

Qt for androidのコンパイル

MacBook Pro 17inchにUbuntu10.10をいれてandroid-lighthouseのcompileはうまくいかなかった。 しかたがなく10.4(64bit os)へ戻しコンパイルすると成功した。 git SHA1 IDは441693fbda67c03d7f6a3459b0a5a86ab48ee43d