Syntax highlighter

2007-05-28

ショック

ZARDの坂井泉水が亡くなったそうだ。
好きなアーティストが急死するのはショックが大きい。
そのニュースを見るまで、入院してるということさえ知らなかった・・・
中学、高校のときによく聞いてたなぁ。
事故死ということだけど、なんだかやるせない・・・

そういえば、松岡農林水産大臣も自殺したとか。
なんだかんだで糾弾されていたのが堪えたんだろうなぁ。
辞任してればこうはならなかったのかも。
でも、悪いけどこの人はぜんぜん悲しくないなぁ。
5000円の水をたらふく飲んだんだ、まぁ、本望だろうて。

2007-05-23

低体温

今日の朝の話。
昨日頭痛がひどくて、早めに寝たのだが、
朝起きるとなんだか体が上手く動かない。
風邪のだるさではないんだけど、なんか動きが鈍いというか、
起き上がれないというか、力が入らない。
一応熱を測るかと思い、気力を振り絞って体温計を取って、
熱を測ってみた。
数字の増え方から、やはり熱はないと分かったのだが、
明らかに増え方が少ない。
ぜんぜんあがらないなぁと思いながら終わって覗き込むと、

35.3度!!

おいおい、どんなだよ。
平熱は低い方だけど、そこから1度近く低いぞ。
体が動かない理由が熱があるからではなく、
熱がないからだとは思わなかった。

2007-05-18

逆メタボリックシンドローム?

会社で健康診断があった。
まぁ、普通の健康診断で、身長体重、尿検査、視力聴力、
血圧、心電図、問診、採血、レントゲン、んで腹囲測定ってのがあった。
腹囲?なんでだろうと思ったのだが、
最近流行のメタボリックシンドロームの検査らしい。
最近計ってなかったから、太くなっていたらどうしようと思いつつ、
測定結果を覗き込む。
おや?穿くズボンがない?
結果はメタボリックシンドロームとは縁遠い数字。
それどころか、むしろ逆メタボリックではと思うくらいだった。
一人暮らしをはじめて、さらに細くなったか・・・
栄養失調かな・・・orz

2007-05-07

クラスのエクスポート

残業中です。
こんなことしてていいのかと思いつつ、立会いのみで暇だからいいかとも思いつつ。

cygwinでlibltdlを利用してモジュールを明示的に読み込むプログラムを作っていたのだが、
ロードした直後でAbortするという現象に悩まされていた。
いまいち原因がわからないままいろいろ試したのだが、どうも解決しない。
ということでgoogle先生に尋ねてみたら、このページが見つかった。
http://www2s.biglobe.ne.jp/~ragnarok/program/win32/class_of_cpp_in_dll.htm
どうやら、インターフェースを作って、呼び出しを別メソッドでやる必要があるらしい。
結構面倒だなと思いつつ、今あるモジュールの皮(インターフェースのこと)を作ってやり、
生成メソッドを作って動かしてみた。
おや、意外とうまくいくもんだね。
よくやるEXPORTマクロとか定義しなくてもいいみたい。ふ~ん。
戻り値と引数はプリミティブにしろだと!無理!バイナリ互換性などいらんわ!
ただ、いろいろやっているので、cygwin1.dllをなくすのは無理っぽい。
う~ん、Windowsコンソールアプリとして動いてほしいんだが・・・
やりたいこととしてはJavaのリフレクションみたいなことがやりたいんだけど、
ネイティブ吐く言語では難しいのかね。
plugin形式が精一杯かな・・・

2007-04-30

手抜き煮込みハンバーグ

ひき肉があったので、ハンバーグを作ろうと思ったのだが、
ソースを作るのが面倒なので煮込んでみることにした。
これがかなり旨かったので、レシピ。
手抜きなのでレシピも手抜き。

【材料(1個分)】
・ひき肉 ・・・ 100gくらい
・黒コショウ ・・・ 適当
・しょうが ・・・ 少々
・パン粉 ・・・ 一掴みくらい
・シナモン ・・・ 適量
・にんにく ・・・ 1片
・ケチャップ ・・・ 結構いるかも
・サラダ油 ・・・ 適量

