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 / 1013 )

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 )

MathDrawer公開 
日曜日, 10月 25, 2009, 09:54 PM - プログラム
SecondLifeのパーティクル用素材を作りたかったので
疑似ピクセルシェーダで模様を描けるツールを作った。

標準でいくつかのコードを同封しているので誰でも使えると思う。
でもドキュメントは未だ書いていない・・・。
(説明書が欲しい人はいってください・・・)

スクリーンショット

素材の見本1

素材の見本2



↓ソフトのダウンロードはこちらから
MathDrawerファイル置き場

↓素材のダウンロードはこちらから
Alpha Materials Vol1
注意:アルファチャンネルのみの画像なので背景が真っ白だと何も見えません。

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

XREA内を引っ越し 
水曜日, 5月 27, 2009, 10:34 PM - プログラム
HPにはXREAを使用しているのですが
PHPやMySQLの新しいバージョンを使いたいので
新しいサーバーに引っ越しました。

そのときにトップページが表示されない現象が発生しました。
調べてみたらpukiwikiのshowrss.inc.phpがワーニングを出していました。
  Warning: xml_parse() 〜なんたらかんたら〜
原因はこの雑記のRSSをshowrss.inc.phpでpukiwikiのFrontPageに
表示していたのですが、rssのxmlがeuc-jpなのを
内部的にutf-8に変換する箇所で起こっていました。

php4のxml_parseはXML宣言の文字コードがeuc-jpでも
xml本体の文字コードがutf-8なら使用できていました。
しかしphp5ではXML宣言を見ているので
XML宣言がeuc-jpなのにxml本体がutf-8なのでワーニングが出る、
ということでした。

対処法はShowRSS_XMLクラスのparseメソッドで
XML宣言を豪快に書き換えることで対応しました。

// Normalize to UTF-8 / ASCII
if (! in_array(strtolower($this->encoding), array('us-ascii', 'iso-8859-1', 'utf-8'))) {
$buf = mb_convert_encoding($buf, 'utf-8', $this->encoding);
$buf = preg_replace('/encoding="[a-z0-9-_]+"/i', 'encoding="utf-8"',$buf, 1);
$this->encoding = 'utf-8';
}


もう少し巧い直し型がありそうだけど
今日のところは対症療法で終了。

補足:環境はPukiWiki 1.4.7(euc-jp)です。

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

RdbAssistant初リリース 
土曜日, 5月 2, 2009, 02:27 PM - プログラム
仕事でSQLを叩いていると一般的なSQLエディタだと
機能が足りずに痒いところに手が届かないことが多い。
だから自分でSQLエディタを作ることにした。

WindowsもLinuxも気にせず使用ししたいのでプラットフォームはJava。
バージョンは古めだけどとりあえず1.5.x以降にした。

とりあえず必要最低限の機能のみを実装したので公開。


漠然としているけど今後実装予定の機能。
・JSPのようなスクリプト機能を実装したい
・SQLを切り替えを楽にする
・アプレット化、WebStart化


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


Back Next