Sunday, December 18, 2011

やっとgalaxy nexusにflashが届いた

flash playerはandroidマーケットからダウンロード可能です。
これまでandroid 4.0(IceCream Sandwich)に未対応で、
Galaxy Nexusにはインストール不可能でした。
それが昨日4.0に対応したというニュースが出ました。
そこで、実際にインストールして見ました。

やーっと、CNET TVが見られる!嬉しい!ちゃんと動いた。


Saturday, December 17, 2011

kindle for androidの辞書機能がlimitに引っかかる

AndroidのKindleの辞書機能、微妙に制限がかかっていて辞書閲覧ができません。
【背景】
Galaxy Nexusを手に入れた直後に、1週間英語漬けになる研修に参加する機会を得て
多少英語に慣れ親しんだのですが、その後この英語感覚をどう維持しかつ伸ばすか悩みました。
読む、聞くは大事だという講師の話を真に受けて、下記2つを実施しようと思っています。
1.読む→気に入った記事や論文PDFをKindle for androidで読む
2.聞く→Tech News Todayなどの"英語で興味あるPodcast"を聞く

1.についてなぜKindle for androidかというと、単純にインターフェースがいいからです。
めくる感覚、文字サイズの変更への画面表示の追従、マージン変更、背景色変更、
これら標準機能も優れていますが、やはり辞書機能!が素晴らしい。
画面をホールド(タップを長時間保持)すると、勝手にタッチした単語がハイライトされて、
しかも画面の上か下に辞書が表示されるこの親切設計!
デフォルトでOxfordが使用出来ます。
「英英辞書を使いなさい」という英語講師の言に忠実に従うことができるし、いい!と思っていました。

【問題】
さて、問題はここから。
AmazonからeBook(ファイルはeBook形式)を買ってGalaxy nexusに転送、Kindle for Androidで閲覧すると、確かに辞書機能は有効です。
次に、Kindle for Androidが最新版でサポートしたPDF形式の論文を読んで見ました。
閲覧はできる、でも・・・辞書機能は無効。これはうれしさ半減。
原因はKindle for AndroidがPDF形式に対して辞書機能を適用していないだけのようです。
なら、別の手だ。
PDF形式をeBook形式(AWZとかEBOKとか)に変換すれば辞書機能を適用してくれるだろう。
この変換処理はフリーソフトがやってくれる(mobipocket.com)からできるはず。
結果はダメでした。
上記フリーソフトで変換はうまく行ったのです。
またGalaxy NexusのMTP接続により、その生成ファイルを/kindleフォルダに追加したところ、
確かにKindle for Androidから閲覧できます。
ん?辞書をダウンロードする?
なんでだろう、ダウンロードは済んでいるはず。でもまあいいか。
んん!?リミットを超えました?
この時点で幾つか対策を実施しました。
●辞書を使用しているデバイスを減らしてみる→効果なし
●Kindle for PCからこのPDF由来のeBookを開くと、普通に辞書機能は有効。
なぜAndroidだけ辞書が使えない??
(Kindle Cloud Readerというアプリもあるのですがこれはそもそも辞書機能がないから論外)

だめだ、わからない。
今、解決策を探しています。
もう、amazonが更新してくれるのを待つしかないのかな・・・

Google+に移行したいと思います

【移行前】
ついにこのようなお達しが来る時期となってしまいました。
BloggerからGoogle+に移行してくださいとのこと。

これまでのURLが保存されるのか非常に心配です。

【移行中】
そうか、戻せるのか。


【移行後】
なんにも変わってないようです。プロフィールが変わるだけ。
Google+側からも、なにか特別に変わった感じで見えるわけではないですね。
投稿編集画面から、「共有」が選べるようになっていますね。
これでGoogle+にも同時に投稿できるということでしょうか。

Saturday, December 03, 2011

Galaxy Nexus(ICS)のスクリーンショット取り出し(MTP接続)

