03_06_01

よし、ログ化もできた。
半手動なんだけど。

もうなんか、らくがきとかでいいや。授業中のノートに描くみたいなん。
今年はなんか、週にノート1ページしかとらないような気がする。 落書きは週に2ページくらいのような気がする。駄目だ。

いやあ、こういう資料探すときに googleさん って便利。と思ったら、まともな写真があるサイトはひとつしか見つからんかった。
冬虫夏草とかだったら大量に写真でてくるのに。

03_06_02

fvwm誕生日おめ

ハッカーとクラッカーの違いとかの話ってまだ世間一般には広まってないんかなー?
「ホームページ」は許せるけど「ハッカー」は許せない。そのへんが僕の閾値。

昨日web巡って、「ブ日記」の話とか読んでた。
多分ここはブ日記に入るんだろう。
「なんで、アクセス数も大したことないのにこうやって一年も更新し続けてるの」
って聞かれたら多分
「なんとなく」
としか答えないだろう。実際なんとなく更新してるだけだし。
そういや、前
「真面目な人ほど更新がよく続く」
っていうような話をしてた。僕は真面目とは対極で生きてるような人間なわけだが。
よくわからんけど、多分これからもだらだらこうやって続けていくんだろう。
全然話がまとまりませんでした。っていう話。




久しぶりに描いててかなり楽しかった。鳥とか昆虫とかって実はムキムキなんよ。