【作り方】
ひき肉、黒コショウ、しょうが(摩り下ろすかみじん切り)、パン粉、シナモンを混ぜて、
ハンバーグを作る。
このとき気合を入れてこねた方がいいかもしれない。
フライパンを熱して油を注ぎ、みじん切りにしたにんにくをいれ、香りをつける。
ハンバーグをフライパンにいれ、両面に軽く焼き色をつける。
水をコップに半分よりちょっと多いくらい注ぎ、ケチャップを水と同量くらい入れる。
コショウ、シナモンで香りをつけ、弱火で5分煮込む。
ハンバーグをひっくり返してもう5分煮込む。
できあがり。

中が赤かったらレンジでチンする。

かなり香りがよく、旨かった。

2007-04-29

テリヤキバーガー?

モスのテリヤキバーガーが新しくなったというCMをみたので、
行ってみた。
っで、感想。
ちなみに、感想を書くということは単にうまいとかではない。
ネタになるようなことがあったということだ。
不要な前置きも書いてみた。

テリ「なし」バーガーの間違いだった。
んでもって、肉がシャリっていった。
さらに、バニラシェイクを頼んだのに、ほんのりコーヒー風味だった。
3品(チキンバーガー、テリヤキバーガー、バニラシェイク)のうち、
まとものだったのは1品だけってどうよ(怒)
そこのモスは結構利用しているのだが、初めての経験だった。
バイトのに~ちゃんが慣れていなかっただけだと思いたい。

モスに行くときはたいてい信用してもいいと思うが、
たまにこんなこともあると用心した方がいいかもしれない。

2007-04-20

ftpクライアント

仕事で日次業務があるのだが、
これを簡便化しようかと思って、プログラムを組んでた。
そしたら、どうしてもFTPでファイルを取得しないといけなくて、
system関数使って取得するのも癪だなぁと思い、
FTPクライアントを実装してみることにした。

まぁ、FTPの実装なんて簡単だろうと思ってたんだけど、
(サンプルも結構あるし)
意外や意外、難しかった。
getはFTPサーバからのメッセージを
クライアント側で受け取り用サーバを立てて読み取ればいいんだけど、
(日本語おかしいな)
putがどうも上手くいかない。
STORコマンドをサーバに送信すると、
確かにサーバ側にファイルは作成されているんだけど、
どうもファイルの中身がない。
おかしいなぁと思って試行錯誤するが上手くいかない。
(具体的には、サーバに対してソケットであれこれ送ってみた)
どうも、サーバ側のファイルに対して直接書き込む必要があるなぁと思いつつ、
さすがにギブアップと思って、
GNUのinetutilsの実装を見てびっくり。
fdopen使ってるよ!!
そっか、UNIXはソケットもファイルディスケットもいっしょだっけ。
とりあえずcygwinだから真似たら動いたけど、
Windowsにどうやって移植するんだろ?

とりあえず、へなちょこながら、C++っぽいFTPクライアントができた。
特徴は、streamを使って送受信できることかな。
多分、get(const string& file, std::ostream& out)のインターフェースは便利なはず。
(ってか、これがほしかっただけなんだけどね、余計な分まで実装しちゃった)

体罰

大田総理である。
今日は体罰を認める認めないの議論をしていた。
結果は反対多数で否決だったが、気に入らない点がかなりあった。

・自分では解決方法を提示しない
 → 議論の基本かも知れないが、さすがにあそこまで逃げの姿勢を出すのはいかがなものか。
・学校=学問をするところ
 → そうかもしれないが、小中学校は義務「教育」機関なので、イコールではないと思う。
・学問と暴力は相反するものである
 → 議論してれば、言葉の「暴力」もあるよなぁ。
・そもそも、体罰=暴力とされていた
 → 体罰は罰則のであって、イコールとするのはいかがかなものかと。

