昔の最近の出来事(2006.05)

2006/05/31

日付け越え少し前に帰着。

phobosのビルド。ちゃんと調べずにconfigure実行していたのですが、 configureのエラーをよく見てみると、pthreadライブラリを リンクするconftestのコンパイルに失敗していて、そこで ずっこけていただけみたい。ppcsim用のglibcはthread関連を 殺しまくっているので、どうやってもダメそうな予感。ちぇっ。

2006/05/30

日付け越え。

先日しかけたbuildはphobosのビルドが出来ずに止まってました。 やっぱダメかと思ったのですが、INSTALLドキュメントのクロスコンパイラ のビルドを参考にちょろっといじってみたり。さてどうなるか。

2006/05/29

日付け越え前に帰着。

Web巡回して終了。

ターゲットにPPC-linuxが入ったという事で、gcc+gdcをppcクロスビルド してみたり。さて、うまくビルドできるでしょうかという感じでほったらかし。

2006/05/28

昼頃起床。

先日のgdcですが、--version表示してみると dmd 0.149と出てきたので、 実際の0.157に文字列を変えてみたり。

大神やったり。一気に進んでやめるタイミングが見つからなかったり。 で、また少し停滞気味。

2006/05/27

起きたら夕方。寝過ぎ。

gdc-0.18の正式リリースキター! GDC - D Programming Langulge for GCC という事で、sourceforgeに移動したみたい。新しいDMDに追従しているのは 勿論として、PowerPC Linuxがターゲットに入ったみたい。PPCクロスコンパイラでも gdcが使えるという事かも。
という訳で早速ビルド開始。と言っても、しばらくほったらかしにしておくだけですが。 TVなど見ながらぐうたら過ごしている間にビルド終了。インストールして手持ちの コードをいくつかコンパイル&実行してみたのですが、問題無く使える模様。 さすが。

久しぶりに大神やったり。また進みが悪くなってきた予感。

2006/05/26

日付け越え前に帰着。

Web巡回して終了。gcc-4.1.1が出てたけど落とすのに時間がかかりそう だったので保留。

2006/05/25

遅めに帰着。

Cygwinのスナップショットをビルドしたり。でもまだ 壊れているみたい。

2006/05/24

遅めに帰着。

Web巡回して終了。

2006/05/23

気持ち遅めに帰着。

SAIで落描き。似ないので飽きたシリーズ(シリーズ化?!)

[伊達メガネのめがねっ娘アイドルの人]

今回も元絵は画像だったので並べて描くという感じ。 特に新しい事は無し。

2006/05/22

気持ち遅めに帰着。

Web巡回して、SAIで落描きして終了。

2006/05/21

昼頃起床。

大神やったりSAIで落描きしたりしてぐうたら過ごしたり。とかやって一日終了。

2006/05/20

昼頃起床。

大神やってぐうたら過ごしたり。

チャンネルザッピングしていたらNHK教育でサイエンスZEROを やってたので観たり。最近の放送技術の紹介と言う事で、走査線が 4000本以上のスーパーハイビジョン(XBOX360のふれこみである ハイデフ=high-definitionは俗に言うハイビジョンの英語名 high-definitionと同じらしい)やら、色々紹介されていました。 個人的に興味を引いたのが、シリコンマイクと超高感度カメラ。 シリコンマイクは音波の受け取り部をシリコンで形成したもので、 高温、高多湿などの条件でも使えるというもの。超小型かつ 量産も可能そうなので、今の携帯電話のマイクなんかは全て 置き換わるのじゃなかろうか?という個人的感想。あと超高感度 カメラの方は、真っ暗な中で撮影してもちょっと薄暗い場所で 撮影しているかのような鮮明な映像が得られるのに驚きです。 光が無いと原理的に映像として捉える事ができない所だと思う のですが、目では捉える事のできない非常に弱い光を受けて 撮影できるので、放送以外の科学の世界にも応用ができそうと いう事でした。

