トップ «前の日記(2006-11-14) 最新 次の日記(2006-11-16)» 編集

日々の破片

著作一覧

2006-11-15

_ String#==

ちゃんと型をコンパイラに認識させないと、C#のstring比較でもEqualsが必要になるという話。
ちゃんと警告を見ていなかったのでつまらないバグに引っかかった(ドキュメンテーションコメントをインターフェイスの実装側に書いてないので山のように警告がでるのだ。pragmaで止めればいいんだけど)。
public class Foo
{
    public static void Main()
    {
        object o = "test";
        System.Console.WriteLine("test" == o);
        System.Console.WriteLine(string.Format("test") == o);
    }
}
実行すると
True
False
警告は、どちらかがstringならば、もう一方のobjectのほうをstringにキャストしろと出る。o == strなら左辺、str == oなら右辺。正しい指摘だが読まなきゃしょうがない。
実際には次のようなコード。
Session["foo"] == "bar"
==がオーバーロードされているわけだから、
((string)Session["foo"]) == "bar"
と書けばOK。でもなんとなくキャストはいやんなので、
"bar".Equals(Session["foo"])
として解決(Session["foo"]がnullの場合があるので)。

_ 教えてRubyのバイナリな人(書いてたら解決したけど)

ASR鋭意修正中なのだけど、次のスクリプト相当なことをASRでやりたい。
具体的には、TypeLibをwsfのreference要素で指定された場合の定数の取り込み(WIN32OLE::ole_const_load相当)。で、GlobalRubyScriptの場合は直接グローバルな定数として組み込めばよいから困ってないんだけど、RubyScriptのほうは無名モジュール内の定数として取り込まなければならなくてちょっと混乱してます。
やりたいことをRubyで書くと
module A
end
A.module_eval("Foo = 'foo'")
なので、現在はCで
VALUE mod_a = rb_module_new();
rb_define_const(mod_a, "Foo", rb_str_new2("foo"));
とやっているんですが、結果としては
module A
end
A.instance_eval("Foo = 'foo'")
としてしまったように見えます。module_evalを呼ばないのは(例では単なる文字列だけど)設定値をCからでしか取得できないからです。
-----いろいろ試行錯誤-----
というか、ASRのCloneの処理で、rb_extend_objectを呼んでるのは何か違うような気がしてきた……。rb_include_moduleじゃないかなぁ、とそのあたりを追っかけてeval.cとかclass.cとかを眺める……rb_singleton_classか!(Cloneはやっぱりrb_extend_objectで良いような気がしてきたけど)
VALUE mod_a = rb_module_new();
rb_define_const(rb_singleton_class(mod_a), "Foo", rb_str_new2("foo"));
で、解決。
動作は解決したけど、なんかわからなくなってきた……
以下の理解は正しいでしょうか? >識者の方。
  • rb_module_newから返るのは、無名モジュールのインスタンス
  • したがって、それを第1引数にしてrb_define_constを呼べば、それはそのインスタンスに定義されるのでinstance_evalに相当
  • ここでやりたいのはmodule_evalなので、rb_singleton_class()にモジュールのインスタンスを与えてモジュールのメタクラスを取り出して(作って)与える必要がある

_ Office 2007(のうちのExcel 2007)

うわー、なんでこんなバカなことをしたんだ?

クラシックメニューへの切り替えってできるんだろうか? (XPではクラシック表示はしないけど、これはひどい、ひど過ぎる)

しかも、こういう困ったときに、実はものすごく役に立つイルカも出てこない。これまで見たことがあるGUIアプリケーションとしては、GNOMEが作るツールバーよりも不格好だ。つまり最悪だ。おれは1600×1200のモニターを使ってるから辛うじて作業領域が表示されるけど、これ、800×600だったらツールバーで画面が占有されちゃうだろうな、それにしても。

しかもヘルプメニューが無い、無い、無い!

と思っていろいろ突いていたら目に入らないところに薄くて青くてタイトルバーに保護色で隠された小さなクエスチョンが目に入った。

検索に「アシスタント」……出るっかな、出るっかな……おお、出てきた。

新しいデザインには、Microsoft Office アシスタントは含まれません。

だめだ。2003に戻そう。アクティベーションしちゃったけど。

#追記:でも、OneNote 2007のツールバーはあんなには不格好じゃなかった。このWema+Tab付きWikiみたいなアプリケーションはもうちょっと何かよくわからないものが付け加われば、相当好きなんだけどな(でも、そのよくわからない何かが足りないので実際にはタスクバーで無駄にメモリーを食っているだけなのだが)……

#IME2007は、IME2003とか2000とかのナチュラルどうした系よりは遙かにまし――少なくてもキーアサイン能力は標準IME並のまともさになった――学習能力がゼロみたいに見える。というか、全然学習してくれてないのだが。設定もされてるけど。どうして、有償のもののほうがデフォルトバンドルよりだめなんだろう? (アイコンは中間色使いまくりでそれなりにきれいではあるが)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|

ジェズイットを見習え