実際のところ、手段として完全禁止にするのはやっぱりどうかなぁ。
言って聞かないガキなんざ本当に山ほどみた。
それを何とかするのが教育なのかもしれんが、
殴られた痛みを知るには、殴られる必要があると思う。
「学問」では「経験」は教えられんと思う。
ま、まずは保護者をなんとかしないといけないんだろうね。
「先生にぶたれた~」と言って、
「あんたが悪いことしたんでしょ」って言う親を持つ僕。
今思えばそれが正しい姿なんだろう。

2007-04-15

なければ作る

散々ネットを探したが、
STLコンパチの可変長配列コンテナなんてなかった。
そりゃ、そんなもの必要ないからね。
STL使ってりゃいいし。
VCならMFCやらATLやらに付属してるCArrayとか使えばいいし。
両方の選択肢がないってのが珍しいと思う。

ならしょうがない、自分でつくる。
(本当はなにか回避策があったのかもしれないが・・・)
ということで出来上がったコードがこれ。

#pragma once

class Exception
{
public:
Exception(const CString& msg)
: message(msg)
{}
const CString what() const
{
return message;
}
private:
CString message;
};

template< class T >
struct Node
{
typedef Node< T > Element;
typedef T value_type;
value_type data;
Element* next;
Element* prev;

Node(value_type value)
: data(value), next(0), prev(0)
{ }
};

template< class T >
class iterator
{
public:
typedef T NodeT;
typedef typename NodeT::value_type value_type;

explicit iterator(NodeT* src)
: entity(src)
{}

iterator< NodeT >& next()
{
entity = entity->next;
return *this;
}

iterator< NodeT >& prev()
{
entity = entity->prev;
return *this;
}

iterator< NodeT >& operator++()
{
return next();
}
iterator< NodeT > operator++(int)
{
return next();
}

iterator< NodeT >& operator--()
{
return prev();
}
iterator< NodeT > operator--(int)
{
return prev();
}

value_type operator*() const
{
return entity->data;
}

value_type* operator->() const
{
return &(entity->data);
}

iterator< NodeT >& operator+=(int index)
{
for (int i = 0; i < index; i++) {
(*this)++;
}
return *this;
}

iterator< NodeT > operator+(int n) const
{
NodeT *buf = entity;
for (int i = 0; i < n; i++) {
buf = buf->next;
}
return iterator(buf);
}

bool operator==(const iterator< NodeT >& rhs) const
{
return this->entity == rhs.entity;
}

bool operator!=(const iterator< NodeT >& rhs) const
{
return !(*this == rhs);
}

NodeT* getEntity() const
{
return entity;
}
private:
NodeT *entity;
};

template< class T , class _Iterator = iterator< Node< T > > >
class ArrayImpl
{
public:
typedef T value_type;
typedef Node< value_type > NodeT;
typedef unsigned int size_type;
typedef _Iterator iterator;

public:
ArrayImpl()
: first(0), last(0), count(0)
{ }

~ArrayImpl()
{
if (!empty()) {
NodeT *cur = first;
NodeT *temp;
while (cur != 0) {
temp = cur;
cur = cur->next;
delete cur;
}
}
}
NodeT* createEntity(const value_type& value)
{
return new Node< value_type >(value);
}

void push_back(const value_type& value)
{
NodeT *node = createEntity(value);
if (empty()) {
first = last = node;
} else {
node->prev = last;
last->next = node;
last = node;
}
count++;
}

void insert(const iterator& pos, const value_type& value)
{
NodeT *node = createEntity(value);
if (empty()) {
first = last = node;
} else {
NodeT *buf = first;
while (buf == pos.getEntity()) {
buf = buf->next;
}
// 最終要素なら末尾に追加
if (buf == end().getEntity()) {
delete node;
push_back(value);
} else {
node->next = buf->next;
node->prev = buf;
buf->next = node;
}
}
}

bool empty() const
{
return count == 0;
}

size_type size() const
{
return count;
}

value_type at(size_type index) const
{
if (index > count) {
throw Exception("Array index out of bounds.");
}
return *(begin() + index);
}

iterator begin()
{
return iterator(first);
}

iterator end()
{
if (last == 0) {
return iterator(last);
} else {
return iterator(last->next);
}
}

iterator begin() const
{
return iterator(first);
}

iterator end() const
{
if (last == 0) {
return iterator(last);
} else {
return iterator(last->next);
}
}
private:
Node< value_type > *first;
Node< value_type > *last;
size_type count;

ArrayImpl(const ArrayImpl& other);
ArrayImpl& operator=(const ArrayImpl& rhs);
};