続いて世界一受けたい授業で、今から500万年後の未来生物の話とか してたり。人類は絶滅していて、巨大な鳥が食物連鎖の頂点だったり イカが地上で暮らしていたり。最新科学に基づいて考え出された 生物らしいのですが、カタツムリが巨大化して一本足でジャンプして移動 って、まずカタツムリが絶滅する事は無いのだろうか?などと 思う所もあり、最新科学というオブラートに包まれたトンデモ科学 っぽい風味が漂っていなくも無い感じ。まぁ、環境変化を踏まえて 考える所は面白い所ではあります。人類は絶滅しているので、この 想像を証明する事ができないのは寂しい所ではありますが。

2006/05/19

早めに帰着。

先日のCygwinビルドは取りあえず終っていたり。入れてみた所、 新たなプロセスが上がる度に赤○白×ウインドが開いて用事にならず。 壊れているっぽい。

大神やったり。ちょっと進みが悪くなってきた気も。

2006/05/18

気持ち早めに帰着。

久しぶりにCygwinのスナップショットが固められていたので ビルドしてみたり。でも、newlibのconfigure実行でエラーする のは直らず。そんな訳で真面目に調べてみたり。

configure: loading cache .././config.cache
configure: error: `CFLAGS' has changed since the previous run:
configure:   former value:  -O2 -O2  
configure:   current value: -O2 -O2 
configure: error: changes in the environment can compromise the build

てな感じでエラーするのですが、

      if test "x$ac_old_val" != "x$ac_new_val"; then
        { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous
echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
        { echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
echo "$as_me:   former value:  $ac_old_val" >&2;}
        { echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
echo "$as_me:   current value: $ac_new_val" >&2;}
        ac_cache_corrupted=:
      fi;;

というスクリプトになってます。コマンドラインでif test ...を試してみたのですが、 うまく動くので謎だった訳ですが、よーく見てみると、「-O2_-O2__」と「-O2_-O2_」 てな感じで、後ろに付いた不要なスペースの数が違っている為、 条件が成立してエラーという事らしい.....ってなんだそれ?
configure実行時にCFLAGS指定するのをやめてもダメで、結局前述 変数比較条件が成立しないような固定式と置換するスクリプトで configureファイル全てを置き換えて実行してみたり。しばらく様子見.....

そういや今さらですが、Linuxカーネルの機構に「OOM killer」というのが あるのを知りました。OOMとは Out Of Memory の事で、スワップアウト もできないメモリ使用状態になった時、実害が少ないと思われるプロセス を勝手に殺して空きメモリを作るという機構らしいです。 この時の「実害が少ない」というのは実際の所、ユーザの意向とは無関係で、 「最近起動されたばかりのプロセス」とか「大きなプロセス」といった レベルでほぼランダムに選ばれるようです。結局、ハングするよりは、 どうにかしてrebootする余地(shを起動するだけの資源)を生み出す事を優先した感じみたいですが、 先日、X68kのSX-WINDOWの同様の仕様を「変」 と言ったのですが、そういう変な事を同じ様に組み込んだ例があるのか と思いました。それにしても、例えば、最近だと2GB-DIMMとか普通に 存在する訳ですが、実メモリ2GB、スワップ0とした場合でも、普通に使う分には全然問題 無かったりすると思います。巨大画像を編集中にOOMkillerが起動されて しまうと、編集中にも関わらずいきなり殺されてしまう場合があるのは どうなんだっけ?という気もします。

2006/05/17

気持ち早めに帰着。

SAIで落描き。似ないので飽きた(またか)

[エビの人]

普段は雑誌の写真などを見ながら描く所なのですが、今回は載ってる雑誌 が無かったので、Webで落とした画像を見ながら描いてみました。 と言っても、トレスする訳では無いので、左にビュアで元絵を表示 しといて、右に横幅狭くしたSAIを置くという感じ。で、これだと 操作パネルを表示するとキャンバス表示が狭くなるので、 TABで操作パネルを隠して、ショートカットでツールを切り替えて 作業するという感じ。ショートカットの一覧てどこかに書いてあったっけ? と、READMEを探してみたけど特に書かれてなかったので、 それっぽいキーを適当に押しまくって探してみたり。 いい加減 描き終った所でツールアイコンをダブルクリックすると、 ショートカットの表示が出てたりする罠(^^;バインド変えられるように なってたんですね(<気づくの遅いよ)。

2006/05/16

早くもなく遅くもなく。

SAIで落描き。

2006/05/15

早くもなく遅くもなく。

おもむろにSAIで落描き。

2006/05/14

昼前起床。

昼間の番組 YA-YA-YA で、コアラのマーチの工場見学してたり。 大量のコアラが並んで出てくる所が、まさにコアラのマーチ(行進)って 感じで壮観。焼いて膨らました後にチョコを注入するというのにへぇ。

SAIで実験。大量にメモリを消費した場合、どのようになるか見たり。 5000x5000のキャンバスサイズで、全面塗りつぶしを行ない、それを レイヤー複写でコピーしていくという感じ。3レイヤー割り当てた所で、 「2040MB確保」という感じのようなのですが、3レイヤー目は全面コピー する事ができず、途中までブロックが割当たって、それ以降ブラシなど による描画を行なう事ができない感じ。中途半端な3枚目のレイヤーを削除 すれば、ブラシ描画もできるようなので、プロセスサイズを越えた所で ワークメモリの割り当てができず、見かけ上何もしていない様に見える ようです。でも、「実メモリ256MB+ディスクの空きが1.8GB」 なので、ギリギリ2GBに足りないくらいの感じにも関わらず、「2040MB確保」 の状態でGIMPによる5000x5000のサイズで割り当て可能なのはこれ如何に?という感じ。
因みに、GIMPで10000x10000で割り当てた所、背景塗りつぶしまでは できましたが、レイヤーコピーした所で空きTileメモリが割り当てられない というメッセージが大量に出て、最後GLIBがメモリ割り当て失敗して プロセス消滅。データ自体はそれでもせいぜい800MBに足らないくらいの はずなのですが、スワップ使い切りで「ゴミ箱を空にすれば空き領域ができますよ?」 的なメッセージが出るみたい。スワップ不能になるギリギリで作業すると色々起こるような そうでも無いようなそんな感じ。
そういや、X68kのSX-WINDOWはメモリが足りなくなると、さんざん メモリが不足しているというメッセージが出て、それを無視し続けると、 最近フォーカスされていないアプリケーションから順に殺されていくという 妙な動作(仕様?)を行なっていましたが、流石にそういう事は 無いみたい(^^;

2006/05/13

昼頃起床。

大神やったりしてぐうたら過ごしたり。ボイン姉ってあんた....(^^;

2006/05/12

少し早めに帰着。

Web巡回して、大神進めたり。

もののけ姫をほとんど終りかけの頃から観たり。どんなんだったかさっぱり 覚えていないくらいの感じ。今改めて観てみると、絵(特に背景美術)意外は あんま見るとこ無い感じも。

眠くなって割と早めに死亡。

2006/05/11

少し早めに帰着。

大神進めたり。ヤバい。やめられない。簡単に2時間くらいやって しまいますよ。

2006/05/10

早くもなく遅くもなく帰着。

大神進めたり。進み始めるとやめられなくなります。

うちの掲示板にて。「最近宣伝書き込み多いね」という宣伝書き込み。 なんで多いって知ってんの?!

2006/05/09

早くもなく遅くもなく帰着。

ちょろっとWeb巡回して終了。Cygwinのパッケージ巡回。 bashの新しいのが出ていたのでインストールしてみたのですが、 やっぱり壊れている模様。それよりも、新しいbashをインストール すると、shの方がそれで上書きされるようなのですが、壊れている のに気づいてbashを古いのに戻したつもりがshの方が壊れたままに なってて、configure実行がうまくいかない所で初めて気づく罠。

あややゴルフ。素人のゴルフが面白いのか?と思ったのですが、 意外と面白くて見てしまいます。

2006/05/08

早くもなく遅くもなく帰着。

あまりの眠さに飯を食ったらそのまま死亡。

2006/05/07

昼頃起床。

大神やって過ごしたり。少し進みが悪くなってきた。

TVでクレーマーの番組をやっていたり。世の中にはトンデモなクレーマーが 居るもんだと思ったり。番組中に出てきたクレーマーは、大抵が自分中心 と言うか、自分が正しい事前提で話をするので、話が通じなくなるという 感じみたい。
個人的経験から言うに、間違っている事を正しいと思い込んでいる 人は、自分が間違っている事に自力で辿り着く事は無いので、 何故そう思うのか事情聴取して、思考過程の 思い違いを具体的に指摘しないと間違いに気づかな事が多いです。 本物お仕事柄、極端な思い込みで話をする人と遭遇する事は極めて少ない のですが、インターネットの掲示板とか見てると、そういう人が結構多い のに驚いてしまいます。掲示板とか見て思うに、問い合わせを行なう側の 状況説明がとにかく下手という気がします。なので話が通じないという感じ。 しかしそこでうまくポイントを絞って聞き出せれば儲けものなのですが、 そのままフェードアウトしたり、途中で話の腰が折られたりすると、 結局何だったのか判らないという事が意外と多いようにも思います。 特に2chなんかは人が多すぎる上、誰と誰とが話をしているという感じ にも読めないので、第三者的に読んでいてもすぐに訳が判らなくなってしまいます(^^;。 あれで意思疎通が取れている人って逆にスゲーなぁと思ってしまいます。
話が逸れましたが、番組中でさまーず大竹が「DVDのビニール包装が 開けにくい」という話をしてて、その場で電話によるクレームを付けると いう事をやってました。実はTANEも、映画DVDパッケージのビニール包装は 開けにくいと思っていて、 クレームはともかく、何故開けにくい感じになっているかが判るかなと 期待したのですが、結局開けにくいが爪でがんばるという事に落ちついて ズッコケてみたり。

そんな感じで連休終了。

2006/05/06

昼頃起床。

大神やって過ごしたり。フィールドを走り回っては、景色の良い位置を 探してみたり。後、進めていくと感じるのですが、キャラの演技が非常に 細かくてスゲーです。ただ、願わくば、セリフも日本語音声で入れてくれれば 良かったのに....という感じ。 というのは、キャラのセリフは文字ウインド中に表示され、昔のアドベンチャー ゲームの様にピコピコ音が文字に合わせて出る方式なのですが、セリフが 非常に難しい漢字交じりで、無駄セリフが殆ど無いなので、文字を読む方 に意識が行ってしまい、肝心の絵の方がチラ見になってしまうのです(^^; 昔のアドベンチャーゲームは絵が動かなかったので、それでも問題無かった (むしろ絵が動かない分、読み上げだと間が長く感じた)のですが、 セリフと動きが同期しているアニメーションでは、字幕のような見方だと 非常に疲れるのと、絵もセリフも半分くらいずつしか頭に残らないように 思うので、勿体無いなぁと感じました。とは言え、いくらDVDでも、あの テキスト量を音声にして入りきるのか?という気はしますが(^^;;

2006/05/05

昼頃起床。

ぐうたら過ごして終了。

タモリ倶楽部でポン菓子を作っていたり。うどんは結構膨らむのに、 インスタントラーメンはダメというのは意外な感じがしたかも。

夜もいいかげんな時間に、スタックしておいた「大神」をおもむろに始めてみたり。 映像に対してはどんな感じかは事前に知ってはいたものの、実際に見てみると これヤバいですよ!まだ最初の方なのですが、それでもあの絵の中を自在に 動き回るというのは、思わず「うぉっ」と声が出てしまうという感じ。 ゲーム事体は最初の方だからかかなりの親切設計で(最近のゲームはこんなに 親切なの?)、やってるうちに除々に慣れていくという感じです。 始めた時間が遅すぎて、眠さで人の話を覚えてられず終了。

2006/05/04

昼前起床。ぐうたら過ごしたり。

先日の続き。色々実験してみた所、bitarrayで使用しているintrinsicの 実装が間違っているという結論に至ってみたり。std.intrinsic のbit操作関数が 全部マズいという感じ。
bitarrayはその名の通り、1bit幅の型データの配列を表現した構造体で、 配列要素には0以上の整数が使用できるハズなのですが、 要素数が32を越える、つまり32bitより大きいbit列を扱うと、 その挙動が不審になっているようです。
D言語の日本語訳マニュアルの新しいのを見ていなかったのに気づき、 調べてみたところ、一応仕様が書かれており、それとは違うという 感じ。てゆーか、dmd148版にはbitarrayやinstrinsicのマニュアルが 無かったので、仕様が不明という感じだったのかも知れませんが。

という訳で直してみたり。取りあえずregexpは期待通りの動作を行なって いる模様。でも、GCが少々怪しいようで、Segfaultでずっこける模様。 むーん。
ずっこけ場所はinternal/gc/gcbits.d内のとあるメソッドだったのですが、 最新のdmd155版を見てみると、148版でコメントアウトされている行が生かされて、 現在生きている行がコメントアウトされているという感じになってました。 つまる所、一度変更を加えたけどやっぱり元に戻した感じになっていたので、 それと同様に修正してみた所、取りあえず手持ちソースのコンパイル&実行 に成功しました(^^)v。いくつか試してみて取りあえず問題無さげなので、 少しこれで使ってみるという感じかも。

make checkを通すのを試してみたり。と言っても、先日gdc_017でmath.dとconv.d でエラーする個所は、浮動小数点型表現の互換から生じる問題みたいなので、 それらでエラーする点はコメントアウトでスルーしたり。で、 Abortでcoredump。std.boxer内で例外が投げられているっぽい。むーん。 あと、気づいてなかったのですが、testgc.exeと いうGCをテストするモジュールが生成されていたので、こちらを実行してみたり。 format.dで期待値と違うというので引っかかったので、そこはスルーしてみた 所、こちらはテストが通ったり。GCの方は大丈夫げな予感。
結局boxerのUnitTestの殆どをスルーする事で、UnitTestは通ったり。 通った事にして良いかどうかは別ですが(^^;。 gdc_017でハングしていたのよりはマシという感じかも。

2006/05/03

昼頃起床。

もっかいgdc_018alphaをビルドしなおして、make checkを実行して みる事に。すると、regexp.dのエラーでひっかかり、やっぱり 「[]」リストで一致をうまく検出できないという事を再確認し、 少し真面目に調べてみたり。
なんとなく、ASCIIコードをbitarrayのフラグにセットする事で マッチャーを作って、それを引いて一致検出を行なっていそうな予感。 bitarrayの説明書がdmd155の英語版しか無いのと、gdc_018alphの bitarrayから随分と仕様が変わっていて、イマイチどう使うのが正解 かよく判らなかったり。
bitarray.dのUnitTestを切り出して単体で実行してみた所エラーしてみたり。 色々いじってみると、どうやらBitArray構造体の戻り値が、0か1しか無い 所が0と255が戻って来ているようで、そのせいで比較チェックが通らないと いう感じ。std.intrinsicというモジュール内にのbit操作関数が一式 入っているのですが、BCだかVCではコンパイラのビルトイン関数として実装 されているようで、gdcではそれを模して実装されてました。ところが、 bit値の返し方が 0と-1(==255)を返しており、ここんところで互換が無い実装が 行なわれているという事みたい。そこを直せばエラーしていたテストは 通ったのですが、regexpはやっぱりエラーするので、ここはハズレの模様。 ちぇっ。

しばらく眺めてやっと現場を押さえた感じ。何故このような事態になって いるのかは判りませんが、次のような原因みたい。 まずはregexpの実装ですが、正規表現で食わせたテキストはコンパイル という処理を通して、プログラムと呼ばれるバイトコードに変換されます。 このプログラムは、文字列とのマッチを行なうオペコードや、リストから マッチ文字列を探すオペコードなど、様々なオペコードが存在します。 その中で、「[]」リストはREbitと呼ばれるオペコードとして一致処理 が実行されます。この時、文字リストはASCII文字のbitマップをフラグと してコンパイル時に、一致検出の有効/無効が決定されます。フラグは コンパイル時にはBitarrayというbit配列を使用して生成するのですが、 実際にはubyteのプログラム領域にキャストする事で、プログラム領域に 直接生成しています。 一方、マッチの実行時にはプログラム領域をubyteで扱ってフラグを 見ているのですが、何故かバイトオーダーが反転している 為、関係無い位置のフラグを見てしまって、マッチが取れないという 感じになってました。

  2:    REbit cmax=64, len=13: 0c 00 00 00 00 00 00 00 00 00 00 00 00

これは、「[bc]」の有効/無効フラグですが、例えば文字「b」はアスキーコード で0x62 なのですが、マッチフラグを見るのに

c1=0x62 ; flag[(c1 >> 3)] & (1 << (c1 & 7))

てなアルゴリズムでビット検査してました。c1を8で割って バイト位置を求めて、 そのバイト位置のc1%8の位置のビット位置を検査するという感じ。当然、 バイト0の位置にしかフラグは立ってませんので、このままでは全くデタラメな 位置を見ているという事になります。
問題は直し方ですが、regexpの方はずっと前からこんな感じなので、bitarrayの 実装に問題があるのだろうと推測しているのですが、それにしてもこうなるか? という感じ。

2006/05/02

遅からず早からずに帰着。

以前ビルドした gdc_017のアーカイブを解いてmake checkを実行 してみたり。std/math.d,std/conv.dでエラーする個所があるものの、 std/string.dやstd/regexp.dではエラーしなさげ。と言いたい所 でしたが、CPUを100%使いきったままになり、テストが動いているのか 無限ループに陥っているのかよく判らない状態になったり。せめて、 現在実行中のテストステップが表示されていれば良いのですが。むぅ。

2006/05/01

昼頃起床。

regexpがダメな場所を追い詰める事ができず。仕方なしに make checkでphobosのセルフテストを実行してみる事に。 すると、std.stringなどに何点かエラーする個所があり、ちょっと 直してみたり。でもregexpの具合には影響無し。

make checkで、std.mathのテストも行なうのですが、 複素数がイマイチ正しく動いていなさげ。gdc_017ではmake check した事無いのですが、もしそこで通っているテストであれば、 gdc_018alphaのバグという事が言えるかも。

regexpでもmake checkが通らないようで、TANEが引っかかっている 問題から見るとこれが一番原因に近い感じ。 でも、RegExpクラスの正規表現コンパイルがうまくいっていない ような感じなのですが、ここは深すぎてすぐに悪いところが 判らなかったり。てゆーか、gdc_017のソースを持ってきている だけでも動かなかったりするので既に謎の領域に達している気分。 importしている外付けのクラスや関数の問題かしら? でも、UnitTestは良いですね。少なくともリリース前にちゃんと 通していれば、100%ではないにしてもデグってる個所は事前に 確認できますので、レベルダウンを抑えられると感じました。

それにしても、dmd管理下のソースファイルはバージョン管理を 外付けで行なっている為なのかどうか判りませんが、 ソースファイル内にバージョンを示すものが無い (いわゆるRCS/CVSでいう所の$Id:...$的なものが無い)ので、 前の版と交換したりとかやっていると、すぐにどれが 新しい版のソースだったかが判らなくなってみたり。

「DEATH NOTE(11)」。ライトの仕込みにニアが乗っているように 見えなくもありませんがそんな単純な話は無さそうな気も。 どう決着がつく(様な気がするだけですが)のか次巻が楽しみ。


TOP PREV