VMWareで開発環境を作って圧縮して配布する 
土曜日, 9月 4, 2010, 11:18 AM - プログラム
複数人で開発をすると開発環境を整えるのが大変なので
VMWareで開発環境を一式作って配布したらいいんじゃないかと模索した。

今回作ったのはAndroid用の開発環境でこんな構成です。
・Ubuntu 10.04 LTS
・Eclipse 3.5 Galileo + ADT
・Android SDK
一式インストールして、リポジトリの設定をして、
VMの仮想ディスクのサイズを見ると5.6GB、
DVDに入らないしでかすぎる・・・orz
仮想ディスクの使用量は4GBも無いから、もう少し小さくなって欲しい。

調べてみるとvmware-vdiskmanagerの-kオプションを使うとディスクを小さくできるらしい。
# vmware-vdiskmanager -k AndroidDev.vmdk

実行結果は・・・5.6GB、変わってねぇ・・・orz

よくよく考えてみるとOSのディスクの使い方の都合上、
ファイルは削除されても領域にはデータは残っている。
これらをクリア(0埋め)してあげないと仮想ディスクのサイズは小さくなれないようだ。

というわけでクリアした。
cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill

やってることはディスクを使い切るように
データが全て0な巨大なファイルを作成して削除するだけ。
改めてvmware-vdiskmanagerの-kオプションで実行すると4.4GBまで小さくなった。
これでDVD一枚に収まりそうだ。


でも流石にこのまま配布するのもなんなので、ZIPで圧縮することにした。
で、圧縮しようとしたらエラーになった。
$ zip -r AndroidDev.zip AndroidDev/AndroidDev.vmdk
zip warning: name not matched: AndroidDev/AndroidDev.vmdk

zip error: Nothing to do! (test.zip)

なんか「name not matched」とかでてるけど名前は間違ってないんだけど・・・、
とやってると、実はzipの2GBの容量制限に引っかかってたらしい。
エラーメッセージが間違ってんじゃん・・・(´・ω・)
なのでzipは辞めにして、7-Zipで圧縮したら無事圧縮できて1.3GBまで小さくなった。

あとはこれを仲間内で使うためにWebにアップしたいのだが、
こんな巨大なファイルを何処に置くかで悩む、と。
とりあえず低価格のオンラインストレージを模索中。

つかれた・・・(つ・ω・)つ

参考
How To Shrink VMware Virtual Disk Files (.vmdk)
  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 1009 )

GDD 2010 Dev QuizのしりとりをPrologで解いてみた 
金曜日, 8月 27, 2010, 08:59 PM - プログラム
GDD 2010 Dev QuizのしりとりをPrologで解いてみた。
ソースはこんな感じ。

/* 単語一覧 */
word('cjhexybf','c','f').
word('fwhsrnfmfwl','f','l').
word('fwmclnpgv','f','v').
word('fcqyykmcz','f','z').
word('fzizucydrln','f','n').
word('lzrolv','l','v').
word('lealqfhwvz','l','z').
word('vllumjtw','v','w').
word('veamp','v','p').
word('vombftpxjn','v','n').
word('vcqdfhx','v','x').
word('wjccgnhsp','w','p').
word('weetdzq','w','q').
word('wjfppjiq','w','q').
word('plguqhggea','p','a').
word('pqlmgfcbhcs','p','s').
word('pqdosvooi','p','i').
word('atlywms','a','s').
word('acolnpnk','a','k').
word('sqtfqle','s','e').
word('skmhxd','s','d').
word('skrpmkbu','s','u').
word('espslutsd','e','d').
word('epmzsxkey','e','y').
word('ejddiy','e','y').
word('eqtwaowso','e','o').
word('dxxhioj','d','j').
word('drzckcjo','d','o').
word('jtpvc','j','c').
word('zcznklih','z','h').
word('hhkzgq','h','q').
word('qtlwm','q','m').
word('mlkqlqek','m','k').
word('kuouldmt','k','t').
word('krzfwmdjxi','k','i').
word('tcwjjzfnhde','t','e').
word('ttihzemy','t','y').
word('yhrgnymb','y','b').
word('bpheoteg','b','g').
word('geyvr','g','r').
word('nrpex','n','x').
word('xzetvnrrwq','x','q').
word('idsnumnbno','i','o').
word('odijxqhihu','o','u').
word('uqslajc','u','c').
word('cfrdzsr','c','r').

/* 述語 */
member(X, [X|_]).
member(X, [_|L]) :- member(X, L).

nextWord([L|A], W) :-
word(L,_,T),word(W,T,_),not(member(W,[L|A])).

solvePath(PATH,PATH) :-
not(nextWord(PATH,_)).
solvePath(PATH,RESULT) :-
nextWord(PATH,W),
solvePath([W|PATH],RESULT).

goodMyPath(PATH,PATH) :-
not(nextWord(PATH,_)).
goodMyPath(PATH,RESULT) :-
not(badMyPath(PATH)),
nextWord(PATH,W1),
nextWord([W1|PATH],W2),
goodMyPath([W2|[W1|PATH]],RESULT).

badMyPath(PATH) :-
nextWord(PATH,W1),
not(nextWord([W1|PATH],_)).
badMyPath(PATH) :-
nextWord(PATH,W1),
not(nonBadEnemyPath([W1|PATH])).
nonBadEnemyPath(PATH) :-
nextWord(PATH,W),
goodMyPath([W|PATH], _).

solveGamePath(START,RESULT) :-
nextWord(START,W),
goodMyPath([W|START],RESULT).


実行すると全解探索して絶対勝てるパスを
バックトラックしながら全部だしてくれます。