template< class T >
ArrayImpl< T >* nodeCopy(const ArrayImpl< T >* src)
{
ArrayImpl< T > *dest = new ArrayImpl< T >();
for (typename ArrayImpl< T >::iterator itr = src->begin(); itr != src->end(); itr++)
{
dest->push_back(*itr);
}
return dest;
}

// 以上
// Arrayの実体

template< class T >
class Array
{
public:
typedef T value_type;
typedef unsigned int size_type;
typedef typename ArrayImpl< value_type >::iterator iterator;
//typedef const iterator const_iterator;
public:
Array(void)
: impl(new ArrayImpl< value_type >()), count(0)
{}

Array(const Array< value_type >& other)
: impl(nodeCopy(other.impl))
{ }

Array& operator=(const Array< value_type >& rhs)
{
if (this != &rhs) {
ArrayImpl< value_type > *tmp = nodeCopy(rhs.impl);
delete impl;
impl = tmp;
}
return *this;
}
~Array(void)
{
delete impl;
}

void push_back(const value_type& value)
{
impl->push_back(value);
}

void insert(const iterator& pos, const value_type& value)
{
impl->insert(pos, value);
}

value_type at(size_type index) const
{
return impl->at(index);
}

iterator begin()
{
return impl->begin();
}

iterator end()
{
return impl->end();
}

iterator begin() const
{
return impl->begin();
}

iterator end() const
{
return impl->end();
}

size_type size() const
{
return impl->size();
}

bool empty() const
{
return impl->empty();
}
private:
ArrayImpl< value_type > *impl;
size_type count;
};

自分の使ってた部分だけSTLコンパチ。
なんで、referenceはないし、iteratorも一種類のみ。
メソッドも全然ない。つくりは超適当。
それでも、こんなの作るのに、2時間くらいかかったよ・・・orz
今のところ不具合なく動いてる。
だれか、完全STLコンパチに直してくれないかな・・・

追記:
ものすごい勢いで、リークしてた。
修正した。

追記の追記:
実はCSimpleArrayなんてのがあったよ・・・
調査不足でした・・・orz

VCのばかやろ~

VC2005EEでこそこそやっているのだが、
どうやらVCでWindowsアプリを作ると、STLとか使えないらしい。
使うとDebugモードでは動くけど、Releaseモードでは動かないという、
なんともあほみたいな現象が現れる。
どうやらCRLが問題らしいんだけど、どないせ~と。
別にListを作るのはそんなに大変じゃないんだけど、
Iteratorに対応させようと思うと気が狂いそうになったんだよね。
自分の未熟さに原因があるんだけどさ。
完全STLコンパチを目指さない方がいいのかな・・・

2007-04-14

牛バラ肉の赤ワイン煮

ドライブに行った帰りに、来週の食材を買出しに行ったら、
牛バラ肉のブロックが売っていたので、作ってみようと思い立ってみた。
いつだったか、下宿の近くにあるイタリア料理の店でメニューに載っていたのを見て、
作ってみようと思っていたのだが、思いのほか早く実現した。
いつもはレシピを2~3くらい比べて、適当にアレンジするのだが、
今回は食べたことないものなので、
比較的簡単そうにできるレシピをまねることにした。
ということで、参考にしたレシピ:
http://mitsuka.jugem.jp/?eid=170
実にアバウトに書いてるけど(必要材料が書いてないとか)、
他のレシピと比べるとシンプルだったので、作りやすかった。

