長年(大学3年の時から)xyzzyを使ってきたが、諸事情によりEmacsを使うことにした。
職場のPCが英語だから文字化けするとか、将来的にLinuxを使う予定があるとか、利用者人口が多いのでスクリプトが充実してるとか、まぁ理由はいろいろ。
xyzzy自体がEmacsのCommonLisp版みたいなものなので鞍替えしてもそんなに違和感はない、っがさすがに個人的な設定とかはしないと些細な違いに戸惑う。
大きなのは、C-hのHelpだろう。
後は今まで使ってきたxyzzy-lispをemacs-lispからみつければ終了。
まぁ時間はそんなにかからない。
個人的にはさくさく動いたxyzzyの方がいいかなぁとも思いながら、Emacsももっさり感を除けばいい感じなので満足。
しばらくは平行して使うことになるかな。
それにしても、xyzzyのフォルダごとグレップとかの昨日ってEmacsにもあるのかな?
Syntax highlighter
2010-02-26
2010-02-23
招待状
大学の時に所属していた合唱団から定期演奏会の招待状が届いた。
正直驚き!!
実家の方に届くものだと思っていた。心意気はすばらしい!
ま、呼ばれなくても行くつもりだったけどね。
それはそれと置いておいて、微妙なダメだし。
今日届いても、航空券、有給とうはどう考えても間に合いません。最低2ヶ月はほしいです。
しかし、壮大な曲ばかりで驚いた。
雪花もあるし・・・懐かしい。もう歌えんが・・・
今メンバー何人なんだろう?
正直驚き!!
実家の方に届くものだと思っていた。心意気はすばらしい!
ま、呼ばれなくても行くつもりだったけどね。
それはそれと置いておいて、微妙なダメだし。
今日届いても、航空券、有給とうはどう考えても間に合いません。最低2ヶ月はほしいです。
しかし、壮大な曲ばかりで驚いた。
雪花もあるし・・・懐かしい。もう歌えんが・・・
今メンバー何人なんだろう?
2010-02-15
C++: グローバル領域
GCの続き。
スタックからルートを取得する方法は理解したが、グローバル変数はどうするんだろうと調べてみた。
メモリの領域は、スタック、データ、テキストの3つに分かれていて、テキストが実コード、スタックはスタック、っでデータ領域にグローバル変数とかが入るらしい。
じゃあ、これを取得すればいいんじゃん!なんて思ったのだが、調べてもそんなもの頭と底をとる方法がない。普通こんなもん意識しないから、ある意味当たり前か・・・
とりあえず、試してみてだめだったこと。
DSセグメントレジスタを16ビット左シフトした値を頭とし、最初にヒープから取得したアドレスを底として捜査。
→ 無理。よく見るとグローバルなアドレスはヒープよりも下にある。
ちなみに、もう一つ問題があって、こんなコードが不正になる。
理由:GCでアドレスが変わるので、例えばpが0x0032fec8を指していて、GC後に0x0033fda8になったとすると、実際に変数pが指している値はそのまま前の値になって不正になる。
スタックポインタの指す値を上書きしてるから大丈夫かと思ったら、甘かった・・・う~ん・・・
原因はスタックポインタ上にアドレスが無いから。
なぜ?
少し処理を足すとスタックが上書きされたりして、グローバル変数なのに問答無用で回収されたり・・・
なぜだ・・・
スタックからルートを取得する方法は理解したが、グローバル変数はどうするんだろうと調べてみた。
メモリの領域は、スタック、データ、テキストの3つに分かれていて、テキストが実コード、スタックはスタック、っでデータ領域にグローバル変数とかが入るらしい。
じゃあ、これを取得すればいいんじゃん!なんて思ったのだが、調べてもそんなもの頭と底をとる方法がない。普通こんなもん意識しないから、ある意味当たり前か・・・
とりあえず、試してみてだめだったこと。
DSセグメントレジスタを16ビット左シフトした値を頭とし、最初にヒープから取得したアドレスを底として捜査。
→ 無理。よく見るとグローバルなアドレスはヒープよりも下にある。
ちなみに、もう一つ問題があって、こんなコードが不正になる。
int *p = (int*)gc_malloc(sizeof(int) * 4); // とりあえず4つ確保 p[0] = 1; p[1] = 2; gc_collect(); // p[0] == 0 !!コレクターを呼び出さなくても、GCが走れば不正になる。
理由:GCでアドレスが変わるので、例えばpが0x0032fec8を指していて、GC後に0x0033fda8になったとすると、実際に変数pが指している値はそのまま前の値になって不正になる。
スタックポインタの指す値を上書きしてるから大丈夫かと思ったら、甘かった・・・う~ん・・・
2010/02/18追記
実際には上記の不正は違っていて、回収されてはいけない値が回収されていた。原因はスタックポインタ上にアドレスが無いから。
なぜ?
少し処理を足すとスタックが上書きされたりして、グローバル変数なのに問答無用で回収されたり・・・
なぜだ・・・
2010-02-11
C++: Copy GC
C++ではなくてCの話だが、まぁいいや。
いろいろな理由があってガーベジコレクションの勉強をしている。
BoehmGCを使えばいいのだが、ちょっとした理由からそれができないので・・・
っで、とりあえず保守的GCかPreciseGCしか知らなかったので調べてみた。
結構いろいろ種類があるが、Mostly-copying GCがよさげかなと(根拠なし)思い、その元となったCopy GCを実装してみた。
といってもこのページをとりあえず理解のために写経しただけとも言う。
基本の考え方は、ヒープとルートが分かればなんとかなりそうな感じ。
っが、どうやってルート調べるのかがすごく疑問だった。
それを解決してくれたのがこのページ
一般教養としてのGarbage Collection
ぜんぜん一般教養ではないと思うが・・・
ルートは基本スタック上につまれている変数から辿れるポインタだと思えばよさそう。
なら、ESPの値を引っ張ってくればいいだけじゃん、と思い実装。
動いた!
このままでは使えないのでもう少し調べないとなぁ・・・
(Mostly-copying GCの実装って難しいのかな?ぜんぜん見ない・・・)
いろいろな理由があってガーベジコレクションの勉強をしている。
BoehmGCを使えばいいのだが、ちょっとした理由からそれができないので・・・
っで、とりあえず保守的GCかPreciseGCしか知らなかったので調べてみた。
結構いろいろ種類があるが、Mostly-copying GCがよさげかなと(根拠なし)思い、その元となったCopy GCを実装してみた。
といってもこのページをとりあえず理解のために写経しただけとも言う。
基本の考え方は、ヒープとルートが分かればなんとかなりそうな感じ。
っが、どうやってルート調べるのかがすごく疑問だった。
それを解決してくれたのがこのページ
一般教養としてのGarbage Collection
ぜんぜん一般教養ではないと思うが・・・
ルートは基本スタック上につまれている変数から辿れるポインタだと思えばよさそう。
なら、ESPの値を引っ張ってくればいいだけじゃん、と思い実装。
動いた!
このままでは使えないのでもう少し調べないとなぁ・・・
(Mostly-copying GCの実装って難しいのかな?ぜんぜん見ない・・・)
2010-02-10
movie: AVATAR
土曜日に観たので、実は4日くらい前・・・
アバターを観てきた。リアルの世界にパンドラがないって言って自殺(?)しちゃう人がでたやつ。
以下、多分にネタバレ注意。
物語は他の星に移民する地球人の一人、ジェイクを中心に進められる。
このジェイク君(といっても、見た目は僕より年上だったから、30以上か?)がものすごくガキ!精神的に。
個人的に副題は、ジェイク成長物語だと思っている。
宣伝(?)どおり彼は下半身不随で車椅子。なので、動く体を手に入れられてはしゃぐ。っで、はしゃぎすぎて他のメンバーとはぐれ、アバターの村にの娘に命を助けられる。
これはチャンスとばかりに地球軍がジェイクにスパイを命じ、ジェイクはアバターの生態(といっても言語とか生活習慣とか)を探る。
正直、この辺までは微妙。いや、アクションとかは多めでいいんだけど、ジェイクが図体の割りにガキっぽくて見てていらいらした。
っで、しばらくすると、地球軍が領地を広げるために木をなぎ倒していく。止めようとするジェイク。相手は鉄の塊、メインカメラを素手で壊して終了。
っが、当然カメラなので自分の姿が映り、謹慎処分をくらう。
地球軍は何故か星を侵略して自分たちの物にしたいらしく、戦争をしかける。
っで、後はお約束の勧善懲悪(ではないが)なアクションで地球軍を倒し、ジェイクがアバターに生まれ変わって終了。
どこに欝になる要素があったのか分からんかった。
個人的には、白人 VS ネイティブアメリカンって感じ。この映画の中では、アバター、自然の動物が一体になって星を侵略から守ったけど、
歴史上では卑怯な白人がネイティブアメリカンから土地を奪い取ったんだよなぁ、とか思いながら観てた。
軍隊とか、地球連合軍なのにすごくアメリカっぽい感じだったし(ものすごく偏見が混じってます)
2度観たいとは思わない感じの映画。でもCGとかアクションとかはよかった。
ストーリーは正直2流だなぁと感じた。
(何様のつもりだ、俺・・・)
アバターを観てきた。リアルの世界にパンドラがないって言って自殺(?)しちゃう人がでたやつ。
以下、多分にネタバレ注意。
物語は他の星に移民する地球人の一人、ジェイクを中心に進められる。
このジェイク君(といっても、見た目は僕より年上だったから、30以上か?)がものすごくガキ!精神的に。
個人的に副題は、ジェイク成長物語だと思っている。
宣伝(?)どおり彼は下半身不随で車椅子。なので、動く体を手に入れられてはしゃぐ。っで、はしゃぎすぎて他のメンバーとはぐれ、アバターの村にの娘に命を助けられる。
これはチャンスとばかりに地球軍がジェイクにスパイを命じ、ジェイクはアバターの生態(といっても言語とか生活習慣とか)を探る。
正直、この辺までは微妙。いや、アクションとかは多めでいいんだけど、ジェイクが図体の割りにガキっぽくて見てていらいらした。
っで、しばらくすると、地球軍が領地を広げるために木をなぎ倒していく。止めようとするジェイク。相手は鉄の塊、メインカメラを素手で壊して終了。
っが、当然カメラなので自分の姿が映り、謹慎処分をくらう。
地球軍は何故か星を侵略して自分たちの物にしたいらしく、戦争をしかける。
っで、後はお約束の勧善懲悪(ではないが)なアクションで地球軍を倒し、ジェイクがアバターに生まれ変わって終了。
どこに欝になる要素があったのか分からんかった。
個人的には、白人 VS ネイティブアメリカンって感じ。この映画の中では、アバター、自然の動物が一体になって星を侵略から守ったけど、
歴史上では卑怯な白人がネイティブアメリカンから土地を奪い取ったんだよなぁ、とか思いながら観てた。
軍隊とか、地球連合軍なのにすごくアメリカっぽい感じだったし(ものすごく偏見が混じってます)
2度観たいとは思わない感じの映画。でもCGとかアクションとかはよかった。
ストーリーは正直2流だなぁと感じた。
(何様のつもりだ、俺・・・)
2010-02-05
電話
以前はほとんどなかったのに、今更になって結構頻繁(といっても月1程度)にエージェントから電話がかかってくる。
正直今更・・・
たいていMonsterBoardから来てるんだけど、ぜんぜん更新してないのにどうして引っかかるんだ?
(まぁ、未だに職探し中のステータスにしてあるのも問題か・・・)
ようやく景気が上向いてきて求人が増えたか、時期的なものか、単にこの業界が慢性的な人手不足かのどれかだとは思うが。
結構条件いいのが多いのよね・・・本当に何で今頃・・・
正直今更・・・
たいていMonsterBoardから来てるんだけど、ぜんぜん更新してないのにどうして引っかかるんだ?
(まぁ、未だに職探し中のステータスにしてあるのも問題か・・・)
ようやく景気が上向いてきて求人が増えたか、時期的なものか、単にこの業界が慢性的な人手不足かのどれかだとは思うが。
結構条件いいのが多いのよね・・・本当に何で今頃・・・
2010-02-02
Linux: UbuntuをVirtualBoxで試してみた
会社のPCでだが・・・
とりあえず、デフォルトでインストール。
ものすごく簡単だった。ネットで調べる必要がないくらいに。
デフォルトのWMがGnomeなので、KDEに変更。
初めて触ったWMがKDEなのでKDE好き(^^;
使用感。
Linuxのディストリビューションなんて、Fedora、Redhat(ほぼFedoraと一緒)、Debianくらいしか構ったことないし、
デスクトップLinuxで本格的に使ってたのはDebianだけなのであまり比較はできないが、
個人的には気に入った。
外側がKDEな上にUbuntu自体がDebianを元に作られてるのである意味当たり前か。
いろいろやるのにsudoしなきゃならないところとか、GUI上だとMaxかよって突っ込みを入れたくなる頻度でパスワード求められるけど。
ちなみに、
DebianをVirtualBox上で試そうと思ったんだけど、インストールが上手くいかなかった・・・
これ実機でもこの調子だとしたら、やっぱりきついよなぁ・・・
次にPC買ったらUbuntuかな。
(OSなしのPCが安く売ってればだけど・・・でもWindows7とかに特に魅力を感じないんだよね・・・)
とりあえず、デフォルトでインストール。
ものすごく簡単だった。ネットで調べる必要がないくらいに。
デフォルトのWMがGnomeなので、KDEに変更。
初めて触ったWMがKDEなのでKDE好き(^^;
使用感。
Linuxのディストリビューションなんて、Fedora、Redhat(ほぼFedoraと一緒)、Debianくらいしか構ったことないし、
デスクトップLinuxで本格的に使ってたのはDebianだけなのであまり比較はできないが、
個人的には気に入った。
外側がKDEな上にUbuntu自体がDebianを元に作られてるのである意味当たり前か。
いろいろやるのにsudoしなきゃならないところとか、GUI上だとMaxかよって突っ込みを入れたくなる頻度でパスワード求められるけど。
ちなみに、
DebianをVirtualBox上で試そうと思ったんだけど、インストールが上手くいかなかった・・・
これ実機でもこの調子だとしたら、やっぱりきついよなぁ・・・
次にPC買ったらUbuntuかな。
(OSなしのPCが安く売ってればだけど・・・でもWindows7とかに特に魅力を感じないんだよね・・・)
2010-01-30
練習中の曲に関してのメモ
ギターの練習をしている。別に発表会とかはない。
ちなみに、練習してるのはこの曲
激ムズ。ギター暦1年未満がやる曲ではない気がする。しかも、クラシックギターではなく鉄弦のアコースティックギター・・・
それは置いておいて、これをやるにあたって必要そうな奏法のメモ。
ハンマリング、プリングオフ: いたるところで
ラスゲアード: 動画の49秒くらいのところのフレーズで出てくる
タンボーラ: 最後のノリがよくて格好いいところで
ポルタメント、グリッサンド: 結構いたるところでみる
チョーキング: 1分くらいのところで
ゴルベ?: 最後の方
タンボーラってサンピングのことか?
いろいろ無謀な気がするが、ロングスパンでやろう・・・
ちなみに、練習してるのはこの曲
激ムズ。ギター暦1年未満がやる曲ではない気がする。しかも、クラシックギターではなく鉄弦のアコースティックギター・・・
それは置いておいて、これをやるにあたって必要そうな奏法のメモ。
ハンマリング、プリングオフ: いたるところで
ラスゲアード: 動画の49秒くらいのところのフレーズで出てくる
タンボーラ: 最後のノリがよくて格好いいところで
ポルタメント、グリッサンド: 結構いたるところでみる
チョーキング: 1分くらいのところで
ゴルベ?: 最後の方
タンボーラってサンピングのことか?
いろいろ無謀な気がするが、ロングスパンでやろう・・・
2010-01-28
OS: メモリ
ここ数日(数週間?)まったく時間が取れなかった。
今も取れているかはよく分からんが。
OSがメモリを割り当てるところで停まっていた。
まぁ、今も停まっていると言えばそうだが・・・
いまいちページングがよく分からない。E820hで取得したメモリーマップ情報からメモリアドレスを取得して、そのアドレスに対してページングOnする。
そこまでは上手くいっている(と思う)
っで、とりあえずmallocもしくはnewが使えないと話しにならない。ということで実装していたのだが、どうも変な挙動をしていた。
今日ふと、ページを初期化してから、アロケータの初期化をしたら、動いた(・A・)
鼻から悪魔が出るコードかもしれんが、とりあえずこれでいこう。
この辺が動けば少しやりやすくなるし・・・
まじめに参考書探さないとなぁ。
だれかお勧めの本とか知りませんか?
今も取れているかはよく分からんが。
OSがメモリを割り当てるところで停まっていた。
まぁ、今も停まっていると言えばそうだが・・・
いまいちページングがよく分からない。E820hで取得したメモリーマップ情報からメモリアドレスを取得して、そのアドレスに対してページングOnする。
そこまでは上手くいっている(と思う)
っで、とりあえずmallocもしくはnewが使えないと話しにならない。ということで実装していたのだが、どうも変な挙動をしていた。
今日ふと、ページを初期化してから、アロケータの初期化をしたら、動いた(・A・)
鼻から悪魔が出るコードかもしれんが、とりあえずこれでいこう。
この辺が動けば少しやりやすくなるし・・・
まじめに参考書探さないとなぁ。
だれかお勧めの本とか知りませんか?
2010-01-24
ブリュッセル
ベルギーのブリュッセルに行ってきた。
別に観光情報とかが書かれるわけではない。単に所感。
実は(前に書いたっけ?)ブリュッセルに行くのは2度目。1度目はあまりいい思い出が無く終わったので、少し心配だった。
今回は2泊3日なので、まぁ少しゆっくり見て周れるかなと思いつつ、南駅(?)に到着。
メトロに乗ってホテル近くの駅まで。
一日目はこれで終了。仕事が終わってからなのでまぁこんなものだろう。
ちなみに、ロッテルダムからブリュッセルまで2時間弱くらい。
二日目とりあえず歩く。ショッピングストリートとか。本屋を探したが欲しい本が売っている店は見つからず。
どうでもいいが、ベルギーは一応オランダ語(フラマン語?)が公用語なのだが、ブリュッセルでは見るだけで、主に耳に入ってくるのはフランス語だった。
北部にあるアントワープではオランダ語だったのに、不思議。頻繁に旅行するようならフランス語を覚えた方がよさそうだ・・・
街自体は、新旧が入り混じってる感じ。パリの町並みによく似ているなぁと思わせるところが多々あったし、やはりフランス寄りなのだろう。
歩きつかれたのでホテルに戻って2日目終了。
3日目は日曜日なので店という店は閉まっている。雨も降ってるし、ということで特に何もせず帰る。
ちなみに、本当にどうでもいいことだが、ブリュッセルの平均身長は割りと低めだった。僕が普通か少し高いくらいに分類される感じだったので。
オランダの平均では僕は間違いなく低い方・・・190超えがごろごろいるんだよ・・・
ちょっとだけベルギーを好きになった瞬間だった。
別に観光情報とかが書かれるわけではない。単に所感。
実は(前に書いたっけ?)ブリュッセルに行くのは2度目。1度目はあまりいい思い出が無く終わったので、少し心配だった。
今回は2泊3日なので、まぁ少しゆっくり見て周れるかなと思いつつ、南駅(?)に到着。
メトロに乗ってホテル近くの駅まで。
一日目はこれで終了。仕事が終わってからなのでまぁこんなものだろう。
ちなみに、ロッテルダムからブリュッセルまで2時間弱くらい。
二日目とりあえず歩く。ショッピングストリートとか。本屋を探したが欲しい本が売っている店は見つからず。
どうでもいいが、ベルギーは一応オランダ語(フラマン語?)が公用語なのだが、ブリュッセルでは見るだけで、主に耳に入ってくるのはフランス語だった。
北部にあるアントワープではオランダ語だったのに、不思議。頻繁に旅行するようならフランス語を覚えた方がよさそうだ・・・
街自体は、新旧が入り混じってる感じ。パリの町並みによく似ているなぁと思わせるところが多々あったし、やはりフランス寄りなのだろう。
歩きつかれたのでホテルに戻って2日目終了。
3日目は日曜日なので店という店は閉まっている。雨も降ってるし、ということで特に何もせず帰る。
ちなみに、本当にどうでもいいことだが、ブリュッセルの平均身長は割りと低めだった。僕が普通か少し高いくらいに分類される感じだったので。
オランダの平均では僕は間違いなく低い方・・・190超えがごろごろいるんだよ・・・
ちょっとだけベルギーを好きになった瞬間だった。
2010-01-17
movie: シャーロックホームズ
映画の話。
予告ではホームズは荒くれ者で、ワトソンが知的って感じで、いまいちじゃねぇのこれって思っていたが、裏切られた(いい意味で)
いろんな新要素というか、見たことないホームズが見れたけど、それはそれでありな感じ。
ホームズ好きもそうじゃない人も楽しめるんじゃないかと。
最後の最後でモリアーティー教授の名前もでてきたし、エピソード2もあるのかね?
出たら見る自信がある。それぐらいよかった。
日本で公開されるか分からんけど。
(多分されるだろう。宣伝されてる?)
予告ではホームズは荒くれ者で、ワトソンが知的って感じで、いまいちじゃねぇのこれって思っていたが、裏切られた(いい意味で)
いろんな新要素というか、見たことないホームズが見れたけど、それはそれでありな感じ。
ホームズ好きもそうじゃない人も楽しめるんじゃないかと。
最後の最後でモリアーティー教授の名前もでてきたし、エピソード2もあるのかね?
出たら見る自信がある。それぐらいよかった。
日本で公開されるか分からんけど。
(多分されるだろう。宣伝されてる?)
C++: 構造体でアドレスを読む
我ながら意味不明なタイトルだ。
やりたいことは、アセンブラが設定した配列をC++(またはC)の構造体に入れるってそれだけなんだけど、何故かはまっている。
アセンブラは適当なアドレスに値を入れる。こんな感じで。
っで、まぁこれはE820hで取得したメモリーマップなので、普通にこんな構造体で受け取る。
これが普通の動作なのかなと思い、ちょっと実験してみた。
っで、結果は普通に予定通りの値が取れていた。
コンパイラの最適化が効いてるからなのか(何もオプションつけてないけど)、別の要因で直にアドレスから取るのとは違うのかよく分からん。
何より腹が立つのは、以前はまともに動いていたのだ!ページングの実装を終えたらおかしくなった・・・
関係があるのかな、やっぱり・・・
結論: まともに動いていました。
原因: VGAクラスで実装していたprintfメソッドの不具合。
64ビットの数値には%xの書式指定子が対応しておりません・・・
参考にしている人はいないと思うが、
64ビットの整数値を表示したいのに、可変引数のポインタを進める際に(int*)のポインタでやっとりました。つまり、8バイト移動させないといけないところを、4バイトしか進めていなかったっと。
これで2時間悩んだ。printfデバッグの限界やね。と勝手に納得・・・
やりたいことは、アセンブラが設定した配列をC++(またはC)の構造体に入れるってそれだけなんだけど、何故かはまっている。
アセンブラは適当なアドレスに値を入れる。こんな感じで。
0x00002840: 0x00000000 0x0000000 0x0009fc00 0x00000000 0x00002850: 0x00000001 ...これが配列の一要素。
っで、まぁこれはE820hで取得したメモリーマップなので、普通にこんな構造体で受け取る。
struct MemoryMapEntry
{
uint32_t baseAddrLow;
uint32_t baseAddrHigh;
uint32_t lengthLow;
uint32_t lengthHigh;
uint32_t type;
};
// どこかの関数で
MemoryMapEntry mapEntries = getMemoryMapEntry(); // これはアセンブラ内で定義した。
これで普通ならいけるはずなんだけど、取り出される値がおかしい。上記のアドレスなら、baseAddrLow = 0x00000000 baseAddrHigh = 0x00000000 lengthLow = 0x0009fc00 lengthHigh = 0x00000000 type = 0x00000001になるはずなんだけど、こんな感じに実際にはずれる。
baseAddrLow = 0x00000000 baseAddrHigh = 0x00000000 lengthLow = 0x00000000 lengthHigh = 0x00000000 type = 0x0009fc00感じとしては、20バイト取得できてないといけないのだが、12バイトしか取れてない感じ。なぜ?
これが普通の動作なのかなと思い、ちょっと実験してみた。
#includeこんなむちゃくちゃなコードでもなんか動いてるから不思議。struct sample { unsigned int val1; unsigned int val2; unsigned int val3; unsigned int val4; unsigned int val5; }; void* getsample() { static int *addr = (int*)0x404030; addr[0] = 0x00000000; addr[1] = 0x00000000; addr[2] = 0x00000000; addr[3] = 0x0009fc00; addr[4] = 0x00000001; return addr; } int main() { sample *s = (sample*)getsample(); printf("addr: %x\n", s); printf("%x, %x, %x, %x, %d\n", s[0].val1, s[0].val2, s[0].val3, s[0].val4, s[0].val5); return 0; }
っで、結果は普通に予定通りの値が取れていた。
コンパイラの最適化が効いてるからなのか(何もオプションつけてないけど)、別の要因で直にアドレスから取るのとは違うのかよく分からん。
何より腹が立つのは、以前はまともに動いていたのだ!ページングの実装を終えたらおかしくなった・・・
関係があるのかな、やっぱり・・・
2010/01/17 追記
原因が分かった。結論: まともに動いていました。
原因: VGAクラスで実装していたprintfメソッドの不具合。
64ビットの数値には%xの書式指定子が対応しておりません・・・
参考にしている人はいないと思うが、
64ビットの整数値を表示したいのに、可変引数のポインタを進める際に(int*)のポインタでやっとりました。つまり、8バイト移動させないといけないところを、4バイトしか進めていなかったっと。
これで2時間悩んだ。printfデバッグの限界やね。と勝手に納得・・・
OS: ページング
メモリ管理をしないと動的にメモリが取れない。
っで、とりあえずページングに手を出してみることにした。
とりあえずここを参考にしつつ、人のコードを見つつ。
っで、ページングONしてやって、qemuで起動すると、何故か無限リスタートしてくれる。
意味が分からんなぁ、と思いながらMonaのソースを見る。
(分からなくなったときのMona頼りというわけではないが・・・)
PageManager.cppのsetupメソッドを見ると、VRAMのアドレスをページング対応してる。何でだろうと思いながら、とりあえず似たようなことをしてみたら、動いた(・д・)
ページングをONにするということはすべてのアドレスをページング対応する必要があるのかな?
よく分からん。
ちなみに、ページング対応させたアドレスの属性を、書き込み可能、ユーザー領域、カレントにしないとだめだった。意味はよく分かっていない・・・(汗
無知っていやだなぁ・・・
勉強しないといけないのだが、こっちじゃ書籍も探し難い・・・ネットの情報だけじゃ厳しくなってきたというのに・・・
っで、これ書いてるときに気がついたのだが。
そういえばバイオスのE820h命令でメモリーマップを取得してるんだから、適当なアドレスを使用すれば、動的メモリーの割り当てができるような気がするなぁ・・・
ページングの前に実装するべきだったか?
っで、とりあえずページングに手を出してみることにした。
とりあえずここを参考にしつつ、人のコードを見つつ。
っで、ページングONしてやって、qemuで起動すると、何故か無限リスタートしてくれる。
意味が分からんなぁ、と思いながらMonaのソースを見る。
(分からなくなったときのMona頼りというわけではないが・・・)
PageManager.cppのsetupメソッドを見ると、VRAMのアドレスをページング対応してる。何でだろうと思いながら、とりあえず似たようなことをしてみたら、動いた(・д・)
ページングをONにするということはすべてのアドレスをページング対応する必要があるのかな?
よく分からん。
ちなみに、ページング対応させたアドレスの属性を、書き込み可能、ユーザー領域、カレントにしないとだめだった。意味はよく分かっていない・・・(汗
無知っていやだなぁ・・・
勉強しないといけないのだが、こっちじゃ書籍も探し難い・・・ネットの情報だけじゃ厳しくなってきたというのに・・・
っで、これ書いてるときに気がついたのだが。
そういえばバイオスのE820h命令でメモリーマップを取得してるんだから、適当なアドレスを使用すれば、動的メモリーの割り当てができるような気がするなぁ・・・
ページングの前に実装するべきだったか?
2010-01-16
OS: 便利リンク
自分のための便利リンク。
ChangeLogとか、メモとかHDDに置けよという意見は無視。
[Wiki]
OSDev(English)
osdev-j(MMA)(日本語)
[ブログ]
OSのようなもの
Outlandish Watch(日本語)
[BIOS関連]
Ralf Browns Interrupt List
何か見つけたら随時足すことにしよう。
ChangeLogとか、メモとかHDDに置けよという意見は無視。
[Wiki]
OSDev(English)
osdev-j(MMA)(日本語)
[ブログ]
OSのようなもの
Outlandish Watch(日本語)
[BIOS関連]
Ralf Browns Interrupt List
何か見つけたら随時足すことにしよう。
2010-01-14
C++: クラスのサイズ
これをググったのももう何度目かなので、いい加減メモっておこう。
C言語のstructは基本中身のバイト数の合計+パディングになる。例えば下記のような構造体があったとする。
int = 4, char = 1, short = 2, total = 7になるが、
7だとキリが悪い(あまりいい表現ではないが)ので、パディングがcharとshortの間に入って8になる。
(詳しくは、バイト境界とか、アライメントとかでググって)
っで、C++の話。
C++のクラスはC言語の構造体と違ってメンバ関数を持つことができる。これが曲者。
例えばこんなクラスがあったとする。
どれだけメンバ関数が足されてもサイズには影響が無いそうだ。実際、GCCの-Sオプションで吐き出されるアセンブリを見たらなんとなく納得した。
っが、仮想関数が入ってくると別の話。
仮想関数はvtblを不可視のメンバ関数として持つので、そのポインタアドレス分増える。つまり4バイト。
なんでこんなことを調べたかというと、メンバ関数を持つクラスを普通の構造体として扱いたかったから。まったく普通なら問題なんだけど、メモリの内容を直接(例えばmemcpyとか)クラスの中に移したかった。
そうすると、クラスのサイズが重要になるので。
それだけの話。
C言語のstructは基本中身のバイト数の合計+パディングになる。例えば下記のような構造体があったとする。
struct Sample {
int value1;
char value2;
short value3;
};
この場合だと上記の基本に当てはめて、int = 4, char = 1, short = 2, total = 7になるが、
7だとキリが悪い(あまりいい表現ではないが)ので、パディングがcharとshortの間に入って8になる。
(詳しくは、バイト境界とか、アライメントとかでググって)
っで、C++の話。
C++のクラスはC言語の構造体と違ってメンバ関数を持つことができる。これが曲者。
例えばこんなクラスがあったとする。
class {
public:
void print();
private:
int value;
};
この場合は、クラスのサイズは4になる。なぜか?どれだけメンバ関数が足されてもサイズには影響が無いそうだ。実際、GCCの-Sオプションで吐き出されるアセンブリを見たらなんとなく納得した。
っが、仮想関数が入ってくると別の話。
仮想関数はvtblを不可視のメンバ関数として持つので、そのポインタアドレス分増える。つまり4バイト。
なんでこんなことを調べたかというと、メンバ関数を持つクラスを普通の構造体として扱いたかったから。まったく普通なら問題なんだけど、メモリの内容を直接(例えばmemcpyとか)クラスの中に移したかった。
そうすると、クラスのサイズが重要になるので。
それだけの話。
2010-01-10
感覚が狂ったか?
座頭一がTVでやっていたので見た。
最初から見たわけではないので、序盤の話はよく分からなかったが、まぁ大まかな内容はつかんだと思う。
っが、別に今回は映画の内容ではなく、その中ででた台詞で不思議な感覚を味わったという話。
最後の最後で口縄(これでいいのかな?)の頭が、
「おめえ、メクラじゃねえのか?」と聞くのに対して、座頭一が、
「そうだよ」と答える一節。
これを見たときに、
「やっぱり盲目なんじゃん」と思った矢先に、座頭一が目を開けた!!
あれ?
なんで?
きっと、日本語→英語→理解の順になっていたのだろう。こんな感じで。
「おめえ、メクラじゃねえのか?」 -> "Aren't you blind?"
「そうだよ」 -> "Yes"
う~む、日本語がおかしくなってきたか・・・
最初から見たわけではないので、序盤の話はよく分からなかったが、まぁ大まかな内容はつかんだと思う。
っが、別に今回は映画の内容ではなく、その中ででた台詞で不思議な感覚を味わったという話。
最後の最後で口縄(これでいいのかな?)の頭が、
「おめえ、メクラじゃねえのか?」と聞くのに対して、座頭一が、
「そうだよ」と答える一節。
これを見たときに、
「やっぱり盲目なんじゃん」と思った矢先に、座頭一が目を開けた!!
あれ?
なんで?
きっと、日本語→英語→理解の順になっていたのだろう。こんな感じで。
「おめえ、メクラじゃねえのか?」 -> "Aren't you blind?"
「そうだよ」 -> "Yes"
う~む、日本語がおかしくなってきたか・・・
2010-01-09
Makefile: 依存関係
自作OSをビルドする際に、当然(?)makeを使うわけだが、ずぼらな僕は「make」って打つだけで全部やってほしいと思うわけだ。
っが、依存関係の問題があって、今まで
「make clean all」
なんて、毎回プロジェクトをリビルドしていたわけだ。
けど、これ今はまだいいが、ファイル数が10とか100とか増えた時に非常に面倒になる。
というか、僕の貧弱なノートPCでは時間がかかりすぎるようになる。
(こんなことやってるのに、使用してるPCがノートかよ、って突っ込みはなしで)
っで、とりあえず、依存関係を自動で解決するようにMakefileを書き直した。
ポイントになるのは、gccの「-MM」オプション。
っが、makeのマニュアルにある方法だと、sedを使う。っが、WindowsでMingwだけで何とかしようという環境の僕にはsedはおろかCygwinもない。
適当に、gccが吐き出す依存関係を編集して上手いこと書き出すプログラムをC++で書いた。
なんでこんなことしなきゃならんのだろうか?
これだけいろいろ便利になってるんだから、こんな変なノウハウじゃなく、もう少しスマートな解決方法があってもいいような気がする。
っが、依存関係の問題があって、今まで
「make clean all」
なんて、毎回プロジェクトをリビルドしていたわけだ。
けど、これ今はまだいいが、ファイル数が10とか100とか増えた時に非常に面倒になる。
というか、僕の貧弱なノートPCでは時間がかかりすぎるようになる。
(こんなことやってるのに、使用してるPCがノートかよ、って突っ込みはなしで)
っで、とりあえず、依存関係を自動で解決するようにMakefileを書き直した。
ポイントになるのは、gccの「-MM」オプション。
っが、makeのマニュアルにある方法だと、sedを使う。っが、WindowsでMingwだけで何とかしようという環境の僕にはsedはおろかCygwinもない。
適当に、gccが吐き出す依存関係を編集して上手いこと書き出すプログラムをC++で書いた。
なんでこんなことしなきゃならんのだろうか?
これだけいろいろ便利になってるんだから、こんな変なノウハウじゃなく、もう少しスマートな解決方法があってもいいような気がする。
2010-01-08
C++: 初歩的なこと・・・
VGAのを使って色を変えたり、文字を表示させたりするということ実装していた。
リアルモードからプロテクトモードに移行するとBIOSが使えないので、VGAを使う必要が(ないかもしれないが)ある。
っで、主にこの辺とかMonaの初期のソースとかを参考にしながら、しこしこ書いてみた。
っが、なぜか一行おきに空白がでる(縦に)。なんでだろうと、いろいろVRAMに与える値を変えたりしながら考えてみたが、一向に改善しない。
おかしいなぁと思いながらトイレにいって思いついた。
そういえばVRAMのアドレスはunsigned shortのポインタだなぁと・・・
Monaはunsigned charでサイトはunsigned shortなので、ポインタに加算を行った際のアドレスが1バイトずれる。
これか。
おさらい。
これを行った際に。ptrとptr2のアドレスは異なる。
あほかと思うくらい当たり前だが、はまった。
リアルモードからプロテクトモードに移行するとBIOSが使えないので、VGAを使う必要が(ないかもしれないが)ある。
っで、主にこの辺とかMonaの初期のソースとかを参考にしながら、しこしこ書いてみた。
っが、なぜか一行おきに空白がでる(縦に)。なんでだろうと、いろいろVRAMに与える値を変えたりしながら考えてみたが、一向に改善しない。
おかしいなぁと思いながらトイレにいって思いついた。
そういえばVRAMのアドレスはunsigned shortのポインタだなぁと・・・
Monaはunsigned charでサイトはunsigned shortなので、ポインタに加算を行った際のアドレスが1バイトずれる。
これか。
おさらい。
// ちなみに、0xb8000はVRAMのアドレス
unsigned char* ptr = (unsigned char*)0xb8000;
unsigned short* ptr2 = (unsigned short*)0x8b000;
ptr++; // 0xb8001
ptr2++;// 0xb8002
これを行った際に。ptrとptr2のアドレスは異なる。
あほかと思うくらい当たり前だが、はまった。
2010-01-07
OS: IPL
その筋には(というと変な雰囲気がでて格好いい?)有名だが、
2ch発祥のOSでMonaというのがある。最初の会社にいたころに知ったから、2005年くらいか?
あれから、5年。何を思ったのが、僕もOSを作りたいと思ってきた。
(昔から思っていたが、当時は何をしていいのかさっぱり分からなかった。が、最近なんとなく必要なものが見えてきた。暇にかまけて勉強したのが功を奏した感じ)
っで、Monaをはじめ、いろいろ調べてみた。
30日でできる! OS自作入門
とかが有名っぽいが、こっちじゃ買えん。
っが、結構実践サイトとかあって、解説が読めないだけでソースは読めたりする。
っで、IPL(OSを起動する前にBIOSが起動する。ブートローダーと同義?)を作ることからはじめることになるのだが、これが難しい(当たり前だが)
アセンブラがよく分からない(アセンブリ言語自体は割りとシンプルなのだが、アドレスとかレジスタとかがいまいち分からん)
あと、GCCとNASMの相性が悪い(というかGASとGCCの相性がよすぎるのか?)というのもあって、とりあえずNASMを選択していた状態ではさっぱり分からんかった。
とりあえず、このサイトの自作OSのタグに書かれているのを参考に(ほとんど丸写し)、IPLを作成。
GASを使うとCの関数がそのまま呼べるので楽!!
リンカスクリプトを使うとコンパイル時にプログラムのサイズが取れるので、FDの読み取りに必要なセクタ数が分かって楽!!!
なんて感じだった。
はじめからこれにしておけばよかった。
回り道は無駄じゃないと信じたい。
2ch発祥のOSでMonaというのがある。最初の会社にいたころに知ったから、2005年くらいか?
あれから、5年。何を思ったのが、僕もOSを作りたいと思ってきた。
(昔から思っていたが、当時は何をしていいのかさっぱり分からなかった。が、最近なんとなく必要なものが見えてきた。暇にかまけて勉強したのが功を奏した感じ)
っで、Monaをはじめ、いろいろ調べてみた。
30日でできる! OS自作入門
っが、結構実践サイトとかあって、解説が読めないだけでソースは読めたりする。
っで、IPL(OSを起動する前にBIOSが起動する。ブートローダーと同義?)を作ることからはじめることになるのだが、これが難しい(当たり前だが)
アセンブラがよく分からない(アセンブリ言語自体は割りとシンプルなのだが、アドレスとかレジスタとかがいまいち分からん)
あと、GCCとNASMの相性が悪い(というかGASとGCCの相性がよすぎるのか?)というのもあって、とりあえずNASMを選択していた状態ではさっぱり分からんかった。
とりあえず、このサイトの自作OSのタグに書かれているのを参考に(ほとんど丸写し)、IPLを作成。
GASを使うとCの関数がそのまま呼べるので楽!!
リンカスクリプトを使うとコンパイル時にプログラムのサイズが取れるので、FDの読み取りに必要なセクタ数が分かって楽!!!
なんて感じだった。
はじめからこれにしておけばよかった。
回り道は無駄じゃないと信じたい。
2010-01-04
ASM: 勉強中
何を思ってか、アセンブリ言語のお勉強中。
(いや、ちゃんと目標があってだけど)
(Shemeはどうした?勉強してますよ)
どうでもいいけど、アセンブリ言語をアセンブラでアセンブルするんですよ(多分)
AssemblyをAssemblerでAssembleするかね、英単語にするとちと分かりやすい?
(yをeeにすると、employ、interviewと同じ関係やね)
横道どころでなくそれた。
最初(未だに)、NASMを使うか、GASにするか。NASMはIntel標準なので、(ちょっとだけ)汎用性が高い。GASはGCCとの親和性が抜群。
とりあえず、標準という言葉に弱いので、NASMにした。
アセンブリ言語の構造は非常に簡単といってもいいと思う。
基本、こんな感じ
問題はこの辺
mov ah, 0x0e
int 0x10
今となっては何か分かっているのだが、最初は何のことやら・・・
これは、上のlodsbでALレジスタにSIレジスタに格納されている文字列の先頭を格納していることを前提に、AHレジスタにBIOSの0x0e(表示)命令を入れて、int 0x10で実行している。
BIOSのint 0x10はビデオ関係の命令を実行するという意味で、
AHレジスタに一文字表示の命令0x0eを格納し、ALレジスタに文字コードを入れる。
BIOSの命令は、使用するレジスタ、命令の種類が決まっているので、それを調べる必要がある。
例えば、こことか。
後は、セグメントとオフセット、各レジスタの意味とかが重要になってくる。
正直、覚えられん(まだ1週間・・・)
とりあえずの、備忘録。
(いや、ちゃんと目標があってだけど)
(Shemeはどうした?勉強してますよ)
どうでもいいけど、アセンブリ言語をアセンブラでアセンブルするんですよ(多分)
AssemblyをAssemblerでAssembleするかね、英単語にするとちと分かりやすい?
(yをeeにすると、employ、interviewと同じ関係やね)
横道どころでなくそれた。
最初(未だに)、NASMを使うか、GASにするか。NASMはIntel標準なので、(ちょっとだけ)汎用性が高い。GASはGCCとの親和性が抜群。
とりあえず、標準という言葉に弱いので、NASMにした。
アセンブリ言語の構造は非常に簡単といってもいいと思う。
基本、こんな感じ
;; 簡単なprint ;; 呼び出しは、 ;; mov si, msg_pointer ;; call print ;; こんな感じ print: pusha xor bx, bx .loop: lodsb or al, al jz .end mov ah, 0x0e int 0x10 jmp short .loop .end: popa ret命令とレジスタの組み合わせでいろいろやる。ここまでは、それなりにいろいろ言語をやってきたので簡単に理解。
問題はこの辺
mov ah, 0x0e
int 0x10
今となっては何か分かっているのだが、最初は何のことやら・・・
これは、上のlodsbでALレジスタにSIレジスタに格納されている文字列の先頭を格納していることを前提に、AHレジスタにBIOSの0x0e(表示)命令を入れて、int 0x10で実行している。
BIOSのint 0x10はビデオ関係の命令を実行するという意味で、
AHレジスタに一文字表示の命令0x0eを格納し、ALレジスタに文字コードを入れる。
BIOSの命令は、使用するレジスタ、命令の種類が決まっているので、それを調べる必要がある。
例えば、こことか。
後は、セグメントとオフセット、各レジスタの意味とかが重要になってくる。
正直、覚えられん(まだ1週間・・・)
とりあえずの、備忘録。
2010-01-01
movie: トワイライト サーガ
邦題は知らん。とりあえずそのままカタカナにしてみた。
新年一発目はこれだった。
エピソード2らしい。
感想(以下はネタバレが含まれる可能性があります)
個人的な感想を最初に書こう。
3流映画で見る価値なし。
無いよう自体は、バンパイアの子孫(?)のエドワードと狼男のジェイコブ、普通の人間のベラの恋模様を波乱万丈っぽく描いた無いよう。
その昔みた、ママレードボーイの三角関係そのままって感じ。
ただ、
エドワード → 貴族な優男
ジェイコブ → 野性味あふれる感じ
ベラ → エドワード一筋なくせに、ジェイコブも捨てがたい超わがまま娘
って感じだった。
う~ん、あんまり批判的な意見を書いて、名誉毀損で訴えられるのも嫌なので、これくらいにしてしまおう。
正直、意味不明だった(英語が理解できないとかではなく、内容が)
新年一発目はこれだった。
エピソード2らしい。
感想(以下はネタバレが含まれる可能性があります)
個人的な感想を最初に書こう。
3流映画で見る価値なし。
無いよう自体は、バンパイアの子孫(?)のエドワードと狼男のジェイコブ、普通の人間のベラの恋模様を波乱万丈っぽく描いた無いよう。
その昔みた、ママレードボーイの三角関係そのままって感じ。
ただ、
エドワード → 貴族な優男
ジェイコブ → 野性味あふれる感じ
ベラ → エドワード一筋なくせに、ジェイコブも捨てがたい超わがまま娘
って感じだった。
う~ん、あんまり批判的な意見を書いて、名誉毀損で訴えられるのも嫌なので、これくらいにしてしまおう。
正直、意味不明だった(英語が理解できないとかではなく、内容が)
あけましておめでとうございます
本年もよろしくお願いいたします。
今年は初詣もなく、なんとも静かな新年であります。
すこし物足りない気分でもあります。
旧年は、行く年来る年を見ることもなく、年が明けた瞬間の花火(と呼ぶにはあまりにやかましい)にはずいぶん驚かされました。
(市がやってるわけじゃなく個人。しかも結構大きめな打ち上げ花火。そりゃ指なくしたり、足なくしたりするわ)
本年は寅年ということで、躍動感あふれる年にしたいと思います。
今年は初詣もなく、なんとも静かな新年であります。
すこし物足りない気分でもあります。
旧年は、行く年来る年を見ることもなく、年が明けた瞬間の花火(と呼ぶにはあまりにやかましい)にはずいぶん驚かされました。
(市がやってるわけじゃなく個人。しかも結構大きめな打ち上げ花火。そりゃ指なくしたり、足なくしたりするわ)
本年は寅年ということで、躍動感あふれる年にしたいと思います。
2009-12-26
クリスマス
メリークリスマス。一応。
今日は26日なので、日本ならケーキが半値以下になっているはず。
っが、こっちはセカンドクリスマスといって、祝日!だったりする。
(ちなみに、クリスマス自体も祝日)
今年は土曜日なのであんまり関係ないが。
(来年は25と26で土日なので最悪だが)
クリスマスということで、えらい勢いで(名古屋弁)物が売れたらしい。
買い物にいったら売り切れとかどんだけ・・・
しかも売り切れたのは3日前とかどんだけ・・・
という状態だった。
この不況に消費が活性化されるのはいいことだとは思うけどね。
そんな感じであった。
取り留めないなぁ・・・
今日は26日なので、日本ならケーキが半値以下になっているはず。
っが、こっちはセカンドクリスマスといって、祝日!だったりする。
(ちなみに、クリスマス自体も祝日)
今年は土曜日なのであんまり関係ないが。
(来年は25と26で土日なので最悪だが)
クリスマスということで、えらい勢いで(名古屋弁)物が売れたらしい。
買い物にいったら売り切れとかどんだけ・・・
しかも売り切れたのは3日前とかどんだけ・・・
という状態だった。
この不況に消費が活性化されるのはいいことだとは思うけどね。
そんな感じであった。
取り留めないなぁ・・・
2009-12-22
Scheme: ソースを色づけするスクリプトを書いてみた
何か実用的なものを作ってみようと思い書いてみた。
(実用的かどうかはよく分からんが・・・)
仕様:
* 行番号付与
* コメント、文字列及びキーワード色づけ
* タブをスペースに変換。
既知の不具合:
ダブルクオート(文字列)の色づけ周りは大分怪しい。文字列の後ろになんか文字がないとタグがおかしくなる。(ブラウザで見る分には問題ないけど、HTMLとして不正になる)
Perlで作れば簡単なのに何やってんだろうとか思いながら作った。Schemeは文字列処理得意じゃないのかしら?
(正規表現使ってないからだと思うが・・・R6RSって正規表現サポートしてるのかな?)
(実用的かどうかはよく分からんが・・・)
長い上に汚い・・・っが、開き直ってさらしてみた。1: (require rnrs/hashtables-6)2: (define keywords (make-eq-hashtable))3: (define (set-keywords)4: (begin5: (hashtable-set! keywords 'define "<span style=\"color: blue;\">define</span>")6: (hashtable-set! keywords 'if "<span style=\"color: blue;\">if</span>")7: (hashtable-set! keywords 'let "<span style=\"color: blue;\">let</span>")8: (hashtable-set! keywords 'letrec "<span style=\"color: blue;\">letrec</span>")9: (hashtable-set! keywords 'lambda "<span style=\"color: blue;\">lambda</span>")10: (hashtable-set! keywords 'cond "<span style=\"color: blue;\">cond</span>")))11: (define (keyword? key)12: (hashtable-contains? keywords key))13: (define (highlighted-keyword key)14: (hashtable-ref keywords key ""))15: ; string might be like this "(define",16: ; this function should return like this -> "(<span style=\"color: blue;\">define</span>"17: (define (has-tag? str)18: (let loop((strls (string->list str)))19: (cond ((null? strls) #f)20: ((char=? (car strls) #\<) #t) ; if the string has "<" it's must be tag(might be < procedure...)21: (else (loop (cdr strls))))))22: (define (list->symbol ls)23: (string->symbol (list->string ls)))24: (define (parse-keyword str)25: (if (has-tag? str)26: str ; if the string has tag, just return.27: (letrec ((ls (string->list str))28: (set ((lambda (l)29: (let firstb((c (car l))30: (rest (cdr l))31: (ret '()))32: (cond ((null? rest) (cons ret rest))33: ((char=? c #\() (cons (append ret (list c)) rest))34: (else (firstb (car rest) (cdr rest) (append ret (list c)))))))35: ls)) ; blanket + space36: (br (car set))37: (rest (cdr set)))38: (if (null? rest)39: str ; only ( or spaces40: (let ((key (list->symbol rest)))41: (if (keyword? key)42: (string-append (list->string br) (highlighted-keyword key))43: str))))))44:45: (define (read-file file-name)46: (with-input-from-file47: file-name48: (lambda ()49: (let loop((ls '())50: (c (read-char)))51: (if (eof-object? c)52: (reverse ls)53: (loop (cons c ls)(read-char)))))))54:55: (define (last-char str)56: (let ((l (string-length str)))57: (if (= l 0)58: (integer->char 0)59: (string-ref str (- l 1)))))60:61: (define (high-light str)62: (let ((ls (string->list str)))63: (if (null? ls)64: ""65: (let loop((forward "")66: (c (car ls))67: (src (cdr ls))68: (is-quoted #f)69: (is-escape #f))70: (cond ((null? src) (string-append forward (string c)))71: ; escape begin72: ((char=? c #\&)73: (loop (string-append forward (string c)) (car src) (cdr src) is-quoted #t))74: ; escapse end75: ((and is-escape (char=? c #\;))76: (loop (string-append forward (string c)) (car src) (cdr src) is-quoted #f))77: ; quote78: ((and (char=? c #\") (not (char=? #\\ (last-char forward))))79: (cond ((and is-quoted) ; end quote80: (loop (string-append forward (string c) "</span>") (car src) (cdr src) #f is-escape))81: ((not is-quoted) ; begin quote82: (loop (string-append forward "<span style=\"color: green;\">" (string c))83: (car src) (cdr src) #t is-escape))84: ; in quote85: (else (loop (string-append forward (string c)) (car src) (cdr src) is-quoted is-escape))))86: ; comment87: ((and (not is-quoted)88: (not is-escape)89: (not (char=? #\\ (last-char forward)))90: (char=? c #\;))91: (string-append forward92: "<span style=\"color: #006600; font-style: italic;\">"93: (string c)94: (list->string src)95: "</span>"))96: (else97: (if (and (< 0 (string-length forward)) (char-whitespace? c)) ; if the charactor is whitespace98: (begin99: (set! forward (parse-keyword forward)); check if the string is keyword100: (loop (string-append forward (string c))(car src) (cdr src) is-quoted is-escape))101: (loop (string-append forward (string c))(car src) (cdr src) is-quoted is-escape))))))))102:103: (define (make-line str num)104: (string-append "<div><span style=\"display: inline-block; width: 30px; font-weight: bold; text-align: right;\">"105: (number->string num)106: "</span>: "107: (high-light str)108: "</div>"))109:110: (define (escape c)111: (cond ((char=? #\< c) "<")112: ((char=? #\> c) ">")113: ;((char=? #\" c) """)114: ;((char=? #\& c) "&")115: (else (string c))))116:117: (define (read-line source)118: (if (null? source)119: '()120: (let line((ret (cons "" (cdr source)))121: (c (escape (car source))))122: (cond ((null? (cdr ret)) ret)123: ((string=? "\r" c) (line (cons (car ret)(cddr ret)) (escape (cadr ret))))124: ((string=? "\n" c) ret)125: ((string=? "\t" c) (line (cons (string-append (make-string 8 #\Space)126: (car ret))127: (cddr ret))128: (escape (cadr ret))))129: (else (line (cons (string-append (car ret) c)130: (cddr ret))131: (escape (cadr ret))))))))132:133: (define (build-html contents)134: (define (build-itr contents)135: (let build((ret "")136: (line (read-line contents))137: (num 1))138: (if (null? line)139: ret140: (build (string-append ret (make-line (car line) num))141: (read-line (cdr line))142: (+ num 1)))))143: (string-append "<pre>" (build-itr contents) "</pre>"))144:145: (define (main args)146: (if (null? args)147: (begin148: (display "usage: scm2html file-name")149: -1)150: (let ((contents (read-file args)))151: (set-keywords)152: (display (build-html contents))153: (newline))))154:155: (main "scm2html.scm") ; test
仕様:
* 行番号付与
* コメント、文字列及びキーワード色づけ
* タブをスペースに変換。
既知の不具合:
ダブルクオート(文字列)の色づけ周りは大分怪しい。文字列の後ろになんか文字がないとタグがおかしくなる。(ブラウザで見る分には問題ないけど、HTMLとして不正になる)
Perlで作れば簡単なのに何やってんだろうとか思いながら作った。Schemeは文字列処理得意じゃないのかしら?
(正規表現使ってないからだと思うが・・・R6RSって正規表現サポートしてるのかな?)
寒い寒い
雪が溶けない。土曜日にこんな感じだった。
今のところ、そのまま足跡がついた程度でとどまっていたりする。寒い。
こんな雪の中、ドイツに行こうとした(実際には以前から計画していた)。
ユトレヒトで国際列車(?)に乗り換えてという感じ。
ユトレヒトの駅はこんなだった。(ユトレヒト中央駅のバーガーキングから)
国際線は来ませんでした(昨日の話)。
まぁ、いかないと決めたのだが、今日電車がドイツまで走っているか調べてみた。
はい、ありませんでした~(ごちバトルの羽鳥アナ風)
この量の雪は珍しい(らしい)とは言え、いくらなんでも雪に弱すぎだろうオランダ。
今のところ、そのまま足跡がついた程度でとどまっていたりする。寒い。
こんな雪の中、ドイツに行こうとした(実際には以前から計画していた)。
ユトレヒトで国際列車(?)に乗り換えてという感じ。
ユトレヒトの駅はこんなだった。(ユトレヒト中央駅のバーガーキングから)
国際線は来ませんでした(昨日の話)。
まぁ、いかないと決めたのだが、今日電車がドイツまで走っているか調べてみた。
はい、ありませんでした~(ごちバトルの羽鳥アナ風)
この量の雪は珍しい(らしい)とは言え、いくらなんでも雪に弱すぎだろうオランダ。
2009-12-18
寒い
現在、オランダは冬です。当たり前です、北半球なんだから。
寒い。マジで。
最高気温1度って何ですか?殺す気ですか?
秋の雨で(工事中の穴に)たまった水が凍って、スケートできそう。
そんな気分です。
これだけ寒いと、当然彼が来るわけです。そう、白い悪魔君が・・・
ってか、来ました。10cmくらい・・・
雪が降ると日本でもそうだけど交通事情がえらいことに(名古屋弁)なります。
特に電車。
30分おくれは当たり前。
運休とか勝手に路線変更とか連発。
7時に家をでて9時半ちょい過ぎに職場に着きました。
いつもなら8時ちょい過ぎです。勘弁してください。
ってか、雪が降ること分かってる国のはずなのに、雪対策が無いってどういうことだよ!
おかしいだろ!!
寒い。マジで。
最高気温1度って何ですか?殺す気ですか?
秋の雨で(工事中の穴に)たまった水が凍って、スケートできそう。
そんな気分です。
これだけ寒いと、当然彼が来るわけです。そう、白い悪魔君が・・・
ってか、来ました。10cmくらい・・・
雪が降ると日本でもそうだけど交通事情がえらいことに(名古屋弁)なります。
特に電車。
30分おくれは当たり前。
運休とか勝手に路線変更とか連発。
7時に家をでて9時半ちょい過ぎに職場に着きました。
いつもなら8時ちょい過ぎです。勘弁してください。
ってか、雪が降ること分かってる国のはずなのに、雪対策が無いってどういうことだよ!
おかしいだろ!!
Scheme: SICPの練習問題(2.68)
飛んでたりする。いや、これ以前もちゃんとやってますよ(^^;
以前Huffman符号のことを(LHAの話か?)をちらっと書いて、あきらめたとも書いたがその話題だったのでついつい。
とりあえず、Huffman符号木について。木自体はこんな感じ。
ここではなのか、一般的になのか、左に行けば1、右にいけば0となっている。数字は重み(多分、頻出度)
デコードは、ビット列から文字列を復元するので、先頭からビット見て行って葉にたどり着いたところで一文字復元完了という感じ。
エンコードは逆。上から木を舐めて、葉にたどり着くまでもビットを記録するって感じ。
っで、2.68の解凍
まぁ、でもHuffman符号の具体的なやり方がわかったということでちと満足。
(もやもやとは分かっていたが、木の作り方とかいまいちだった)
以前Huffman符号のことを(LHAの話か?)をちらっと書いて、あきらめたとも書いたがその話題だったのでついつい。
とりあえず、Huffman符号木について。木自体はこんな感じ。
{A B C D E F G H} 17
*
/ \
A 8 * {B C D E F G H} 9
/ \
{B C D} 5 * \
/ \ \
B 3 * {C D} 2 * {E F G H} 4
/ \ / \
C 1 D 1 * {E F} 2 * {G H} 2
/ \ / \
E 1 F 1 G 1 H 1
いまいち二分木に見えないのはご愛嬌。ここではなのか、一般的になのか、左に行けば1、右にいけば0となっている。数字は重み(多分、頻出度)
デコードは、ビット列から文字列を復元するので、先頭からビット見て行って葉にたどり着いたところで一文字復元完了という感じ。
エンコードは逆。上から木を舐めて、葉にたどり着くまでもビットを記録するって感じ。
っで、2.68の解凍
(define (encode-symbol symbol tree) (define (has-symbol? symbol tree) (if (leaf? tree) (eq? symbol (symbol-leaf tree)) (or (has-symbol? symbol (left-branch tree)) (has-symbol? symbol (right-branch tree))))) (if (leaf? tree) ; 葉ならシンボルを見つけた '() (let ((left (left-branch tree)) (right (right-branch tree))) (cond ((has-symbol? symbol left) (cons 0 (encode-symbol symbol left))) ((has-symbol? symbol right) (cons 1 (encode-symbol symbol right))) (else (error "error"))))))最初はcondの中でifを使って変な場合分けをしてlistを返してappendしていたが、解答はすっきりconsを使ってた。いまいちこの辺の使い方がまだ身について無い感じ。う~ん。
まぁ、でもHuffman符号の具体的なやり方がわかったということでちと満足。
(もやもやとは分かっていたが、木の作り方とかいまいちだった)
2009-12-12
TopCoder
アルゴリズムでググッたら出てきた。
面白そうなので登録。
サイト自体はプログラムコンテストサイトで、与えられた問題を解いていくというもの。
解ける問題から、そうでもないのまで幅広い・・・
とりあえず自力で解いて、誰かが書いた解答を見る。
自分が未熟を通り越して、スタート地点にも立ってないのかと思わされた。
基本的なことでできるのだが、柔軟な発想とか、数学的知識がぜんぜん足りない。
気づいたのだから勉強しないと・・・
面白そうなので登録。
サイト自体はプログラムコンテストサイトで、与えられた問題を解いていくというもの。
解ける問題から、そうでもないのまで幅広い・・・
とりあえず自力で解いて、誰かが書いた解答を見る。
自分が未熟を通り越して、スタート地点にも立ってないのかと思わされた。
基本的なことでできるのだが、柔軟な発想とか、数学的知識がぜんぜん足りない。
気づいたのだから勉強しないと・・・
2009-12-09
Scheme: SICPの練習問題(2.17~2.28)
最近SICPを読み始めた(オンラインなので、英語。きつい・・・)
SICPはMITが出してる本で、バイブル的な何からしい。
1章の問題は数学チックなのが多いので、半分くらい飛ばしてしまった。後でやろう。
折角なので、(自分の)答えを載せてみたり。
下のは職場のGaucheで作って(おいおい)、家のMzSchemeで確認。
MzSchemeだと「()」が使えないので、「'()」に変更。
一つMzSchemeで動かないのがあった。処理系依存なコードだったのかしら?
SICPはMITが出してる本で、バイブル的な何からしい。
1章の問題は数学チックなのが多いので、半分くらい飛ばしてしまった。後でやろう。
折角なので、(自分の)答えを載せてみたり。
下のは職場のGaucheで作って(おいおい)、家のMzSchemeで確認。
MzSchemeだと「()」が使えないので、「'()」に変更。
一つMzSchemeで動かないのがあった。処理系依存なコードだったのかしら?
; 2.17
(define (last-pair list)
(define (last-pair-itr val list2)
(if (null? list2)
val
(last-pair-itr (car list2) (cdr list2))))
(last-pair-itr (car list)(cdr list)))
(last-pair '(1 2 3 4 5 6))
; 2.18
(define (reverse list)
(define (reverse-itr ret list2)
(if (null? list2)
ret
(reverse-itr (cons (car list2) ret) (cdr list2))))
(reverse-itr '() list))
(reverse '(1 2 3 4 5 6))
; 2.21
(define (square-list-no-map list)
(if (null? list)
'()
(cons (* (car list) (car list))
(square-list-no-map (cdr list)))))
(square-list-no-map '(1 2 3 4 5 6))
(define (square-list list)
(map (lambda (x)(* x x)) list))
(square-list '(1 2 3 4))
; 2.22
(define (square-list items)
(define (square x)(* x x))
(define (iter things answer)
(if (null? things)
answer
(cons (square (car things))
(iter (cdr things) answer))))
(iter items '()))
(square-list '(1 2 3 4 5))
; 2.23
(define (for-each proc items)
(if (null? items)
#f
(and (proc (car items))
(for-each proc (cdr items)))))
; 2.25
(car (cdr (car (cdr (cdr '(1 3 (5 7) 9))))))
(car (car '((7))))
(car (cdr (car (cdr (car (cdr (car (cdr (car (cdr (car (cdr '(1 (2 (3 (4 (5 (6 7))))))))))))))))))
; 2.26
(define x (list 1 2 3))
(define y (list 4 5 6))
(append x y)
(cons x y)
(list x y)
; 2.27
(define x (list (list 1 (list 2 3) (list 4 5)) (list 6 7 8)))
(reverse x)
(define (deep-reverse list)
(define (reverse-itr ret list)
(cond
((null? list) ret)
((pair? (car list))
(reverse-itr (cons (reverse-itr '() (car list)) ret) (cdr list)))
(else (reverse-itr (cons (car list) ret)
(cdr list)))))
(reverse-itr '() list))
; Gaucheでは動いたコード
;(define (deep-reverse list)
; (cond
; ((null? list) '())
; ((pair? (car list)) (cons (car (cdr (car list)))(car (car list))))
; (else (cons (deep-reverse (cdr list)) (car list)))))
(deep-reverse x)
; 2.28
(define (fringe l2)
(cond ((null? l2) '())
((not (pair? l2)) (cons l2 '()))
(else (append (fringe (car l2))
(fringe (cdr l2))))))
(fringe (list x x))
2009-12-03
時間がほしい
働きつつ、(オランダ語)学校にいってるから平日は時間が全然無い。
日が昇らないうちに出社して、暗くなってから帰宅なんて生活だ。
(ちなみに、今の時期は8時ちょい過ぎに日が昇り、5時前に日が沈むけど:-P)
最近つらつらと考えていることの備忘録。
2. について。
オランダ語の変な文法が理解できた。こんなの↓
Vandaag ben ik moe.
(英訳) Today am I tired.
ずっと、何で主語が動詞の真後ろに移動してるんだ?と疑問だった。なにしろ、普通に書くと
Ik ben moe vandaag.
になるのに、Vandaag(今日)を強調すると、上記みたいになる。
なぜ?
っで、理由。
Persoonsvormen(人称系?誰か訳教えて)は必ず2番目に来る。
Persoonsvormenとは英語で言うところの、三単現のSが適用される位置にある動詞のこと。つまり、格変化する動詞。
変なルールとか思いながらも、そのルールに当てはめれば確かに納得がいく。
ちなみに、他の文法は結構英語に似てるので、そんなに苦労はしない。っが、語彙が圧倒的に足りないのでぜんぜん話せない。先は長そうだ・・・
日が昇らないうちに出社して、暗くなってから帰宅なんて生活だ。
(ちなみに、今の時期は8時ちょい過ぎに日が昇り、5時前に日が沈むけど:-P)
最近つらつらと考えていることの備忘録。
- 何か実用的なものを作りたいなぁ
- ちょっと考えてるのはC++実装のServletサーバー。需要なさそうだけど・・・
- OSとか言語処理系とかも面白そうだ。
- 最近意図的にBoostを避けてたけど、そろそろ使おうかな。やっぱり便利だし・・・
- オランダ語の文法で意味不明だった部分が理解できた
2. について。
オランダ語の変な文法が理解できた。こんなの↓
Vandaag ben ik moe.
(英訳) Today am I tired.
ずっと、何で主語が動詞の真後ろに移動してるんだ?と疑問だった。なにしろ、普通に書くと
Ik ben moe vandaag.
になるのに、Vandaag(今日)を強調すると、上記みたいになる。
なぜ?
っで、理由。
Persoonsvormen(人称系?誰か訳教えて)は必ず2番目に来る。
Persoonsvormenとは英語で言うところの、三単現のSが適用される位置にある動詞のこと。つまり、格変化する動詞。
変なルールとか思いながらも、そのルールに当てはめれば確かに納得がいく。
ちなみに、他の文法は結構英語に似てるので、そんなに苦労はしない。っが、語彙が圧倒的に足りないのでぜんぜん話せない。先は長そうだ・・・
2009-11-29
C++: BFDを使ってみる その2(たぶん最後)
昨日の続き。いろいろできそうだなと思ったが、少し落とし穴があった・・・
【落とし穴その1】
mprotectで取得した関数のアドレスを実行可能とか読み込み可能とかにしないと動かせない。
よく考えればあたりまえか・・・
っが、MingwとかCygwin(要するにWindows環境)にはそげなものがない・・・
【落とし穴その2】
dlopenとかdlsymとかその辺の話。ある意味当然ではあるが、共有ライブラリじゃないと読み込めない。
上記の問題から、BFDでシンボル読み込んで、シンボル名をデマングルして、呼び出し時にシンボル名に変換してやればいいかなとか思ったんだけど、BFDはWindowsのDLLに対応していない。Mingwの-sharedオプションで作ったにもかかわらずである。
(本当かどうかはよく知らん、調べてない。PEに変換しているからか?)
この辺を試してみよう。Windows限定の話になるけど・・・
余談
折角なので(備忘録も兼ねて)、BFDの使い方をメモ。
こんな感じの流れ。
(他人のコードから推測、というかほぼ丸写し、しただけだし・・・)
mprotectで実行可能にしなくてもWindowsだと普通に動いた。Cで作った関数だが。
C++側だとどうもいろいろ面倒なのだろう。コンストラクタとか、継承とか。
(確かに、仮想関数のアドレスとかどうやって取るとか、thisポインタを渡すとか、考えればいくらでも解決しないといけない問題がありそう)
憶測だが、コンストラクタのアドレスが分かったところで、クラス全体の情報が取れているわけではないのだろう。ヒープに取るメモリの量とかコンストラクタだけじゃ取れそうにないし。
構造体がBFDから作れるか試してから探した方がいいだろうか?
(C互換の構造体だと単なるメモリの塊というイメージだが・・・)
気合入れればいけそうなのだが、頭と気力が足りない感じ・・・前者が特に・・・orz
【落とし穴その1】
mprotectで取得した関数のアドレスを実行可能とか読み込み可能とかにしないと動かせない。
よく考えればあたりまえか・・・
っが、MingwとかCygwin(要するにWindows環境)にはそげなものがない・・・
【落とし穴その2】
dlopenとかdlsymとかその辺の話。ある意味当然ではあるが、共有ライブラリじゃないと読み込めない。
上記の問題から、BFDでシンボル読み込んで、シンボル名をデマングルして、呼び出し時にシンボル名に変換してやればいいかなとか思ったんだけど、BFDはWindowsのDLLに対応していない。Mingwの-sharedオプションで作ったにもかかわらずである。
(本当かどうかはよく知らん、調べてない。PEに変換しているからか?)
この辺を試してみよう。Windows限定の話になるけど・・・
余談
折角なので(備忘録も兼ねて)、BFDの使い方をメモ。
こんな感じの流れ。
bfd_init(); //初期化。一回だけでいい。
bfd* abfd = bfd_openr("hoge.o", NULL); // .a とか .soでもいいと思う
if (bfd == 0) {
bfd_perror("failed to open"); // error
return; // 失敗したので
}
// オブジェクトのフォーマットチェック
// アーカイブとかもヘッダの中にあるので、適当に必要なチェックで。
// .aとかのアーカイブだと、.oが複数個入っているので、それ用の処理がいる
if (!bfd_check_format(abfd, bfd_object)) {
bfd_perror("format error"); // .o ファイルじゃないよ
return; // それじゃ!
}
// 中身を読み込む
if (!(bfd_get_file_flags(abfd) & HAS_SYMS)) {
return; // シンボルなし
}
long storage = bfd_get_symbol_upper_bound(abfd); // サイズを取得
if (storage < 0) {
bfd_perror("bfd_get_symbol_upper_bound"); // 中身なし?
return;
}
asymbol** symbol = (asymbol**)malloc(storage); // メモリ確保(new じゃだめなのかね?)
int symbolCount = bfd_canonicalize_symtab(abfd, symbol);
if (symbolCount < 0) {
bfd_perror("no symbol"); // シンボルがない
return;
}
// シンボルを読み出す
for (int i = 0; i < symbolCount; i++) {
asymbol asym = symbol[i];
int value = bfd_asymbol_value(asym); // シンボルの値(何が入ってるんだろう?)
const char* name = bfd_asymbol_name(asym); // シンボル名(名前マングルされてる)
if (name == 0 || ::strlen(name) == 0) continue; // シンボル名が無ければ次
symbol_info info;
bfd_symbol_info(abfd, asym, &info); // シンボル情報を取得(中身はよく知らん)
// 関数ポインタ
int* fp = (int)file->contents // .o ファイルの中身(バイナリで読み込む)
+ asym->section->filepos // セクションの場所?
+ value;
// 多分セクションデータとかを自分自身に配置しないと
// (略)
mprotect((void*)(((int)fp+4095) & ~4095 - 4096),
4096, PROT_READ | PROT_WRITE | PROT_EXEC);
/* こっちのが正しい?(どっちにしろMingwでは動かん
long pagesize = sysconf(_SC_PAGESIZE);
char *p = (char *)((long)s & ~(pagesize - 1L));
mprotect(p, pagesize * 10L, PROT_READ|PROT_WRITE|PROT_EXEC);
*/
//適当にキャストして、実行
typedef void (*fnc)(); // とりあえず、戻り値、引数無しと仮定
fnc fncP = (fnc)fp;
fncP(); // 実行
}
多分こんな感じ。実際に動かせないので、正しいかどうかは保障できない。(他人のコードから推測、というかほぼ丸写し、しただけだし・・・)
2009/11/30 追記
落とし穴その1は大嘘であった。mprotectで実行可能にしなくてもWindowsだと普通に動いた。Cで作った関数だが。
C++側だとどうもいろいろ面倒なのだろう。コンストラクタとか、継承とか。
(確かに、仮想関数のアドレスとかどうやって取るとか、thisポインタを渡すとか、考えればいくらでも解決しないといけない問題がありそう)
憶測だが、コンストラクタのアドレスが分かったところで、クラス全体の情報が取れているわけではないのだろう。ヒープに取るメモリの量とかコンストラクタだけじゃ取れそうにないし。
構造体がBFDから作れるか試してから探した方がいいだろうか?
(C互換の構造体だと単なるメモリの塊というイメージだが・・・)
気合入れればいけそうなのだが、頭と気力が足りない感じ・・・前者が特に・・・orz
2009-11-28
C++: BFDを使ってみる
前にLHAの展開を書いていたが、それとはぜんぜん関係ない話。
LZHUFがいまいち分からなくて挫折したとも言う・・・orz
BFD、big fucking dealがBinary File Descriptorになったライブラリ。GCCに付属してくるもの。
何ができるかといえば、オブジェクトファイルとか、アーカイブファイルからいろんな情報が取ってこれる。
っで、これを使ってC++らしくないものを作ってみようと考えたのだが、上手くいかない。
ちなみに、らしくないものとは、リフレクションのことである。
BFDつかってシンボルを読み込んで、関数のアドレスは取れた。名前マングリングされた関数名で取れるので、デマングルするか、呼び出しの際にマングルする必要があるが・・・
(あぁ、取得したときにデマングルすればマングラーなど要らんのか、無駄なもん作った)
っで、ここからが問題。
C++なので、newして、確保したメモリに対してコンストラクタ呼ぶ必要があるのだが、上手くいかない。
いくつか理由が考えられるのだが、どれだろう?
1. そもそも無理。
2. 取得が上手くいっていなくて、変なアドレスを指してる。
3. その他
取れるアドレスは、単に関数のアドレスなので、適当に関数ポインタにキャストするのだが、
こんな感じであってるのか?
う~ん、なぜ?
BFD自体もあんまり知られて無いのか、ネットに情報があんまりないし・・・困った。
LZHUFがいまいち分からなくて挫折したとも言う・・・orz
BFD、big fucking dealがBinary File Descriptorになったライブラリ。GCCに付属してくるもの。
何ができるかといえば、オブジェクトファイルとか、アーカイブファイルからいろんな情報が取ってこれる。
っで、これを使ってC++らしくないものを作ってみようと考えたのだが、上手くいかない。
ちなみに、らしくないものとは、リフレクションのことである。
BFDつかってシンボルを読み込んで、関数のアドレスは取れた。名前マングリングされた関数名で取れるので、デマングルするか、呼び出しの際にマングルする必要があるが・・・
(あぁ、取得したときにデマングルすればマングラーなど要らんのか、無駄なもん作った)
っで、ここからが問題。
C++なので、newして、確保したメモリに対してコンストラクタ呼ぶ必要があるのだが、上手くいかない。
いくつか理由が考えられるのだが、どれだろう?
1. そもそも無理。
2. 取得が上手くいっていなくて、変なアドレスを指してる。
3. その他
取れるアドレスは、単に関数のアドレスなので、適当に関数ポインタにキャストするのだが、
こんな感じであってるのか?
// operator new の関数ポインタ typedef void* (newP)(size_t); newP p = (newP)pointer; // pointerは取得したnewのシンボルアドレス void* buf = p(size); // 予定通りなら、bufには確保したメモリが入るはず・・・が、今のところ結果はセグメンテーションフォルト。
う~ん、なぜ?
BFD自体もあんまり知られて無いのか、ネットに情報があんまりないし・・・困った。
2009-11-25
おいしいスパゲッティの食べ方
ここで言うスパゲッティとはいわゆるプログラム上の話である。つまりそういうことだ・・・
よく分からない人は、ググってください。
一応Wikipediaへのリンク
自社のコンポーネントを使って、スマートカードのデータを管理するシステムを提供する会社なのだが、そのコンポーネントが何年も前からの代々受け継がれてきたようなつくりになっていて、涙が出そうになる。
しかも、困ったことにドキュメントの類がない。ないことはないが、肝心な部分がない。製品マニュアルをみて理解しろというにはちと作りが悪すぎる。
外面はものすごくよくできていると思う。ユーザーインターフェースは秀逸と言ってもいい。それに反比例して開発者用のその他もろもろは・・・まぁそういうことだ。
更に困ったことに、5年とか10年とか開発に携わっている人でもよく分かっていないらしく、無駄なコーディングをしてバグをつぶすとか普通にある。
(というか、それをしたのでこれを書いてる)
ちょっとXMLの設定ファイルに10文字足すだけで直るバグを、Javaクラスを1つ作って、既存のクラスに定数を足して、XMLも弄ってということした。
それで給料もらっているのでいいといえばいいのだが、確認含めて30分で済む作業を4時間かけて修正するのはいかがなものだろうか?
(ドキュメントがないので、デバッガでソースを追いながらだとこんなもんだよと自分を慰める)
次回のメジャーバージョンアップでspringとかHibernateとかその辺のフレームワークを使って、メンテナンスしやすくすると言っているので、それを信じて耐えるか・・・
よく分からない人は、ググってください。
一応Wikipediaへのリンク
自社のコンポーネントを使って、スマートカードのデータを管理するシステムを提供する会社なのだが、そのコンポーネントが何年も前からの代々受け継がれてきたようなつくりになっていて、涙が出そうになる。
しかも、困ったことにドキュメントの類がない。ないことはないが、肝心な部分がない。製品マニュアルをみて理解しろというにはちと作りが悪すぎる。
外面はものすごくよくできていると思う。ユーザーインターフェースは秀逸と言ってもいい。それに反比例して開発者用のその他もろもろは・・・まぁそういうことだ。
更に困ったことに、5年とか10年とか開発に携わっている人でもよく分かっていないらしく、無駄なコーディングをしてバグをつぶすとか普通にある。
(というか、それをしたのでこれを書いてる)
ちょっとXMLの設定ファイルに10文字足すだけで直るバグを、Javaクラスを1つ作って、既存のクラスに定数を足して、XMLも弄ってということした。
それで給料もらっているのでいいといえばいいのだが、確認含めて30分で済む作業を4時間かけて修正するのはいかがなものだろうか?
(ドキュメントがないので、デバッガでソースを追いながらだとこんなもんだよと自分を慰める)
次回のメジャーバージョンアップでspringとかHibernateとかその辺のフレームワークを使って、メンテナンスしやすくすると言っているので、それを信じて耐えるか・・・
オランダの不思議
2つくらい不思議なものをみた。
その1.
オランダにはクリスマスシーズンに、サンタクロースとは別にシンタクロース(Sintaklaas)なるものがいる。彼はトナカイではなく、黒人のプリーストをつれてきて、なんだかよく分からん呪文(オランダ語で喋ってただけ)を唱えたのち、子供たちにプレゼントを配っていた。
本来は12月15日くらいの行事らしいが、(多分その時期は休暇をとる人が多いため)、僕の会社では11月末に移動したらしい。会社が(おそらく)福利厚生の一環(単にオランダ人が祭り好きなのかもしれんが)で行っていたので、社員の家族とか子供とかきてた。
ちなみに、この行事、いつの頃からシンタクロースがつれてくる牧師が黒人に変更されたため、黒人の人たちには受けが悪いらしい。よく知らん。
その2.
この国で(自称)上流家庭の人たちはナイフとフォークでパンを食べる。
正直見ていて滑稽に映るのだが、そういうことらしい。育ちがいいことの証明なのか、その方がマナーがいいと思われるのかは知らんけど。ちなみに、徹底してる人は、食べ物に直接手を触れないそうだ。
つまり、ナイフとフォークでパンを袋から取り出し、皿に置かれたパンにバターを塗り、Beleg(パンにのせるもの全般)をナイフとフォークで取り、切って食べる。
不思議な光景であった。
試してみようかとも思ったが、あまりに抵抗があるのでやめた。どうやら僕は上流家庭の人間にはなれないらしい。
その1.
オランダにはクリスマスシーズンに、サンタクロースとは別にシンタクロース(Sintaklaas)なるものがいる。彼はトナカイではなく、黒人のプリーストをつれてきて、なんだかよく分からん呪文(オランダ語で喋ってただけ)を唱えたのち、子供たちにプレゼントを配っていた。
本来は12月15日くらいの行事らしいが、(多分その時期は休暇をとる人が多いため)、僕の会社では11月末に移動したらしい。会社が(おそらく)福利厚生の一環(単にオランダ人が祭り好きなのかもしれんが)で行っていたので、社員の家族とか子供とかきてた。
ちなみに、この行事、いつの頃からシンタクロースがつれてくる牧師が黒人に変更されたため、黒人の人たちには受けが悪いらしい。よく知らん。
その2.
この国で(自称)上流家庭の人たちはナイフとフォークでパンを食べる。
正直見ていて滑稽に映るのだが、そういうことらしい。育ちがいいことの証明なのか、その方がマナーがいいと思われるのかは知らんけど。ちなみに、徹底してる人は、食べ物に直接手を触れないそうだ。
つまり、ナイフとフォークでパンを袋から取り出し、皿に置かれたパンにバターを塗り、Beleg(パンにのせるもの全般)をナイフとフォークで取り、切って食べる。
不思議な光景であった。
試してみようかとも思ったが、あまりに抵抗があるのでやめた。どうやら僕は上流家庭の人間にはなれないらしい。
2009-11-21
C++: istreamのread
職場の環境でexe、zipのファイルがダウンロードできない。
っが、普段使っているエディタじゃないとどうも調子が出ない(エディタは重要だ)
ちなみに、xyzzyである。Emacsライクな素敵エディタ。
配布形式はlhaなので、ダウンロードはできた。っが展開できない・・・
なら、自力で展開してやろうと思い、Lhaの展開プログラムを書いているのだが、まさかファイルの読み込みでえらいことになるとは思わんなかった。
普段は固定長のバイナリデータなんて扱わないからなぁ・・・
問題になったのはこんな感じのコード。
-----
ちなみに、「in」はistream。
こんな感じでやったら、何故かセグメンテーションフォルトで死んだ。理由はよく分からない・・・
デバッガで追っかけてもread()の部分で死んでるし、意味不明。
しょうがないので、1バイトずつとって押し込めることにした。
それだと動いた・・・なぜだ?
利便性を高めるために、こんなメソッドを一枚かませていたが、それがいけなかった。
-----
だめな理由も一日寝てすっきりしたらよく分かった。ある意味当たり前。
渡してるのはポインタなのに、受け取る方式はリファレンス。何が起きるんだろう?
ポインタのポインタみたいな感じになっていたんだろう。そりゃ鼻から悪魔が出てくるわ・・・
自分の未熟さだけを露呈しただけだった・・・orz
っが、普段使っているエディタじゃないとどうも調子が出ない(エディタは重要だ)
ちなみに、xyzzyである。Emacsライクな素敵エディタ。
配布形式はlhaなので、ダウンロードはできた。っが展開できない・・・
なら、自力で展開してやろうと思い、Lhaの展開プログラムを書いているのだが、まさかファイルの読み込みでえらいことになるとは思わんなかった。
普段は固定長のバイナリデータなんて扱わないからなぁ・・・
問題になったのはこんな感じのコード。
-----
unsigned char* buffer = (unsigned char*)new char[size + 1]; in.read(buffer, size);-----
ちなみに、「in」はistream。
こんな感じでやったら、何故かセグメンテーションフォルトで死んだ。理由はよく分からない・・・
デバッガで追っかけてもread()の部分で死んでるし、意味不明。
しょうがないので、1バイトずつとって押し込めることにした。
それだと動いた・・・なぜだ?
2009年11月21日 追記
理由が分かった。利便性を高めるために、こんなメソッドを一枚かませていたが、それがいけなかった。
-----
template<typename T>
int get_byte(T& t, int size)
{
in.read(reinterpret_cast(&c), size);
return in.gcount();
}
-----だめな理由も一日寝てすっきりしたらよく分かった。ある意味当たり前。
渡してるのはポインタなのに、受け取る方式はリファレンス。何が起きるんだろう?
ポインタのポインタみたいな感じになっていたんだろう。そりゃ鼻から悪魔が出てくるわ・・・
自分の未熟さだけを露呈しただけだった・・・orz
2009-11-16
初日
今日は仕事の初日であった。
場所はロッテルダム。駅前といってぜんぜん問題ない場所なので、通勤には非常に便利。
(電車通勤で1時間を下回る職場はこれが初めてだ!)
職種は何を血迷ったのか再びプログラマー。ま、日本と違って残業はほとんどない(らしい)ので、特に問題は無いだろう。
(問題になるとすれば、言葉か・・・いや、英蘭どっちでもOKなので大丈夫なはず・・・)
個人的にいろいろ日本にいたときと比較すると環境はいい気がする。
(給料はそんなに高くはないが・・・)
初日が終わったばかりで浮かれているというのもあるだろうが、それを差し引いてもいい会社だと思う。
(と思いたい。自分の中で結論が出るのは分かるのは早くとも1ヶ月後だろうなぁ・・・)
まだ試用期間中だしぼろを出さないようにしないと・・・
場所はロッテルダム。駅前といってぜんぜん問題ない場所なので、通勤には非常に便利。
(電車通勤で1時間を下回る職場はこれが初めてだ!)
職種は何を血迷ったのか再びプログラマー。ま、日本と違って残業はほとんどない(らしい)ので、特に問題は無いだろう。
(問題になるとすれば、言葉か・・・いや、英蘭どっちでもOKなので大丈夫なはず・・・)
個人的にいろいろ日本にいたときと比較すると環境はいい気がする。
(給料はそんなに高くはないが・・・)
初日が終わったばかりで浮かれているというのもあるだろうが、それを差し引いてもいい会社だと思う。
(と思いたい。自分の中で結論が出るのは分かるのは早くとも1ヶ月後だろうなぁ・・・)
まだ試用期間中だしぼろを出さないようにしないと・・・
2009-11-15
2012
観てきた。
感想、いまいち・・・
インデペンデンスデイとかアルマゲドンとかと同じ監督らしい(よく知らん)
まぁ、インデペンデンスデイで感動できるなら・・・きっと、多分・・・
話の概要は、要するに現代版ノアの方舟といったところかな。
2012年12月21日に太陽系の惑星が一直線に並んで、その重力場の影響で地球のマントルが暴れる→津波→世界が沈む
こんな感じ。
ぶっちゃけ、突っ込みどころ多すぎ。
例えば、
高さ6000メートルを超える津波は起き得るのか?
わずか3年でArcと呼ばれる超巨大な方舟を7隻も作れるのか?しかも極秘裏に?
なぜアメリカだけがそのことを知っているのか?
(この場合、世界中に優秀な科学者はいるという意味)
その他、たくさん。
あんまりネタ晴らししてもいかんのでこれくらいで。
個人的に話のネタ程度に観る価値はあるかもといいたかっただけ。
感想、いまいち・・・
インデペンデンスデイとかアルマゲドンとかと同じ監督らしい(よく知らん)
まぁ、インデペンデンスデイで感動できるなら・・・きっと、多分・・・
話の概要は、要するに現代版ノアの方舟といったところかな。
2012年12月21日に太陽系の惑星が一直線に並んで、その重力場の影響で地球のマントルが暴れる→津波→世界が沈む
こんな感じ。
ぶっちゃけ、突っ込みどころ多すぎ。
例えば、
高さ6000メートルを超える津波は起き得るのか?
わずか3年でArcと呼ばれる超巨大な方舟を7隻も作れるのか?しかも極秘裏に?
なぜアメリカだけがそのことを知っているのか?
(この場合、世界中に優秀な科学者はいるという意味)
その他、たくさん。
あんまりネタ晴らししてもいかんのでこれくらいで。
個人的に話のネタ程度に観る価値はあるかもといいたかっただけ。
2009-11-11
C++: テトリス
ニコニコ動画(たまに見るんです)に1時間でテトリスを作るという動画があった。
これ↓
300行そこそこのソースコードでそこそこ動くテトリスができてた。すげ~。
っで、触発されたわけでもないが、ちとGUIプログラムを組んでみたくなり、なんかいいライブラリ無いかなと探してたりする(Win32APIを直接構う気力はない・・・)
有名どころで、Qt、wxWidgetなどがあるが、ためしにという割には巨大すぎる。
(最初は慣れようという意味合いもあり、上記のテトリスをC++的にしてみようと思うのだが・・・)
っで、よさ下なのがWTLだったのだけど、ATLというライブラリが必要で、ATLはVisualStudioに入っているという・・・
それだけのためにそんなものを入れる気力もなく(そもそも僕のノートPCの容量では入れたくないというか・・・)
う~ん、適当な何かはないだろうか・・・
これ↓
300行そこそこのソースコードでそこそこ動くテトリスができてた。すげ~。
っで、触発されたわけでもないが、ちとGUIプログラムを組んでみたくなり、なんかいいライブラリ無いかなと探してたりする(Win32APIを直接構う気力はない・・・)
有名どころで、Qt、wxWidgetなどがあるが、ためしにという割には巨大すぎる。
(最初は慣れようという意味合いもあり、上記のテトリスをC++的にしてみようと思うのだが・・・)
っで、よさ下なのがWTLだったのだけど、ATLというライブラリが必要で、ATLはVisualStudioに入っているという・・・
それだけのためにそんなものを入れる気力もなく(そもそも僕のノートPCの容量では入れたくないというか・・・)
う~ん、適当な何かはないだろうか・・・
2009-11-07
カレー
カレーを作ってみた。
といってもカレールーを入れてというのではなく、ゼロから。
(カレールー使って作るんならブログに書くようなことではないし)
こっちでカレールーを買うとなるとかなり高い。1パック(ゴールデンカレーの小さいの)5ユーロとかする。高すぎ!
ということで、スパイスから作ることに。
【材料】
ジャガイモ 大4つ
鶏肉 どんなもんだか知らん、500gくらい?
たまねぎ
トマトピューレ
クミンシード
ローリエ
唐辛子
マギーキューブ
塩
胡椒
味の素
-- 以下 ホワイトカレーソース(?)
小麦粉
牛乳
マサラ粉
--
【作り方】
たまねぎをスライス。鍋に油、クミンシードをいれ、たまねぎを茶色になるまで炒める。鶏肉投入。塩コショウ投入。いい感じになったらジャガイモ、水をいれ、マギーキューブ、ローリエ、トマトピューレ、唐辛子を投入。煮る。
その間にカレーソースを作る。ホワイトソースにかなり大目のマサラ粉を入れるだけ。気合で作る。多めに作った方がとろみが出やすい。できたら鍋に投入。
煮る、煮る、煮る。
出来上がり。
ジャガイモのでんぷんと小麦粉のグルテンでとろみがでます。一日経つとマジでカレーになってます。
適当にスパイスを足すとより風味が出るかも。
後は適当に。
たまには手作りカレーもいいもんですぜ!!
といってもカレールーを入れてというのではなく、ゼロから。
(カレールー使って作るんならブログに書くようなことではないし)
こっちでカレールーを買うとなるとかなり高い。1パック(ゴールデンカレーの小さいの)5ユーロとかする。高すぎ!
ということで、スパイスから作ることに。
【材料】
ジャガイモ 大4つ
鶏肉 どんなもんだか知らん、500gくらい?
たまねぎ
トマトピューレ
クミンシード
ローリエ
唐辛子
マギーキューブ
塩
胡椒
味の素
-- 以下 ホワイトカレーソース(?)
小麦粉
牛乳
マサラ粉
--
【作り方】
たまねぎをスライス。鍋に油、クミンシードをいれ、たまねぎを茶色になるまで炒める。鶏肉投入。塩コショウ投入。いい感じになったらジャガイモ、水をいれ、マギーキューブ、ローリエ、トマトピューレ、唐辛子を投入。煮る。
その間にカレーソースを作る。ホワイトソースにかなり大目のマサラ粉を入れるだけ。気合で作る。多めに作った方がとろみが出やすい。できたら鍋に投入。
煮る、煮る、煮る。
出来上がり。
ジャガイモのでんぷんと小麦粉のグルテンでとろみがでます。一日経つとマジでカレーになってます。
適当にスパイスを足すとより風味が出るかも。
後は適当に。
たまには手作りカレーもいいもんですぜ!!
2009-11-03
オランダ語学校
新参者かつオランダ語がしゃべれない人用にオランダ政府が超格安(?)で学校の手配をしてくれる。
拒否権はないので、行くしかない・・・
ということで昨日が初日だった。学校に行くまでには仕事が見つかっているだろうとの目論見から夜間の部を選択。
(実際は・・・見つかってはいたりするが、まだ働いてない・・・)
っで、行ってみてびっくりしたこと。
1. 新参者(オランダに1年以内に来た人)は僕一人
2. ほとんどの人はオランダ語がしゃべれてるじゃん!!
3. 19年オランダに住んでる人が同じクラス
4. クラスの7割がトルコ人
トルコ人たちは(当然?)英語が話せない。僕はトルコ語が話せない。彼らとコミュニケーションをとるかどうかは分からんが、やるとしたらオランダ語になるのだろうか?
いい環境にいると思い込むとして、勉強するか・・・
拒否権はないので、行くしかない・・・
ということで昨日が初日だった。学校に行くまでには仕事が見つかっているだろうとの目論見から夜間の部を選択。
(実際は・・・見つかってはいたりするが、まだ働いてない・・・)
っで、行ってみてびっくりしたこと。
1. 新参者(オランダに1年以内に来た人)は僕一人
2. ほとんどの人はオランダ語がしゃべれてるじゃん!!
3. 19年オランダに住んでる人が同じクラス
4. クラスの7割がトルコ人
トルコ人たちは(当然?)英語が話せない。僕はトルコ語が話せない。彼らとコミュニケーションをとるかどうかは分からんが、やるとしたらオランダ語になるのだろうか?
いい環境にいると思い込むとして、勉強するか・・・
2009-11-01
Perl: CGI.pmで気づいたこと
PaypalでIPNを受信する件は無事何とかなった。
解決するまでに3時間くらい必要だったが・・・
(んでもって、失敗していた理由が送るはずのパラメータを送ってなかったとか、それが間違っていたとかそんな話だったりする・・・-_-;)
PaypalのIPNはデータをPostで送信してくるので、追加のパラメータ(自分とこで必要なもの)をクエリーストリングで追加することにした。
方法は、Paypalのショッピングカート画面を開く際のパラメータの一つ「notify_url」で、コールバックURLの後ろの「?key=value」ってやっただけ。まぁ、「?、&、=」辺りはお約束の「%~」に変換する必要はあるけど。
っで、RubyとかPythonとかPHPとか使えない(使わない)僕はPerlのCGI.pmを使って送信されたデータを取得しているわけだが、普通にCGI.pmのparamメソッドを使っても追加パラメータが取れない。
でも、URLの末尾には「?key=value」がくっついてる・・・
しょうがないので$ENV{"QUERY_STRING"}で取得して、自前でパースした。
試してない上に、ドキュメントも読んでいないので憶測に過ぎないが、
送信メソッドが「Post」の際、CGI.pmはクエリーストリングを取りに行かないのかな?
理由はなんとなくわかるし、それがただし動作な気はするが・・・
(逆をやったら、おかしなことが起きるだろうし・・・、GETの時に標準出力から読むっての)
おかげで、数年ぶりくらいにこんなコード書いた。
解決するまでに3時間くらい必要だったが・・・
(んでもって、失敗していた理由が送るはずのパラメータを送ってなかったとか、それが間違っていたとかそんな話だったりする・・・-_-;)
PaypalのIPNはデータをPostで送信してくるので、追加のパラメータ(自分とこで必要なもの)をクエリーストリングで追加することにした。
方法は、Paypalのショッピングカート画面を開く際のパラメータの一つ「notify_url」で、コールバックURLの後ろの「?key=value」ってやっただけ。まぁ、「?、&、=」辺りはお約束の「%~」に変換する必要はあるけど。
っで、RubyとかPythonとかPHPとか使えない(使わない)僕はPerlのCGI.pmを使って送信されたデータを取得しているわけだが、普通にCGI.pmのparamメソッドを使っても追加パラメータが取れない。
でも、URLの末尾には「?key=value」がくっついてる・・・
しょうがないので$ENV{"QUERY_STRING"}で取得して、自前でパースした。
試してない上に、ドキュメントも読んでいないので憶測に過ぎないが、
送信メソッドが「Post」の際、CGI.pmはクエリーストリングを取りに行かないのかな?
理由はなんとなくわかるし、それがただし動作な気はするが・・・
(逆をやったら、おかしなことが起きるだろうし・・・、GETの時に標準出力から読むっての)
おかげで、数年ぶりくらいにこんなコード書いた。
my @query = split("&", $ENV{"QUERY_STRING"});
my %hash;
foreach (@query) {
my ($key, $value) = split("=");
$hash{$key} = $value;
}
実際は、$value =~ s/%([0-9a-fA-F]{2})/pack('H2', $1)/eg とか入れる必要があるだろうけどね・・・
Paypal: よく分からん
玩具販売サイト構築の話。
支払方法としてPaypalを利用するというところが決まっていて、PaypalのPDTとIPNについて調べて動作確認しているとろこなのだが、いまいちよく分からん。
なんというか、う~ん。ぶっちゃけ何が送られてくるのかわからんのがいかん。
IPN simulatorでも使ってみるかな・・・
ちなみに、PDTとIPNの違いについてはこの辺が分かりやすかった。
同期通信か、非同期通信かの違いなんだけどね。
しかし、何とかしてIPNに追加パラメータを渡せないかな。
そもそも、今のところIPNを上手く受信できて無いが・・・
支払方法としてPaypalを利用するというところが決まっていて、PaypalのPDTとIPNについて調べて動作確認しているとろこなのだが、いまいちよく分からん。
なんというか、う~ん。ぶっちゃけ何が送られてくるのかわからんのがいかん。
IPN simulatorでも使ってみるかな・・・
ちなみに、PDTとIPNの違いについてはこの辺が分かりやすかった。
同期通信か、非同期通信かの違いなんだけどね。
しかし、何とかしてIPNに追加パラメータを渡せないかな。
そもそも、今のところIPNを上手く受信できて無いが・・・
2009-10-31
MySQL: 涙が出そう・・・
最近、MySQLを使っている。自分用ではない。自分用なら間違いなくPostgreSQLを選ぶと思う・・
・
MySQLは他のRDBMSと違って、SQLにくせがある。拡張SQLというか制限SQLというかとにかく不便。Update関係で自己相関クエリが使えないのは以前書いたけど、Viewの中でselect句を使って結合ができないとは思わなかった・・・
こんなのはNG:
将来的にはOKになるらしい。ソースはここ。
個人的Q&A
Q:将来まで待てない状態の人はどうしたらいいのでしょう?
A:from句の中を別viewにすればOKです。
もうね、涙がでるよ、マジで・・・
・
MySQLは他のRDBMSと違って、SQLにくせがある。拡張SQLというか制限SQLというかとにかく不便。Update関係で自己相関クエリが使えないのは以前書いたけど、Viewの中でselect句を使って結合ができないとは思わなかった・・・
こんなのはNG:
CREATE OR REPLACE VIEW adult_member AS SELECT m.name, m.age FROM (SELECT * FROM member WHERE age >= 20) AS m;そんな・・・さすがに困るなぁこれ・・・
将来的にはOKになるらしい。ソースはここ。
個人的Q&A
Q:将来まで待てない状態の人はどうしたらいいのでしょう?
A:from句の中を別viewにすればOKです。
もうね、涙がでるよ、マジで・・・
2009-10-27
IE6: フリーズする
玩具販売サイトの話。
経緯はこの辺。
(といっても、2行しか書いてないが・・・)
通常はFirefoxで開発して、確認でIE6とかを使っている。
(Firebugいいよ~)
っで、持たせてたデータをファイルからMySQLに移行したら、IEがフリーズするようになった・・・orz
理由はいまいち分からない。
考えられそうな理由
単にAjaxでhtml取ってきてるだけだし・・・
なぜだ?
IE6だからか?
prototype.jsのAjax.Updater(たぶんRequestでも)で、asynchronous(非同期通信)をfalseにすると起きてた。
まぁ、Ajaxのいいとこを殺していたので(理由もあったのだが)オプションを除去。
そのページはAjax通信だけで4~5ほどあったので、なんとなく納得。っが、FirefoxはOKだったのはなぜだ?
同時通信数増やしてたっけ?
経緯はこの辺。
(といっても、2行しか書いてないが・・・)
通常はFirefoxで開発して、確認でIE6とかを使っている。
(Firebugいいよ~)
っで、持たせてたデータをファイルからMySQLに移行したら、IEがフリーズするようになった・・・orz
理由はいまいち分からない。
考えられそうな理由
- Javascriptで変なことがおきている
- CSSの解釈で起こしなことがおきている
- DB接続が遅すぎてTimeout
単にAjaxでhtml取ってきてるだけだし・・・
なぜだ?
IE6だからか?
2009/10/28 追記
原因が分かった。prototype.jsのAjax.Updater(たぶんRequestでも)で、asynchronous(非同期通信)をfalseにすると起きてた。
まぁ、Ajaxのいいとこを殺していたので(理由もあったのだが)オプションを除去。
そのページはAjax通信だけで4~5ほどあったので、なんとなく納得。っが、FirefoxはOKだったのはなぜだ?
同時通信数増やしてたっけ?
2009-10-26
SQL: MySQLで更新、削除時に起きた問題
こんな感じのクエリーが動かない。
Oracle、DB2、PostgreSQLでは動いた記憶があったので、当然MySQLでもいけるだろうと思ったら動かない。
こんなエラーが出た。
ERROR 1093 (HY000): You can't specify target table 'child' for update in FROM clause
(適当な)訳:更新にはFROM区で指定した特定のテーブル「child」を使えないよ~ん。
調べてみた。
どうやら、このタイプのクエリは自己相関サブクエリというらしい。
ソースはここ。
鬼かと・・・
解決方法を考えてみた。
1.所詮はプログラムで行っているのだから、クエリーを2回投げればいいじゃん。
2.Viewを一個こしらえれば回避できるらしい。
3.そもそもこんなクエリ投げるってことはデータの持ち方がおかしいのでは?
4.気合で解決方法探してみる・・・
4は方法じゃないね。
誰かいい方法知りませんか?
delete from
child
where id in
(select p.id as id
from parent p
left join child c
on p.id = c.id
where c.id is null);
SQLの内容自体はよくありそうな、親テーブルと子テーブルを左側外部結合して、親テーブルにはあるけど子テーブルにはない行の削除といった感じ。Oracle、DB2、PostgreSQLでは動いた記憶があったので、当然MySQLでもいけるだろうと思ったら動かない。
こんなエラーが出た。
ERROR 1093 (HY000): You can't specify target table 'child' for update in FROM clause
(適当な)訳:更新にはFROM区で指定した特定のテーブル「child」を使えないよ~ん。
調べてみた。
どうやら、このタイプのクエリは自己相関サブクエリというらしい。
ソースはここ。
鬼かと・・・
解決方法を考えてみた。
1.所詮はプログラムで行っているのだから、クエリーを2回投げればいいじゃん。
2.Viewを一個こしらえれば回避できるらしい。
3.そもそもこんなクエリ投げるってことはデータの持ち方がおかしいのでは?
4.気合で解決方法探してみる・・・
4は方法じゃないね。
誰かいい方法知りませんか?
2009-10-24
C++: MingwでWindowsDLLを使う
Mingw GCCでVCとかでコンパイルされたDLLを使う方法。
この辺参考。
pexportsを使ってDLLの中で定義されている関数を抜き出す。
その後、そいつを使ってDEFファイルを作る。
んで、Mingw付属のdlltoolを使って「.a」ファイルを作って完了。
字面は簡単、実際は面倒だった。
リンカ実行時に表示される、「undefined reference "hogehoge@4"」みたいなのを全部洗い出して、上記のDEFファイルに書き込む必要がある。しんどい。
この辺の互換性って何とかならんのかなぁ・・・
この辺参考。
pexportsを使ってDLLの中で定義されている関数を抜き出す。
その後、そいつを使ってDEFファイルを作る。
んで、Mingw付属のdlltoolを使って「.a」ファイルを作って完了。
字面は簡単、実際は面倒だった。
リンカ実行時に表示される、「undefined reference "hogehoge@4"」みたいなのを全部洗い出して、上記のDEFファイルに書き込む必要がある。しんどい。
この辺の互換性って何とかならんのかなぁ・・・
2009-10-17
ぼくらの
漫画の話。アニメではない。
実際のところ、この作品との出会いはアニメのオープニングテーマなのだが。
っで、全10巻読んでみた。
感想:よくこんなの思いついたな作者・・・
基本設定は、別次元の地球と存在をかけての戦い。方法はどっかから与えられたロボット。
操縦者はロボットを操る力を得る代わりに戦闘終了後に必ず死亡。
「勝って地球を守って死ぬか」「負けて地球と一緒に死ぬか」の2択。
選ばれた時点で(最終的には自分で契約する必要があるが)、「死」確定。
内容は面白い。というか考えさせられる。
しかし、パラレルワールドと戦うってどっかで見た設定だな。
ポンコツのヘルメット被って、木刀で戦う高校生だった気がするが、なんだっけ?
思い出せん・・・
実際のところ、この作品との出会いはアニメのオープニングテーマなのだが。
っで、全10巻読んでみた。
感想:よくこんなの思いついたな作者・・・
基本設定は、別次元の地球と存在をかけての戦い。方法はどっかから与えられたロボット。
操縦者はロボットを操る力を得る代わりに戦闘終了後に必ず死亡。
「勝って地球を守って死ぬか」「負けて地球と一緒に死ぬか」の2択。
選ばれた時点で(最終的には自分で契約する必要があるが)、「死」確定。
内容は面白い。というか考えさせられる。
しかし、パラレルワールドと戦うってどっかで見た設定だな。
ポンコツのヘルメット被って、木刀で戦う高校生だった気がするが、なんだっけ?
思い出せん・・・
2009-10-14
StyleSheet: 高さの異なるカラムを揃える
まさにタイトルどおりの話。
この辺を参考にした。
なるほど、:afterを隠しておいて、必要になったら勝手に表示といた感じかな?
かなり面白い。多分高さ32768pxまで対応してるんだろう。なぜこの数値なのかはよく分からんが?
ブラウザが認識する最大値かな?
ソースが載ってなかったので載せておこう。
後は、それぞれのIDを持つHTML要素を作るだけ。
ずっと探していたがようやっと見つかったわぁ。
(前にも見つけた気はするが・・・)
タグがprogramになってるけど、あまりそれ以外に選択肢がなかったから・・・
(増やしたくないという理由で・・・)
この辺を参考にした。
なるほど、:afterを隠しておいて、必要になったら勝手に表示といた感じかな?
かなり面白い。多分高さ32768pxまで対応してるんだろう。なぜこの数値なのかはよく分からんが?
ブラウザが認識する最大値かな?
ソースが載ってなかったので載せておこう。
#content {
text-align: center;
margin:0 auto;
overflow:hidden;
/* width: 700px; *//*これ僕は必要なかったので削除*/
}
#content:after {
content:".";
display:block;
height:0;
clear:both;
visibility:hidden;
}
#column1, #column2, #column3{
float:left;
padding-bottom:32768px;
margin-bottom:-32768px;
}
#column1 {
float: left;
width: 20%;
}
#column2 {
float: left;
width: 40%;
}
#column3 {
float: left;
width: 35%;
}
幅は適当に変えた。後は、それぞれのIDを持つHTML要素を作るだけ。
ずっと探していたがようやっと見つかったわぁ。
(前にも見つけた気はするが・・・)
タグがprogramになってるけど、あまりそれ以外に選択肢がなかったから・・・
(増やしたくないという理由で・・・)
2009-10-12
C++: expatを使ってみた
激しく今更感があるがexpatを使ってみた。
ちなみに、expatはSAXでXMLを扱うためのライブラリ。C言語で実装されてるけど、問題なくC++で使える。
RSSを読み込んでデータ型に落とし込もうということをしてみたんだけど、意外と難しい。
SAXってイベント駆動型のAPIなので、全部自前で管理するのだが、結構どうしたもんかなと言うときがある。
基本の動きとしては、
開始エレメント -> 中身 -> 終端エレメント
という感じで動くんだけど、
こんな感じのXMLだとえらいことになる
hoge開始
↓
改行文字及び、空白文字
↓
fuga開始
↓
中身の文字
↓
fuga終了
↓
改行文字
↓
hoge終了
正直、無駄イベントが多すぎな印象。こんな場合個人的には、改行文字と空白文字を除いてほしいのだが、そうもいかんらしい。自前で無視するか、イベントハンドラを追加するか・・・悩ましい。
ちなみに、expatはSAXでXMLを扱うためのライブラリ。C言語で実装されてるけど、問題なくC++で使える。
RSSを読み込んでデータ型に落とし込もうということをしてみたんだけど、意外と難しい。
SAXってイベント駆動型のAPIなので、全部自前で管理するのだが、結構どうしたもんかなと言うときがある。
基本の動きとしては、
開始エレメント -> 中身 -> 終端エレメント
という感じで動くんだけど、
こんな感じのXMLだとえらいことになる
<hoge> <fuga>中身</fuga> </hoge>XMLは性質上、空白文字とかもテキストノードとして扱うので、イベントがこんな感じになる。
hoge開始
↓
改行文字及び、空白文字
↓
fuga開始
↓
中身の文字
↓
fuga終了
↓
改行文字
↓
hoge終了
正直、無駄イベントが多すぎな印象。こんな場合個人的には、改行文字と空白文字を除いてほしいのだが、そうもいかんらしい。自前で無視するか、イベントハンドラを追加するか・・・悩ましい。
2009-10-10
Javascript: 苦労した話
JavascriptでIFrameを扱う話。
「tmpl.js」という誰かが作っているライブラリを見つけ、便利そうだったので使おうかと考えた。
この辺
incl.jsで外部HTMLを読み込んで、tmpl.jsで文字列の置換を行うつもりだった。
こんな感じ。
本体
<include id="navi.html"></include>
外側
{ヘッダー部分(tmpl.jsとかとか)}
<a href="hoge.html">{something}</a>
上手くいかなかった。
正確にはFirefoxでは動くがIEではだめといった感じ。
あきらめて、prototype.jsとAjaxにした。
読み込んだ後にごりごり文字列の置換を行っただけ。
同じようにIFrameで別ページを読み込んで、中身だけ取り出そうと試みた。
外側のHTMLではAjaxを使ってデータを取得し、中身だけ取り出す、そうすることでサイトの外観の定義を一箇所にできるかなぁなんて思ったり。
無理だった。
理由:遅延処理のせい。
IEのIFrameにはonreadystatechangeなんてのがあるし、Firefoxは単にonloadに入れればいいだけじゃん、外側はonloadで読み込んでるし。
こんな感じで。
問題はdoSomethingの中の処理なんだけど、IFrameから中身の文書を取り出すときに、contentWindowをが必要になるんだけど、IEではnullになってる。
やり方が悪いんだと思うんだけど、あきらめて力技でやることにした。
IE7とか8ならいけるのだろうか・・・
未だにIE6が必要なのかも怪しいが・・・
(とはいっても、僕の環境はIE6。メインがFirefoxだからという理由)
「tmpl.js」という誰かが作っているライブラリを見つけ、便利そうだったので使おうかと考えた。
この辺
incl.jsで外部HTMLを読み込んで、tmpl.jsで文字列の置換を行うつもりだった。
こんな感じ。
本体
<include id="navi.html"></include>
外側
{ヘッダー部分(tmpl.jsとかとか)}
<a href="hoge.html">{something}</a>
上手くいかなかった。
正確にはFirefoxでは動くがIEではだめといった感じ。
あきらめて、prototype.jsとAjaxにした。
読み込んだ後にごりごり文字列の置換を行っただけ。
同じようにIFrameで別ページを読み込んで、中身だけ取り出そうと試みた。
外側のHTMLではAjaxを使ってデータを取得し、中身だけ取り出す、そうすることでサイトの外観の定義を一箇所にできるかなぁなんて思ったり。
無理だった。
理由:遅延処理のせい。
IEのIFrameにはonreadystatechangeなんてのがあるし、Firefoxは単にonloadに入れればいいだけじゃん、外側はonloadで読み込んでるし。
こんな感じで。
if (/*@cc_on ! @*/ false) {
iframe.onreadystatechange = function() {
if (this.readyState == "complete") {
doSomething(this);
}
}
} else {
iframe.onclick = function() { doSomething(iframe);}
}
安易でした・・・orz問題はdoSomethingの中の処理なんだけど、IFrameから中身の文書を取り出すときに、contentWindowをが必要になるんだけど、IEではnullになってる。
やり方が悪いんだと思うんだけど、あきらめて力技でやることにした。
IE7とか8ならいけるのだろうか・・・
未だにIE6が必要なのかも怪しいが・・・
(とはいっても、僕の環境はIE6。メインがFirefoxだからという理由)
台風18号
人に言われて思い出した。そういえば最大級の台風が日本に上陸したとか・・・
っで、ちょっと地元のニュースを読んでみたが、結構ひどい。
割とピンポイントで知っている地名とか出てるし・・・僕の地元は大丈夫か?
K氏とかS氏とかの地元の写真が出てたなぁ・・・大丈夫かね?
っで、ちょっと地元のニュースを読んでみたが、結構ひどい。
割とピンポイントで知っている地名とか出てるし・・・僕の地元は大丈夫か?
K氏とかS氏とかの地元の写真が出てたなぁ・・・大丈夫かね?
2009-10-02
ギター
更に連投。。。
(いや、ちまちま上げるの好きじゃないから、ネタがまとまったときにドカンとアップなんて考えてないですよ)
こっちに来てからギターを始めた。バンド仲間などいないので、アコギでソロギター・・・
仕事が見つかるまでものすごく暇なのでというだけではなく、音楽にかかわっていたいという思いもあったからである。
足掛け7ヶ月か・・・
最近になって、ようやく少し弾けるようになったかなぁって程度なので、あまり才能はないのだろう・・・(TДT)
っで、なんとなく気づいたこと。
右手よ、器用になってくれ~・・・
(いや、ちまちま上げるの好きじゃないから、ネタがまとまったときにドカンとアップなんて考えてないですよ)
こっちに来てからギターを始めた。バンド仲間などいないので、アコギでソロギター・・・
仕事が見つかるまでものすごく暇なのでというだけではなく、音楽にかかわっていたいという思いもあったからである。
足掛け7ヶ月か・・・
最近になって、ようやく少し弾けるようになったかなぁって程度なので、あまり才能はないのだろう・・・(TДT)
っで、なんとなく気づいたこと。
- 以外にも左手は器用だったということ
- 器用だと思っていた右手はそうでもなく、不器用だったんだということ
右手よ、器用になってくれ~・・・
Javascript: DOM操作でテキストだけ抜き取る
連投。
以前かいたWebサイトで、「ページ内にあるサムネイル画像の検索を行いたい」なんて要望がでて、テキストの検索だからできるだろうと思って作ってみた。
ちなみに、各サムネイルはこんな感じ。
<span class="product">
<img id="hoge" src="hogehoge" />
<div>Produce Name</div>
<div>€ 50</div>
</span>
先頭要素が「span」なのはIE6対策。
っで、prototype.jsを使ってるので、document.getElementsByClassNameでサムネイルの各要素を取り出して、以下のスクリプトでテキストノードだけ抜き取る。
元々はここにあったソースだけど、これはFirefox限定だったので、prototype.js使ってクロスブラウザにした。
ただ、それだけ。
どうでもいい話だが、上記のスクリプトの「var text="";」の部分、初期化せずに「var text;」って書くと、for文の中の宣言にもかかわらず、あたかもC/C++のstatic宣言みたいな動作してた。Firefoxでしか確認してないけど。バグか?
以前かいたWebサイトで、「ページ内にあるサムネイル画像の検索を行いたい」なんて要望がでて、テキストの検索だからできるだろうと思って作ってみた。
ちなみに、各サムネイルはこんな感じ。
<span class="product">
<img id="hoge" src="hogehoge" />
<div>Produce Name</div>
<div>€ 50</div>
</span>
先頭要素が「span」なのはIE6対策。
っで、prototype.jsを使ってるので、document.getElementsByClassNameでサムネイルの各要素を取り出して、以下のスクリプトでテキストノードだけ抜き取る。
var tags = $A(element.getElementsByTagName("*"));
var text = "";
tags.each(function(tag, index) {
var children = $A(tag.childNodes);
children.each(function(node, index) {
if (node.nodeType == 3) {
text += node.nodeValue + " ";
}
});
});
elementは取得した要素配列の一つ。元々はここにあったソースだけど、これはFirefox限定だったので、prototype.js使ってクロスブラウザにした。
ただ、それだけ。
どうでもいい話だが、上記のスクリプトの「var text="";」の部分、初期化せずに「var text;」って書くと、for文の中の宣言にもかかわらず、あたかもC/C++のstatic宣言みたいな動作してた。Firefoxでしか確認してないけど。バグか?
免許ゲット
日本の運転免許をオランダのに書き換えた。
オリジナル(日本の)はRDWという免許関連のことをしている機関に納められる。要は取り上げ。
が、確認したところによると日本の免許はちょっと特別で、1ヶ月後くらいに日本大使館に送付されて、取りに行けば返してくれるらしい。便利。
今のところ必要ないのが、気が向いたら取りに行こう。ちなみに日本大使館はハーグにある。
こっちの免許はなのか、書き換えたからなのかは知らないが、10年有効で、日本の免許の最長より5年長いことになる。
10年ここにいるかどうかは分からないが、面倒な手続きは10年に一回でいいのはいいことだ。
ちなみに、ぜんぜん関係ないが、パスポートは最長5年らしい。日本のだと5年のと10年のが選べる。なんかひっくり返った感じだ。
当然僕のは日本のパスポートなので、期間だけ見ればいいとこ取りな感じで得した気分。
っま、免許だけあっても車はないので、あんまり意味はないんだけどね。
オリジナル(日本の)はRDWという免許関連のことをしている機関に納められる。要は取り上げ。
が、確認したところによると日本の免許はちょっと特別で、1ヶ月後くらいに日本大使館に送付されて、取りに行けば返してくれるらしい。便利。
今のところ必要ないのが、気が向いたら取りに行こう。ちなみに日本大使館はハーグにある。
こっちの免許はなのか、書き換えたからなのかは知らないが、10年有効で、日本の免許の最長より5年長いことになる。
10年ここにいるかどうかは分からないが、面倒な手続きは10年に一回でいいのはいいことだ。
ちなみに、ぜんぜん関係ないが、パスポートは最長5年らしい。日本のだと5年のと10年のが選べる。なんかひっくり返った感じだ。
当然僕のは日本のパスポートなので、期間だけ見ればいいとこ取りな感じで得した気分。
っま、免許だけあっても車はないので、あんまり意味はないんだけどね。
2009-09-21
オランダ人の話す英語
オランダ語関連の本でよく「オランダ人は英語で話しかければ英語で、フランス語で話しかければフランス語で返事をする」なんてくだりを見る。試したことないので、本当かどうかは知らない。
個人的に僕は人見知りなので、自分から話しかけるということはないのだが、必要に駆られるときはしばしばある。
とりあえず、今まで話した人が全員流暢に英語を話したかというと、そうでもない。
まぁ、確かに「日本人と比べれば」段違いで英語は話せると思う。でも、オランダではある程度英語が必要な時があるからそれはある意味当たり前な話。普段からある程度必要ならある程度話せるだろう。イギリスが近いし。
でも、かなり怪しい英語を話す人もやっぱりたくさんいる。
以下は体験談。
個人的に「いちご = strawberry(ストロベリー)」は「orange(オレンジ)」と一緒でユニバーサルな言葉だと思っていた、保育園児でも知ってる言葉だし。オランダに来る前までは。
近くにあるスーパーマーケットの中にちょっとしたスナックを売ってる店があって、毎週土曜日はミルクシェイクが50セントで売られている。
50セントなら買おうと思い、何があるか聞いてみると。
「banana, vanilla, chocolate, and aardbei」
ん?「aardbei」?なんだそれ?(その当時はまだ知らなかった単語)
「what was aardbei in English?」
店員さんは結局答えられずに他の人に尋ねていた・・・
ちなみに答え:いちご = strawberry
う~ん・・・なぜだろう?
オランダに来る可能性ががある人はあまりオランダ人の英語を信用しすぎない方がいいと思う。
個人的に僕は人見知りなので、自分から話しかけるということはないのだが、必要に駆られるときはしばしばある。
とりあえず、今まで話した人が全員流暢に英語を話したかというと、そうでもない。
まぁ、確かに「日本人と比べれば」段違いで英語は話せると思う。でも、オランダではある程度英語が必要な時があるからそれはある意味当たり前な話。普段からある程度必要ならある程度話せるだろう。イギリスが近いし。
でも、かなり怪しい英語を話す人もやっぱりたくさんいる。
以下は体験談。
個人的に「いちご = strawberry(ストロベリー)」は「orange(オレンジ)」と一緒でユニバーサルな言葉だと思っていた、保育園児でも知ってる言葉だし。オランダに来る前までは。
近くにあるスーパーマーケットの中にちょっとしたスナックを売ってる店があって、毎週土曜日はミルクシェイクが50セントで売られている。
50セントなら買おうと思い、何があるか聞いてみると。
「banana, vanilla, chocolate, and aardbei」
ん?「aardbei」?なんだそれ?(その当時はまだ知らなかった単語)
「what was aardbei in English?」
店員さんは結局答えられずに他の人に尋ねていた・・・
ちなみに答え:いちご = strawberry
う~ん・・・なぜだろう?
オランダに来る可能性ががある人はあまりオランダ人の英語を信用しすぎない方がいいと思う。
2009-09-13
Elegy 小フーガ
2008年に公開された映画。
英語音声でオランダ語字幕という状態な上、いまいち話が好きになれないので適当に流し見。
その中で主人公(?)がピアノでクラッシクの曲を弾いていて、何の曲だろう?となる。
ビバルディ?いや、もっと教会音楽的な、バッハ?
ということで調べてみた。
というか、バッハに当たりをつけて自分の記憶の中にあるバッハの曲名をYoutubeで検索と言った方がいいか。
バッハの曲なんて、トッカータとフーガのニ短調しか知らんがな。
と思ったが、もう一つ知っている。
なんだったかな・・・
確か、ト短調。う~ん。
フーガト短調・・・検索・・・小フーガ。これか。
これだ。
それにしても、このあたりの曲なんて昔母親に名前聞きまくって覚えた記憶があるんだが、忘れるもんだね。
英語音声でオランダ語字幕という状態な上、いまいち話が好きになれないので適当に流し見。
その中で主人公(?)がピアノでクラッシクの曲を弾いていて、何の曲だろう?となる。
ビバルディ?いや、もっと教会音楽的な、バッハ?
ということで調べてみた。
というか、バッハに当たりをつけて自分の記憶の中にあるバッハの曲名をYoutubeで検索と言った方がいいか。
バッハの曲なんて、トッカータとフーガのニ短調しか知らんがな。
と思ったが、もう一つ知っている。
なんだったかな・・・
確か、ト短調。う~ん。
フーガト短調・・・検索・・・小フーガ。これか。
これだ。
それにしても、このあたりの曲なんて昔母親に名前聞きまくって覚えた記憶があるんだが、忘れるもんだね。
2009-09-11
「same」の意味
ちょっとした口論の話。
まずは、sameの意味
っで、口論の内容
例)二つの同じ型番号の椅子がある。これは「same」か?
ある人は言う、これは「similar」である、と。
また、ある人は言う、これは「same」である、と。
最初の人は言った、「辞書を引けば、これはsimilarだ。用法が間違っている」
要するに、本当に間違っているのかというのの確認の話になる。
1の意味だけで見れば、same = uniqueと言えるので、まぁ間違いかと。
でも、複数意味があるということは、会話または文章の無いようによって意味が変わるということで、もしuniqueの意味だけなら、uniqueを使えばいいわけだ。
つまり、辞書的に見ても、上記の例は「same」ではないかと思うのだが、どうだろう?
ついでに、「same」の和訳。
他の人の意見が聞きたいなぁと思ったり。
まずは、sameの意味
1. Being the very one; identical: the same boat we rented before.
2. Similar in kind, quality, quantity, or degree.
3. Conforming in every detail: according to the same rules as before.
4. Being the one previously mentioned or indicated; aforesaid.
from thefreedictionary.com
っで、口論の内容
例)二つの同じ型番号の椅子がある。これは「same」か?
ある人は言う、これは「similar」である、と。
また、ある人は言う、これは「same」である、と。
最初の人は言った、「辞書を引けば、これはsimilarだ。用法が間違っている」
要するに、本当に間違っているのかというのの確認の話になる。
1の意味だけで見れば、same = uniqueと言えるので、まぁ間違いかと。
でも、複数意味があるということは、会話または文章の無いようによって意味が変わるということで、もしuniqueの意味だけなら、uniqueを使えばいいわけだ。
つまり、辞書的に見ても、上記の例は「same」ではないかと思うのだが、どうだろう?
ついでに、「same」の和訳。
a. (the 〜) 同じ, 同一の, 同様な ((as)); 〔話〕 ((the 〜 asで)) …と同じように. (this [these, that, those] 〜) 前述の, 例の; 変らない, 単調な.
from goo辞書
他の人の意見が聞きたいなぁと思ったり。
2009-09-10
クロスブラウザな話
「玩具をネット販売したいからショッピングサイトを作れ。」
始まりはこの言葉からだった。
-- 略 --
異なるブラウザで同じ動作がある程度しか保障されていない話は有名だが、それを解消するために開発者の時間と精神力が大量に消費されているのはあまり有名ではない。
要するに上記のような問題である。つまり、異なるブラウザ間の動作が異なった際の解消方法の話。
問題その1
Firefoxでは「__hogehoge__」というスタイルシートの記述は許可されているが、IE6ではだめ。
先頭のアンダースコアを削ったら動いた。
気づくのに3時間かかった俺、涙目。
ちなみに、なぜそんな面倒なクラス名をつけたかというと、Javascript内で要素を勝手に作ってくっつけてるやつのクラス名だから。要は、名前を変更するなよって意味だけ。
他はHTMLファイルに書かれているので適当に編集してもらって構わないというだけの話。
問題その2
以下はFirefoxのみで動作可能
しょうがないので、getElementsByTagNameでinputタグを抜き取って、Element.hasClassName()でクラス名を持っているかチェックして切り抜ける。入力チェックだしこの程度でいいだろう。
誰か、いい方法知ってたら教えて。
問題その3
opacityの話。これはどちらかといえばCSSの話か?
Firefox3は単に「opacity: 0.5」みたいに書けばOK。
IE6は 「filter: alpha(opacity=50); -moz-opacity:0.50; opacity:0.50;」と3行いる。
たぶんこれはCSS2とCSS3の違いか?IE6は古いのでしょうがないといえばしょうがないか・・・
一通り出来上がったら、Firefox3、IE6、7、8とチェックしないとなぁ・・・
始まりはこの言葉からだった。
-- 略 --
異なるブラウザで同じ動作がある程度しか保障されていない話は有名だが、それを解消するために開発者の時間と精神力が大量に消費されているのはあまり有名ではない。
要するに上記のような問題である。つまり、異なるブラウザ間の動作が異なった際の解消方法の話。
問題その1
Firefoxでは「__hogehoge__」というスタイルシートの記述は許可されているが、IE6ではだめ。
先頭のアンダースコアを削ったら動いた。
気づくのに3時間かかった俺、涙目。
ちなみに、なぜそんな面倒なクラス名をつけたかというと、Javascript内で要素を勝手に作ってくっつけてるやつのクラス名だから。要は、名前を変更するなよって意味だけ。
他はHTMLファイルに書かれているので適当に編集してもらって構わないというだけの話。
問題その2
以下はFirefoxのみで動作可能
-- javascript --
function check(form) {
var inputs = form.getElementsByClassName("hoge");
// do something
}
-- html --
<form name="fuga" action="check(this)">
<input type="text" class="hoge" value="hohoho" />
</form>
getElementsByClassNameはprototype.jsのdocumentに対する拡張メソッド。IEだとformに対しては使えないと怒られる。しょうがないので、getElementsByTagNameでinputタグを抜き取って、Element.hasClassName()でクラス名を持っているかチェックして切り抜ける。入力チェックだしこの程度でいいだろう。
誰か、いい方法知ってたら教えて。
問題その3
opacityの話。これはどちらかといえばCSSの話か?
Firefox3は単に「opacity: 0.5」みたいに書けばOK。
IE6は 「filter: alpha(opacity=50); -moz-opacity:0.50; opacity:0.50;」と3行いる。
たぶんこれはCSS2とCSS3の違いか?IE6は古いのでしょうがないといえばしょうがないか・・・
一通り出来上がったら、Firefox3、IE6、7、8とチェックしないとなぁ・・・
2009-09-06
時をかける少女
今更ながらに、時をかける少女を観た。レンタルだが。
ま、内容については適当にネタバレサイトでも探せば山ほどあるので、ググってください。
本題は実はそれとは遠く(それほどでもないが)離れたところにある。
映画を観るとき、黙ってみますか(歓声等は除く)、それとも批評しながら観ますか?
ちなみに僕は黙って観る派。もちろん、胸のうちではそれはおかしいだろ、って突っ込みは入れるが。
この映画、に限ったことではないが、14歳の少女が主人公なだけあって、言動が幼い。若さとも言えるが、愚かさとも言える。
(個人的には14歳ならそんなもんだろうというのと、自分もそんな時代があったなぁなんて重ねる部分があってよかったと思うんだけど)
そうなると、批評したいタイプというか口に出しながら観るタイプの人はそれを口にするのですね。挙句の果てに、なぜこの映画を借りてきたのかを問う始末・・・
もうね、黙って観ろと、言ってやりたい。
(人のことは言えんところはあるけど・・・呪ビとか・・・観ずに寝てたけど邪魔にならないようにしてたけど・・・)
隣で「Idiot」とか「Stupid」とか言ってるのを聞きながら観ると、ちと(大分?)興が冷める。
14歳に何を求めているのだといえば、「Still」・・・
映画は一人で観るものだと実感。
そこまで映画熱があるわけでもないのでいいと言えばいいのだが、そうは言ってもねぇ・・・
ま、内容については適当にネタバレサイトでも探せば山ほどあるので、ググってください。
本題は実はそれとは遠く(それほどでもないが)離れたところにある。
映画を観るとき、黙ってみますか(歓声等は除く)、それとも批評しながら観ますか?
ちなみに僕は黙って観る派。もちろん、胸のうちではそれはおかしいだろ、って突っ込みは入れるが。
この映画、に限ったことではないが、14歳の少女が主人公なだけあって、言動が幼い。若さとも言えるが、愚かさとも言える。
(個人的には14歳ならそんなもんだろうというのと、自分もそんな時代があったなぁなんて重ねる部分があってよかったと思うんだけど)
そうなると、批評したいタイプというか口に出しながら観るタイプの人はそれを口にするのですね。挙句の果てに、なぜこの映画を借りてきたのかを問う始末・・・
もうね、黙って観ろと、言ってやりたい。
(人のことは言えんところはあるけど・・・呪ビとか・・・
隣で「Idiot」とか「Stupid」とか言ってるのを聞きながら観ると、ちと(大分?)興が冷める。
14歳に何を求めているのだといえば、「Still」・・・
映画は一人で観るものだと実感。
そこまで映画熱があるわけでもないのでいいと言えばいいのだが、そうは言ってもねぇ・・・
2009-08-31
求めているもの、求められているもの
仕事探してほぼ丸2ヶ月。未だ無職なわけだが、2度ほど面接(といっても電話)を受けた。ちなみに、何かの間違いでどちらも同じ会社。
結果は未だ無職ということだ。
ただ、何度受けてもその会社の求めているものが満たせるとは思えないので、まぁ、いいのだろう。(泣いてないからね。。。)
Javaにおけるfinalキーワードの意味は?assertの意味は?ifとassertの違いは?immutableクラスとは?
いやね、分かりますよ。日本語ならね。そげな勉強英語ではしておりませんので、ぱっとは答えられんがね。んで、言われたのが、Java開発者になりたいなら、コースを受けるべきだね、って。ああ、そうかい。
個人的に、プログラミングの本質は問題の解決にあると思っているので、開発言語にこだわったことないんだよね。言語の特徴を活かす事は好きだが。
なので、Java最高、デザインパターン必須、ってのは肌が受け付けない感じはする。2度とも同じ人だったと思うが、いわゆるオタクなかほりがする話し方だったし。(まぁ、デザインパターンは知ってて損はないと思うが。でもあれって突き詰めていくとそうなるって物に名前が付いてるだけって気もするが)
Javaのプログラムが書ける人(幅が広い定義なるが)ではなく、Java言語の定義を知っている人がほしいなら募集要項にそう書いてほしい。
あぁ、負け犬の遠吠えさ。
結果は未だ無職ということだ。
ただ、何度受けてもその会社の求めているものが満たせるとは思えないので、まぁ、いいのだろう。(泣いてないからね。。。)
Javaにおけるfinalキーワードの意味は?assertの意味は?ifとassertの違いは?immutableクラスとは?
いやね、分かりますよ。日本語ならね。そげな勉強英語ではしておりませんので、ぱっとは答えられんがね。んで、言われたのが、Java開発者になりたいなら、コースを受けるべきだね、って。ああ、そうかい。
個人的に、プログラミングの本質は問題の解決にあると思っているので、開発言語にこだわったことないんだよね。言語の特徴を活かす事は好きだが。
なので、Java最高、デザインパターン必須、ってのは肌が受け付けない感じはする。2度とも同じ人だったと思うが、いわゆるオタクなかほりがする話し方だったし。(まぁ、デザインパターンは知ってて損はないと思うが。でもあれって突き詰めていくとそうなるって物に名前が付いてるだけって気もするが)
Javaのプログラムが書ける人(幅が広い定義なるが)ではなく、Java言語の定義を知っている人がほしいなら募集要項にそう書いてほしい。
あぁ、負け犬の遠吠えさ。
2009-08-30
圧倒的じゃないか
某ガンダムの台詞ではない。
308議席獲得の民主党のこと。
初めて選挙権を行使しなかった(できなかったのだが)選挙。
それにしても、ネット(ぐらいしか情報源がない)でささやかれていることが本当で、この4年間の間に全部実現されたら、日本に帰れなくなるなぁ・・・
そもそも、個人献金とか西松建設の問題ってどうなったんだろう?今のところ容疑者扱いなのかね?真っ黒なグレーの人が総理大臣とか(そもそも政治家でそうではない人の方が少ないのかもしれないが)、日本列島は日本人だけのものではない発言の人が総理とかどうなんだろう?
国益のために動いてくれるならどっちでもいいんだけど、アメリカ寄りか、中韓寄りかの違いかね。
これだけ圧倒的な議席数をもたれたら、お手並み拝見では済まない状況ではないかと思ったり思わなかったり。
308議席獲得の民主党のこと。
初めて選挙権を行使しなかった(できなかったのだが)選挙。
それにしても、ネット(ぐらいしか情報源がない)でささやかれていることが本当で、この4年間の間に全部実現されたら、日本に帰れなくなるなぁ・・・
そもそも、個人献金とか西松建設の問題ってどうなったんだろう?今のところ容疑者扱いなのかね?真っ黒なグレーの人が総理大臣とか(そもそも政治家でそうではない人の方が少ないのかもしれないが)、日本列島は日本人だけのものではない発言の人が総理とかどうなんだろう?
国益のために動いてくれるならどっちでもいいんだけど、アメリカ寄りか、中韓寄りかの違いかね。
これだけ圧倒的な議席数をもたれたら、お手並み拝見では済まない状況ではないかと思ったり思わなかったり。
2009-08-27
総選挙
民主党の財源の話。
ソースはここ
おまけ
収入の15%…
ヽ|/
/ ̄ ̄ ̄`ヽ、
/ ヽ
/ \,, ,,/ |
| (●) (●)||| |
| / ̄⌒ ̄ヽ U.| ・・・・・・・・ゴクリ。
| | .l~ ̄~ヽ | |
|U ヽ  ̄~ ̄ ノ |
|  ̄ ̄ ̄ |
計算式
額面給料:400万(結構もらってんな)
民主党案:400 x 0.15 = 60万
これに対して、所得税、住民税、その他もろもろがかかる。
「憶測」
給料:400万
所得税(5%):20万
地方税(10%):40万
健保税(10%):40万 (これは減るのか?)
民主案(15%):60万
手取り額(年):240万
手取り額(月):20万
300万なら、月の手取りは15万に、200万(いわゆるワープア)なら、10万に。アルバイトも収入になるので、単純に時給 x 15%が税金に。
ちなみに、消費税は別途買い物すれば取られます。
うわさによると、これが施行されるのは政権を取った4年後。そのときには、民主党が野党になっている可能性がある。っで、野党としてこの法律のことを言及するとかなんとか。
まぁ、さすがにそれはうわさでしかないが。ありえそうな話。
TVでは民主300議席なんて騒がれてるらしいけど、あなたはそれでも民主党にいれますか?
民主党は現行制度を抜本的に改め、職業に関係なくすべての人が同じ制度に加入する「一元化」を目指す。収入の15%の保険料を納付し、将来はそれに見合った額を受給する「所得比例年金」に「最低保障年金」を組み合わせる構想だ。
ソースはここ
おまけ
収入の15%…
ヽ|/
/ ̄ ̄ ̄`ヽ、
/ ヽ
/ \,, ,,/ |
| (●) (●)||| |
| / ̄⌒ ̄ヽ U.| ・・・・・・・・ゴクリ。
| | .l~ ̄~ヽ | |
|U ヽ  ̄~ ̄ ノ |
|  ̄ ̄ ̄ |
計算式
額面給料:400万(結構もらってんな)
民主党案:400 x 0.15 = 60万
これに対して、所得税、住民税、その他もろもろがかかる。
「憶測」
給料:400万
所得税(5%):20万
地方税(10%):40万
健保税(10%):40万 (これは減るのか?)
民主案(15%):60万
手取り額(年):240万
手取り額(月):20万
300万なら、月の手取りは15万に、200万(いわゆるワープア)なら、10万に。アルバイトも収入になるので、単純に時給 x 15%が税金に。
ちなみに、消費税は別途買い物すれば取られます。
うわさによると、これが施行されるのは政権を取った4年後。そのときには、民主党が野党になっている可能性がある。っで、野党としてこの法律のことを言及するとかなんとか。
まぁ、さすがにそれはうわさでしかないが。ありえそうな話。
TVでは民主300議席なんて騒がれてるらしいけど、あなたはそれでも民主党にいれますか?
2009-08-20
Composite pattern
[category]
Structural pattern
[brief description]
This pattern "compose" objects into tree structures to represent part-whole hierarchies.
[detail description]
This pattern provides a tree structures data model. Think about directories and files, directories are composite and files are leafs. Directories can have files in themselves as their children.
[expression in UML]
[sample code]
(C++)
Structural pattern
[brief description]
This pattern "compose" objects into tree structures to represent part-whole hierarchies.
[detail description]
This pattern provides a tree structures data model. Think about directories and files, directories are composite and files are leafs. Directories can have files in themselves as their children.
[expression in UML]
┌─────────┐
│ Component │
├─────────┤
├─────────┤0..*
│ + operation() │────────―─┐
│ + add() │child │
│ + remove() │ │
│ + getChild() │ │
└─────────┘ │
△ │
│ │
┌──────┴───────┐ │
│ │ │
┌────┴───┐ ┌────┴────┐ │
│ Leaf │ │ Composite │ │
├────────┤ ├─────────┤ │
├────────┤ ├─────────┤ │
│ + operation() │ │ + operation() │ 1 │
└────────┘ │ + add() │◇─┘
│ + remove() │ parent
│ + getChild() │
└─────────┘
[sample code]
(C++)
#include <stdexcept>
#include <iostream>
#include <vector>
#include <string>
enum Type
{
dic,
file
};
class Component
{
public:
Component() {}
Component(Type t_, const char* name_)
: t(t_), name(name_)
{}
virtual ~Component() {}
virtual void operation() {}
Type getType() { return t; }
const char* getName() { return name; }
virtual void add(Component* c) { throw std::runtime_error("This method is not implemented."); }
virtual void remove() { throw std::runtime_error("This method is not implemented."); }
virtual std::vectorgetChild()
{ throw std::runtime_error("This method is not implemented."); }
virtual int getSize() { throw std::runtime_error("This method is not implemented."); }
private:
Type t;
const char* name;
};
class Directory
: public Component
{
public:
Directory(const char* name)
: Component(dic, name)
{}
virtual ~Directory()
{
for (int i = 0; i < children.size(); i++) {
delete children[i];
}
}
virtual void operation()
{
std::cout << getName() << std::endl;
}
virtual void add(Component* c)
{
children.push_back(c);
}
virtual void remove()
{
Component* c = *(children.end() - 1);
delete c;
children.pop_back();
}
virtual std::vectorgetChild() { return children; }
virtual int getSize() { return children.size(); }
private:
std::vectorchildren;
int size;
};
class File
: public Component
{
public:
File(const char* name)
: Component(file, name)
{}
virtual ~File() {}
virtual void operation() { std::cout << getName() << std::endl; }
};
void printTree(Component* com, const std::string indent)
{
std::cout << indent;
if (file == com->getType()) {
com->operation();
} else if (dic == com->getType()) {
com->operation();
int size = com->getSize();
std::vectorchildren = com->getChild();
for (int i = 0; i < size; i++) {
Component* c = children[i];
printTree(c, indent + " ");
}
}
}
int main(int, char**)
{
Component* d1 = new Directory("dic 1");
Component* f1 = new File("file 1");
d1->add(f1);
Component* d2 = new Directory("dic 2");
d1->add(d2);
Component* f2 = new File("file 2");
d2->add(f2);
printTree(d1, "");
return 0;
}
Factory method pattern
[category]
Creational pattern.
[brief description]
This pattern provides methods to create objects which has superclass and a lot of derivatives.
[detail description]
This pattern solves the problem that other creation pattern has. (The problem is specifying the exact class of object that will be created)
This pattern separate the method to create an object so that client do not need to specify the class of object.
[expression in UML]
[sample code]
(C++)
Creational pattern.
[brief description]
This pattern provides methods to create objects which has superclass and a lot of derivatives.
[detail description]
This pattern solves the problem that other creation pattern has. (The problem is specifying the exact class of object that will be created)
This pattern separate the method to create an object so that client do not need to specify the class of object.
[expression in UML]
┌──────────┐
│ Creator │
├──────────┤
├──────────┤
│+ factoryMethod() │
│ : Product │
└──────────┘
△
│
│
┌───────┐ ┌──────────┐
│ Product │ │ CroncretCreator │
├───────┤ <------------ ├──────────┤
├───────┤ ├──────────┤
└───────┘ │+ factoryMethod() │
│ : Product │
└──────────┘
[sample code]
(C++)
#include <iostream>
#include <stdexcept>
// this class is interface of product
class Car
{
public:
virtual ~Car() {}
virtual void run() = 0;
};
// these are concret products
class SportCar
: public Car
{
public:
SportCar() { }
virtual ~SportCar() {}
virtual void run()
{
std::cout << "I'm a sport car." << std::endl;
std::cout << "I can run 300 km/h." << std::endl;
}
};
class LuxuryCar
: public Car
{
public:
LuxuryCar() { }
virtual ~LuxuryCar() {}
virtual void run()
{
std::cout << "I'm a luxury car." << std::endl;
std::cout << "You can feel very comfortable." << std::endl;
}
};
class NormalCar
: public Car
{
public:
NormalCar() {}
virtual ~NormalCar() {}
virtual void run()
{
std::cout << "I'm a normal car." << std::endl;
std::cout << "I'm a resonable price." << std::endl;
}
};
enum CarType
{
Sport,
Luxury,
Normal,
Other
};
class CarFactory
{
public:
static Car* createCar(CarType type)
{
switch (type) {
case Sport: return new SportCar();
case Luxury: return new LuxuryCar();
case Normal: return new NormalCar();
}
throw std::invalid_argument("We don't know how to make this car.");
}
};
int main(int, char**)
{
try {
Car* car1 = CarFactory::createCar(Sport);
Car* car2 = CarFactory::createCar(Luxury);
Car* car3 = CarFactory::createCar(Normal);
car1->run();
car2->run();
car3->run();
// the factory throws exception
Car* car4 = CarFactory::createCar(Other);
} catch (std::exception& e) {
std::cout << e.what() << std::endl;
}
return 0;
}
Adapter pattern
一応自分の言葉で説明できるように、自分なりの解釈を書くようにしてるので、間違いがたぶんにあると思う。
[category]
Structural pattern.
[brief description]
This pattern translates one interface for a class into compatible interface.
=> Wrapper
[detail description]
Adapter class provides interfaces to client from incompatible classes or, this is my opinion, a new interface wrapped around a simple interface such as MFC. cf) MFC wraps Windows API about C++ interface, I think, I've never used MFC... --;
[sample code]
(C++)
[category]
Structural pattern.
[brief description]
This pattern translates one interface for a class into compatible interface.
=> Wrapper
[detail description]
Adapter class provides interfaces to client from incompatible classes or, this is my opinion, a new interface wrapped around a simple interface such as MFC. cf) MFC wraps Windows API about C++ interface, I think, I've never used MFC... --;
[expression in UML]
┌───────┐
│ Adaptee │
├───────┤
├───────┤
│+ methodB() │
└───────┘
↑
│
│
┌───────┐ ┌───────┐
│ Client │──────>│ Adapter │
├───────┤ ├───────┤
│- adapter │ │- adaptee │
│ : Adapter │ │ : Adaptee │
├───────┤ ├───────┤
│+ doWork() │ │+ methodA() │
└───────┘ └───────┘
│ │
│ │
↓ ↓
┌─ doWork() ───┐ ┌─ methodA() ───┐
│ │ │ │
│ adapter.methodA() │ │ adaptee.methodB() │
│ │ │ │
└──────────┘ └──────────┘
[sample code]
(C++)
#include <iostream>
//---- this is adaptee classes for other file
struct Point
{
Point(int x_, int y_) : x(x_), y(y_) {}
int x;
int y;
};
std::ostream& operator<<(std::ostream& ost, Point p)
{
ost << "(" << p.x << "," << p.y << ")";
return ost;
}
class LinePrinter
{
public:
void printLine(Point* a, Point* b)
{
std::cout << "draw line from " << *a << " to " << *b << std::endl;
}
void printRectangle(Point* a, Point* b)
{
std::cout << "draw rectangle from " << *a << " to " << *b << std::endl;
}
};
//---- end adaptee classed
//---- these are adapter
class Shape
{
public:
Shape(int x1, int x2, int y1, int y2)
: p1(x1, y1), p2(x2, y2)
{}
virtual ~Shape() {}
virtual void draw() = 0;
protected:
void setPrinter(LinePrinter* printer_)
{
printer = printer_;
}
LinePrinter* printer;
Point p1;
Point p2;
};
class Line
: public Shape
{
public:
Line(int x1, int x2, int y1, int y2)
: Shape(x1, x2, y1, y2)
{
setPrinter(new LinePrinter());
}
virtual ~Line() {}
virtual void draw()
{
printer->printLine(&p1, &p2);
}
};
class Rectangle
: public Shape
{
public:
Rectangle(int x1, int x2, int y1, int y2)
: Shape(x1, x2, y1, y2)
{
setPrinter(new LinePrinter());
}
virtual ~Rectangle() {}
virtual void draw()
{
printer->printRectangle(&p1, &p2);
}
};
//---- end adapter
int main(int, char**)
{
Shape *line = new Line(0, 0, 10, 5);
Shape *rect = new Rectangle(0, 0, 10, 10); // must be square
line->draw();
rect->draw();
delete line;
delete rect;
return 0;
}
デザインパターンのお勉強
仕事を探す上で、どうにもデザインパターンがキーワードになるので、昔の本やら知識やらを総動員しつつ、勉強することにした。
いや、**日本語**でなら説明できるんだけど、英語と言われると難しいからなのだが。
っで、メモ帳代わりにブログを使用することにした。
なので、しばらく面白くも無い投稿が続くことになる。
いや、**日本語**でなら説明できるんだけど、英語と言われると難しいからなのだが。
っで、メモ帳代わりにブログを使用することにした。
なので、しばらく面白くも無い投稿が続くことになる。
2009-08-15
風雲たけし城
オランダのケーブルテレビのチャンネルの一つ(のが多い)、コメディーセントラルで「Takeshi's Castle」として放送された。
懐かしさのあまりテレビを占拠してみてしまったが、ダイジェスト版というか、なんというか、面白さ半減であった。(オランダ語の解説がよく分からなかったという説もある)
Wikipediaで調べてみると、この番組1986年から1989年まで放送されていたらしい。う~ん、保育園から小学校までか。
水鉄砲合戦とか、バレーボールを受け取るのとか、壁をぶち破るやつとかアトラクションを結構覚えている。
そこそこ面白かったのだが、1時間フルに放送してほしいのと、オランダ語字幕にして音声は日本語にしてほしいなぁ。
懐かしさのあまりテレビを占拠してみてしまったが、ダイジェスト版というか、なんというか、面白さ半減であった。(オランダ語の解説がよく分からなかったという説もある)
Wikipediaで調べてみると、この番組1986年から1989年まで放送されていたらしい。う~ん、保育園から小学校までか。
水鉄砲合戦とか、バレーボールを受け取るのとか、壁をぶち破るやつとかアトラクションを結構覚えている。
そこそこ面白かったのだが、1時間フルに放送してほしいのと、オランダ語字幕にして音声は日本語にしてほしいなぁ。
2009-08-09
Guitar Hero
Wii版ギターヒーローに最近はまっている。
昔ゲーセンで少しだけやった、コナミのギターフリークスとほぼ同じゲーム。
多分ギターヒーローはパクリか、OEMだろう。っが、これのすごいところはボーカル、ギター、ベース、ドラムとゲーム内でバンドが組めるところ。(全部別売りだけどね)
とりあえず、一通りの曲をクリアして、ハードに挑戦中。
使用ボタンが4つから5つになると一気にハードルが高くなる気がする。
はまる要素が結構あっておすすめ。
昔ゲーセンで少しだけやった、コナミのギターフリークスとほぼ同じゲーム。
多分ギターヒーローはパクリか、OEMだろう。っが、これのすごいところはボーカル、ギター、ベース、ドラムとゲーム内でバンドが組めるところ。(全部別売りだけどね)
とりあえず、一通りの曲をクリアして、ハードに挑戦中。
使用ボタンが4つから5つになると一気にハードルが高くなる気がする。
はまる要素が結構あっておすすめ。
2009-08-01
しばらくはまったこと
be into ではなく、troubleの意味で・・・
最近何を思ったのかC++でちょっとしたものを作ってみたりしているのだが、それではまった。
はまったコード
Java的感覚で見ると特に問題ないのだけど、C++的には意図した動作をしない。ある意味当たり前なんだけど、しばらくC++から離れていたのではまった・・・
問題h、メンバ関数children()が参照返しではなく値返しだということ。っで、append()の中でchildren()を呼び出しているので、children_に追加したくても、実際にはどこかにメモリーをリークさせながら消えていったという悲しい現実。
わざわざappend()の中でchildren()を呼ぶ必要があったかと言われると・・・
解決方法は簡単でchildren()の戻り値を「x_list&」にすればOK。
今後の備忘録のために、恥ずかしいミスをさらしておく・・・orz
最近何を思ったのかC++でちょっとしたものを作ってみたりしているのだが、それではまった。
はまったコード
class x
{
public:
typedef std::vector< x* > x_list;
x_list children() { return children_; }
void append(x* child()) { children().push_back(child); }
private:
x_list children_;
};
void do_something(x* parent, x* child)
{
x->append(child);
}
Java的感覚で見ると特に問題ないのだけど、C++的には意図した動作をしない。ある意味当たり前なんだけど、しばらくC++から離れていたのではまった・・・
問題h、メンバ関数children()が参照返しではなく値返しだということ。っで、append()の中でchildren()を呼び出しているので、children_に追加したくても、実際にはどこかにメモリーをリークさせながら消えていったという悲しい現実。
わざわざappend()の中でchildren()を呼ぶ必要があったかと言われると・・・
解決方法は簡単でchildren()の戻り値を「x_list&」にすればOK。
今後の備忘録のために、恥ずかしいミスをさらしておく・・・orz
2009-07-22
言葉の壁
I received an email offered me an job as a C# engineer. Even though, I'm not so familiar with C#, but it was still a good opportunity... if it wasn't required the one condition, fluent Dutch!
オランダ語なんてまだ挨拶程度しか話せんわ!
Goedemorgen.
Mij naam is Kei.
Aargenaam kennis te maken.
これだけでいいなら。。。
だめだよなぁ、もちろん・・・
オランダ語、そろそろ真剣に勉強しないとなぁ・・・
オランダ語なんてまだ挨拶程度しか話せんわ!
Goedemorgen.
Mij naam is Kei.
Aargenaam kennis te maken.
これだけでいいなら。。。
だめだよなぁ、もちろん・・・
オランダ語、そろそろ真剣に勉強しないとなぁ・・・
2009-07-19
Dirty Jobs
ディスカバリーチャンネルで「大人の職業体験」という邦題のTV番組(日本ではもう放送してない)
内容は、肉体労働にスポットを当ててどんな仕事なのか体験してみるというもの。結構面白く、中には本当に3Kな仕事(そもそもそれがコンセプトだと思うが)もあったりする。
コメンテータ(体験者?)が2人いて(もっといるかも)、一人はマイクロウで北米(多分アメリカだけ)担当。もう一人はピーターでヨーロッパ担当。
ちなみに、ピーターの方は日本では放送されていなかった(はず)。
番組の説明はここまでにして、本題。
---以下多少グロテスクな表現が入ります---
前回見たのに、牛の解体作業が含まれていてそれについてちと不思議に思ったので。
内容はフランスで牛の頭と内臓を解体するというもの。残りの部分は解体済みであった。
まぁ、こういってはなんだけど、結構グロい。ほぼすべての内臓がフックに引っ掛けられて解体され、冷凍保存された牛の顔の皮をはがし、脳みそを取る。こんな感じ。
個人的にはこういうのを見るのはいろんな意味で勉強になるので、特に抵抗はない。(別にグロいのが好きという意味ではない)
あと、フランス人は牛をほぼ丸ごと(すべての部位を)食べるんだということを知ってちょっと尊敬。
っで、疑問に思ったこと。
これは「Dirty Jobs(汚い仕事)」なのか?
まぁ、なりたいとかやりたい仕事ではないのでそうなのか?
う~ん・・・
タイトルは変えられない、でも仕事の紹介はしたい、といったところであると信じたい。
ちなみに、このすぐ後にやっていたフランスの下水掃除はマジで汚かった。
画面越しに臭ってきそうなぐらいに・・・
内容は、肉体労働にスポットを当ててどんな仕事なのか体験してみるというもの。結構面白く、中には本当に3Kな仕事(そもそもそれがコンセプトだと思うが)もあったりする。
コメンテータ(体験者?)が2人いて(もっといるかも)、一人はマイクロウで北米(多分アメリカだけ)担当。もう一人はピーターでヨーロッパ担当。
ちなみに、ピーターの方は日本では放送されていなかった(はず)。
番組の説明はここまでにして、本題。
---以下多少グロテスクな表現が入ります---
前回見たのに、牛の解体作業が含まれていてそれについてちと不思議に思ったので。
内容はフランスで牛の頭と内臓を解体するというもの。残りの部分は解体済みであった。
まぁ、こういってはなんだけど、結構グロい。ほぼすべての内臓がフックに引っ掛けられて解体され、冷凍保存された牛の顔の皮をはがし、脳みそを取る。こんな感じ。
個人的にはこういうのを見るのはいろんな意味で勉強になるので、特に抵抗はない。(別にグロいのが好きという意味ではない)
あと、フランス人は牛をほぼ丸ごと(すべての部位を)食べるんだということを知ってちょっと尊敬。
っで、疑問に思ったこと。
これは「Dirty Jobs(汚い仕事)」なのか?
まぁ、なりたいとかやりたい仕事ではないのでそうなのか?
う~ん・・・
タイトルは変えられない、でも仕事の紹介はしたい、といったところであると信じたい。
ちなみに、このすぐ後にやっていたフランスの下水掃除はマジで汚かった。
画面越しに臭ってきそうなぐらいに・・・
2009-07-16
携帯買った
結局日本から持ち込んだ携帯はSIMロックの解除ができなかったため(アマゾンとか見るとあるけど、日本からだと配送料が・・・)新しいのを買うことにした。
で、買ったのがLGのKP500 Cookie。
2つ候補があったなかでこっちにした。どちらもタッチパネルなのだが、なんとなくこっちの方がデザインが好きだったのと、300万画素のカメラに惹かれて。
(although it's made in korea, i hate...)
っで、とりあえず使ってみた感想。
機能性:う~ん、ボタンに慣れてる人にはちと厳しいか。反応速度が遅い。
デザイン:割とよい。結構好き。
まだ適当にかまっただけで、あまり機能をよく知らないのだが、携帯電話としてはこんなものではないかと。
問題になるとしたら2Gだろう(サイバーフォーミュラSINのアスラーダ風)
あんまり機能的な差を知らないのだが、一つ前のプロトコルを使っているというのは気になる。3G自体もうそんなに目新しくないのに。
ほぼタッチパネルというだけで選んだ感はあるが、使ってみてさほど問題なければOKだろう。そもそもヘビー携帯ユーザーというわけでもないし。
で、買ったのがLGのKP500 Cookie。
2つ候補があったなかでこっちにした。どちらもタッチパネルなのだが、なんとなくこっちの方がデザインが好きだったのと、300万画素のカメラに惹かれて。
(although it's made in korea, i hate...)
っで、とりあえず使ってみた感想。
機能性:う~ん、ボタンに慣れてる人にはちと厳しいか。反応速度が遅い。
デザイン:割とよい。結構好き。
まだ適当にかまっただけで、あまり機能をよく知らないのだが、携帯電話としてはこんなものではないかと。
問題になるとしたら2Gだろう(サイバーフォーミュラSINのアスラーダ風)
あんまり機能的な差を知らないのだが、一つ前のプロトコルを使っているというのは気になる。3G自体もうそんなに目新しくないのに。
ほぼタッチパネルというだけで選んだ感はあるが、使ってみてさほど問題なければOKだろう。そもそもヘビー携帯ユーザーというわけでもないし。
2009-07-02
サイバーフォーミュラ?
GT-Rという車のことである。
説明の必要も無いくらい有名だとは思うが、一応。
日産から出ているスポーツカーで無駄に性能が高い、以上。
っで、なぜサイバーフォーミュラなんて言っているかと言うと、2009年に発売されたVスペックと呼ばれる1500万以上の車にはブーストが付いているのだ!!
単にターボ車というだけではなく、一定の条件を満たすとブーストボタンが押せるらしい。
詳しくはここ
これで、水素エンジンと変形システム、サイバーシステムが追加されたら実写版サイバーフォーミュラの出来上がり。
個人的には狙って作ったと思われるけど、どうだろう?
説明の必要も無いくらい有名だとは思うが、一応。
日産から出ているスポーツカーで無駄に性能が高い、以上。
っで、なぜサイバーフォーミュラなんて言っているかと言うと、2009年に発売されたVスペックと呼ばれる1500万以上の車にはブーストが付いているのだ!!
単にターボ車というだけではなく、一定の条件を満たすとブーストボタンが押せるらしい。
詳しくはここ
これで、水素エンジンと変形システム、サイバーシステムが追加されたら実写版サイバーフォーミュラの出来上がり。
個人的には狙って作ったと思われるけど、どうだろう?
2009-07-01
シャワー
配水管から水漏れするので、修理を依頼している。っで、乾かすのに2日必要と言われシャワーが浴びれない・・・
髪は気合で洗ってはいるのだが、さすがに夏場にこの仕打ちはきつい。
日本(の夏は1年くらい経験していないが)と比べれば気温は低めなのだが、26度くらい、それでも暑い。
んでもってシャワー浴びれないので汗が・・・うぅ、臭ってるかも・・・
明日までの我慢・・・
髪は気合で洗ってはいるのだが、さすがに夏場にこの仕打ちはきつい。
日本(の夏は1年くらい経験していないが)と比べれば気温は低めなのだが、26度くらい、それでも暑い。
んでもってシャワー浴びれないので汗が・・・うぅ、臭ってるかも・・・
明日までの我慢・・・
2009-06-29
クッキー
アメリカのお土産でいくつかクッキーを買ってきた。
といっても、生地の状態なので自分で焼く必要がある。
っで、冷蔵庫のスペースの関係上焼くことにした。
適当に形を作ってオーブンで10分~14分。
・・・
・・・・・・
・・・・・・・・・
クッキーって焼くと3倍くらいに膨れ上がるものだっけ?
まぁ、気にせずにとりあえず試食。
味は、イメージしていたものよりは甘くないが、とってもオイリー・・・
一日に1枚以上は食べれそうにない。
といっても、生地の状態なので自分で焼く必要がある。
っで、冷蔵庫のスペースの関係上焼くことにした。
適当に形を作ってオーブンで10分~14分。
・・・
・・・・・・
・・・・・・・・・
クッキーって焼くと3倍くらいに膨れ上がるものだっけ?
まぁ、気にせずにとりあえず試食。
味は、イメージしていたものよりは甘くないが、とってもオイリー・・・
一日に1枚以上は食べれそうにない。
2009-06-27
GCC 4.4.0
コンパイラである。
最新の4.4.0がMingwから出たので、インストールしてみた。
バージョン4以降からはC++0xの実装が試験的に行われている(らしい)ので、ちょっとその辺を触ってみたかったのと、そろそろ感を取り戻しとかないとなぁという焦りからだったりはする。
ちなみにここから
MinGW
インストール自体は難しいことはないので難なくクリア。Msys自体は前にもかまったことあるしね。
っで、「Hello World」(単にコンパイラの動作確認)もクリア。
問題はここから。
正規表現がBoostを使わなくてもできるようになっているはずなので、それをやってみようと思ったのだが、どうもうまくいかな。
単に「-std=c++0x」オプションを付けたら、swprintfとvswprintfが無いといわれ探す。んで、ヘッダファイル(stdio.h)を見て「-ansi」オプションが付いたら除外されていることにたどり着き、「-std=gnu++0x」に変更。
正確には厳しく標準に従うと除外されるということみたい。安全じゃないから。
(しかし、いいのかこれ?明らかにコンパイラのバグな気がするのだが・・・。まだ標準化されてないとはいえ、準拠してないってことだよなぁ・・・)
そしたら、今度はリンカでこける。どうも正規表現周りのオブジェクトがないらしい。
格闘すること数時間、未だに解決方法が見つからない・・・
う~ん・・・
おとなしくBoost入れた方が早いかな・・・
ライブラリも豊富だし・・・
最新の4.4.0がMingwから出たので、インストールしてみた。
バージョン4以降からはC++0xの実装が試験的に行われている(らしい)ので、ちょっとその辺を触ってみたかったのと、そろそろ感を取り戻しとかないとなぁという焦りからだったりはする。
ちなみにここから
MinGW
インストール自体は難しいことはないので難なくクリア。Msys自体は前にもかまったことあるしね。
っで、「Hello World」(単にコンパイラの動作確認)もクリア。
問題はここから。
正規表現がBoostを使わなくてもできるようになっているはずなので、それをやってみようと思ったのだが、どうもうまくいかな。
単に「-std=c++0x」オプションを付けたら、swprintfとvswprintfが無いといわれ探す。んで、ヘッダファイル(stdio.h)を見て「-ansi」オプションが付いたら除外されていることにたどり着き、「-std=gnu++0x」に変更。
正確には厳しく標準に従うと除外されるということみたい。安全じゃないから。
(しかし、いいのかこれ?明らかにコンパイラのバグな気がするのだが・・・。まだ標準化されてないとはいえ、準拠してないってことだよなぁ・・・)
そしたら、今度はリンカでこける。どうも正規表現周りのオブジェクトがないらしい。
格闘すること数時間、未だに解決方法が見つからない・・・
う~ん・・・
おとなしくBoost入れた方が早いかな・・・
ライブラリも豊富だし・・・
2009-06-26
ビザ
ついにビザを取得。1年間の期限付きだけど(次回更新で5年、さらに次で永久になる)。
これで強制送還におびえながら過ごすということはなくなった。
さて、次は職探しか・・・
システムエンジニアは不足してる(という話)から、すぐに見つかる(という気休め)と信じて。まぁ、不足してる理由が日本と同じだったら最悪ではあるが・・・
履歴書を更新しないとなぁ。
これで強制送還におびえながら過ごすということはなくなった。
さて、次は職探しか・・・
システムエンジニアは不足してる(という話)から、すぐに見つかる(という気休め)と信じて。まぁ、不足してる理由が日本と同じだったら最悪ではあるが・・・
履歴書を更新しないとなぁ。
2009-06-08
オーランドについて
滞在期間も一週間を超えたし、とりあえず観光情報でも書いてみようかと。役に立つかは分からんけどね。
とりあえず経験したことを元にするので、すべてが正しいわけではない。間違ってても責任は取らない。
気候:5月の終わりから6月の初旬にかけては日本の7月から8月くらいの気温。ただし雨が台風並みに降るので体感気温の差は激しい。半そで短パンで出かけて雨が降ったら寒いということもしばしば。
交通手段:バスが主。レンタカーを借りることを強くお勧めする。が、フロリダ州の交通マナーはアメリカ一悪い(らしい。僕はそう思う)ので心臓の弱い人にはお勧めしない。あと右側通行なのと、赤信号で右折できるので注意(例外もあるが)。
お勧め滞在場所:インターナショナルドライブ(International Drive)がいろんなアミューズメントパークが近いし、レストラン等もありお勧め。車で10分くらいの位置にユニバーサルスタジオ、シーワールド、Wet'n Wild、アクアティカ、ディズニーがある。どれも大きいが(面積)、特にディズニーは巨大なのでディズニーにだけ行くだけの3泊4日旅行とかならディズニーの近くでもいいかも。周りに何も無いけど。ただし、ダウンタウンからは遠いので(30マイル以上?)ダウンタウンをメインに見たい人はやめた方が無難(いるのかそんな人?)
行ってみるといいかも:ユニバーサルスタジオはお勧め。あとシーワールドからシャトルバスが出ているブッシュガーデンもいい感じだった。シーワールドは全部周りきれてないけど、体験型水族館みたいな感じ。イルカのショーは一見の価値あり。ディズニーは行く気も起きないくらい広い(ので行ったことない)。Wet'n Wild、アクアティカはプール。どっちも外から見ただけだが、アクアティカの方が面白そう。
食べ物:探せばいろいろある。日本食は期待しない方がいい。典型的なアメリカの食事は取らない方が健康にはいい、が、朝食のビュッフェとかは結構いい。基本外食は高めなので、長期の滞在(二週間以上)なら自炊できるホテル探してWall Martで食材買って節約してもいいかも。
時期的には5月末から6月初旬はベストな気がする。本格的に長期休暇が始まる前なので観光客が少なめで、どこのテーマパークに行っても待ち時間が少なめでいける。ただ、そんな時期に休みの取れる日本の企業はほぼないと思う。テーマパークの数とか考えると少なくとも1週間は滞在期間がほしいところ。ディズニーに行くなら倍はほしい。
余談だが、アメリカに限らず日本国外のバス、電車のスケジュールは書いてるだけと思った方がいい。レンタカーを借りずにバス、電車(乗ったこと無いが)で行くというなら心に留めておいた方がいいかも。
とりあえず経験したことを元にするので、すべてが正しいわけではない。間違ってても責任は取らない。
気候:5月の終わりから6月の初旬にかけては日本の7月から8月くらいの気温。ただし雨が台風並みに降るので体感気温の差は激しい。半そで短パンで出かけて雨が降ったら寒いということもしばしば。
交通手段:バスが主。レンタカーを借りることを強くお勧めする。が、フロリダ州の交通マナーはアメリカ一悪い(らしい。僕はそう思う)ので心臓の弱い人にはお勧めしない。あと右側通行なのと、赤信号で右折できるので注意(例外もあるが)。
お勧め滞在場所:インターナショナルドライブ(International Drive)がいろんなアミューズメントパークが近いし、レストラン等もありお勧め。車で10分くらいの位置にユニバーサルスタジオ、シーワールド、Wet'n Wild、アクアティカ、ディズニーがある。どれも大きいが(面積)、特にディズニーは巨大なのでディズニーにだけ行くだけの3泊4日旅行とかならディズニーの近くでもいいかも。周りに何も無いけど。ただし、ダウンタウンからは遠いので(30マイル以上?)ダウンタウンをメインに見たい人はやめた方が無難(いるのかそんな人?)
行ってみるといいかも:ユニバーサルスタジオはお勧め。あとシーワールドからシャトルバスが出ているブッシュガーデンもいい感じだった。シーワールドは全部周りきれてないけど、体験型水族館みたいな感じ。イルカのショーは一見の価値あり。ディズニーは行く気も起きないくらい広い(ので行ったことない)。Wet'n Wild、アクアティカはプール。どっちも外から見ただけだが、アクアティカの方が面白そう。
食べ物:探せばいろいろある。日本食は期待しない方がいい。典型的なアメリカの食事は取らない方が健康にはいい、が、朝食のビュッフェとかは結構いい。基本外食は高めなので、長期の滞在(二週間以上)なら自炊できるホテル探してWall Martで食材買って節約してもいいかも。
時期的には5月末から6月初旬はベストな気がする。本格的に長期休暇が始まる前なので観光客が少なめで、どこのテーマパークに行っても待ち時間が少なめでいける。ただ、そんな時期に休みの取れる日本の企業はほぼないと思う。テーマパークの数とか考えると少なくとも1週間は滞在期間がほしいところ。ディズニーに行くなら倍はほしい。
余談だが、アメリカに限らず日本国外のバス、電車のスケジュールは書いてるだけと思った方がいい。レンタカーを借りずにバス、電車(乗ったこと無いが)で行くというなら心に留めておいた方がいいかも。
2009-06-02
ユニバーサルスタジオ
行ってきた。
日本のではない。フロリダのである。
とはいっても、僕がすごく早い時間にへたばったので、あまり回ってはいないが。
(シンプソンズのアトラクションみたいなのが決定的だった。コーヒーカップ並みのひどさ・・・)
写真はない。当然(T_T)
まぁ、とにかく広い。アトラクションのパートとスタジオのパートが別れていて、(ひょっとしたらもっとあるかもしれん)、それぞれをつなぐ部分もとにかく広い。歩いてのどが渇いてってどこぞのディズニーランドを思い出させるような商法かとマジで考えてしまった。(ちなみに、フロリダのディズニーは地図で見たところによると街が一つ入りそうな広さだった・・・行ったことない、行きたくない・・・)
しかし、一角はオランダ語で周りは英語、頭の中は日本語だとさすがに頭が疲れる・・・疲れの原因はこれだろうか・・・(単純に体力不足だとは思うけど。暑いしここ)
日本のではない。フロリダのである。
とはいっても、僕がすごく早い時間にへたばったので、あまり回ってはいないが。
(シンプソンズのアトラクションみたいなのが決定的だった。コーヒーカップ並みのひどさ・・・)
写真はない。当然(T_T)
まぁ、とにかく広い。アトラクションのパートとスタジオのパートが別れていて、(ひょっとしたらもっとあるかもしれん)、それぞれをつなぐ部分もとにかく広い。歩いてのどが渇いてってどこぞのディズニーランドを思い出させるような商法かとマジで考えてしまった。(ちなみに、フロリダのディズニーは地図で見たところによると街が一つ入りそうな広さだった・・・行ったことない、行きたくない・・・)
しかし、一角はオランダ語で周りは英語、頭の中は日本語だとさすがに頭が疲れる・・・疲れの原因はこれだろうか・・・(単純に体力不足だとは思うけど。暑いしここ)
2009-05-30
water
何故かフロリダ州オーランドにいたりする。アメリカである。バケーションらしい。連行されてきた・・・
(ちなみに証拠になるものはない。携帯のカメラが使えなくなったので・・・悪名高いネットワーク自動調整のせいだ)
さて本題。標題の英単語はどのように発音しますか?いや、中学生でも分かるってバカにしたでしょ?バカにした人は是非読んでほしいなぁと。意図があっという間に汲み取れてしまった人は飛ばしてください。
カタカナで発音を書くのは好きではないのだけど、それはおいておいて。
1.ウォータ
2.ワター
どっちが正解でしょうか?アクセントは最初に置いてね(伸ばし棒は重要な要素です)
・・・
・・・・・・
・・・・・・・・・
答えはどっちもなんですね(たぶん)。違いは英語と米語(あえてこう書いてみた。要はブリティッシュかアメリカンかの違い・・・と思う)
ここで終わると何も面白くない。こんなことを書いているということはなんらかネタになるような出来事があったということだ。
話はヒューストンからオーランドに移動する際の飛行機の中で起きた。飛行機と言えばフライトアテンダント(男だったよ・・・orz)が飲み物を運んできてくれる。アメリカだし、まぁ、英語だわね。
ア「何がほしい?」
俺「ウォータ、Please」
ア「何?」
俺「ウォータ」
アテンダントが理解できないでいると、隣の人が
「ワター。me too」
っで、水が出てきた。
僕の発音が余りに下手だったのか、まったく別の単語に聞こえたからなのかは分からんが、理解されなかったという話。(オランダでは普通に通じてるから発音があまりにという選択肢は消したいところだ・・・隣の人も分かってくれたみたいだし・・・)
そういえば最近は英語と言えばブリティッシュしか聞いてなかったから、(オランダでは英国のTVがオランダ語字幕付きで流れていたりするのです)その影響だろうか・・・と信じたいところだ。
(ちなみに証拠になるものはない。携帯のカメラが使えなくなったので・・・悪名高いネットワーク自動調整のせいだ)
さて本題。標題の英単語はどのように発音しますか?いや、中学生でも分かるってバカにしたでしょ?バカにした人は是非読んでほしいなぁと。意図があっという間に汲み取れてしまった人は飛ばしてください。
カタカナで発音を書くのは好きではないのだけど、それはおいておいて。
1.ウォータ
2.ワター
どっちが正解でしょうか?アクセントは最初に置いてね(伸ばし棒は重要な要素です)
・・・
・・・・・・
・・・・・・・・・
答えはどっちもなんですね(たぶん)。違いは英語と米語(あえてこう書いてみた。要はブリティッシュかアメリカンかの違い・・・と思う)
ここで終わると何も面白くない。こんなことを書いているということはなんらかネタになるような出来事があったということだ。
話はヒューストンからオーランドに移動する際の飛行機の中で起きた。飛行機と言えばフライトアテンダント(男だったよ・・・orz)が飲み物を運んできてくれる。アメリカだし、まぁ、英語だわね。
ア「何がほしい?」
俺「ウォータ、Please」
ア「何?」
俺「ウォータ」
アテンダントが理解できないでいると、隣の人が
「ワター。me too」
っで、水が出てきた。
僕の発音が余りに下手だったのか、まったく別の単語に聞こえたからなのかは分からんが、理解されなかったという話。(オランダでは普通に通じてるから発音があまりにという選択肢は消したいところだ・・・隣の人も分かってくれたみたいだし・・・)
そういえば最近は英語と言えばブリティッシュしか聞いてなかったから、(オランダでは英国のTVがオランダ語字幕付きで流れていたりするのです)その影響だろうか・・・と信じたいところだ。
2009-05-20
話しかけられた
Leiden Centraal駅に7時。
迎えに行く時間のことである。迎えに行くといっても徒歩なので、まぁ一緒に帰る程度のことなのだが。
日課になっていることなので、どれくらいの時間がかかるかは大体把握している。10分くらいだ。いつもどおり15分前に家を出て、MP3で音楽聴きながら駅で待っていたとき、おじいさんに突如話しかけられた。
「‘!#$@* zing wel:@!&」
オランダ語で話されてもなぁ・・・ん?sing well?
英語ではないのだが、オランダ語と英語は結構似た単語が多い。どうやら待っているときに歌っていた鼻歌がマジ歌に変わりつつあったみたいだ・・・
とりあえず、ありがとうと行っておいたら、どうやら英語話者だと気づいたらしく、英語に切り替わった!?
以下会話抜粋
おじいさん(以下お)「歌手か?」
自分(以下じ)「ちがう」
お「趣味か?」
じ「そうだ」
お「うまいな。日本から来たのか?」
じ「そうだ」
お「勉強か?」
じ「違う、ライデンに住んでるんだ」
お「そうか。古い町だから何も退屈だろう」
---以下続く---
結局待ち人が来るまで続いた。しかし、自分の返事は短いのしかないな・・・orz
突如話しかけられて井戸端会議をしたのはこれが始めてである。ホームレスに金をせびられたことは多々あるが・・・
何があの老人を刺激したのか分からんが、日本語かな?、ちょっと面白い体験ではあった。
迎えに行く時間のことである。迎えに行くといっても徒歩なので、まぁ一緒に帰る程度のことなのだが。
日課になっていることなので、どれくらいの時間がかかるかは大体把握している。10分くらいだ。いつもどおり15分前に家を出て、MP3で音楽聴きながら駅で待っていたとき、おじいさんに突如話しかけられた。
「‘!#$@* zing wel:@!&」
オランダ語で話されてもなぁ・・・ん?sing well?
英語ではないのだが、オランダ語と英語は結構似た単語が多い。どうやら待っているときに歌っていた鼻歌がマジ歌に変わりつつあったみたいだ・・・
とりあえず、ありがとうと行っておいたら、どうやら英語話者だと気づいたらしく、英語に切り替わった!?
以下会話抜粋
おじいさん(以下お)「歌手か?」
自分(以下じ)「ちがう」
お「趣味か?」
じ「そうだ」
お「うまいな。日本から来たのか?」
じ「そうだ」
お「勉強か?」
じ「違う、ライデンに住んでるんだ」
お「そうか。古い町だから何も退屈だろう」
---以下続く---
結局待ち人が来るまで続いた。しかし、自分の返事は短いのしかないな・・・orz
突如話しかけられて井戸端会議をしたのはこれが始めてである。ホームレスに金をせびられたことは多々あるが・・・
何があの老人を刺激したのか分からんが、日本語かな?、ちょっと面白い体験ではあった。
2009-05-16
RAM Disk
パソコンのメモリーを2Gに増設した。特に不自由を感じてはいなかったのだが、いろいろなことのついでというやつである。
っで、単純に増やしただけだとどうせ体感はないのでということでいろいろやってみた。まず、今まで最大でもメモリ使用量は物理+仮想でも1Gだったので、まぁページファイルはいらんだろうと消してみた。体感はそこそこといったところか?Firefoxとかちょっと速くなったイメージ。
次に、RAM Diskなるものを試してみることにした。ページファイルが本当にいらないかどうか確認していたときに偶然見つけたものだが・・・
RAM Diskって何?と最初に思ったのだが要するにRAM(メモリーのこと)上にある領域をハードディスクのように扱う技術みたい。有名な話で32bitのCPUにはメモリー4Gの壁があって、それ以上は認識してくれないのだが、この技術を使えばOSが認識する4Gのメモリー以外のあまりメモリーが超高速で動く実ディスクのようになるので、メモリーの有効活用ができる、というもの。なのだが、折角増設したし、どうせ1G以上メモリー使うことなんて無いだろうので、1GをOS用、残りをRAM Diskにしてみた。
やり方とかは適当にGoogle先生に聞いてもらえばいいと思う。興味があればだが。
っで、結果だが。とりあえず、使えそうなのはインターネット関連のキャッシュとか、プリントスプーラーのキャッシュなどの一時ファイルくらいかな。いろいろ頑張れば(バックアップようのバッチを組み込むとか)プロファイルとかでも置けそうだけど容量は所詮1Gだし、まぁ一時領域が無難かと。
(理由を説明する必要は無いと思うけど、いわゆる主記憶と呼ばれるメモリーは高速で揮発性のものなので、電源落とすとデータが壊れるんです。なので長期保存用のデータとかは置けないの)
でも、ネットのキャッシュをオンメモリーにしたら格段に速くなった。ちょっと増設した甲斐があったかな。
っで、単純に増やしただけだとどうせ体感はないのでということでいろいろやってみた。まず、今まで最大でもメモリ使用量は物理+仮想でも1Gだったので、まぁページファイルはいらんだろうと消してみた。体感はそこそこといったところか?Firefoxとかちょっと速くなったイメージ。
次に、RAM Diskなるものを試してみることにした。ページファイルが本当にいらないかどうか確認していたときに偶然見つけたものだが・・・
RAM Diskって何?と最初に思ったのだが要するにRAM(メモリーのこと)上にある領域をハードディスクのように扱う技術みたい。有名な話で32bitのCPUにはメモリー4Gの壁があって、それ以上は認識してくれないのだが、この技術を使えばOSが認識する4Gのメモリー以外のあまりメモリーが超高速で動く実ディスクのようになるので、メモリーの有効活用ができる、というもの。なのだが、折角増設したし、どうせ1G以上メモリー使うことなんて無いだろうので、1GをOS用、残りをRAM Diskにしてみた。
やり方とかは適当にGoogle先生に聞いてもらえばいいと思う。興味があればだが。
っで、結果だが。とりあえず、使えそうなのはインターネット関連のキャッシュとか、プリントスプーラーのキャッシュなどの一時ファイルくらいかな。いろいろ頑張れば(バックアップようのバッチを組み込むとか)プロファイルとかでも置けそうだけど容量は所詮1Gだし、まぁ一時領域が無難かと。
(理由を説明する必要は無いと思うけど、いわゆる主記憶と呼ばれるメモリーは高速で揮発性のものなので、電源落とすとデータが壊れるんです。なので長期保存用のデータとかは置けないの)
でも、ネットのキャッシュをオンメモリーにしたら格段に速くなった。ちょっと増設した甲斐があったかな。
2009-05-14
誕生日
もちろん僕のではない。知っている人は知っているあの人のである。
オランダでの誕生日はちょっと変わっている。と僕が感じただけなのかもしれないが・・・
どうやら祝ってもらうものではなく、祝うものみたい。意味が分からない?日本だと誕生日に誰かが何かしてくれるのだが、こっちでは違う。職場で誕生日の人がいたら、ケーキを持っていくのはその人。もちろん、プレゼントはもらえるみたいなのだが、祝ってもらうより、今日はめでたい日だから一緒に祝いましょう!みたいな感じ。
っが、それだけだと怒られてしまうので、きちんと祝いました。ちょっと手の込んだ夕食と、シュークリーム(すべて手作り)を作って。まぁ、そこそこ喜んでもらえたみたいではあるので、よしとする。
そういえば、職場に持って行った寿司も僕が作ったなぁ・・・
好評だったらしいからまぁいいか・・・
オランダでの誕生日はちょっと変わっている。と僕が感じただけなのかもしれないが・・・
どうやら祝ってもらうものではなく、祝うものみたい。意味が分からない?日本だと誕生日に誰かが何かしてくれるのだが、こっちでは違う。職場で誕生日の人がいたら、ケーキを持っていくのはその人。もちろん、プレゼントはもらえるみたいなのだが、祝ってもらうより、今日はめでたい日だから一緒に祝いましょう!みたいな感じ。
っが、それだけだと怒られてしまうので、きちんと祝いました。ちょっと手の込んだ夕食と、シュークリーム(すべて手作り)を作って。まぁ、そこそこ喜んでもらえたみたいではあるので、よしとする。
そういえば、職場に持って行った寿司も僕が作ったなぁ・・・
好評だったらしいからまぁいいか・・・
2009-05-08
ジム
量産型のことではない。
最近お腹周りが気になるので、ジムに行っている。メタボというほどではないが「軽くやばい」状態なので・・・(T_T)
今月に入ってから行き始めたのだが、すでに筋肉痛。ちなみにまだ2回しか行っていない。
場所はライデンの南西。ジムの名前は知らない。地名すらもよく分からん・・・13番のバスに乗って適当な場所で降りる。Shellの横に併設されているので、まぁ分かりやすい。
費用は1回7ユーロ、40ユーロ払うと1ヶ月フリー。ちなみに年間会員になると月28ユーロなのだが、そこまでジムに行くとは思えないのでパス。これが高いのか安いのかは日本のジムに行ったことが無いのでよく分からない。(ちなみに今は1ユーロ=133円)
今月中にはお腹周りを何とかしたいなぁ・・・
最近お腹周りが気になるので、ジムに行っている。メタボというほどではないが「軽くやばい」状態なので・・・(T_T)
今月に入ってから行き始めたのだが、すでに筋肉痛。ちなみにまだ2回しか行っていない。
場所はライデンの南西。ジムの名前は知らない。地名すらもよく分からん・・・13番のバスに乗って適当な場所で降りる。Shellの横に併設されているので、まぁ分かりやすい。
費用は1回7ユーロ、40ユーロ払うと1ヶ月フリー。ちなみに年間会員になると月28ユーロなのだが、そこまでジムに行くとは思えないのでパス。これが高いのか安いのかは日本のジムに行ったことが無いのでよく分からない。(ちなみに今は1ユーロ=133円)
今月中にはお腹周りを何とかしたいなぁ・・・
Subscribe to:
Posts (Atom)