そういや、ツバサっていうと、まつもとさんも言及してますね。(http://www.rubyist.net/~matz/?date=20030602)
全然関係無いけど。
あと、リファ取られるのが怖いときは直接リンク貼らない。

03_06_03

エスプレイド、クリア時残4(初期ライフ 5設定)で2300万。
厳しいな…アレス突入時1300万が良くないな…。寝屋川は2600万の人がひとりいるので、 せめてそれは越えたいと思う。


そうだ、Cで遊ぼう。

a = a ++ && -- c;

っていうのはCでは正しい式。

a = a+++c;

エキスパートCかなんかに載ってたな。
実際、

a = a++ + + + + ++b;

とかもありなわけよ。

puts(("abc","def","efg"));

とかもあり。
そういえば、セミコロンの代わりに全部でコンマ演算子で区切ったりすると何か問題あるのだろうか。
どっちも順序保証するわけだし、生成されるコードは同じになるような。試すの面倒だからやらないけど。

a = &b && &c;

まだ普通か。

あんまり面白くなかったな。まあいいか。


GIMPと仲良くなるために練習。

粒の影とかが丸くないなぁ…難しい…

明日テストなんですけどね。

03_06_04

SDLで遊んでた。
なんか、このサイト、一貫性が無いな。何を目的とするかがわからない。

このサイト持ってる他のサイトには無い魅力とは?

「更新するのが楽しい。」


てなわけで、SDL_RLEACCELについて


実際こんな立ち絵描いてても練習にならないわけで。
まあ、色の練習っていうことにしとこう…

03_06_05

ポカリスエットと果汁。

ラベルには無果汁って書いてあるけど、原材料見たら果汁って書いてある。



ああ、つまんねーな。これだったら昔の僕が描いたほうが面白いや。
と思って昔のを見たら、今とそれほど大差なかった。あと今日のは汚い。
いや、自分では面白いと思うねんけど。妹はあんまり気に入ってくれなかった。


昨日描いてた。テストとかどうでもいいし。

あと、学校まで一時間かかると思ってたけど、いそいで行ったら40分で行けた。
それと、帰り道横を通り過ぎたおじいちゃんが、
「燃焼系〜燃焼系〜♪」
って口ずさんでた。あと、今日はアミノ式の新しいCM見れてよかった。

03_06_06

二週目行けなくなってきた。
う〜ん…どうしようかな…

ていうわけで、明日から大往生強化週間。
って言っても何かが変わったりするわけじゃないねんけど。

気分の問題ですよ。

03_06_07

2-1, 2億4997万…
久し振りに更新。やっぱり気分の問題ですよ。まあ、あとちょっとで2.5億だったりするんですが。


てなわけで、大往生強化週間ですよ。

携帯用…なんだけど、僕ので見たらなんか背景まっしろでした。
けっこう頑張ったのにな、背景…

あと、72x96 はちょっと小さかった。

03_06_08

2.7億いけた。気分気分。

適当に本屋に入って、思い付きだけで漫画買うんですよ。どんな漫画か調べもせずに。
ってやると、大体あたりでもはずれでもないぐらいのおもしろさなんですよね。
って言っても4, 5回くらいしかやったことないけど。

で、今日も思い付きで買ってきて、まあ、やっぱりあたりでもはずれでもなくって感じで。
でも、先入観とか予備知識とか無しで読みたいんですよ。
あと、C++の例外は複雑なんですよね。
void foo();

void bar()
{
	foo();
}
っていうような特に何も無い場合に吐かれるコードは殆どC同じなんですよね。 わけのわからんラベルが付いてたり、シンボル名が変わってたりするだけで、 行われることは同じだと思うんですよ。多分。
これだと、foo の中で例外が起こっても、スルーされるだけですよね。

それが、
class Nanika{...};

void foo();

void bar()
{
	Nanika n;
	foo();

	(....)
	return;
}
とかだとスルーしたらあかんのです。
barに戻って、Nanikaのデストラクタを呼ばなあかんのですよ。
他の言語、例えば、Javaとかだと、try-catchがあるところだけをなんとかすればええのです。 スタック上にオブジェクトは存在しないですから。Ruby、Lisp、他大体です。
ガーベジコレクタのお陰ですね。ヒープを気軽に使える。

で、どうなってるか、吐いたコード見てみたら、
void bar()
{
	Nanika n;
	n.Nanika(); // コンストラクタ

	foo();

	goto L10;  // ???
L9:
	n.~Nanika(); // デストラクタ
	_Unwind_Resume();

L10:
	(....)

	return; 
}		
こんな感じなんですね。
わからん。何かの拍子に L9 へ飛んでるのような感じなんですが、どうやって、__cxa_throw(g++のthrow用ライブラリ関数。多分) が L9 のアドレスを知ったのかがわからんのです。
確かに吐かれたコードには例外テーブルっぽいものが付いてるのですが、その例外テーブルをスタックに積んでる様子も無いし。
多分、__cxa_throwとかが多少遅くなってもいいから超神秘的な方法でL9を取得して、例外が起こらない場合のオーバーヘッド を抑えてるんでしょう。まあ、ここまではわかります。
問題は「その超神秘的な方法」ってやつなんですよね。

C++な人の間ではこういうのって常識なんでしょうか。
これを知っておかないと、余計なオーバーヘッドが付いてくると思うんですよ。
例外を使わない場合でも、例外テーブルとか例外が起こった時の為のデストラクタ呼び出しのコードとか。

「今のCPU、メモリをもってすれば、無視できるオーバーヘッド」
とか
「例外はだいたい普通のリターンより遅い」
程度の認識が一般のような気がするんですが。誰か知ってたら教えてくだされ。


参考になりそうだったリンク:
C++ exception handling: what, when, where.
ライブラリ無しでtry-catchを作って、実装がどーなってるのか説明してる。頑張って読みます。多分。
C++ ABI for Itanium: Exception Handling
C++の実装方法みたいなのを書いてあるABI仕様の例外の部分。頑張っても読みません。多分。
ARMでも立ち読みするかな…

03_06_09

2.8億。stage 1, 2 がうまくいけてたら3億ちょっといけてるはずなのに。

__Unwind_RaiseException っていうライブラリ関数が神秘的なことをやってます。
っていうところまでわかった。先は長い。


ここで大往生のロゴ見ると 背景はただの模様でしかないんだけど、実際のゲームの背景は蜂の模様なんですよね。
圧縮したときにつぶれたんだと思うんだけど。
おとといのあれ作ってるときに、
「あれ、おかしいな、記憶違いだったかな…?」
って思いながら適当な模様にしたんだけど、記憶違いじゃなくて、 やっぱりちゃんとした蜂の模様でした。っていう話。どっちにしても、模様なんかつぶれて見えないんだけど。

03_06_10


描いてて自分でよくわからんかったのであんまり気にしないで下さい。
また今度頑張ります。


ARM置いてないじゃないか!どうなってるねん!京橋紀伊国屋!前置いてあったのに!電車賃返せ!
いや、今日は天気予報で雨とか言うから電車で学校行ったんだけど。梅雨だそうで。


例外の続き。
まあ、複雑だとは言っても、ライブラリ(libstdc++)の例外のとこ読んでたら そのうち理解できるわけで。GCCがソース公開されててヨカッタネ。

と、いうのは夢の中の話。
全然わからん…脳内トレースしていったら、なんか最後 longjmp してるんですけど。 いつ setjmp したんですか。personality って何ですか。個性ですか。意味わからんですよ。

__Unwind_RaiseExceptionは僕が思ってたよりもはるかに神秘的でした。

あー、gcc_except_tableセクションって書き換え可能属性付いてるのか…。 わざわざ付けてあるっていうことは書き換えられたりするんだろうな…

あと、C++の吐いたアセンブリはシンボル名が長くて読みにくい。無名namespace内のシンボルとか特に。

03_06_11

stage 5までノーミスでいくと弾が速くて稼ぐどころじゃない…慣れないとな。
残 3 でクリア2.6億→2-1即死。うーん、少し稼ごうとすると死ぬ。稼がなかったらボスまでは行けるんだけど。


む、今日は今年始めて不快な暑さだと感じたな。 去年のJの記録によると6月6日に「今年の5,6日は暑かった」って書いてあるから、 まあ毎年この時期になると暑く感じるのでしょう。


友人が

「あの四こまって Tgif で描いてんねんやろ。」

とか言ってきた。なめんな。

ちなみに Tgif っていうのは作図用ツールで、
こんな感じ。
いや、無理だから。

03_06_13

うーん、どうなんだろうか。微妙。
ハッカーって逆から読んだら「アカッハ」だな。「アカッハ」。意味わからんけど。

あと、昨日授業でアンテナとか説明されたから、アンテナ描きたくなった。それだけ。

03_06_15

もう6月も半分か。早いなぁ。

結局PS2買ってしまった…
最初にPS2知った時は

「もうゲームなんてあんまりやらないから多分買わないだろうな」

とか思ってたんだけど。

とりあえず、おうちで大往生ですよ。
「同じ画面ばっかり。」
「PS2でやる必要あるんか?その画面やったらPSで十分やん。」
「FFX買ってこいよ。」
とか、家族たちの暖い応援を背にプレイ。

うちは、テレビ一台しかないから一時間ほどやって終了。 コントローラーに慣れるまでが時間かかりそう。

全部で3万かかったから50円2Play換算で 1200回プレイすれば元が取れるはず。そんなん無理だけど。

いや一日4回300日か、気合があればいけるな…


p/eceのdirectなバッファのフォーマット間違って理解してた…縦に並んでるのか…

03_06_16

消費期限とか品質保持期限とか賞味期限とかをややこしいとかいって、 全部「賞味期限」で統一しようっていう動きがあるんだけど、 賞味期限と消費期限とかって本質的には違うものなんだし、ごっちゃにするのってどうなんだろうか。
ややこしくなる原因は品物によって表記が違うからなわけで、そうなんだったらいっそのこと全部の商品に 賞味期限と消費期限と品質保持期限書いとくっていうのはどうだろうか。
いや、どうでもいいけど。



このひとこま目のネタ振りって昔使ったような気がする。
あと、しぃみたいとか言われた。

今日学校で「いつのか忘れたけど四こまおもしろかった」って言われたからやる気出た。
そういうふうに、フィードバックもらえると嬉しい。

03_06_17

ガラ婦人到達時1500万突破→クリア2490万。寝屋川 No.1 まであと少し。




__Unwind_RaiseExceptionはもうわからない。C++ 例外豆知識。gcc編。
try - catch 節は実際に例外が発生しなければオーバーヘッドはそんなに無い
これまで、try 節に入るのってそこそこのオーバーヘッドがあると思ってた。
でも、実際は例外が発生しない場合のオーバーヘッドは jmp 一回 + 例外テーブル 32[byte] がいくつかとフレームとか。で、それはセクション別だから キャッシュ使ったりすることも無いだろうし。
スタック上にオブジェクト作ったらその度に例外用コードが生成される
int foo() {
	Nanika n;

	bar();
	baz();

	....
}
 
ていうのは、
int foo() {
	Nanika n;
	n.Nanika();   // コンストラクタ
	try { 
		bar();
	} catch (...) {
		n.~Nanika(); // デストラクタ
		throw;
	}

	try {
		baz();
	} catch (...) {
		n.~Nanika();
		throw;
	}

	....
}
 
ていうのとほぼ同じ。なんだけど、rethrow (ハンドラ内で throw してるやつね) が_Unwind_RaiseException を使用するのに対し、 上のような場合は _Unwind_Resume が使われる。って ABI に書いてあった。理由は↓ (訳せない…)
_Unwind_Resume should not be used to implement rethrowing. To the unwinding runtime, the catch code that rethrows was a handler, and the previous unwinding session was terminated before entering it. Rethrowing is implemented by calling _Unwind_RaiseException again with the same exception object.
Resume した場合の catch code は前に throw した場所に返さないといけないけど、 rethrow した場合の catch code は rethrow した場所に返さないといけないから? みたいな感じかな。その辺は各自自習ということで。
_Unwind_ResumeException を無くす方法
で、いくらオーバーヘッドが少ないとはいっても、スタック上のオブジェクトが存在したら何か関数呼ぶ度に いちいち例外用のコードが生成されるのっていかがなもんでしょう。
でも、これも解決方法が用意されてるのがいかにも C++ って感じで。
例外仕様に何も投げないことを書いちゃえばええのよ。
void foo() throw (); // ← これね
void bar();

class A
{
public:
	A() throw();
	~A() throw();
};

int main()
{
	A a;

	foo();
//	bar();

	return 0;
}
これだと、メモリ使用も含めてオーバーヘッド無し。効果は大したこと無いかもしれないけど、 知ってて損は無いかと。
ただし、ここで、
void bar();
void foo() throw ()
{
	bar();
}
foo内に何か例外を投げる可能性のある関数を含めてしまうと、
void bar();
void foo() throw ()
{
	try { 
		bar();
	} catch (...) {
		unexpected(); // 強制終了
	}
}
こんな風になってオーバーヘッド && 強制終了の危険が生じてしまうので注意。
new とかも例外投げる可能性あるので注意。

以上。知ってて役に立つ?

03_06_19

うぉう。(← 10hit/日 over でびびる人。)


横浜ベイスターズ公式サイト

公式サイトなだけに、ネガティブな発言をするわけにいかず、 毎日何らかのポジティブメッセージが残してあって、まあ、大変だなぁ。っていう話。
横浜がんばれ〜


梅雨の時期、通学自転車一時間な僕にとって毎日がかけひきの連続。 そんな生活の中で最近学んだことは、

「別に傘なんかなくても大体は大丈夫」

03_06_20

過去の分を参照したくなって、リンク貼るとするじゃないですか。
例えば、昨日のん
で、その時にその月の分、まあ、今なら6月ね、にリンク貼ると、index.html#03_xx_xxに リンク貼ることになるんだけど、それだったらその月の分がログになっちゃった時に index.htmlにリンク貼ってるのが問題に。で、何か対処しないといけないな。っていうひとり言。



はーい、笑って笑って。
いや、自分では笑った。

大往生、何か操作しにくいなぁ…と思って、なんとなくテレビに近付いてやってみる。
これは…いいかもしれない。
操作しやすいし、テンション上がりまくりだし。

ゲーセンの雰囲気出ないのはコントローラーのせいではなく、テレビとの距離が問題です。
1メートルくらいが最適。目、悪くなる。

03_06_22

なんかケツイの難易度が HARD になってた。
なんかボスの攻撃が少しづつ違う…ザコの弾がなんとなく多い…


夏至です。

春分、秋分の日とかよりも夏至とか冬至とかの方が偉いような感じなのに。

明日から昼が短かくなっていくんだよなぁ。変な感じ、なんとなく。


日本橋まで ARM 探しに行くけど、どこにも無いし。 まあいいか、どうせ実装の詳細なんか書いてないだろうし。

03_06_24

PC-UNIXみたいなのを個人で使ってる時に印刷したくなったら、/dev/lp0 に書き込み権与えて、 gs -sOutputFile=/dev/lp0 みたいにして直接プリンタに流したほうがいいかもしれない。
そうすれば、印刷キャンセルしたいときも Ctrl-C 一発だし、lpr,lpd の設定で悩まなくていいし。
このくらいだったら、エイリアスだけで可能ですしね。
alias psprint='gs -sOutputFile=/dev/lp0 -sDEVICE=XXX'

GIMP-Printっていう、 大量のプリンタドライバ + それのインターフェースAPI群があるんですよ。
GIMPって名前付いてるけど、GIMPとは独立して動いたりもするんだけど。
まあ、GIMPのプラグインとしても使えて、試しに印刷してみたんですよ。
GUIでプリンタ名指定して終わりですよ。それ以外何も設定しない。

Unixとかのプリンタ設定周りは終わってると思ってたんだけど、

「進歩してるんだなぁ…」

って、普通に思いました。


あと、帰り道に魚が死んでる川があるんだけど、今日そこ見たら猫が浮いてて、ブルーだった。
えーと、魚浮いてるのはそんなにブルーじゃないのに、なんで猫だったらブルーなんだろうか。
何が違う?足か?魚にも足が付いてたらブルーか?じゃあなんだ、後足が生えただけのオタマジャクシが 死んで浮いてたらブルーか?そんなことないだろう。足ではない。何だ?

まあ、今日見た猫は死んでたけど膨らんでなかったので、それほど欝じゃなかった。
昔見た川に浮いてる猫は膨らんでた。あれは見てしまった時はかなり欝だ。車に轢かれて潰れた猫よりもある意味グロい。
でも、猫見たのよりも、途中に寄った本屋に傘忘れて取りに帰る為に30分自転車余計に乗ることになってしまって、 それのほうがブルーだった。

こうやって適当な文章ばっかり書いてるから正しい日本語使えなくなるんだと思った。
あと、「おは朝」の「日本語大丈夫?」っていうコーナーがたまに教養が増えるのでいい感じだ。 ただしあれを見てから学校行くと時間ぎりぎりだ。

03_06_25


自己ベスト3ぐらいに入るかもしれない。
最近笑い閾値下ってるかもしれない。大体何でも笑うかもしれない。

03_06_26

そういえば、昨日は大往生スコア更新したっけ

2億9980万と少し。
そんなんばっかり。やっぱゲーセンのほうがやりやすいなぁ…
どうやったらおうちであの環境を再現することができるかな

横浜巨人に勝ち越し。いい感じ。

03_06_27

ガラ婦人到着時のスコアは良くなってきてるけど、 ガラ婦人でやられまくるから、クリア時スコアは良くならない。
あと、ここでガラ婦人って書きまくるから、妹が「ガラ婦人」っていう単語を覚えた。
和田勉と一緒

ゲームの話ばっかりだなー。

03_06_28

例えば、「本棚に本がある」って言った場合に、ここでいう本っていうのは一冊 じゃなくて、たくさんの本のことを指すんだけど、英語だとこういう場合booksって なるんだよね。
で、英語圏というか、西欧語全般の人っていうのは常に物がひとつなのか複数なのか を考えるようになってて、直観でわかるんだろうけど、日本人はそこで、 ひとつか複数かっていうのを思考しないといけなくて、なんか気持ち悪いと思う。
だから、なんかダウンロードしてきたときに、例えば、画像のディレクトリが imageなのかimagesなのかすぐに思い付かなくて、それがどうしたっていう話。

そういえば、昨日は家で大往生初めて二週目いった。


さて、僕が自分のサイトを開設した頃の「自分のサイトの宣伝」というものは どこかのサイトのBBSなりに「相互リンクしようぜ」みたいな感じで書き込んで行くというのが 日常であった。ように記憶している。
しかし、今はまあ、googleの登場とか、アクセス解析流行、 blogなんかみたいな色々なスタイルのサイトの登場とかで、そういった 宣伝方法というのはあんまり見ないというか、他の宣伝方法の方が効果があるようになってしまった。

で、新しい宣伝方法の話。
最近登場した宣伝方法のひとつに「他のサイトへ文中リンクを行う」というものがあげられる。
リファをとるという方法を利用して、相手へ自分のところのURLを主張するという方法だ。

しかし、この方法は僕から言わせもらえばヌルい。
考えてもみてほしい。HTTPプロトコルにおけるリクエストの情報は善意で送っているものだ。
そして、リファというものはその善意の情報をもとにしたものである。いくらでも操作できるのだ。 わざわざリンクを貼って、そこをクリックしてRefererを設定する必要もあるまい。
要するに、どのサイトを見に行ったときも常にRefererは自分のサイトを指すようにしておくのである。
ブラウザの実装をいじることになるが、mozillaとかは絶望的でもw3mなんかだったら grep Referer *.c したら一発だろう。 これで、あなたのブラウザは世界中にあなたのサイトのURLを蒔き散らす世界で一つだけのブラウザである。

しかし、なんか、倫理に反する面があるというか、ソース弄る必要があるというか、 使いたくないという思いもあるだろう。
しかも、大きいサイトのリファというのは膨大な量であり、たかが1,2アクセスあっただけの逆リンクが 注目されるということは考えにくい。

そこで、User-Agent をなんとかするのである。
たいていのブラウザは User-Agent は変更できるようにしてある。 そこで、 User-Agent を自分のサイトのURLに…というのは早計だ。
一度でもブラクラを踏んだことのある人間にとってはURLというのは結構恐しいものがある。
大量のUAの記述に混じってURLが一個あるというのはそういう人間にとっては不気味以外の何者でもないだろう。
そうなってはこの「User-Agent-URL法」はあまり効果があるとは言い難い。

で、自分のサイトを持ってる人間だったら、自分のサイトが一番に来るgoogleワードって何か考えたことがあるだろう。
まあ、それを利用するのである。

例えば、自分のサイトのアクセス解析の中に

Mozilla/5.0 ねこのまたたびブラウザービオフェルミン(compatible;SMIE Mk.II;chou-kanji 4.0)

なんていうUser-Agentがあったらどうするか、僕だった即googleである。そうしたら、どうなるか。
この結果 から考えて、まず間違いなく僕のサイトが一番に来るはずだ。まあ、そういう話。

ここでのポイントはUser-Agentを日本語にしておくことだろうか。そうすれば与えるインパクトも大きくなるだろう。
漢字コード問題があるけど、多分EUC-JPで大丈夫。
わからない人もいるかもしれないので、httpについて少し。
どっかからhtmlをダウンロードする時っていうのは、サーバーに「ファイルくれ」って要求するんですよ。
それがHTTPリクエスト。
だいたい↓のような感じ
GET /index.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/index.html

まあ、ごちゃごちゃあるけど、必要なのは、一番上の GET って書いてある行だけで、 あとの行はおまけみたいなもんで、実際適当な文字列でも構わないんですね。特にRefererとUser-Agentは。
で、アクセス解析っていうのはそのおまけの行の集計を取ってるだけなんでいくらでも騙せるっていう話。

03_06_29


今日のは意味わからないかもしれない。
いや、僕はわかるんだけど。
昨日の文章とかを見てもどうも僕には構成力というか、 わかりやすく説明するという能力が欠けているような気がする。
こんなんだからレポート書けないんだなぁ…ああ、そういえばレポートやらなあかん…

03_06_30

つわけで集計付けた。
まだ適当だから明日はもうちょっとなんとかしよう。

gccコンパイルしてたら libgcj リンクする時にメモリ無くなって ld 落ちた。
メモリ 128M + スワップ 58M あるのにな〜。

あと、mozilla の話は面倒だからやめとく。
windows でも mozilla いい感じだった。っていう話。
みんなもっと mozilla 使おうよ。