Portable Ubuntu
http://portable-ubuntu.of-jp.com/
coLinuxのPortable版+Ubuntu版らしい。
昔andLinuxを使ったときはLinuxマシンが別途あったので特別に重宝しなかったが、今は無いのでVirtualBoxの代わりに使えるかもしれない。
昔よりマシンのスペックあがってるから、常時起動してても気にならないかもしれないし。
とりあえず、一番新しいTRESを入れてみよう。不安定って書いてる人もいたけど……ま、まあ、とりあえずやってみるだけ。Portableなんだから失敗したら消すだけ……うん。そう自分を言い聞かせよう。
→駄目でした。起動中にmodprobeに失敗して止まった。
うーん、これを自力で修正するのと、古いバージョン入れるのと、どっちが早いか?
とりあえず何も考えないで済む、後者でいこう。ということでDOS_LITEを入れる。
こっちはOK。ちゃんと起動した。
NATも正常動作してて、apt-get updateもOK.
日本語にする必要は特にないので、Timezoneだけ修正。
他にいじるのは
- メモリ。標準で256だと少なすぎる。マシンのメモリが4GB、うち1GBをRAM DISCにして、普段からWindowsで1GB〜2GB使うので、さすがに1GBは割り当てられないか。とりあえず512。別にAndroidをビルドするわけでもないので足りるだろう。
- swapの場所。TEMPをRAMDISCに置いてるので、swapに256使われると、メモリを768使われてしまう。適当にC:\TEMPにでも置く。……あれ、設定はどこだろう。↑のサイトは情報が古くてファイルが変わってしまっている模様。
問題発生。
apt-getしたら、落ちた。Resource Temporary Failure。
iOS4
iPhoneのファームがupdateされたので適用してみた。
マルチタスクだけあってアプリの切り替わりがよくなった。
電池の持ちも良くなったらしいが・・・・・・普段多用しない人間にとって重要な待機電流は下がったのかな?
http://www.lifehacker.jp/2010/06/100622ios4.html
カメラを無音にする技。
なるほど、音楽を鳴らしている時は、音量ボタンが音楽の音量の制御に使用され、
かつその音量がカメラにも適用されるのか。
普段は着信音に適用されるが、この仕様の隙間をうまく突いた技だ。
WDの2TB HDD買いました
VirtualBox入れてAndroidのソースを落とす環境作ったら、HDDがそろそろ10GB切ってしまったので
新しくHDDを買うことにした。
(正直10GBもあればもうしばらくは持つとは思うが、最近HDDを買ってなかったので・・・)
最近は(といってもいつも”最近”と言ってる気がするけど・・・)ほんとHDD安いね。
2TBで1万切るとは。
あと、知らなかったが、最近のWDのHDDはセクタが4096になっているのね。
http://journal.mycom.co.jp/news/2009/12/18/021/index.html
現在使用してるメインPCはXPだが、XPではWDの専用ツール使わないと速度が非常に遅いそうなので
一台持ってるvistaノートPCでフォーマットした。
うーむ、そろそろXPも去り時か……
portrait と landscapeの処理速度
もぐら叩きをやっていて気づいたが、landscapeの方が処理が早い。
いつも、縦スクロールが減るという理由でportraitばかり使っていたが、
こういうのを味わうとlandscapeに適応せざるを得ない……
まあ、もぐら叩きのようなアプリのみportraitが早い、という可能性もあるけども。
どちらにせよ、何故速度差が生じるのかが気になるなあ。
描画関係のclassがportrait基準、とか?
もぐら叩き2
http://www.hakkaku.net/series/android-で再開する-java-プログラミング
様にまともなもぐら叩きがあったので勉強させていただく。
大きな違いは、Viewをextendsしたclassの中に、もぐらclassを出現させてるところと、
そのclassをTimer周期ごとに再描画してるところ、
あたり判定をonTouchEventで得られる座標から行っているところ、か。
あとは自分が何故かゲームのストップ/リセットに力入れたあたり。
一昨日の時点では、あたり判定はButtonのonClickしか思いつかなかった。そりゃ、Buttonだってtouchされた座標データ使ってるよなあ・・・
Randomで表示変えること前提にしてるから、Layoutに縛られなくて済むし。
あとArrayListとか、Listの存在忘れてた……我ながら酷い。
もう少しちゃんとサンプル見て勉強しよう。
もぐら叩き
ボタンのonClickが使えるならもぐら叩きを作れるんじゃ?ということで作ってみた。
とりあえず.javaだけ。layoutはTableLayout使ってスタートボタン1つ、結果表示TextView1つ、似非モグラボタン6つ作っただけ。
タイマが使えて、onClick使えて、ならいけるんじゃね?、と頭の中でまともに考えずにコードを書いた結果がこのありさまだよ!
public class MoguraTataki extends Activity implements OnClickListener{ // Views private Button button_start; private Button button_00; private Button button_01; private Button button_02; private Button button_10; private Button button_11; private Button button_12; private TextView point_text; // game values private Boolean game_start = false; private Integer point = 0; private Boolean mogura_status[]; // for Timer Timer timer = null; Handler handler; private Integer time; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mogura); button_start = (Button) findViewById(R.id.mogura_Button_start); button_00 = (Button) findViewById(R.id.mogura_Button0_0); button_01 = (Button) findViewById(R.id.mogura_Button0_1); button_02 = (Button) findViewById(R.id.mogura_Button0_2); button_10 = (Button) findViewById(R.id.mogura_Button1_0); button_11 = (Button) findViewById(R.id.mogura_Button1_1); button_12 = (Button) findViewById(R.id.mogura_Button1_2); point_text = (TextView) findViewById(R.id.mogura_textView); mogura_status = new Boolean[6]; button_start.setOnClickListener(this); button_00.setOnClickListener(this); button_01.setOnClickListener(this); button_02.setOnClickListener(this); button_10.setOnClickListener(this); button_11.setOnClickListener(this); button_12.setOnClickListener(this); Init(); // for timer timer = new Timer(true); handler = new Handler(); timer.schedule( new TimerTask() { @Override public void run() { handler.post(new Runnable() { @Override public void run() { TimerEvent(); } }); } }, 100, 100); // first delay and delay interval, [ms] } private void TimerEvent(){ // init timer if( time == 0 && game_start == true ){ time = 100; } // in game start if( time != 0){ if( time % 10 == 0 ){// make mogura EnableMogura(); } else if( time % 10 == 5 ){// vanish mogura DisableMogura(); } time--; if(time==0) GameStop(); } } private void EnableMogura(){ Random rand = new Random(); int r = rand.nextInt(6); switch(r){ case 0: button_00.setText("○○○○○"); break; case 1: button_01.setText("○○○○○"); break; case 2: button_02.setText("○○○○○"); break; case 3: button_10.setText("○○○○○"); break; case 4: button_11.setText("○○○○○"); break; case 5: button_12.setText("○○○○○"); break; } mogura_status[r] = true; } private void DisableMogura(){ int r; for(r=0; r<6; r++){ if(mogura_status[r] == true) { DisableMogura(r); break; } } } private void DisableMogura(int r){ if(r < 0 && 5 < r) return; switch(r){ case 0: button_00.setText("×××××"); break; case 1: button_01.setText("×××××"); break; case 2: button_02.setText("×××××"); break; case 3: button_10.setText("×××××"); break; case 4: button_11.setText("×××××"); break; case 5: button_12.setText("×××××"); break; } mogura_status[r] = false; } public void onClick(View v){ if( game_start == false){ // now no game if(v == button_start){// start or reset game GameStart(); } } else{ if(v == button_start){ GameReset(); } else if (v == button_00){ if(mogura_status[0] == true){ PointUp(); DisableMogura(0); } } else if (v == button_01){ if(mogura_status[1] == true){ PointUp(); DisableMogura(1); } } else if (v == button_02){ if(mogura_status[2] == true){ PointUp(); DisableMogura(2); } } else if (v == button_10){ if(mogura_status[3] == true){ PointUp(); DisableMogura(3); } } else if (v == button_11){ if(mogura_status[4] == true){ PointUp(); DisableMogura(4); } } else if (v == button_12){ if(mogura_status[5] == true){ PointUp(); DisableMogura(5); } } } } private void Init(){ point = 0; game_start = false; time=0; button_start.setText("start"); point_text.setText("point:" + point); for(int i=0; i<6; i++){ DisableMogura(i); } } private void GameStart(){ Init(); game_start = true; button_start.setText("reset"); } private void GameReset(){ game_start = false; Init(); } private void GameStop(){ game_start = false; button_start.setText("start"); } private void PointUp(){ point++; point_text.setText("point:" + point); } }
自分で書いててイライラしてた。
どのボタンを押したかどうかの感知を決めうちで書いてたり、ボタンのsetTextも決めうちだったり……
あと書きながら使いそうなコードを追加していったので要らないコード残ってたり……
たぶんぐぐったらもっと綺麗なもぐら叩き作ってる人いるんだろうなあ。
明日はそれサガして反省会しよう。