android 4.0 icecream sandwichでは、画面のスクリーンショットが撮れます。
方法は、電源ボタンと音量ボタンの同時押しです。

Galaxy nexusでスクリーンショットを取り、それをPCに取り込みます。
USBでPCに接続すると、MTPかPTPかで接続を選択するように設定できますので、
ここではMTPで接続します。
すると、PC(Windows)側からこのように見えます。
フォルダの構造はこんな感じです。
スクリーンショットは、このPictures->screenshotsに入っています。
また、カメラで撮った写真はというと、DCIMの中に入っています。
使い分けができるので嬉しいです。

ちなみにこのMTP接続中でも、スクリーンショットは撮れるようです。
...まあ、usb接続中ならadb使うよ、という声も聞こえてきそうですが。

galaxy nexusのadb接続2: wifi経由

前の記事 Galaxy Nexusのadb接続 の続きでございます。

android 3.0(gingerbread)からwifiでのadb接続がデフォルトでできるという情報を得ました。
コレギドットネット を参考に、wifiでのadb接続を試みました。

(環境:Windows 7 home premium 64bit + eclipse 3.5 + adb)
0. Windowsボタン→”cmd”と入力し、コマンドプロンプトを起動。
1. [USB接続中]adb tcpip <ポート番号> (適当に52525と入力)
2. USB切断
3. adb connect :<ポート番号>
 (IPアドレスは、Galaxy Nexus側の設定→wifi→<接続しているLAN>で表示できます)
接続完了!


下記が接続した証拠です。

windowsの次はandroidなのか・・・

なんの話かというと、うちのブログへのアクセス履歴。
OS別では1.windowsに次いで2.Android
まじですか。3.iPhone まじですか。そういう世の中になったんだなぁ。

2代目androidのgalaxy nexusとmarketノ謎

PC版のandroid marketについてわからないことがあります。
本日購入したGalaxy Nexusにはインストールしておらず、
機種変前のxperiaにはインストールしていたアプリがあります。
(たとえばQRコードリーダ)

PCにgalaxy nexusを接続しandroid marketで上記QRコードリーダを表示させると、
「インストールできない」表示になります。
なぜでしょう。

さらにはですね、本日購入したGalaxy Nexus君のマーケットアプリについても謎があります。
なんと、3g接続でアプリをダウンロード出来ませんでした(12/2の12時時点)
これはがっかりしました。「エラーにより●●をインストール出来ません」と表示されました。
エラー内容は詳しく教えてくれません。
wifi接続してやっとダウンロードできました(12/2の23時時点)
今3g接続(マイエリアあり)でアプリのダウンロードは出来るようになってます(12/3の2時時点)



galaxy nexusのadb接続

本日Galaxy Nexusを購入して参りました。
docomoショップでの店員の混乱などは追って記事にします。

開発者用メニューが大変充実しているGalaxy Nexusですが、
USBデバッグモードを起動してPCに接続してもADBが認識してくれません。

googleが提供しているUSBドライバにGalaxy Nexus用のADBドライバが入っているようなのですが、
どこに入っているのかいまいちよくわかりません。
そこで、SAMSUNGが提供しているドライバパッケージをインストールしてしまいました。
提供元はこちらです。
ドライバインストーラを起動すると下記のようになります。

インストール後は、通常通りADBが認識してくれました。

さて、続いてはwifiでADB接続します。

Sunday, November 27, 2011

spreadsheet filter() return

家計簿をgoogle spreadsheetで管理する際に困った事を書いておきます。