もう1品カルボナーラを作って、なんとも豪華な夕飯を食べてしまった。
多分、材料費で500円はかかってるはず(いつもは多分150円くらい)。

2007-04-11

Visual Studio 2005 Express

職場で使ってみた。
ちょっとしたツールを作る必要があったのだが、
VB6(未だに)で作るのはいやだったので、
無許可(おいおい)でVC8で作ることにした。
さすがに.net使うとフレームワークを入れないといけないから、
WTLを使ってみた。
意外といいね。M$というだけで使ったことなかったんだけど、
Windowsで開発するなら選択肢としてはありなのかも。
ただ、M$製っぽく、中でどんな風に動いてるのかさっぱりわからん。
そこにファイルがあるはずなのに、ヘッダがないとか言われるし。
ついでにフリー版はリソースエディタがないから、
フォームの記述をするのが面倒。
フリーのリソースエディタってないのかな?

なんだかんだ言っても、開発してるときはやっぱり楽しい。
特にC++だし。

2007-04-01

ミートソース

お昼ごはんに何を作ろうか。
ご飯は炊きたくないので、パスタにしよう。
和風はこの前作ったし、ひき肉がある。
こんな状況になったので、ミートソース風の具を作ってみた。
完全に創作なので、備忘録。

材料:
ひき肉・・・多分50gくらい
たまねぎ・・・1/4個
にんじん・・・10gもあればいいのかな?
にんにく・・・1かけら
サラダ油・・・大さじ1or2くらい
塩コショウ・・・適量
黒コショウ・・・適量
パルメザンチーズ・・・適量
ケチャップ・・・大さじ3くらいか?

作り方:
1.たまねぎ、にんじん、にんにくをみじん切りにする
2.フライパンに油をひき、にんにくを入れ香りを出す
3.ひき肉、にんじん、たまねぎをフライパンにいれ、塩コショウ、
  黒コショウをいれ炒める
4.野菜からでた水分がなくならないうちにケチャップをいれなじませる
5.好みでパルメザンチーズを入れる

4のところで少し水を足して煮てもいいかもしれない。
5のパルメザンチーズは味を見て、塩気が足りないときにいれるといいかも
出来上がりの味を想像しながら作ると失敗しないと思う。

2007-03-24

ニュース

2つ書こうと思ったが、面倒だから1個にまとめてみたりする。

「団塊ジュニア世代?」
出生率の低下にはずせないキーワードの一つらしい。
ニュースZEROの特番でやっていたのだが、どうも僕もその世代にあたるみたい。
で、もう一つついて回るのが「結婚観」なんだと。
この世代は「結婚しない世代」と言われてるらしい。
その特番に出ていたある人は「結婚できない世代」と言っていた。
どっちがより当てはまるかはわからないけど、
社会現象になっているのはわかるが、
そんなこと個人の勝手だから放っておいてほしい。
といいつつそんなことをやっているとついつい見てしまうのだから、
ばっちり釣られてるんだろうなぁ。

「代理母」
最高裁の判決がでたらしい。
出生届を受理しないそうだ。
賛否両論だと思うんだけど、
個人的には頭が固いなぁと思う。
法律って何のためにあるんだろう?
この判決だと、人の生活を守るためではない気がするが。
産まれてきた子供がかわいそうでしょうがない。
保守的にしてもほどがあるというか、
東京高裁はすばらしい判決をしたと思ったが。
「産む機械」発言じゃないが、
「産めない体の人」は自分の子供を持つなということか?
そりゃ出生率も低下するわ。

2007-03-20

コンロ

ずっとコンロの調子が悪かったのだが、最近新しいのに変わった。
今まではぜんぜん火が着かず、いらいらして目一杯たたきつけたりしていたが、
今はそんなことせずとも着くようになった。ある意味当たり前だが。
おかげで自動的に火が消えるということを監視しなくてもいいし、
なによりコンロを殴ることによる拳の怪我がなくなったのがありがたい。
自炊している身としてはコンロが使えないのはすげ~つらかった。

