2007年08月01日
GBA向けゲーム作り
かなり前に購入していた「Linuxで目覚める僕らのゲームボーイ」を片手に、GBAプログラミングを弄ってみました。調べてみたら、この本を購入したのは、2004年4月でしたので、実に3年近く埋もれていたわけですね^-^;。
あくまでプログラミングの勉強が目的なので、作り上げたゲーム自体はヘッポコなものです。でも、何か楽しいものを題材にしないと、モチベーションが続きませんので(笑。それに、目的を持って弄っていると、理解を深めるきっかけが生まれます。また、あとで知識を振り返るときに、インデックス代わりにもなります。
機能としては、前述の参考書籍で触れられているものを一通り舐めるように、設計しました。最初は、サウンドは鳴らさないつもりでしたが、一応勉強なので、漏れなく組み入れました。その結果、FIFOバッファへのDMA転送や、タイマを用いた標本周波数との同期など、いろいろ面白い知識を得ることができました。
先に書いたとおり、出来上がったものは大したものではありませんが、作り終えたときには、えも言わぬ達成感に包まれました。おかげで、ハードウェアを意識した低位層のプログラミングの見通しが、だいぶ良くなりました。
- LinuxでGBAゲーム開発@技術でWiki
投稿者 bokupi : 01:19 | コメント (0) | トラックバック
2007年06月04日
VMWareにDebianをインストール
GBAの開発環境を作るために、仮想マシン上にDebianを載せることにしました。knoppixは、ちょっと試すには良いけど、使い続けるにはちと辛いので。まあ、起動時の激しいCD読込み音を聞きたくないのが、大きいんですけど。
で、以前Win98を入れるために用意したVPC2004があるので、そこに入れてみました。ところが、VPC2004は16ビットカラーまでしか対応しておらず、またパッケージのダウンロードにも何度か失敗したりで、一苦労。そうこうしながら、半日以上かけてようやくインストールできたのは良かったけれど、VPC2004はUSBデバイスを使えないことが判明orz。結局VMWareとQEMUをダウンロードして、そこにインストールしました。VPC2004より全然相性が良いようで、何の問題もなくインストールできました。
ちなみに、ネットワークインストールでほぼ最小構成にしたので、必要なパッケージをapt-getで入手。初期状態では、Hello Worldすらコンパイルできませんでした(苦笑)。とりあえず、ホスト側の環境はある程度整ったので、ARM用のbinutilsだけビルドしてみました。また明日からコツコツ進めていこうと思います。
投稿者 bokupi : 23:41 | コメント (0) | トラックバック
2007年05月29日
続・旅マップを改造
旅行先を地図上に記録している旅マップの機能改善を、ようやく完了しました。前回エントリからの変更点は、次のとおりです。
まず、MarkerManagerによるランダム表示を、地域ごとに平均化するアルゴリズムを組み込みました。例えば、日本に5個、ハワイに1個、カナダに1個とあった場合、これまでは、単純にランダムで一定数を選んでいたので、日本から複数個のみ出てしまう確率が高かったです。これだと、ハワイやカナダにマーカーがあることに気づけないので、問題がありました。新しいアルゴリズムでは、これらの地域が全て入るズーム倍率では、ハワイ1個、カナダ1個、日本1個以上を表示します。仕組みですが、地図をブロック単位に分けて、そのなかから一定数をランダムに選ぶようにしています。
もう1点は、詳細表示を実装しました。マーカーの吹き出しのなかに「詳細」リンクがある場合、それを押すと旅のルート表示をします。
旅行をするたびに、地図上にマーカーの数が増えていくので、何だか楽しいです^-^)
投稿者 bokupi : 07:27 | コメント (0) | トラックバック
2007年05月21日
旅マップを改造
これまで、Google Maps APIを使って、旅行先を地図上に表示してきましたが、その仕組みを少し改造してみました。これまでは、各マーカーの情報を直接HTMLソースに書き込んでいたので、管理が煩雑でした。そこで、MySQLをバックグラウンドに用意しました。HTMLからXMLHttpRequestでサーバにあるphpスクリプトにアクセスし、そこからMySQLにアクセスするという形です。
仕組み自体は思ったよりアッサリできたのですが、思わぬところで悩みました。最初は、phpではお約束気味の文字コード関連です。MySQLにはUTF-8で格納していることを確認し、default_charset、mbstring.internal_encodingにもUTF-8を設定したけれど、駄目。原因は、mbstring.http_outputをUTF-8に設定し忘れたせいでした。しかし、これ文字コードが原因と気づくまでに時間がかかりました--;。
先の修正後Firefoxで動作確認して、OKだと思ったら、IEなどで動かなかったりしました。HTMLの解釈ではIEはルーズというイメージがありましたが、今回のjavascript周りではFirefoxのほうがルーズに感じました。IEでは、ちゃんとContent-typeをtext/xmlに指定しないと、駄目のようです。他にも、セレクトメニューの値プロパティで、textとvalueを間違えても、Firefoxでは通ってしまいましたし…。
ただ、一応リリースはしたものの、まだ作りかけです。各旅行のルート表示とか、MarkerManagerで表示するマーカーの選択方法の改良とか。現在は完全にランダムで指定しているので、バラけ具合がよくありません。例えば、東京に5つ、北海道に1つ、沖縄に1つのマーカーがあり、ズームレベル3では3つのマーカーを表示するとします。見た目には、北海道、東京、沖縄のマーカーが1つずつ表示されたほうが良いですが、3つとも東京になる確率が高いです。何かいいアルゴリズムはないかなあ、と通勤時に歩きながら考えています^-^;
投稿者 bokupi : 23:10 | コメント (0) | トラックバック
2007年05月17日
Linuxデバイスドライバ第3版
今週の月曜日、珍しく本屋で購入してきました。最近、この手の書籍はほとんどAmazonで買ってしまうのですが、色彩検定の参考書がAmazonにはなく、通販か特約店のみで販売なので。けれど、結局そちらは在庫切れだったので、こちらの本のみ買うことになりました。
でも、そのようにAmazonでの購入に慣れてしまうと、本屋で目的の本を探すのは、面倒に感じてしまいますね。このとき入った本屋は、検索端末があったので、よかったですけど。けれど、一度に多くの本を見渡して比較できる点は、Amazonにはない魅力です。
さて、話を戻して、Linuxデバイスドライバ第3版。Linuxのデバイスドライバの書き方について、解説しています。カーネルモジュールを作るさいの環境設定や、カーネルAPIの使い方などが紹介されており、参考になります。既にWeb上の記事などを参考に、軽く予習した形なので、それを補充するようにやや飛ばし読みです。現在は第4章くらいまで読みました。
で、机上だけではなく、実際にコーディングをして理解したいのですが、問題は「デバイス」です。せっかく自分でドライバを書くのだから、何かオリジナルなデバイスを動かしたほうが楽しいですよね。まあ、そんなことをしていると、どんどん深みにはまっていきそうですけど(苦笑。てか、それより先に、「Linuxで目覚めるぼくらのゲームボーイ」で早く遊んでしまわないと…。買ってからもう数年経っているかと思います。。
投稿者 bokupi : 23:56 | コメント (0) | トラックバック
2007年05月07日
コンピュータの構成と設計(下)~7章8章を読了
コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース第3版 (下)
というわけで、全てを読み終えました。理解度は半分弱でしょうか。もとより全て理解できるとは思っておらす、とりあえず内容を浴びることが大事かなあ、と思いました。
7章
- 容量と速度の異なる記憶装置を階層化して、大容量でかつ高速な記憶装置を作成する
- こうした仕組みが成り立つのは、データの時間的局所性、空間的局所性に依る
- 主記憶を高速に使うため、記憶階層化しているのが、キャッシュ
- キャッシュ内のデータ配置方式として、フルアソシエイティブ、セットアソシエイティブ、ダイレクトマップがある
- フルアソシエイティブはデータをブロック化せず、ダイレクトマップは各データを個別にブロック化する
- 主記憶を大容量にするため、記憶階層化しているのが、仮想記憶
- 仮想アドレスから物理アドレスに変換するさいに、ページ表を用いるが、そのページ表におけるキャッシュの役割を果たすのが、TLB
8章
- 外部記憶装置、バス、入出力装置に関する説明が簡単に書かれている。この章は、範囲は広いがページ数は薄く、紹介程度となっている
投稿者 bokupi : 21:53 | コメント (0) | トラックバック
2007年04月16日
サーバが暴走
昨晩、突然サーバが暴走し、何もできない状態になりました。状況を確認しようと画面を開くも、デスクトップ画面の描写がすこぶる遅いです。Telnetでログインしようにも、応答がありません。これはやばいかも…、と顔色がどんどん悪くなったところで、サーバの制御が戻りました。
今のはなんだ?とログを漁ってみると、下記の内容。
Apr 15 21:34:20 pokota kernel: Out of Memory: Killed process 17209 (java).
Apr 15 21:34:31 pokota kernel: Out of Memory: Killed process 17210 (java).
Apr 15 21:34:31 pokota kernel: Out of Memory: Killed process 17211 (java).
Apr 15 21:34:31 pokota kernel: Out of Memory: Killed process 17212 (java).
Apr 15 21:34:31 pokota kernel: Out of Memory: Killed process 17213 (java).
Apr 15 21:34:31 pokota kernel: Out of Memory: Killed process 17214 (java).
Apr 15 21:34:31 pokota kernel: Out of Memory: Killed process 17215 (java).
Apr 15 21:34:31 pokota kernel: Out of Memory: Killed process 17216 (java).
Apr 15 21:34:31 pokota kernel: Out of Memory: Killed process 17217 (java).
Apr 15 21:34:42 pokota telnetd[7672]: ttloop: peer died: EOF
Apr 15 21:34:42 pokota inetd[656]: pid 7672: exit status 1
javaプログラムが暴走したみたいです。確かにここ数日、ゲーム用のサーバアプリが2回ほど落ちていました。おそらく同じ現象でしょう。でも、数年間運用してきて、これまでとくに問題はなかったんですけどね。今後も頻発するようでしたら、稼動停止も含めた対策を考えようと思います。まあ、上記のログメッセージからは、無限にオブジェクト生成を繰り返してしまうバグが潜んでいる気がしますね^-^;。
(2007/04/27追記) その後も頻発するので、調べてみたら、root権限でよくわからないjavaプロセスが動いていました。怪しいのでkillしたら、症状が出なくなりました。うーん、気味が悪いですね。
投稿者 bokupi : 16:32 | コメント (0) | トラックバック
2007年03月30日
コンピュータの構成と設計(下)~5章6章を読了
コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース第3版 (下)
下巻を読み始め、現在6章まで読み終えました。ようやく半分といったところです。データパスの設計部分は、昔大学の授業で見て以来ですね。上巻までの内容と比べて、個人的にとっつきが悪く、理解に手間取ってしまいました。以下、備忘録代わりのまとめです。
5章
- データパスは、各機能ユニットと制御線を組み合わせたもの
- 各機能ユニット。状態論理要素(レジスタ書込みなど)と組合せ論理要素(ALUなど)がある
- 制御線の状態により、各機能ユニットの入力元などを変更できる
- 単一クロックサイクルのデータパスは、1命令を1クロックサイクルで実行する
- マルチサイクルのデータパスは、各命令をステップに分解し、その1ステップに1クロックサイクルを要して実行する。クロックサイクルが分かれることで、1命令中に同じ機能ユニットを複数回使える
6章
- パイプライン処理は、1命令を分割してステージ化する。1クロックサイクルで、1ステージを実行する
- パイプラインにより、1クロックサイクルの時間が短くなり、さらにスループットを上げることができる
- 各ステージは、命令フェッチ、命令デコード、命令実行、メモリアクセス、レジスタ書込み
- パイプライン化したがために、構造ハザード、分岐ハザードなどの問題が発生する
- 解決策として、ユニット間のバイパスの設定や、遅延分岐など
- 複数命令発行により1クロックサイクル中の命令数が増える
- 動的な複数命令発行プロセッサを、スーパースカラという
投稿者 bokupi : 23:56 | コメント (0) | トラックバック
2007年03月26日
Linuxのシステムバックアップ
これまで、ずっとやろうと思って放置してきた、Linuxのシステムバックアップにようやく手を付けました。利用したツールは、定番のdumpです。これに合わせて、これまた今まで放置してきたサービスの自動起動設定も行ないました。
ただ、バックアップポリシーはまだ決めていません。現時点ではそれほどデータ量が多くないので、日曜にフルバックアップして、他の日は日曜に対する差分バックアップでいいかなあ、と考えています。あと、これまでのtarによる日次バックアップは、無駄になるので廃止ですかね。
ここまでの作業内容を、以下のWikiにまとめてみました。
- Linuxをシステムバックアップ@技術でWiki
あと、メインPCのほうのバックアップも、ちゃんとポリシー立ててやらないと駄目ですね。。今は、気がついたときに実行する形なので…(汗
投稿者 bokupi : 08:06 | コメント (0) | トラックバック
2007年03月25日
Linuxでサービスの自動起動設定
これまで、面倒くさがって各サービスの自動起動設定をさぼってきました。再起動のたび、手動で起動していたのですが、地味に手間がかかります。それに、起動漏れが怖かったりします。
そこで、思いきって自動起動設定を行なうことにしました。今回はmysqlとbindとtomcatが対象です。少し手こずったのが、tomcatの設定でした。ネット上から切り貼りのスクリプトを使ったのですが、そのスクリプトは「su - nobody -c "..."」のように、nobodyアカウントで起動するようになっていました。しかし、うちのシステム上では、nobodyアカウントは利用不可です。そのため、次のようなメッセージが。
This account is currently not available.
結局rootアカウントで起動するようにしました(良くないけれど)。そんなわけで、これからは気軽に再起動ができます。この作業工程は、以下のWikiにまとめました。
投稿者 bokupi : 18:14 | コメント (0) | トラックバック
→ ALL page | 1 | 2 | 3 | 4 | 5 | 6 | 7