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) | トラックバック
2007年03月15日
コンピュータの構成と設計(上)を読了
コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上)
第4章は、コンピュータの性能に関するお話。性能には様々な指標があるけど、最終的には処理の実行時間が絶対的な指標になります。ベースとなるのは、「CPU実行時間 = 命令数 * CPI(1命令の平均クロック数) * クロックサイクル時間」といった式です。CPU実行時間を小さくするには、どの要素をどう下げたらよいかが、性能に関する考察になります。各要素が互いに関係し合うので、複雑です。
ここで、上巻は終了です。現在下巻を読んでいますが、プロセッサ内部の理論になり、個人的には難しく感じています。それに、上巻に書いた内容をベースとして話を展開しているため、理解があやふやなままのうちには辛いです^-^;
投稿者 bokupi : 23:32 | コメント (0) | トラックバック
2007年03月02日
コンピュータの構成と設計(上)を第3章まで読了
コンピュータの構成と設計~ハードウエアとソフトウエアのインタフェース 第3版 (上)
パターソン&ヘネシー著の「コンピュータの構成と設計」、通称パタヘネ本を読んでいます。うちが買ったのは第3版で、これまでのものと比べてだいぶ薄くなっています(削られた部分は、付属のCD-ROMにPDFファイルとして収録)。なので、幾分か読みやすくなっていると思います。第2版では上下巻合わせて1000ページ以上だったものが、第3版では600ページ程度に納められています。
第1章では、コンピュータのハードウェアの構成について説明されています。CPU内部の写真もあり、へえといった感じです。半導体関連の部分はほとんど知らなかったので、勉強になりました。ウェハーやダイ、トランジスタ、歩留りの原因など、これまで漠然と言葉だけを聞いてきたものが、繋がっていく感じがよかったです。
第2章では、MIPSを例にしたアセンブラの説明です。加算などの単純な命令から始まり、条件分岐や繰り返し文など徐々に追加されていきます。そのなかで、メモリ領域の扱いやレジスタの役割など、学ぶことができます。トップダウンに列挙するのではなく、なぜその命令やレジスタが必要か、そうしたボトムアップなアプローチが、とてもわかりやすかったです。このあたりの知識に乏しかったうちでも、かなりの内容を修得することができました。さすがは、教科書と言われる本だと思います。
第3章では、整数演算と浮動小数点演算に関する内容です。内容自体は、大学での講義や情報処理技術者試験で学んだものです。当然、それらより深く掘り下げていますが。浮動小数点演算には、専用のレジスタを用意しているんですね。
てな感じで、まだ半分も読み終えていませんが、なかなか面白いです。簡単ではないですが、難しくて読めないということもないです。
投稿者 bokupi : 21:50 | コメント (0) | トラックバック
2007年02月28日
ShockwavePlayerがクラッシュ
ゲーム作りも終盤にさしかかっている最中、ふと開発マシン以外のPCで動かしてみようと思いました。さっそく実行環境をコピーして実行。すると、3Dの描画を含むメイン部分にさしかかると、クラッシュするではありませんか(汗。利用したのがFirefoxだったので、IEでも試してみましたが、結局駄目でした。果たして、このマシン特有の現象なのでしょうか。それを確かめるために、ノートPCを引っ張り出して同じように試してみました。こういうとき、複数のPCを持ち合わせていると、いいですね^-^;。しかし結果は変わらずということで、マシン特有というわけではなさそうです。
で、デバッグをしていくわけですが、ブラウザ上のShockwavePlayer実行時のデバッグツールは知りません。なので、ちまちまコードを削りながら犯人探し。2時間ほどかけてようやく見つけたのは、3Dキャストメンバにオーバレイ表示させていたテキストキャストメンバでした。ここに書かれている"タッチダウン"という文字列がよくないみたいです。この文字列に空白を加えたりすると、症状は解決しました。
文字列、クラッシュ、となると、メモリ関連のバグが思い浮かびそうですが…。この問題がオーサリングツール側にあるのか、プレイヤー側にあるのかも、気になります。ただ、開発マシンでは普通に動くという点が、不思議です。
投稿者 bokupi : 21:59 | コメント (0) | トラックバック
2007年01月30日
Perlの改行コード
少し久しぶりにPerlのコーディング。今作っているゲームのランキング登録および閲覧用のcgiです。合計200ステップ足らずの小さなコードですが、久々に触ると思わぬところで躓いてしまいます。
極々単純な20ステップくらいのコードを書いて実行したら、500エラー。あれ?と思い、どんどん削っていき、3ステップくらいになったのに、エラー。Apacheのログを見ると、"No such file or directory"のメッセージ。以前もこんなメッセージに悩まされていたような…。Perlの実行パスを調べたけど正常だし、八方塞になりかけたとき、ネット上に答えが。犯人は改行コードでした^-^;。最初SJISで作成して、途中でEUC-JPに変換したのですが、そのさいに改行コードはCRLFのままだったため、このような事態に。Perlの実行パスは正常に見えて、実は余分なCRが付いていたのです><)
確かに以前も同じことを、数回やってました(汗。学習能力が…。でも、気づかないとなかなか気づけない、落とし穴的なところかなあ、と思います。
投稿者 bokupi : 23:02 | コメント (0) | トラックバック
2006年12月26日
MTの処理が重かった原因
ここ最近、MTで日記を更新するさい、やけに時間が掛かりました。エントリ数もそれなりに溜まっているし仕方ないかなあ、と思っていました。ところが、5分経っても画面が切り替わらなかったりと、あまりにも重すぎる状態を目の当たりに。すると、普通にエントリ画面を開くだけでも、ずいぶんとモッサリしているではないですか。
おかしいな、と思い、topコマンドを打ってみたら、topコマンドのプロセス名が2つ…。片方のCPU時間がすごいことに(汗。しかも結構CPUを食っています。慌ててkillしたら、無事症状が改善しました。まあ、もともとMTの更新は重いんですけど(苦笑
てか、たまにサーバもリブートしたほうがいいですね。ただ、自動起動スクリプトをサボっているものが何点かあるため、積極的になれなかったり^-^;
投稿者 bokupi : 23:18 | コメント (0) | トラックバック
2006年12月22日
N88-BASIC資産を復活させる試み
うちは中学時代、コンピュータ同好会に入っていました。そして、そこにあったPC88を使い、N88-BASICで拙いSHTやRPG、音楽演奏ソフトなどを作りました。で、その頃作ったものがFDのなかに残っているのですが、これを読み込む手段がないのです。初代PCのPC9821Cb2があった頃は、N88-BASICがROM内蔵されていたので良かったのですが。
で、いろいろトライです。まず当時使っていたFDは、2HDの1.2MBフォーマットと思われます。なので3モードFDDが必要です。以前買った外付けUSBのFDDが3モード対応だったので、試してみました。うーん、他の2HD1.2MBなFDは読めますが、問題のFDは読めません。
見たところ、物理フォーマットから、DOSとは違うようで。そういや、遠い記憶で、FDが1.0MBだった気にします(上で書いた1.2MBは嘘ですね…><)。。せめてDOS-BASICなら良かったのに(DOS-BASICのシステムディスクは読めました)。当時は、ゲームを作りたい一心で、DOS-BASIC?なんだそら、とシステム方面への関心はゼロだったことが、今に悔やまれます--;
う~ん、やはり実機を買うしかないのでしょうか。とりあえず、今回いろいろ調査をして、実機上から現在の環境に移行する方法は、何となくわかったので。
…いや、むしろどこかの変換サービスに頼んだほうが良い気がしてきました。自分でいろいろ試してみたいという技術的好奇心もあるのですが、費やす時間を考えると少々割高な気もします。変換したいFDは高々3枚程度であり、1万円も出せば平気のようですし。まあ、言うほどポーンと出せる金額でもないですが^-^;
先週の土曜はこれの調査で、ほぼ1日潰れました^-^;。そして、今日もついつい半日ほど潰してしまいました。懐かしさというか、古い地図を頼りに、宝探しをしている気分で、少し楽しかったりします。でも、時間が…、他にやるべきことがあるというのに(汗
投稿者 bokupi : 12:57 | コメント (0) | トラックバック
2006年11月24日
ITRONプログラミング入門を読んで
ITRON関連の本(借り物)を半分ほど読了しました。後半はサンプルプログラムの説明や、実践的なテクニックの紹介なので、まだ読まずにおいています。
ITRONプログラミング入門(Amazon)
以下に、自分なりに理解した内容をまとめてみました。あくまで、うち自身の備忘録として書いたものですので、まったく適切な概要ではないことを、ご承知おきください。
ITRONをベースとした、カーネル一般についての話
- 基本的な仕組みとして、入力を与えられて、それを処理して、出力を返すもの
- カーネルの管理する資源としてオブジェクトがある
- オブジェクトには、処理を実行するタスクや、それの同期制御をするためのイベントフラグ、セマフォなどがある
- 処理の流れは、タスク部と非タスク部がある。非タスク部は、割り込み処理によるものである
割り込みの仕組み
- 割り込みが発生すると、CPUに通知される。
- CPUは割り込みベクタを参照して、割り込みハンドラの書かれた所定のアドレスを呼び出す
- 割り込みハンドラ内で、割り込み原因を分析し、各ルーチンを呼び出すか、割り込みハンドラ内で直接処理をするか、各々方式がある
- 割り込み処理中は、使えるサービスコールに制限がかかる
割り込みとカーネルとタスクの関係
- 各タスクの処理はカーネルによって開始や終了が管理される
- 一方割り込みはカーネルの都合関係なしに発生してくる
- 処理の上下関係?としては、割込み>カーネル>タスク、といった感じ
カーネルの4つの機能
- サービスコール
- スケジューリング
- ディスパッチ
- 割り込み制御処理
その他、気になったところをメモ
- タイマハンドラにおける位相時間とは、毎周期の呼び出し点と、起動時点の差のこと
- CPUロック状態、ディスパッチ禁止状態などにより、タスクの優先度や割り込みへの制御ができる
- 各オブジェクトは、実行要求をレディキューで待たせることができる
- ディスパッチ時にはコンテキストを保存する
- ランデブ機能は、2つのタスクで事象の待ち合わせを行なうもの
投稿者 bokupi : 18:08 | コメント (0) | トラックバック
2006年09月23日
写真管理システムを作成
既に、少し前のエントリから導入していますが、album.omoshiro-joho.comに写真管理システムを設置しました。撮影日やコメント、タグなどのメタ情報と、サムネイルなどの画像情報を、mysqlで管理しています。フロントエンドはphpを利用しています。
使い勝手はまあまあかと思っています。ただし、画像の追加などは基本的に手作業なので、そこを何とか自動化したいですね。画像をドラッグ&ドロップしたら、EXIF情報を抽出してくれるような仕組みがあったら、便利だと思います。
Flickrのような既存のオンラインサービスを使う手もありますが、やはり自分の融通の利く距離に置きたいので。
投稿者 bokupi : 01:34 | コメント (0) | トラックバック
2006年08月28日
CVSでプロジェクトを管理
プロジェクトに関するあらゆるものをCVSに登録して、一元管理することにしました。ただ、現在CVSクライアントとして利用しているのはEclipseです。ドキュメントを更新するために、わざわざEclipseを立ち上げるのは煩わしいです。そこで、新しくWinCVSを、CVSクライアントとして導入することにしました。
ネット上の情報が古い版のものが多く、少し設定に手間取りましたが、無事使えるようになりました。さっそくkmftとpmsの2プロジェクトをリポジトリ登録。こうすることで、各プロジェクトの成果物が整理されていいですね。
投稿者 bokupi : 01:16 | コメント (0) | トラックバック
2006年08月12日
Linuxサーバマシンの解像度を変更
サーバを新しいCPU切替器に接続するため、一旦停止しました。ファン口を見たら埃が結構溜まっていたので、ついでに分解してお掃除。それからケーブルの接続を済ませて起動です。
そしてさらについでに解像度の変更を行いました。以前もXconfiguratorで解像度の変更を試みたのですが、失敗したのでリトライです。すると前回と同じように、Xconfiguratorで設定して最後のXサーバ起動テストのところでフリーズします。VRAMは古いものとはいえ、8MBあるのでSXGAにも耐えられるはずなのですが。駄目もとでテストをスキップして再起動をしてみました。すると、ちゃんと解像度の変更に成功しているではないですか!
テキストログインにしていると、こういった冒険が気軽にできて便利ですね。何はともあれ、モニタに適した解像度になり、見やすくなってよかったです^-^。
投稿者 bokupi : 12:28 | コメント (0) | トラックバック
2006年08月06日
ゲーム作りの方針変更
ゲーム作りを亀ペースでやっていたのですが、ここで方向転換。もともとゲームの核となる物理演算エンジンをC言語で作っていたのですが、これをいざLingo上に載せようとすると予想以上に大変。ポーティング作業を甘くみていました--;。そもそもうち自身、まだLingoの理解が乏しいにも関わらず、「最初は手慣れたC言語で作って後でポーティングすればいいや」という考えが間違っていました。
構造体も基本的にはないようで。代替する方法はあるのですが、Lingoの一般的な作法がわかっていないので、この先の融通が利かなくなると思い、やはり断念の方向に。
そもそもこの物理演算エンジン、C言語上の段階で、まだいろいろ問題を抱えています。それに、ゲーム性を高めるため、リアルさを追求して様々な要素を入れた結果、異様に繊細なものになってしまい、デバッグが大変に…。ただでさえな状況に、Lingoへの移植を行なうのは厳しいと判断しました。
今後は、これまで作成してきたエンジンを、Lingoへの実装を考慮して簡素化したいと思います。何だか遠回りしちゃいましたね^-^;。まあ、力学について十分な知識がないのに、少し凝った物理演算エンジンを作ろうとしたことには、無理があったみたいです。
いろいろな作業が水泡に帰したわけですが、今後のやるべき作業が見えたので、気分的にはスッキリです。
投稿者 bokupi : 22:48 | コメント (0) | トラックバック
2006年06月21日
ネットワーク上の知的財産を守るために
なんだろう?アジアの厨は。@脳天気時々雨
海外のネットユーザーが、画像を無断使用をするという話は、今に始まったことではありませんが。言葉は乱暴ですが、知的財産に関してまだ野蛮な状態だと思うので、しばらくはどうしようもないのでしょうね。日本国内でもそういう輩はいますし。
法律の整備も大事ですが、技術による対応も大事です。数年後には完全移行となる地上デジタル放送などは、ARIBにより厳格なコンテンツ保護の仕組みが用意されています(技術的な要素よりも、不正利用ができる可能性を持つ機器は、一切メーカーに製造を許可しないという締め付けが、効果を出すのでしょうね)。こうしたテレビ局を始めとした、力ある権利者団体は、時に疎ましいものですが、自分が同じ側に立つと途端に頼もしく見えます。
「パクリガード」というフリーウェアのコンテンツ保護ツールもありますが、IEのみしか有効でなかったりと十分ではありません。個人的な思いとしては、将来、著作権保護されたコンテンツが不正利用できない仕組みを、ブラウザ自体に備えてほしいですね。特に静止画の場合は、ブラウザがビューアとなっているのですから。
投稿者 bokupi : 01:03 | コメント (0) | トラックバック
掲示板のスパム広告排除の方法
その方法とは、URLを含む書き込みは全て排除することです。スパム広告の目的は、誘導したいサイトのURLを頒布することですから、そこを絶ってしまえばスパム広告の意義はほぼ消滅します(嫌がらせなど、広告目的でないケースを除いて)。
既に1つの掲示板に実施していますが、効果はてきめんみたいで、スパム書き込みはいっさい通らなくなりました。ただこれだと、正規のお客さんも自分のサイトのURLを記述できなくなりますので、完全な対処法にはなりません。ですが、一時的な処置としては、かなり有効だと思いますので、スパム広告にお悩みのかたは試してみてはいかがでしょう?
投稿者 bokupi : 00:43 | コメント (0) | トラックバック
2006年06月12日
Google Maps APIを使ってみました
旅行記などに使えたら面白いかな、と思い、Google Maps APIを導入してみました。APIのバージョンが1から2に上がったらしく、参考サイトの内容で若干ブレに悩みましたが、概ね簡単に使うことができます。
まずは、APIを使うためのキーを取得します。取得するには、Googleアカウントが必要です。Google Maps APIのキーは、利用したいURLを記入してボタンを押すだけで、入手できます。別のURL(ディレクトリ)に設置するには、キーを取り直す必要があるので、Google Maps API利用専用のディレクトリを作ったほうが便利かと思います。
キーを取得すると、サンプルコード(HTMLとjavascript)が表示されるので、コピペしてアップロード。すると、見事に地図が表示されます。結構感動~。でも、このサンプルのままだと寂しいので、マップコントロールなどを追加します。
//<![CDATA[ /********************************************* * load * 初期化用 ********************************************/ function load() { if (GBrowserIsCompatible()) { var map = new GMap2(document.getElementById("map")); map.addControl(new GLargeMapControl()); map.addControl(new GMapTypeControl()); map.setCenter(new GLatLng(36.781115, 139.231491), 13); // ポイント var point = new GLatLng(36.781115, 139.23149); var html = "<div style='width:350px;font-size:12px;'>鳩待峠</div>"; var marker = createMarker(point,html); map.addOverlay(marker); } } /********************************************* * createMarker * マーカー生成 * point : マーカーを置く位置 * html : 表示する説明タグ ********************************************/ function createMarker(point, html) { var marker = new GMarker(point); GEvent.addListener(marker, 'click', function() { marker.openInfoWindowHtml(html); }); return marker; } //]]>
ところで、バージョンの違いでやられてしまったのが、GPointクラスとGLatLngクラスの違い。これって、緯度と経度が反対なんですね--;。マーカーを指定してもまったく表示されず、しばらく悩みました。ズームを一番遠くにしたら、遥か世界の外側にマーカーがあって、ようやく誤りに気づいた次第です。。
主に参考にしたサイトはこちらです。
投稿者 bokupi : 12:17 | コメント (0) | トラックバック
2006年06月03日
プログラミング言語のマルチリンガル
さきほど、スパム広告に対抗するための仕組みを、掲示板スクリプトに埋め込んだのですが、久々のperlだったため、しょうもないところで躓いていました。それは、変数名の前に"$"を付け忘れたこと。
my str = $_[0]
上のような感じで、普通に書いていました。Apacheのログを見て、エラー行を特定したのに、1分くらいミスの原因に気がつかないありさま^-^;。ここ数ヶ月、お仕事のほうでC言語どっぷりだったもので。その言語を使わない期間が長くなると、設計の感覚まで忘れてしまいそうで、怖いです><)。
マルチリンガルへの道は険しいですね。ちなみに、マルチリンガルという言葉は、最初に記してあるページで見つけました。
ところで、うちが使う主に言語は、こんな感じ。スクリプト系、OO、というように、使い分けています。C言語は、演算処理など、ちょっとしたお試し用途に使います。
- perl
- Java
- C
あと、phpやVC++など、触ったことがあるものは、他にいくつかあるけれど、あまり自信はないです。とりあえず上の3つがあれば、当面困らないかなあ、というのが、実感です。
投稿者 bokupi : 16:21 | コメント (2) | トラックバック
2006年04月19日
WebDavでネットワークドライブ
サーバにWebDavを導入しました。そしてクライアント側には、試行錯誤の末、NetDriveというソフトウェアを導入しました。これにより、インターネットを介したクライアントからでも、Sambaのような使いかたが可能になります。ファイルのやり取りのみであればFTPによって可能でしたが、WebDavによりサーバ側にあるファイルをローカルに移動せず、直接編集ができるようになりました。
これはやはり便利ですね。これまで別々のPCで作業をしていると、最新版を一方のPCに置き忘れることがありましたが、直接編集できればより確実に一元化ができます。
ただ1つ難点なのが、日本語ファイル名が使えないこと。mod_encodingを使えばいいのですが、それによる弊害対策をしっかりと理解できていないので、保留中です。。ASCII文字に直してもいいけど、できれば日本語ファイル名を使いたいな。
投稿者 bokupi : 23:08 | コメント (0) | トラックバック
2006年04月14日
ブックマークレットを勘違いしてました
ときどき「ブックマークレット」という言葉は聞いていましたが、中身についてはよく知らないままでした。名前からして、ブックマークに関連したAjaxてきな仕組みなのかな?と思っていました。
ところが、少し真面目に読んでみたら、別にブックマークのためのツールではないんですね。何の機能というわけでもなく、そのツール(javascript)を格納する先が、ブックマークというわけです。
うーん、このネーミングはどうなのだろう…--;。
投稿者 bokupi : 01:00 | コメント (0) | トラックバック
2006年03月22日
またまた名前解決がおかしくなった
直したつもりが、また名前解決がおかしくなりました。現象は同じで、LAN環境なのにサーバのIPアドレスが、WANのIPアドレスになってしまうという現象です。前回の調査からして、どこかで勝手に外部の名前解決を参照していると思われます。
現在、DNSサーバの指定はルータ経由で行なっていますが、これを直接サーバのIPアドレスを指すようにしたら、一挙に解決しました。やはりルータが見えないところで悪さをしていたようですね。。
投稿者 bokupi : 23:57 | コメント (0) | トラックバック
2006年02月26日
内向けDNSが時々おかしくなるけど…
内向けDNSが時々おかしくなります。pingを投げても通るホスト名と通らないホスト名があったり。内向けDNSサーバを停止して、pingを打っても名前解決ができてしまいます。これは、どこかの残骸を参照しているのでは?と思い、順次潰していきました。
まずは、hostsファイル。案の定、サーバのホスト名が書かれていましたので、コメントアウト。あとは、WindowsのDNSキャッシュの削除。
ipconfig /displaydns // キャッシュの一覧
ipconfig /flushdns // キャッシュをクリア
けれども状況は変わらず。DNSサーバの動いているサーバ本体では名前解決できないけれど、他のWinマシンからだと名前解決できているので、これが有力かと思ったけれど、違ったみたいです…。pingでomoshiro-joho.com宛てに打つとグローバルIPアドレスが返ってくるので、どうも外部のDNSサーバを参照している雰囲気。
そこで、ルータからWAN回線を抜き、DNSサーバを再稼動してpingを打つと、無事プライベートIPアドレスが返ってきました。原因ははっきりしないですが、とりあえず解決。WAN回線を抜いて状況が改善したということは、やはりどこかの外部DNSサーバを見に行っていたのでしょうか。
投稿者 bokupi : 20:09 | コメント (0) | トラックバック
サーバダウンの原因
02/23に起きたサーバダウンが解決しました。現在平日は西東京に滞在しているので、実家のサーバは遠隔保守となり、なかなか大変です。
さて、ダウンの原因ですが、結構複合的です。まず、再起動したため、ランレベルが3になりhttpdが動いていませんでした。本来ランレベル3でも動くはずですが、ssl対応した際に起動スクリプトの修正をランレベル5のものしか実施していなかったためだと思われます。
ただ、今回Telnetでログインすら出来ませんでした。その原因はサーバではなく、ルータにありました。電源が一度落ちたために、回線が切断状態になっていたのです。自動再接続はうまくいかなかった模様で。接続処理を行なったら、無事復旧しました。うーん、他のPCからもネットが見れないなら、連絡をくれれば良かったのに。何も連絡がなかったため、ルータは正常だと思い込んでしまいました。。
というわけで、原因は再起動によるサーバのランレベルの変化と、ルータの接続断の2つでした。遠隔保守は大変だ…
投稿者 bokupi : 19:56 | コメント (0) | トラックバック
サーバダウン
02月23日夜、実家から、ブレーカを落としたため、サーバPCの電源が切れたとのメールが入りました。その後電源を投入したとのメールがあり、安心していましたが、帰宅してtelnet接続を試みると何と失敗。嫌な予感がしたので電話で諸々確認。母では確認依頼は無理かと思っていたら、ちょうど妹が帰宅したので、幾つかコマンドを打ってもらいました(もちろん一文字ずつ伝えての作業)。とりあえずログイン画面は出ていたようなので、ログインしてもらいpingコマンドを。結果は文字化けでよく分からないとのこと。また、dfコマンドを依頼したところ、全てのパーティションが見えているようなので、HDDは一応無事みたいで一安心です。どうやら通信部分に問題がありそうですね…。NICが逝ってしまったか、ルータがおかしくなったか。もしかしたら、サービス類が正しく起動されていないのかもしれません。いずれにせよ、リモートからでは限界があるので、復旧は諦めました。
しかし、Wikiを使ってあらゆるメモを書き溜めていたので、いざ自宅サーバが使えなくなるとかなり不便です。こういう場合の危機管理対策ができていなかったので、どうしようかと。で、考えた結果、とりあえずローカルでテキストに書き溜め、Yahooのブリーフケースに入れておくことにしました。USBメモリや加入しているオンラインストレージサービスなど、使う手も考えたのですが、こういうときに限って、手元になかったり、IDが分からなかったり…。なので、Yahooのブリーフケースがあってかなり助かりました。これまで一度も使ったことありませんでしたが、人生何がどこで役に立つか分からないですね。
こういうとき施しておくべきだった対策は何だったのでしょう。UPSやマルチホーミングなど考えましたが、一番の解は、電源も回線も別なサーバに、ミラーサイトを設けることだと思います。レンタルサーバで安いところ探してみようかな…
しかし、Yahooへの登録申請をしている期間に、毎度サーバがダウンするのは呪いでしょうか?
投稿者 bokupi : 17:38 | コメント (0) | トラックバック
2006年02月17日
開発で意思疎通は大切
現在のプロジェクトは、ビルドが通ることを目標に、既存ソースの移植作業を行なうというもの。しかし、ソースのバージョン管理もなく、手作業マージという状態。メールのやり取りや立ち話で情報交換をしても、全ての情報が直接入ってくるわけではないので、結局修正箇所の意図を汲みきれないことも。それによる手戻りや優先度の逆転が発生したり。
今回、とある関数を利用するためにヘッダファイルをincludesしたら、別のマクロと衝突。別の人が対応のために新たなヘッダファイルを作り、そこに利用したい関数をextern宣言をしていた。ところがそのヘッダファイルに、不可解なdefine文の羅列が。何だろうと思いつつ追うと、先のヘッダファイル中に、同じdefine文の羅列があった。ヘッダファイルをincludeしないことにより、同defineが抜けると思って、書いたのかな、と。実際にはさらに別のヘッダファイルに定義されているので、問題ないのだけれど。後に、さらに別の人に聞くと、単に備忘録として残していたらしい。無効化が抜けていただけの模様。けれど本人談ではないので、真相は結局分からず。
意思の疎通が取れていないと、やはり大変。片方が完全に分かっていればいいんだけど、お互いが完全には理解していない(うちらの方が大きく理解度は低いのだけど)ので、曖昧なやり取りに終始しがちに。。うーん、いかん傾向。よろしくないプロジェクト進行の見本のように…
投稿者 bokupi : 23:48 | コメント (0) | トラックバック
2006年02月13日
DNSの内容が時々おかしくなっていた原因
個人用のデータを扱うサーバを作るために、先月からサブドメインを作成し運用している。内部からは普通にアクセス可能で、外部からは要認証という作りに。ところが、時々このサブドメインでアクセスが出来なくなることがあった。メインPCからそのドメインにpingを打つと、返ってくるのは外向けのグローバルIPアドレス。ところが、サーバ自身やザウルスからアクセスすると、普通にアクセスができる。これはメインPCに問題がある?と思い調べていくと、DNSのセカンダリ指定に外部のDNSを指定していたので、それを外すと正常な動作をするようになった。
一応プライマリではきちんと内部向けDNSを指定しているのになあ。どういうタイミングでセカンダリ参照に切り替わってしまうんだろう。いずれにせよ、ローカル環境下では内部向けDNSのみを参照すべきなので、本来あるべき設定に戻ったわけだけど、ちょっと気になるー。
投稿者 bokupi : 00:20 | コメント (0) | トラックバック
2006年01月21日
BINDの設定を修正して外部から参照できるように
Jan 18 00:35:11 pokota named[9435]: denied query from [***.***.***.**].16850
上記のエラーの原因を探ったら、named.confが以下のようになっていました。そりゃ、外部からの問い合わせが全てdenyになるわけで。今までセカンダリに任せきりだったんですねえ。
"omoshiro-joho.com" SOA/IN
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
query-source address * port 53;
allow-query {
any;
};
allow-recursion {
any;
};
allow-transfer {
any;
};
外部のテストサイトからdigコマンドを発行したら、無事ANSERを返すようになりました♪けれど今度はApacheの設定が正しくないみたいで、未だに外部からサブドメイン配下を参照できません--;
投稿者 bokupi : 13:22 | コメント (0) | トラックバック
2006年01月04日
プライベート用にサブドメインを用意
現在個人用の非公開Wikiを運用しているのだけど、通常の公開用Webサイトと同じドメインというのは、いつかアドレスが引っかかりそうで落ち着きません。そこで、サブドメインを作って、別ディレクトリに分けることにしました。その方がアクセス制御もやりやすいし。
BINDのomoshiro-joho.com(内部用)とomoshiro-joho.com.global(外部用)を変更しました。
omoshiro-joho.com
------ IN CNAME pokota
omoshiro-joho.com.global
------ IN CNAME omoshiro-joho.com.
いざテスト。しかし、何だか様子が変。どうも内部DNSを参照していない様子。クライアントPCの設定では、DNS参照にルータを指定し、ルータでは内部DNSサーバを指定しているのに。原因を探るべくnamed.confを見てると、forwarderに変なものを見つけたので、コメントアウト。
forwarders {
// 192.168.0.1;
210.135.90.1;
210.135.65.2;
};
これが原因か不明だけど、修正して少し経過したら、正しく動作しました。これで内部DNSはOK。続いて外部からdigコマンドで確認をしてみます。すると不発。あれこれしていると、そもそもDNSサーバに到達ができてないことに気づきました。そう、ルータのアドレス変換にDNS用の53番ポートを指定し忘れていたのです。。そこを修正したら無事動作確認。あとは伝播を待つだけです。
投稿者 bokupi : 16:27 | コメント (0) | トラックバック
2006年01月02日
あめぞうをちょっぴりハック?
あめぞうはスクリプトが公開されているので、ちょこちょこ面白いことができます。一昨年の暮れあたりには、リターンコードがbrタグに変換されることを利用して、名前欄に改行を入れたりしました。これは、\nだけを除去対象としており、\rが見過ごされていたので出来た技です。これは対処され、今は使えません。
続いて管理者名である「サポート」を利用できる方法です。それは制御文字を紛れさせることで、「サポート」の文字列一致の判定を回避することで実現できます。ただ、制御文字が何らかの形で表示されてしまうブラウザでは、意味がありません。FirefoxとIEともに表示されない制御文字は、1つしかありませんでした(何であったかは失念)。これも対処され、制御文字は全て使えなくなりました。
そして今回、過去スレッドの起点指定で、限界値判定がないことを利用して、マイナス指定をしてみました。-1000と指定すると、スレッド番号-1000から始まり、-999、-998と続いて表示されます。実際にどこのスレッドが表示されているのかは解析していませんが、本当にマイナス番号のスレッドがあるわけではないです。スーパーマリオの0ワールド技に近いものがありましょうか。特に利用価値はないですが、ちょい技って感じです。
投稿者 bokupi : 21:09 | コメント (0) | トラックバック
2005年12月30日
BINDデーモンが暴走してサーバレスポンス低下
自鯖にアクセスするとやけに重い。topコマンドで確認すると、おかしなものを発見。
2189 named 15 0 5088 1800 1128 S 0 2.6 0.7 16:26 named
どうやら昨日、フレッツスクウェアへ接続するために、一度インターネットから切断したことが原因の様子。16時間というCPU時間も大体符合するし。現在は、bindを再起動して平常に。
投稿者 bokupi : 13:27 | コメント (0) | トラックバック
2005年12月28日
自宅鯖の転送量
2chのスレを読んでいて、自宅鯖の転送量はいくつだろうと思って、調べてみた。Analogで週ごとに集計しているので、[一週間の合計/7*30]というアバウトな計算で算出した結果は、月単位1.1GB。ADSL8Mで十分だね♪
投稿者 bokupi : 22:31 | コメント (0) | トラックバック
2005年12月25日
掲示板の自動投稿広告を撃退する
メイン掲示板へ広告の書き込みが多くて鬱陶しいです。様々なホストで書き込みが来て、ドメイン制限は有効ではありません。うーん、どこかのリストに載ってしまったようですね。掲示板のURL(ディレクトリ名など)を変えれば一時的になくなりますが、またいつ引っ掛けられるか分かりません。
そこで、対抗策として、URLパラメータの引数名を変更してみました。Apacheのログを見る限り、POSTメソッド一発で来ているので、これで弾けるでしょう。まあ、向こうがどんな仕掛けでやっているのか、ちゃんと理解しているわけではないですが…
投稿者 bokupi : 15:27 | コメント (0) | トラックバック
2005年12月18日
cronで実行されなかった原因
Apacheのログ解析スクリプトであるanalogを毎週日曜の早朝に実施するよう、cronに設定したけれど上手くいかない。サイズ0のファイルが作成されている。で、パーミッションやらディレクトリ位置などいろいろ考えてみたけれど、正解はそもそもパスが通っていなかった∑ ̄ロ ̄。"/usr/local"配下が抜けてた。。で、追加したら難なく動作した。ああ、無駄な探求時間。。なんか以前も同じ失敗した気がするなあ。
投稿者 bokupi : 22:59 | コメント (0) | トラックバック
2005年11月21日
シェル変数に文字列置換結果の代入はできる!
先日のエントリ「シェル変数に文字列置換結果の代入はできる?」にて、シェルスクリプト内で文字列置換結果を、環境変数に格納できないと書きましたが、阿呆でした。
#!/bin/bash
TEST=`echo 'AbCdEfG' | tr A-Z a-z`
echo $TEST
バッククォートを使えば良かったんですね。LPICの勉強していて気づきました。
投稿者 bokupi : 22:57 | コメント (0) | トラックバック
2005年11月20日
シェル変数に文字列置換結果の代入はできる?
スクリプトのあるディレクトリ以外から絶対パスで実行した際に、データファイルなどの位置を正しく認識させるために、スクリプト自身のあるカレントディレクトリを取得したいのだけど、妙案が思いつきません。スクリプト自身のパスは、"$0"変数で取得できますが、ディレクトリ名とするには、そこから末尾のスクリプト名を取り除く必要があります。文字列操作の命令は、sedやtr(trとかは正規表現ダメだから厳しいか…)など各種ありますが、ファイル単位や標準入出力での操作を基本としているので、やりたいことができず。シェルスクリプトは、やはりそうした操作が中心なのでしょうか。文字列置換結果を、シェル変数に代入とか出来たら嬉しいのに。
結局絶対パスをハードコーディングすることで解決させましたが、出来れば汎用性が効くようにしたかったです。perl使っても良かったかな。
投稿者 bokupi : 13:05 | コメント (0) | トラックバック
2005年10月15日
Ruby始めました
UMLを利用して作成したシステムの実装にRubyを使ってみることにしました。とくにオブジェクト指向とかなかったら、使い慣れたPerlを使うつもりだったのですが。もちろん、Perlでもオブジェクト指向プログラミングはできます。ただ、どうせ新しく覚えることがあるのなら、これを機にRubyをさわってみたいと思ったわけです。
前置きが長くなりましたが、Rubyはオブジェクト指向のスクリプト言語です。オブジェクト指向というと、Javaのようにガチガチな言語で組むイメージがあるので、そのあたりのギャップに少し苦しみました。これがないけどいいのかなあ?あれは宣言しなくていいの?など。慣れたら便利なんでしょうけど。とりあえず、今は配列や制御構文で躓いているレベルですから。
しかしWeb上で良いRubyのチュートリアルサイトってないですかね。私的に公式サイトのそれはどうも使いにくいです。
投稿者 bokupi : 23:53 | コメント (0) | トラックバック
2005年10月04日
先週と同じ時間にサーバダウンの怪
というわけで、先週月曜15時くらいにサーバダウンしていたのだけれど、今週も14時40分くらいにサーバダウンしてました。ログを見ると一番最後に動いていたものは、先週と同じくbindです。元々定期的に動くものなので、犯人か分かりませんが、一応容疑者。
ただし、今回は前回とは少し違う症状です。前回はhttpdの起動スクリプトミスで停止していたけれど、そこは修正したので今回は普通にログイン画面まで出ていました。しかし、ネットワーク関係がうまく繋がりません。シャットダウンしたら、以下のメッセージ。
Shutting down loopback interface : Unable to handle kernel paging request at
virtual address 0d010008
printing eip :
NICがいかれた??以前に蟹さんがおかしくなっているだけに、嫌な予感が走りましたが、とりあえず再起動したら正常に認識しているようです。でも、原因不明で突然落ちるなど、ハードウェア故障のような症状は若干気になるところです。
投稿者 bokupi : 00:08 | コメント (1) | トラックバック
2005年10月03日
オブジェクト指向は万能ではない
よく言われていることですけど、オブジェクト指向は万能ではありません。今回EclipseUMLを導入したこともあり、試しにUMLを利用したいと考えていましたが、なかなか難しいです。それは、作ろうとしているものが簡易ツールのようなもので、オブジェクト指向にはあまり向いていないからです。UMLを使うために、システムの中から無理にオブジェクトを探し出し設計しましたが、結局行き詰まり。そこで、オブジェクト指向を適用する箇所を絞って再度設計。すると今度は、何とか形になりました。
やはり適材適所ですね。オブジェクト指向万能神話に捉われると、無駄な作業が増え、場合によっては破綻しそうです。でも、オブジェクト指向はかっこいい、UMLが流行だ、てな風潮は、やはりありますよねえ。
しかしEclipseUMLで作成したUML図、ドキュメントに持っていく手段がないので大変です。ビットマップでワードに貼り付けたけど、やはりベクタじゃないのでPDFにするとだいぶ潰れてしまいます。ん~、Free版だし仕方ないか。。ツール自体は結構使いやすいのに。
投稿者 bokupi : 00:48 | コメント (0) | トラックバック
2005年09月25日
現在のLSO3は保守に手間のかかる環境
LSO3を現在運用していますが、ちょっとした修正を運用環境に反映させるのにも手間がかかり、もっと上手い環境を作るべきだったなあ、と反省しています。現在の修正方法は、まずEclipse上で修正を行い、それをCSVに反映します。その後warファイルを作成して、サーバ上で展開してファイル移動などを行い完了です。直接ファイルを変更して反映することも可能だけど、せっかく作った構成管理の仕組みを崩したくないので、こういう手間のかかることを…。
開発時のことばかりに頭が回り、保守のことを考えていなかったダメダメな例です(苦笑。
投稿者 bokupi : 10:30 | コメント (0) | トラックバック
2005年09月01日
GDBでのデバッグに慣れるには
やはり、必要な状況に追い込まれると、人間よく覚えるようで。これまで、IDEを使う場合以外は、デバッグと言えばprintfでゴリ押しでした。ところが、既製ライブラリを使い、その内部で問題が発生すると、printfではどうにもならないので、仕方なしにGDBを使ってみました。すると、案外早く慣れるもので、自分なりの利用方法が確立出来た感じです。
最初は、GDBの操作方法を覚える手間を掛けるくらいなら、printfでいいや、なーんて思っていたのですが、いざ使ってみると当然ながら、効率は格段に違います。やはり理解の早道は、自分を追い込むことのようで。
GDBの自分なりの使い方については、技術でWikiの方に、いずれまとめたいと思います。
投稿者 bokupi : 01:30 | コメント (0) | トラックバック
2005年08月06日
pukiwikiで編集が出来なかった理由
自分ポータルのようなものをwikiに作って、家ではPCから、外では携帯から更新してた。ところがある日、携帯から編集して更新を試みると、ゲートウェイタイムアウト(504エラー)になってしまう。幾つか見ていると、更新ができるページもある。そこで色々ページ内容を変更しながら試していくと、どうやら原因は送信する容量にあるみたい。当然最初に疑うはpukiwiki。keitaiスキンの内容などを確認してみるも、原因は分からず。携帯版はブラウザのキャッシュ容量の限界による、編集可能サイズの上限はあるみたいだけど、とてもそんな量ではないし。
Apacheのログを見ていると、タイムアウト時は数分後に遅延してパケットが到着している。そこで次に疑ったのは、i-modeのゲートウェイ。ただ、こればかりは中身を確かめようがないので、背理法を用いて、すなわち非i-mode経由の外部アクセス(プロクシ経由)で正常アクセス出来ることを確認して、立証しようとトライ。ところが予想に反し、これも同じように更新できない。
となると、真犯人はルータか。コールドスタンバイしている以前のルータを引っ張り出してセッティング。すると、あっさり更新成功。てなわけで犯人確定。WER-AMG54、外部からの一定以上の容量を持つ要求を受け入れない様子(ファームver1.12時点)。なんかFWの機能があるので、その絡みの可能性も捨てきれないが、見たところそれらの設定項目はなかったし。何にせよ、自宅鯖を開くつもりの人は、このルータは買い控えた方が良いよ。うちの今のルータは、WHR2-A54G54。こっちの方が設定画面も見やすいし、好き。
投稿者 bokupi : 15:01 | コメント (0) | トラックバック
2005年07月31日
IE6.0へのCSS対応は無視の方向で
昔はNN4.7のCSS未実装っぷりに腹を立てていましたが(IE5.0を見習えと)、今はIE6.0のそれに腹を立てる毎日。とくにブロック要素のwidthやalign関連は、見栄えに大いに関係してくるので、本当に困ります。一応世のシェアの90%近くを占め、デファクトスタンダードなので無視するわけにもいかないのですが、IE7.0がじきに出ることを考えると、今から敢えてIE6.0に合わせる理由もないのかな。
てなわけで、ソースが汚くなるのも嫌なので、今後はIE6.0については目をつむってレイアウトをします~(ぉ。
投稿者 bokupi : 12:27 | コメント (0) | トラックバック
2005年07月13日
C++のお勉強
読むことはそこそこあるけど、書いたことは殆どないC++。色々なコードを読んで、適宜必要な知識を仕入れてきたので、綻びがかなりあって、いざスクラッチで書こうとすると、案の定ボロボロでした^-^;。なので、以前購入した「独習C++」を読みながら、勉強して行こうかな、と。ちょっと目を通して見ても、関数の使い方とかではなく、クラスやポインタ、演算子といった基本的な部分について、色々知識の欠落があるな、と感じました。
投稿者 bokupi : 23:04 | コメント (0) | トラックバック
2005年06月11日
.bash_profileが読み込まれない原因
Javaのために必要な環境変数の設定を、.bash_profileに記述したけど、どうもログインシェルを開いても反映されていない様子。ちなみに環境は以下。
- VineLinux 2.6
- bash 2.0.5
- kterm 6.2.0
原因は、ktermを開くときに行なっていた、プログラム→システム→日本語端末のメニューによる起動だと、-lsオプションが付与されないこと。-lsはログインシェルとして起動することを意味し、.bash_profileや.bash_loginを読み込む。開いたktermの画面から、下記のようにコマンドを打つと、新規にktermウインドウが起動する。そこで環境変数を確認すると、正しく設定されているはず。
$ kterm -ls
投稿者 bokupi : 23:55 | コメント (0) | トラックバック
2005年01月28日
namazu文字化け解消
昨日書いたnamazu検索結果の文字化けが解消しました。参考にしたサイトは、こちら。nkf2.0.4(以降最新安定版が出ていれば、そちらが望ましいかと)をダウンロードして、make。/usr/local/binあたりに置いて、mknmzrc内の$NKFにパスを代入しました。すると見事に文字化け解消!(ちなみに、これまではnkfバージョン1.9)。UTF-8のファイルでもきちんと表示されています。ただし、一部の文字が文字参照コードになっていたり…。まだ何か問題が…と思ってソースを見ると、ソース自体に文字参照コードが書かれていました^-^;。
てなわけで、この日記の内容も逐次インデックスに追加され、アーカイブから検索可能となります。後は、pdfやWord、xls、pptとかもインデックス対象に加えないと。緊急性はまるで無いので、いつの日になるやら…(ぉ
投稿者 bokupi : 01:53 | コメント (0) | トラックバック
2005年01月27日
namazuで字化け
半年前に実行したきりのnamazuを、この日記の内容も含めるようにして、かつcronに登録しようと作業。ところが、namazuでこの日記をインデックス化すると、字化けが発生。文字コードを見てみるとUTF-8になっている。果てさてどうしたものか。今日は眠いので、また後日考えることにしよう。
投稿者 bokupi : 01:31 | コメント (0) | トラックバック
2005年01月19日
フールプルーフ
フールプルーフな作りにするために、アプリケーションではユーザーの入力ミスを汲み取るけど、Webアプリケーションの場合それをクライアント側でやるべきなのか、サーバ側でやるべきなのか、悩みます。当然クライアント側で行なった方が、レスポンスも速くていいと思うけど、より最終処理に近いサーバ側で行なった方が確実性は高いかな、と。もし、不正利用されることまで考慮する場合は、サーバ側でのチェックは必須。結局のところ、サーバ側ではデータの適切性をチェックし、クライアント側では入力の適切性をチェックしています。入力の適切性を確保すれば、ほぼデータの適切性は保証されますから、二重チェックのようなものです。
こういうチェック方法が、フォーマルでいいのかな?
投稿者 bokupi : 01:18 | コメント (0) | トラックバック
2005年01月14日
バックアップスクリプト
サーバマシンのHDDを増設した理由はバックアップなのに、ほとんど取っていないのが現状。増設したHDDも、/optとか変なところに割り当てているし…。/mnt/hdcにマウントし直して、fstabも変更しておきました。
さて、環境は整ったので、次はバックアップの仕組みが必要になります。というわけで、自動で実行してくれるスクリプトを利用することにしました。適当なサンプルを見つけてカスタマイズしようと思っていたら、プログラムの自動実行について@釣りとコンピュータに手頃なスクリプトを発見。冒頭のパラメータ以外特に変更することなく、使わせてもらっています。
とりあえずcrontabには、毎日午前5時にバックアップをとるように、設定しました。保存日数は7日間。果たしてうまく行ったかは、朝起きてのお楽しみ~
投稿者 bokupi : 01:52 | コメント (0) | トラックバック
2005年01月04日
mvコマンド
先のMovableTypeのアップグレードで苦労した点がありました。パッケージをtar展開したあと、mvコマンドでディレクトリごと移動しようとしたけど、どうも「上書きできません」と言われたり、入れ子に移動したりとうまく行かない。mvコマンドは、ディレクトリ単位で中身を入替える移動は無理なのかな?結局、cp -rコマンドで、コピー上書きしました。
$ ls
old_dir old_dir2
$ mv old_dir new_dir
$ ls
new_dir old_dir2
$ mv new_dir old_dir2
$ ls old_dir2
new_dir
上記のような感じで、ディレクトリ名の変更はできても、任意ディレクトリの中身を別ディレクトリの中身に移すことは、上手くできませんでした。確かによくよく考えてみると、書式として表現できないっぽいですね。でも、機能的にはそれなりに需要はあるかと思いますが。
投稿者 bokupi : 00:21 | コメント (0) | トラックバック
2004年12月24日
LSO3の内部設計書
LSO3の内部設計書がほぼ仕上がりました。今日はほとんどこれに掛かりきりでした^-^;。とりあえずクラス図やらパッケージ図やらを書いてみたり。久々にUMLを触りましたなぁ。相変わらず頭が痛くなるものですが、あくまで設計ツールなんだから、後で見てだいたいの構造が理解できればそれでいいじゃないか!と思い、突っ走りw。実際UMLなんて、例題通りの完璧な形を作るのは、正直しんどいかと思います。
しかし色々調べていて思ったけれど、外部設計と内部設計の境目って結構曖昧ですね。言葉どおり、システムの外部から見た仕様と、内部から見た仕様というように、明確に分けられそうなんですが、実際やってみると結構んん?と言うところが出てきます。サブシステム化の作業とか、考え方によっては外部にも内部にもなりそう。
とりあえずパッケージやクラスが決定したから、後は勢いで製造に突入しても何とかなりそうです。メソッドの増減くらいは、手動で修正利くでしょう。年内にはプロトタイプで動くものを作りたい。
投稿者 bokupi : 01:06 | コメント (0) | トラックバック
ソースコードのタグ表示
前のエントリーでJavaのコードを載せていますが、そこで四苦八苦。ソースコードを括るタグって何が良いのでしょう?ネット上をぐるりと回ってみると、以下のようなパターンがあるようです。
- preタグのみ
- preタグの入れ子にcodeタグ
- blockquote、pre、codeの順に入れ子
HTMLの意味を汲むならば、codeタグでのみ括ることが意味的に正しいと思うのですが、スタイルシートを使用する際に、インライン要素であるcodeタグでは、ボックスを表現できないという問題があるのです。そこでpreタグを使う必要性が出てくるわけです(ただし、preタグをソースコード表示に使うこと自体は、意味的にもおかしなことではないです)。改行もそのまま反映してくれるので、便利です。更にそのソースコードはプログラムからの引用ということで、blockquoteを付け加える形があるのだと思います。
まあ、結局は個々人の考え方次第だと思いますが、うちは2番目のpreタグ入れ子のcodeタグな方式で今後は進もうかなと考えています。
投稿者 bokupi : 00:54 | コメント (0) | トラックバック
2004年12月23日
Servlet
セコセコと本を読んで、何となくアーキテクチャやコーディングの仕方は分かってきたServlet/JSP。しかし、実際に書いていく上で、慣習てきなものをまだ習得できていない状態です。こればかりは、実際に組んでいくしかないのでしょうけど。とりあえずMVCモデルに従って作ってみたいわけですが、以下のようなコーディングにしています。
public void doPost(HttpServletRequest req,
HttpServletResponse res)
throws IOException, ServletException
{
// セッションオブジェクトを取得
HttpSession session = req.getSession();
// 入力パラメータに従い、処理分岐
if (req.getParameter("mode").equals("start")) {
// Beansに処理を指示
}
// JSPへ転送
req.getRequestDispatcher("/select.jsp").forward(req, res);
}
明らかな誤りがありましたら、識者からのご指摘をお待ちしてますn(_ _)n
投稿者 bokupi : 23:51 | コメント (0) | トラックバック
2004年12月22日
OSの基礎
「1時間で分かる組込みリアルタイムOS」。さら~っと読めば、1時間と言わず、30分ほどでOSの基本的な部分が何となく分かり、いいなあと思った。当然これだけで十分ではないだろうけど、とっかかりにはなかなか有益かも。
投稿者 bokupi : 23:19 | コメント (0) | トラックバック
2004年12月19日
LSO3の設計書
未だに設計書を作成中なLSO3。詳細設計書(クラス図)を作っておきながら、基本設計書や外部設計書がなかったりして、本末転倒。とりあえず、基本設計書と外部設計書を書き上げました。うーん、せっかち故つい下流から触りたくなるけど、上流をちゃんと作っておくと、やはり安心感があります。内部設計書は必要に応じて書く程度に留めて、あとは詳細や製造に直に落としていきたいです。
ところでダメージ計算や経験値計算などで、ちょっとした数式を使うのですが、久々に微分をやろうとして、悩んでみたり。
y = 1/(x-1)
合成関数の微分だと気づくのに30分もかかってしまいました^-^;。数学はやっていないと、本当に駄目になっちゃいますねぇ(汗)。
投稿者 bokupi : 23:24 | コメント (0) | トラックバック
2004年12月03日
独習C++
独習C++を買ってきました。C++は何となくで読んできたけど、クラスのテンプレートとか、理解していない内容も多いので、ここらで整理しとこうかと。振り返ってみると、C++でまともにアプリ作ったことないかも。ソース解析くらいかな。。
投稿者 bokupi : 23:38 | コメント (0) | トラックバック
2004年11月21日
ノートPCに開発環境
ここ2日それなりに遠出をするので、ノートPCでLSO3の開発ができるように環境を整えました。
- JDK
- Tomcat
- Eclipse(日本語化+Tomcatプラグイン)
ついでにFirefoxも入れてみました。とりあえずCVSから最新のソースを取得しておいて、いざお出かけ。これでネットに繋がれば言うことなしなんですけどね。さすがにこれ以上月の固定料金が増えるのはキツイ…
で、出先での作業ですが、なかなか快調でした。けれど、まだコンパイルが通らなかったり。そこらへんは何とかなると思って放置してきたのが裏目に^-^;
投稿者 bokupi : 00:38 | コメント (0) | トラックバック
2004年10月10日
tar圧縮
半月おき位に、サーバ内のサイト関連のファイルを、tarボールでバックアップしているんだけど、よくよく中身を見てみたら、少々問題が起きていた様子。
$ tar ../bokupi/homepage20041009.tar ./*
これまで上記のような感じで実行していたのだけど、これだと最上位層の.htaccessファイルが格納されていない様子。正解は、ワイルドカードなど使わずに、素直に書けばいいみたい。
$ tar ../bokupi/homepage20041009.tar ./
ちなみに、いよいよ容量が大きくなってきたので、gzip圧縮を掛けたら異変発生。圧縮後の書庫内を閲覧すると、ファイル数が明らかに減っている^-^;。うーん、8000以上のファイルがあるしなぁ…。ここまで数が多いと圧縮もうまくいかない??
投稿者 bokupi : 01:48 | コメント (0) | トラックバック
2004年10月05日
LSO開発の準備
LSO開発は、ようやくクラス設計が大詰めで、コーディングにさしかかろうかというところ。しかし、結構抜けもありそうなので、プロトタイピング技法を使って回していく予定。さらに、バージョン管理のため、CVSを導入。これまでVSSは使ったことあるけど、CVSは初めて。クライアント側にはEclipseが使えるようなので、こっちも使い方を覚えてみようかと。てな感じで、今回は上流や支援ツールに凝ってみようかな~、と思っている。でも途中で面倒になって、いつも通りのコーディング主体スタイルになっちゃうような悪寒も(^-^;。
投稿者 bokupi : 22:04 | コメント (0) | トラックバック
2004年09月18日
Linuxで、ソースからビルド
某所のマシンにインストールした、VineLinux2.95(アップデートして、3.0)。どうもインストール時に、指定を誤ったみたいで、開発系のパッケージが、ごそっとないみたい。XのSDKや、Bison、Flex(字句解析、構文解析系のプログラム。Bisonはyaccの上位版)などがなかったり。そうすると、結構ソースからのビルドが出来なかったりして、大変なのですよ。てか、プリインストールのApacheも、DSOサポートなしになっていたりで、にっちもさっちも。うーん、インストール時のパッケージは、ちゃんと確認した方が良いね~
投稿者 bokupi : 08:35 | コメント (0) | トラックバック
2004年08月27日
Proftpdが繋がらない
前述の理由から、サーバを再起動したけれど、FTPサーバに接続できない現象が発生。サービスは起動しているし、何がいけないんだろう?とぐぐってみると、どうやら先日行ったapt-getが関係したようで。proftpdのバージョンが上がり、1.2.10rc1から"NLST"オプション指定が未サポートとなったそうな。問題ある場合は、クライアント側で設定を変えれば、さほど問題にはならないような。FFFTPの場合は、接続の設定→高度といき、”高度”タブで、LISTコマンドでファイル一覧を取得するように指定する。
投稿者 bokupi : 01:42 | コメント (0) | トラックバック
ウィンドウマネージャ
Vineの、現在のウィンドウ表示が好きじゃないので、GNOMEターミナルのテーマセレクタで、Metalに変更。すると、エラーダイアログが出現し、その後デスクトップ環境の日本語が全て化けるという現象が発生。再起動しても戻らず。その後、ウィンドウマネージャの外観を変えようと、化け化けの文字の中進んでいき、CleanVineに変更。すると、何故かエラーダイアログ(セグメンテーション違反云々)が再び表示され、無事メニューも日本語に戻った。ついでにウィンドウのタイトルバーもいい具合に変更されて満足w
投稿者 bokupi : 01:11 | コメント (0) | トラックバック
2004年08月22日
MovableType設置
無事MovableType3.0のインストールが完了したので、トップページとの差替え作業。現在トップページにある主要メニューと、ウェブリングなど必要なものを貼り付ける。サイドメニューもちょこちょこカスタマイズ。カテゴリ別アーカイブを表示してみる。
いざ、移行の実施。MovableType本体のトップページは、現在のトップページとは別の場所にあるので、シンボリックリンクを貼り付ける。ところがうまくいかない。Apacheのログを見ると次のようになっていた。
[Sun Aug 22 21:24:45 2004] [error] [client 192.168.0.5] Symbolic link not allowe
d: /home/httpd/c-i-mnet/Dream/index.html
httpd.confを見るも、該当ディレクトリには、OptionsにFollowsSymLinkが指定されている。行き詰まりながら更に読み進めていくと、同じディレクトリに対するDIRECTORYディレクティブが、再度指定されていた。なるほど、こちらにはFollowsSymLinkは指定されていない。上書きされていたとは^-^;。
これ、フォントの大きさは、後で一度、ちゃんと調節しないと駄目だね。。
投稿者 bokupi : 21:49 | コメント (0) | トラックバック
ALL page | 1 | 2 | 3 | 4 | 5 | 6 | 7