[PROBLEM: CAN'T TREAT N/A ERROR AS 0 VALUE]
私がgoogle spreadsheetで作成した家計簿では、
入出金額と但し書きを表にして管理しています。
ある月の電話料金を自動算出する計算式も導入しております。
計算式は、
1.filter関数で「但し書き[i]="スイドウ"」の条件に合致する「金額[i]」を抽出し
2.sum関数でその結果を合計し、
その月の水道料金支払額を計算します。

ここで、1.filterという関数があります。
これは、配列AとBを引数に取り、
B[i]の値がxならA[i]を出力するという関数です。
返り値は配列になります。
B[i]の値がxのものがない場合、
エラーでN/A(値なし)が返ってきます。

問題は、

[FAILURE PATTERN]
sum(filter(arrayA,arrayB="WaterFee"))

と書くと
仮にfilterの結果がN/Aで返ってきた時、
sumの返り値も0でなくN/Aで返ってきます。
水道料金は隔月引き落としなので、水道料金引き落としがない月は
sumの結果はN/Aで返ってきます。
本当は0で返ってきて欲しいです。

[SOLUTION: SUCCESS/ UTILIZE IFERROR() FUNCTION]
解決可能でした。
IFERROR関数は、引数AがN/Aなら引数Bを返すという関数です。
xがN/Aなら
IFERROR(x; 0)は0を返します。
これを使うと、

[CORRECT PATTERN]
sum(IFERROR(filter(arrayA,arrayB="WaterFee");0))

で、水道料金の合計額か、なければ0が返ってきます。

Wednesday, November 23, 2011

galaxy nexus予約@docomoショップ

galaxy nexusをdocomoショップにて予約して参りました。
店員さんのご対応は非常に良かったのですが、
こちらのわくわく感とはちょっと異なる慎重な受け答えがありました。


「えぇと、SPモードはお使いになられます?
 もしお使いなら、絵文字の入力に制限があります。」


「機種変更でいらっしゃいますか?」  ...yes

「SDカードが挿入できないタイプの機種なので、
 ご自宅のパソコンにソフトをインストールしていただき、
 旧機種からの電話帳移し替えをお願いいたします。」

....それはどこからダウンロードするのか、やり方は?
「docomoの電話帳移し替えソフトがございます、そちらをダウンロードしてインストールください。」
「使い方がわからなければこちらの電話番号に・・・」
...docomo謹製の移し替えアプリなのね。了解。

予約自体は2分で終了。

「何かご不明な点はないですか?」x3
docomoの心配な気持ちがよく伝わって来ましたね。
お財布ケータイなんかのdocomo謹製のサービスはほとんど使いませんから、
私はdocomoに聞きたいことはなく、
「いえ、ないです」
と答えておきました。

受け取りは12/2だそうです。
楽しみですね。

Sunday, November 20, 2011

PKCの最新情報

北里大学の先生に調べていただいた情報を載せます。

 1.難病情報センターのデータベースの情報 6
http://www.nanbyou.or.jp/entry/61

 2.行田総合病院 秋山先生の2008年論文
心因反応として経過を見ていた,PKC(発作性運動誘発性舞踏アテトーゼ)の1例 

3.兵庫県塚口病院 浜田先生の1998年論文
  学会誌脳と発達 

2.の文献が参照している国内調査では、
●疾患の病因は判明しておらず
●診断に特異的検査はない
●PKC150例のうち97例(65%)が家族性、53%が孤発性とのこと。
「PKCになってしまっている人は家族から遺伝した可能性が高いが、
 必ずしも子どもに遺伝するかどうかはわからない」ということのようです。
 ●PKCの約17%は良性家族性乳児痙攣との合併があったとのこと。
 子どもに遺伝したかどうかを判断する一つの材料にはなりそうです。 

なかなか情報がない、と調べてくださった先生もおっしゃっていました。

Monday, August 29, 2011

Javaのinstanceof判定

[Test Code]

		class a {
			a() {
			}
			String getname() {
				return "this is a.";
			}
		}
		class b extends a {
			b() {
				super();
			}
			String getname() {
				return super.getname()+"but this is also b";
			}
		}
		Class bclazz = b.class;
		a bx = new a();
		try {
			bx = bclazz.newInstance();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		}
		if(bx instanceof b)
			Log.w("Test", "this is instanceof b");
		if(bx instanceof a)
			Log.w("Test", "this is instanceof a");
		Log.w("Test", bx.getname());

[Result]


08-29 09:41:31.314: WARN/Test(14370): this is instanceof b
08-29 09:41:31.314: WARN/Test(14370): this is instanceof a
08-29 09:41:31.314: WARN/Test(14370): this is a.but this is also b

AndroidというかJavaのnewInstanceの復習

[Test Code]

		class a {
			a() {
			}
			String getname() {
				return "this is a.";
			}
		}
		class b extends a {
			b() {
				super();
			}
			String getname() {
				return super.getname()+"but this is also b";
			}
		}
		Class bclazz = b.class;
		a bx = new a();
		try {
			bx = bclazz.newInstance();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InstantiationException e) {
			e.printStackTrace();
		}
		Log.w("Test", bx.getname());

[Result]
08-29 00:01:35.763: WARN/Test(336): this is a.but this is also b

Sunday, July 31, 2011

B'z/C'mon

2011/7/27発売。
今回タイアップが多くなっております。
曲紹介の記事があまりないので、僭越ながら私めが主観に基づいて紹介したいと思います。

[曲紹介]
1. C'mon
大震災後にできたというこの曲。
歌詞は「離れてしまえば ぼやける故郷(ふるさと)の灯」から始まる。
大事なものを失い、誰かの泣き声が聞こえてくる絶望の環境でも、
ゆっくり確実に立ち上がろう、というメッセージが全編に渡ってます。
曲は、アコースティックギターのゆったりとしたスクロールのメローなリフ、
サビは爽やかなシーケンスでメッセージ伝達重視の曲。
この曲自体のPVはyoutubeに開設されたB'z公式チャンネルで高画質動画を閲覧可能です。

2. さよなら傷だらけの日々よ
乾いたギターサウンドと乾いた歌詞で「はばたけ」っていう感じのコーラのCMに合わせた作りのハードロック曲。
個人的にはマーチっぽいなぁというサビと分厚いコーラスが売りだと思います。

3. ひとしずくのアナタ
3/4のディレイを利かせた得意の刻みのギターから入るサイケ風アレンジの曲。
メロディーは昔工藤静香が歌ってそうな懐かしい感じのするマイナー調。
歌詞は、ひたすら男の餓えと懇願、という感じ。切なさが出ている。

4. Homebound
コテコテしっとりのバラードで、アレンジは永遠の翼に近いストリングスとピアノ、ゆったりベース。
家族を思い起こさせる歌詞で、アルバムの中ではオアシス的な存在になっている。

5. Don't Wanna Lie
3拍子だが疾走感がある前向きな曲。変われない自分を変えるとき、という前向きな歌詞。
ギターは刻みに徹していてアレンジに溶け込んでおり、曲の完成度がかなり高い。

6. DAREKA
アルバム曲なのに一番はじけている曲。
自虐的かつ世の中を達観して、こんな感じで人生進んでいくよね、という若さを全面に出した歌詞。
はじけたホーンでビッグバンド的な楽しさを感じられる。

7. ボス
ジャズアレンジだがサビは完全に昭和歌謡曲という面白い曲。

8. Too Young
これはどっからどう聞いても昭和歌謡曲。
live gymがダンスホールになるのではないかと思ってしまいます。

9. ピルグリム
ゆったりリズムの乾いたマイナー調から入り、いきなりえぐるギターリフで目を覚ますロックバラード。
歌詞は訴えかける最後が印象的。

10. ザ・マイスター
サッカーの応援ソングのような縦ノリで「オウオウ」というコーラス。
自分を鼓舞する、自分を貫く、という歌詞。

11. デッドエンド
お気に入り。
ジュディーオングの曲のような入りで、「えええ??」と思っていたら濃いリフ、濃いコーラス、濃いベース、
ちょっと暗いメロディ。いやーオリジナリティ全開です。
歌詞は、いまいちわかってないが、追い詰められてるようだがそんな状況を続けてくのが自分の人生、といっている。

12. 命名
NHKみんなのうたで流れそうなバラード曲。
命名とは命に名をつけること、希望にあふれてたあのときの気持ちと一緒に生きる、という歌詞。はばいていきそうな曲。

13. Ultra soul 2011
夏、水泳、といえばこの曲。
アルバム全編でベースのバリー・スパークスが大活躍しているが、
バリーの効果が一番見える曲。
とにかく今回のB'zは刻みが気持ちよくなっている!

Thursday, July 14, 2011

Google App Engine for Goをインストール

2009年11月ごろにお披露目されましたGo言語で2010年初頭に遊んだ経験がありました。
2011年5月に、やっとGoogle App Engineのサポート言語第3号としてGo言語が登場しました。
(第一がPython, 第二がJava)
これは、あまりぱっとした適用分野が見つかっていなかったGo言語陣営にとって期待の星のようです。

早速Google App EngineのGも知らない私が、Go言語を1Kステップくらい書いたことがあるレベルで取り組んでみます。

1.まず、Go言語開発環境を作り直しです(笑)
Goのランタイムエンジンはだいぶ頻繁に改良を重ねております。
2011年7月現在r58.1という数字がついており、そんなメジャーバージョン番号あるのか?と突っ込みたくなるだけでなく、
本当にいろいろ改良されており、Makefileやら周りのツールも全く互換性がありません。
2010年に私が作った環境からはだいぶ差分が蓄積しているようでした。
(primitivesのひとつ、floatもないのかよ、というレベル)
そこで、開発環境をまっさらから作り直します。
下記資料を参照します。
http://golang.org/doc/install.html#tmp_17

1.1開発環境最新版ソースをダウンロード。
まず、googlecodeにあるGo言語開発環境の最新版をインストールします。
このためには、hg(mercurial)パッケージが必要です。
私の使っているFedora 14では、yum install hgと打つといろいろ依存性が解決されてhgがインストールされました。
ubuntu系ではapt-get install mercurialとなるでしょうか。
問題ないなら、下記を打ってみましょう。
hg clone -r release http://go.googlecode.com/hg/ <自分のGo用ディレクトリのパス>
hgパッケージがgooglecodeから開発環境最新版ソースをダウンロードしてくれます。
このディレクトリパスが、これからの作業場所になります。

1.2開発環境バイナリを自動生成。
ディレクトリ内のsrc/all.bashを叩くとバイナリは自動生成されます。
ただダウンロードしただけではsrc/all.bashは動いてくれません。
ちゃんと上の資料に書いてあるとおり、gawkやedをインストールすれば、ちゃんと動いてくれます。
all.bashが動けば、Go言語で書いたスクリプトをコンパイルするためのバイナリファイルが生成されます。
もしできなかった場合は、上記必要パッケージが入っていないか、Go専用環境変数($GOROOT, $GOARCH, $GOOS)が正しいか、
確認して下さい。おそらく、64bitなのに386と指定しているなどではないでしょうか。

2.Google App Engine用のSDKをダウンロードする。
Google App Engineでは、PythonやJavaやGoで書いたプログラムをGoogleにアップロードして、
サービスを動かします。
やるべきことは、プログラムを書くこととアップロードすることです。
プログラムを書くのを助けるのは、プログラムのテスト環境です。
アップロードを助けるのは、アップローダですね。
これらを提供するのがGAE SDKです。
いずれもpythonランタイム上で動くプログラムで書かれているので、
「私はGo言語だけをやりたい」という人でも、Pythonランタイムを入れておけばテストが簡単になったり嬉しいことがあります。
私はFedoraにyum install pythonして上記Pythonランタイムを用意しました。
本命のSDKは下記からダウンロードします。
http://code.google.com/appengine/downloads.html#Google_App_Engine_SDK_for_Go
zipファイルなので好きなところに展開します。私はユーザディレクトリの直下。
よく使うコマンドが入っているので、パスを通してあげます。
私のFedoraでは、.bash_profile末尾に下記を追記して、最後にコマンドをうちます。
【追記】
export PATH=/***さっき展開したところ***/:$PATH
【コマンド】
source .bash_profile

下記資料も参照しました。
http://d.hatena.ne.jp/ma_chupic_chu/20110623/1308813211

3.helloworldを動かしてみる。
まずはHelloworldの詳細が書いてあるドキュメントをダウンロードします。
http://code.google.com/appengine/downloads.html
zipですので好きなところに展開し、index.htmlを開きます。
hello worldという章がありますので、ここに書いてある通りに、2つのディレクトリと2つのファイルを作ります。
myapp/
app.yaml
hello/
hello.go
hello.goの中身は下記のような感じです。
package hello

import (
    "fmt"
    "http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprint(w, "Hello, world!")
}
私は匿名関数を何かと使いたがるので、下記のように書き換えてしまいます。

package hello

import (
    "fmt"
    "http"
)

func init() {
        http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) () {
                fmt.Fprint(w, "Hello, world!")
        })
}