2007-03-17

BabyBoo

靴を買おうと思って、岡崎のイオンに行ってきた。
そしたら、なぜか(ってこともないが)吹き抜けのところでBabyBooがライブやってたので、
ついつい聞き入ってしまった。
いや、ライブはいいね。生音を聞いてるだけでちょっとうれしくなってしまった。
ベストアルバムの宣伝を兼ねてやってたみたいで、
衝動的にCDを買ってしまった。
サイン券もらったので、せっかくだからとCDにサインしてもらった。

なんとなく機嫌よく帰ってきたのはいいのだが、
あれ、靴買ってないぞ・・・orz
すっかり忘れて帰ってきてしまったよ。
ま、いいか。

豚の角煮を作りながら書いてみた。

2007-03-15

ping

いわずと知れたICMPの代表なんだけど、
ちょっと仕事で(と言っても自分用のツールだが)必要になったから、
実装方法を調べてみた。
ネットワークプログラミングは避けて通ってきてるから、
実はあんまりよくわかっていない。
そうは言ってもLinuxとかにあるということは、GNUあたりが作ってるはずと思い、
実装のソースを探して眺めてみた。
それでわかったこと:
・IPパケットのデータ部分にICMPヘッダを詰め込み送信
・ICMPはポートなんて概念がない(勘違いしてた)
・細かくオプション設定をしなければ、実装は意外と簡単(ソースは複雑だったが・・・)
・最近人のソースを読むなんてしなかったから、理解に時間がかかった【重要】
UNIXネットワークプログラミングって本にはpingの実装が解説付で載ってるらしいが、
8,800円は高いなぁ・・・
多分今後は使うことはないだろうが、持ってると便利だろうか・・・

2007-03-13

今週妻が浮気します

テレビをつけてたらやっていたので、
狩りをするがてらなんとなく見てた。
初めて見たんだけど、なかなか面白い。
要するに「萌えたコピペ」の「寝取られ体験談」にありがちそうな話。
掲示板で相談するとかまんまだなぁとか思いながら見てた。
忙しさにかまけて、家庭を顧みなかった夫に
嫌気が差したのか、振り向いてほしかったのか妻が浮気と、
ドラマのネタとありがちだけど。
でも、やり直そうと思ったときにキスしようとするんだけど、
間男と抱き合ってる妻の映像が浮かんで躊躇するってのをみて、
「そうじゃないと面白くないよなぁ」
と思った僕は心が病んでるんだろうか?
多分次回は、やり直したいと思うけど、そのことが頭をよぎる夫が、
苦悩の末離婚の選択をして、妻から離れていくという選択をする、
って感じだろうか?
どうでもいいんだけど、チラッと映った間男とキャラが被ってるよ、俺・・・orz
オタクっぽいロンゲのメガネ・・・あぁ、まんま俺やん(ToT)

2007-03-11

定演

行ってきた。
歌ってきた。

相変わらず好き勝手歌ってしまった。
なんか高いのがひょいひょい出るからすげ~気持ちよく歌えた。
できは・・・後で音源を聞いて判断するか・・・

50回、節目の回数だった。
次があるのだろうか?
あるとして、僕は立つのだろうか?

今日一緒に歌えなかった先輩。
二度と一緒に歌えない人。
演奏前に某先輩に見せてもらったあの写真。
今回は思うところがたくさんあった。

2007-03-09

eclipse + CDT

久しぶりにeclipseをかまってみた。
Javaはやる気がなく、CDTでC++をやろうかと。
コンパイラはCygwin g++を使うようにして、
CDTを動かしてみる。
なんていうか、eclipseってJava以外の言語(C++しか試してないが)を扱うときって、
こんなに不便だったっけ?
xyzzy + autoconfの方がなじんでしまった・・・orz
CVSクライアントとしてくらいしか今のところメリットがないなぁ。
それもWinCVS使えば特にいらんし。
昔はこれなしで開発とか考えられなかったのになぁ・・・