?- solveGamePath(['cjhexybf'],RESULT).
RESULT = [cfrdzsr, jtpvc, dxxhioj, espslutsd, sqtfqle, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [geyvr, bpheoteg, yhrgnymb, epmzsxkey, sqtfqle, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [geyvr, bpheoteg, yhrgnymb, ejddiy, sqtfqle, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, eqtwaowso, sqtfqle, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, skrpmkbu, atlywms, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, acolnpnk, plguqhggea, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, pqdosvooi, wjccgnhsp, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, mlkqlqek, qtlwm, weetdzq, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, mlkqlqek, qtlwm, wjfppjiq, vllumjtw, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, mlkqlqek, qtlwm, xzetvnrrwq, vcqdfhx, lzrolv, fwhsrnfmfwl, cjhexybf] ;
RESULT = [cfrdzsr, uqslajc, odijxqhihu, idsnumnbno, krzfwmdjxi, mlkqlqek, qtlwm, hhkzgq, zcznklih, lealqfhwvz, fwhsrnfmfwl, cjhexybf] ;
false.


組み方は我ながら雑だけど、これでLv3まで全部いけました。
(Lv3は予め枝狩りをしておかないと無理でしたが。)
Prolog恐るべし…


  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 982 )

悩むことと考え込むこと 
日曜日, 8月 8, 2010, 06:52 PM - 戯れ言
悩むことと考え込むことは違う。
前者は放っておいても解決するが後者は解決しない。

進めなくなって立ち止まっているなら、
考えないといけないことか、
悩む必要のあることなのか、
そこの分別ができなければ拗らせることになる。

考えないことを悩んでも解決しない。
悩んでいるものを考えても解決しない。
そんなことを続けていれば、
心を磨り減らすだけだ。

まぁ悩むのを楽しんでいられることなら
いいんだけどね(´・ω・)

  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 1057 )

前向きに見せること 
日曜日, 7月 18, 2010, 11:48 PM - 戯れ言
小中高とニヒっていたからどういう行動を取れば
前向きに見えたり後ろ向きにするかは判る。
だから前向きに見えるように立ち振る舞えば、
当然周りからは前向きに見える。

でも見えるだけで、当人が本当に前向きかはわからない。
根っから真面目でそうしているのかもしれない。
人によく見て欲しいからそうしてるのかもしれない。
敵を作りたくないからそうしてるのかもしれない。
前向きでないといけないという強迫観念からかもしれない。

まぁ、どうでもいい。

  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 733 )

Debian Linux(Lenny)とHT-03Aの接続トラブル 
日曜日, 7月 11, 2010, 03:49 PM - Android
Debian Linux(Lenny)でAndroid SDKを触っていて、
USB接続のHT-03Aをddmsから見ようとすると
例外が出て見れない現象が起こった。

37:32 E/DDMS: device (????????????) request rejected: insufficient permissions for device
java.io.IOException: device (????????????) request rejected: insufficient permissions for device
at com.android.ddmlib.AdbHelper.setDevice(AdbHelper.java:726)
at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:363)
at com.android.ddmlib.Device.executeShellCommand(Device.java:280)
at com.android.ddmuilib.SysinfoPanel.loadFromDevice(SysinfoPanel.java:156)
at com.android.ddmuilib.SysinfoPanel.deviceSelected(SysinfoPanel.java:123)
at com.android.ddmuilib.SelectionDependentPanel.deviceSelected(SelectionDependentPanel.java:52)
at com.android.ddms.UIThread.selectionChanged(UIThread.java:1662)
at com.android.ddmuilib.DevicePanel.notifyListeners(DevicePanel.java:753)
at com.android.ddmuilib.DevicePanel.notifyListeners(DevicePanel.java:741)
at com.android.ddmuilib.DevicePanel.access$1100(DevicePanel.java:56)
at com.android.ddmuilib.DevicePanel$1.widgetSelected(DevicePanel.java:360)
at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at com.android.ddms.UIThread.runUI(UIThread.java:484)
at com.android.ddms.Main.main(Main.java:105)


どうやらUSB接続を見るのに権限が足りていないようだ。
よくよく考えれば大抵のデバイスはrootでないと
接続できないので当然といえば当然だ。

で、調べてみると本家のサイトにも記載があった。
Setting up a Device for Development

このサイトの通り、/etc/udev/rules.d/51-android.rulesを作って、
# For Gusty/Hardy, edit the file to read:
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE="0666"
# For Dapper, edit the file to read:
SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", MODE="0666"

chmodしてudevを再起動して、
# chmod a+r /etc/udev/rules.d/51-android.rules
# /etc/init.d/udev reload

HT-03Aを差し直した。

・・・

でも相変わらず見えないままだった・・・。
様子からすると権限が正しく見えてない様子。
ふと思ってudevのrulesを"usb"でgrepをかけると・・・
/etc/udev/rules.d# grep -H "usb" *.rules

(略)
51-android.rules:SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", ATTRS{idProduct}=="0c02", MODE="0666"
51-android.rules:SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0bb4", ATTRS{idProduct}=="0c02", MODE="0666"
(略)
91-permissions.rules:SUBSYSTEM=="usb_device", MODE="0664"
(略)


91-permissions.rulesで上書きしてるがな・・・(´・ω・)
というわけで51-android.rules→92-android.rulesにリネームすることで対処した。

やっと実機でデバッグができる。
しかしディストリビューションごとのこの辺りの差異は厄介だなぁ。

  |  0 trackbacks   |  このエントリーのURL   |  related link   |   ( 3 / 831 )


Back Next