myappディレクトリの上位に移動して、dev_appserver.py myappと打ちますと、テストが実行されます。
テストでは、自作プログラムが簡易webサーバ上で動くので、ブラウザからサーバにアクセスすると結果が得られます。
テストが実行されている最中に、ブラウザからlocalhost:8080を起動しますと、下記のような結果が得られました。

いかがでしょう。Goランタイムはもしかするとおまけかもしれませんが、開発環境として漏れのない環境を作ってみました。

Sunday, February 06, 2011

Androidでバイブレーションを有効化する

またAndroidでつまずきました。今度はバイブレーションです。ハードウェアの機能を使うため特別なセキュリティ設定が必要だそうですが・・・

【課題】
[PROBLEM: NO IDEA ABOUT HOW TO ENABLE VIBRATION ON ANDROID APPLICATION]
Eclipseで開発しているのですが、Android Manifestのどこをどういじればいいのかわかりません。
下記タグを入れればよさそうなのですが、これをAndroid Manifest Editorで簡単に挿入したいです。。。



【解決方法】
[METHOD:]
下記の通りです。
1.Androidアプリのプロジェクトのresフォルダの中のAndroid Manifest.xmlをダブルクリックするか右クリックしてOpen with->Android Manifest Editorを選びます。

2.画像のようなeditorの下にpermissionタブがあるのでそれを選択します。Addをクリックします。

