2009年3月3日火曜日

体調

今日も、疲労的な倦怠感に加えて軽い吐き気を伴う風邪気味っぽい倦怠感があって、目が覚めてもずっと横になっていた。その後、起きて体温を測ったら37.4度。吐き気があるから食欲もなくてカップラーメンを買ってきた。

2009年3月2日月曜日

微熱

また37.5度。おい、37.5度で定着すんなよ。

でも今日は昨日程には辛くはない。ていうか久しぶりに快晴だったので外出してきた所。まあ、負荷がかかった分死にそうになって倦怠感も疲労も強いが、風邪気味特有の倦怠感ってのはない。

あと、すげー眩しいという神経症状は相変わらず。

食後とは言え、37.6度・・・。なんか珍しく胸を張って微熱と言える微熱になった。だから何だという話だが。

微熱

昨日は、朝方からいきなり37.5度で、億劫という意味の倦怠感に、風邪気味の、わずかな吐き気と熱っぽくて頭がぼーっとする、という意味の倦怠感が加わり、あまりにも体調が悪くて一日中寝ていた。そうやって全く体を動かしていないのに、夜少しすっきりしてきたら筋肉痛がめちゃくちゃ強くなって、しかも熱は全然引いていない。結局夜までずっと横になっていて、夜も早めに寝た(でも不眠気味で入眠に苦労した)。

別に肉体的疲労で立ち上がれないとかそういうのじゃないけど、一日寝ているというような事は今まで一度もなかったのでショック。

今日もこの時間帯に既に37.0度。午後にはもっとあがるんだろうなあ。既に少し気分も悪いし。

来週の診察で病名宙ぶらりん状態に決着が付けば良いんだけど・・・

2009年2月28日土曜日

日経強いなー

8000円より下での動きで日経の強さを実感するのもアレだが。

しかしこれ、いくらNYと連動せずに真面目に平均線まで反発したとは言っても円安を受けてのものだろうからなあ。市場の主体性が確立できているわけではない。このままアメリカを無視して自力で経済を上向かせて、輸出依存の体制も改善して、本来のセオリーどおりの株高・円高の形になるのは・・・一世紀くらい先?ていうかそんなの出来るの?

むしろ、一時的に見られた円安・株安というパターンがそのうち定着して、ずるずると日本経済が凋落という未来の方があり得そうだ。

2009年2月27日金曜日

三角錐のエッジを鋭くした

WPFの法線って、(面ではなく)頂点毎に指定されて、共有される頂点に対して何も指定しないと、面から計算した法線を自動的に平均化するのね。

というわけで、頂点を共有しないようにしたら、より三角錐らしくなった。
以前:

以後:

ミクさん:

コードも更新した。

2009年2月26日木曜日

継承される事が前提のクラスに、自分が何者か教える方法

スキップリストのライブラリを作る時、ノードクラスには、ユーザがカスタムして使う事を前提にバーチャルメソッドをいくつか用意した。この時、スキップリストのコンテナクラスは、アイテムを引数として受け取り、ノードを生成してリストに追加するメソッドを持つ。問題は、この、ノードの生成という処理はノードクラスの静的メソッドであるべきだという事だ。すると、ノードクラスの基底クラスに、型パラメタとして、``自分が何者であるかを教えてやる''必要が生じる。少し変態的なコードになるが、面白いテクニックなのでまとめておく。

まず、スキップリストのコンテナクラスはこんな感じだ。

public class SkipList<TItem, TNode>
where TItem:class
where TNode:SkipListNode<TItem, TNode>, new()
{
TNode header, footer;
public SkipList()
{
header=SkipListNode<TItem, TNode>.CreateHeader();
footer=SkipListNode<TItem, TNode>.CreateFooter();
...
}
public void Insert(TItem item){
...
TNode newNode=SkipListNode<TItem, TNode>.CreateNode(item);
}
}

んで、ノードクラスはこんな感じだ。

public class SkipListNode<TItem, TNode>
where TItem:class
where TNode:SkipListNode<TItem, TNode>, new()
{
private TNode thisNode;
private TItem item;
private bool isHeader, isFooter;
public static TNode CreateNode(TItem item)
{
TNode newNode=new TNode();
newNode.thisNode=newnode;
newNode.item=Item;
newNode.isHeader=false;
newNode.isFooter=false;
return newNode;
}
public static TNode CreateHeader()
{
TNode newNode=new TNode();
newNode.thisNode=newnode;
newNode.item=null;
newNode.isHeader=true;
newNode.isFooter=false;
return newNode;
}
public static TNode CreateFooter()
{
TNode newNode=new TNode();
newNode.thisNode=newnode;
newNode.item=null;
newNode.isHeader=false;
newNode.isFooter=true;
return newNode;
}
...
他のメソッド(TNode型での自身への参照が欲しければthisでなくthisNodeフィールドを使う)
...
バーチャルなメソッドとかバーチャルなプロパティとか
}

使い方としては、

MyNode:SkipListNode<MyItem, MyNode>{
オーバーライドしたりプロパティを追加したり
}
...
クラスの定義の中で
SkipList<MyItem, MyNode> myList=new SkipList<MyItem, MyNode>();
...

などと使う。

特に、SkipListNode<TItem, TNode>の定義中でthisと書くとその型はSkipListNode<TItem, TNode>型になり、TNode型にならないので、TNode型のthisNodeフィールドを用意する事で、実行時の余計なキャストが必要なくなる。さりげないがここ超重要。

私が知った事

物事は難易度に従ってシーケンシャルに並んでいるものではない。合理的であるか非合理的であるか、可能であるか、不可能であるか、二値の命題によって特徴付けられる。その真理値があまりに人と食い違うとコミュニケーションがとても困難になり、自分の人生、自分の選択について人に説明できないという事態が生じる。そのために、便宜的に難易度というシーケンシャルなパラメタが社会/コミュニティによって導入される。

問題になっているのが因果関係ならば自由意志によって対処できる。問題になっているのが統計であるのならば逃れる事はできない。しかし人は自分の人生が上手く行っている限りはあまねく人は自由意志によって行動を選択すると考えたがる傾向を持つ(例えば先日の麻生総理の医療費問題に関する発言)。

それでも私には、未だ出来る事はあるし、自由意志を用いる余地も存在する。人のキャパシティとは、かくも大きく、そして小さい。