3.uses permissionを選択します。


4.最後に右のプルダウンボックスからVIBRATEを探して選択します。最後にCtrl+Sを押してセーブ。

Saturday, February 05, 2011

au oneから他のメーラへのインポート(POP)

【課題】
[PROBLEM: NO IDEA ABOUT HOW TO IMPORT AU ONE MAIL INTO OTHER MAIL CLIENT]
au oneはgmailサービスを援用してau oneメールサービスを展開しています。
gmailはpopでメールを転送するサービスを提供していますので、
au oneももちろんできるはずです。

私は、auからdocomoに変えてしまったので、
もうau oneは使いません。
いつも使っている別のgmailアカウントに、昔のauのメールをインポートしたくなりました。

でも、どうやってもpopでauoneアカウントにログイン出来ません。

【解決方法】
[METHOD: SETTING AUONE POP PASSWORD]
なぜかがわかりました。
auoneはメールアカウントのパスワードとは別にpop転送サービスのパスワードを設定しなくてはいけないようです。
やり方。
1.auoneメール画面の右上、「設定」→「アカウント設定を変更:Googleアカウントの設定」→「セキュリティ:パスワードを変更」→「メールパスワードの設定」で下記サイトに到着。
https://sec.auone.jp/mail/pc/modpwdsel/
2.パスワードを設定
3.クライアント側を下記サイトに従い設定(popサーバはpop.gmail.com、など)
http://home2.mail.auone.jp/help/contents/pc/Ph=a00d.html

【結果】
[RESULT: PASSED]
なんとかメールを転送することができました。これで晴れてauとおさらばできます。

Monday, January 10, 2011

unixbenchとsysbench II

ubuntuにsysbenchを入れようとしています。
sysbench自体はsourceforgeからダウンロードできそうです(下記)

wget http://sourceforge.net/projects/sysbench/files/sysbench/0.4.12/sysbench-0.4.12.tar.gz

参考にしたページでは、mysql-develが必要となっています。
でも、ubuntu 64bitバージョンでは普通にapt-getでmysql-develを探してもうまくいきません。

apt-get install mysql-devel
-->Error

このページを参考にすると、ライブラリ名が違っていることがわかります。
【正解】

apt-get install libmysql++-dev


【予告編】次はここでつまずいています。


hiro@ubuntu:~/sysbench/src/sysbench-0.4.12$ libtoolize --force --copy
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `config'.
libtoolize: copying file `config/ltmain.sh'
libtoolize: You should add the contents of the following files to `aclocal.m4':
libtoolize: `/usr/share/aclocal/ltversion.m4'
libtoolize: `/usr/share/aclocal/ltsugar.m4'
libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.ac and
libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree.
libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am.

unixbenchとsysbench

マイマシンではubuntu desktopの64bit版を仮想アプライアンス化し、
vmware player上で起動して、Go開発環境としています。
//Goはとてもインスパイアされる言語です。
//Goでは直感的なマルチスレッド化が可能で、私が目指している
//「子供たち向けプログラム」を作る上でも直感性は必須なので、参考にさせていただいています。
Goのプログラムがコンパイルされて実行される時間が早いのか遅いのかを考えるために、
ベンチマークテストをやってみるとどうなるのかが知りたかったので、
unixbench、sysbenchをやることにしました。
まずはunixbenchの結果から。

[やり方]
こちらを参考にさせていただきました。http://goo.gl/wdP5T

unixbenchの結果はこちら。



========================================================================
BYTE UNIX Benchmarks (Version 5.1.2)

System: ubuntu: GNU/Linux
OS: GNU/Linux -- 2.6.32-25-generic -- #45-Ubuntu SMP Sat Oct 16 19:52:42 UTC 2010
Machine: x86_64 (unknown)
Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
CPU 0: Intel(R) Core(TM) i5 CPU 650 @ 3.20GHz (6383.6 bogomips)
x86-64, MMX, Physical Address Ext, SYSENTER/SYSEXIT, SYSCALL/SYSRET
04:09:42 up 8 days, 4:00, 2 users, load average: 0.16, 0.21, 0.18; runlevel 2

------------------------------------------------------------------------
Benchmark Run: Mon Jan 10 2011 04:09:42 - 04:37:47
1 CPU in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 33669499.9 lps (10.0 s, 7 samples)
Double-Precision Whetstone 4066.7 MWIPS (9.9 s, 7 samples)
Execl Throughput 4711.2 lps (30.0 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 887767.4 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 307965.2 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 1596808.8 KBps (30.0 s, 2 samples)
Pipe Throughput 2302810.2 lps (10.0 s, 7 samples)
Pipe-based Context Switching 418146.4 lps (10.0 s, 7 samples)
Process Creation 14305.6 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 6419.8 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 802.4 lpm (60.0 s, 2 samples)
System Call Overhead 4276356.3 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 33669499.9 2885.1
Double-Precision Whetstone 55.0 4066.7 739.4
Execl Throughput 43.0 4711.2 1095.6
File Copy 1024 bufsize 2000 maxblocks 3960.0 887767.4 2241.8
File Copy 256 bufsize 500 maxblocks 1655.0 307965.2 1860.8
File Copy 4096 bufsize 8000 maxblocks 5800.0 1596808.8 2753.1
Pipe Throughput 12440.0 2302810.2 1851.1
Pipe-based Context Switching 4000.0 418146.4 1045.4
Process Creation 126.0 14305.6 1135.4
Shell Scripts (1 concurrent) 42.4 6419.8 1514.1
Shell Scripts (8 concurrent) 6.0 802.4 1337.3
System Call Overhead 15000.0 4276356.3 2850.9
========
System Benchmarks Index Score 1625.6


そこそこいい結果みたいなので、満足しています。
チューニングなどは今後おいおいやっていきます。

Saturday, January 08, 2011

Android/ グラデーションを描画する(GradientDrawable)

前回、SurfaceViewでの描画でつまずいたに続きまして、
またまたAndroidの描画でつまずいてみましたのでご報告。

[PROBLEM: NO IDEA TO DRAW GRADATION]
【つまずき】
グラデーションをどのように描画すればいいのですか?

【解決プロセス】
GradientDrawableを使えば良さそうなことはさすがにドキュメントからわかりました。
でも、いろんな開発者が「これじゃわかんないよ」と言っているようで、僕にはこのドキュメントから使い方を読み解くことはできませんでした。
そこで、こちらを参考にしました。http://softwareobjects.net/technology/other/how-to-create-android-live-wallpaper/

【先に結果をば】
[RESULT: PASSED]


【コードと解決手段】
[SOLUTION: USE GradientDrawable]
手順1.GradientDrawableを作る(その時、グラデーション方向や色を指定)
手順2.GradientDrawableで描画する領域の境界をRect型で指定する
手順3.GradientDrawableのdraw関数を呼び出して描画する

[FYI: HERE IS A SAMPLE CODE]
コードは下記です。

GradientDrawable mGradient = new GradientDrawable(
Orientation.LEFT_RIGHT,
new int[] { 0xff303030, 0xff777777 });
mGradient.setBounds(new Rect(0,0,getWidth()/2,getHeight()));
mGradient.draw(canvas);

Wednesday, January 05, 2011

Android/ SurfaceView内のThreadから描画するときはHandler不要

兼ねてよりの夢であった子供用プログラミング環境をつくろう!と、
Androidプログラミングをこの正月に本格的に始めました。
Androidプログラミングのほとんどは、ウィンドウ(Activity)の制御からスレッド制御までJavaで記述します。

今日は、Androidプログラミングでの私の間違いIを紹介します。

開始から一週間ですが、一日数回はつまずいております。
Androidならではだと思われる作法があったためです。
最たるものとして下記があるでしょう。
Viewを制御できるのはシングルスレッド

この制約から解き放たれマルチスレッドからView制御をしたい場合は
Handlerというキューを作る。そこにView制御をキューイングしておく。

を守らねばなりません。
これは、いくつかのブログを参照して得た情報でした。
そこでこんなコードになっていました。

Thread th = new Thread() {
public void run() {
mHandler.post(new Runnable() {
public void run() {
Canvas canvas = getHolder().lockCanvas();
if (canvas != null) {
onDraw(canvas);
getHolder().unlockCanvasAndPost(canvas);
}
}
});
}
};



minghaiさんのブログは参考にさせていただいてますが、そこの記述では
http://goo.gl/vXLg8 通常のViewではHandlerを用いて画面更新を依頼することになるのですが、SurfaceViewでは自分で用意したThreadの中でCanvasを取得して画面領域をロックして、描画を終わったら一気に更新ということが可能です。

ということでした。

【間違い1】SurfaceViewではHandlerはいらない

【間違い訂正後】
ということで下記のようになります。

Thread th = new Thread() {
public void run() {
Canvas canvas = getHolder().lockCanvas();
if (canvas != null) {
onDraw(canvas);
getHolder().unlockCanvasAndPost(canvas);
}
}
};