2005年11月28日月曜日

Hejlsbergへのインタビュー記事(英語)

C#: Yesterday, Today, and Tomorrow: An Interview with Anders Hejlsberg, Part 1
C#: Yesterday, Today, and Tomorrow: An Interview with Anders Hejlsberg, Part 2
ヘジたん(MSKKは「アンダース ヘルスバーグ」と表記しているし、音もそっちのほうが近いのだろうが)のインタビュー。O'reillyに許可取って翻訳したら喜ばれるでしょうか?

2005年11月18日金曜日

Paul VickからVB9の話を聞く

昨日はMSC2005でした。
VBのテクニカルリードであるPaul Vickの特別セッションに参加しました。
VBの歴史を軽くおさらいし、VBの将来(計画中のVB9)について話を聞きました。
内容としては@ITに吉松さんが書いたPDCレポートとかぶってはいたのですが、@ITの方には書いてなかった話を聞きました。それはXMLリテラル。
MSDNの"Visual Basic 9.0 概要"から引用しますが、こんなコードが書けてしまう。
Dim CountriesWithCapital As XElement = _
<Countries>
<%= Select <Country Name=(Country.Name)
Density=(Country.Population/Country.Area)>
<Capital>
<Name><%= City.Name %></Name>
<Longitude><%= City.Longitude %></Longtitude>
<Latitude><%= City.Latitude %></Latitude>
</Capital>
</Country> _
From Country In Countries, City In Capitals _
Where Country.Name = City.Country %>
</Countries>

引用符も何もなしにXMLが埋め込まれている。注意すべきはCountriesWithCapital変数の型で、これってStringじゃなくてXElement型なんです。つまるところ、New XElement("Country")みたいなコードと同等だと。
しかもASPみたいに、<%= City.Name %>みたいな表記もあります。動きもASPみたいなもんで、コードとして実行評価される部分です。
まとめると、「Select *** From Country In Countries, City In Capitals Where Country.Name = City.Country」のところはLinq。それによって得られたCountryやCityなんかを使ってXElementを構築する、そんなコード。
うっはー、変態だー。この機能はC#3.0には今のところ入っていないのかな。

2005年11月17日木曜日

アルゴリズムパズル(リンクリスト)に答える

「諸悪の根源は物理的」より:
単方向リンクリスト(連結リスト)がある。ノード数を n とするが、n の値は分からない。リスト中にループ(循環参照)が存在するか否かを O(n) で判定するアルゴリズムを示せ。ただし、リストの各ノードの内容を変更してはならない。つまり、単純にポインタが指したノード全てにマーキングをしておいて、新しいノードに移るたびにマーキングされているかを調べることで判定することは出来ない。


これは有名なアルゴリズムなので知っている人も多いと思う。


回答

ポインタaとbを用意して、aは1ずつ、bは2ずつインクリメントする(次の要素に進む)。
もしループしているなら、aがループによって以前の要素に戻ってくる前に必ずbと同じ位置を指すときが来る。
ループしてなければbが終端に到達して終わり。



なぜこうなるのかは、図で説明するとわかりやすい。
循環のあるリンクリストを図に描くと、6の字、あるいはトランプゲームの「ブタのシッポ」のような形になる。円の部分が循環、ブタのシッポのように延びている先端がリンクの先頭だ。
今、ポインタを2つリンクの先頭にセットする。説明のため赤ポインタと青ポインタとしよう。そして、1ステップの間に、赤ポインタは1つずつ、青ポインタは2つずつ先に進めてみる。
そのようにして、赤ポインタが循環に差し掛かったところが下の図だ。プログラム的には循環の開始点を判別できないが、かならずこの瞬間は来る。その際、青ポインタはリンクの先を進んでいるのだが、この循環のどこかに存在していることは確実だ。
さてここで、さらに1ステップ進めるとどうなるか。もちろん赤ポインタは1進み、青ポインタは2進む。赤ポインタから見れば青との距離がさらに1大きくなる。ここで忘れていはいけないのが、赤ポインタも青ポインタも循環の上にいるということ。なので、赤ポインタが周回遅れしているという見方もできる。この見方に従えば、赤ポインタの後ろから青ポインタが1近づいたことになる。ずっとステップを進めれば、いつかは赤ポインタは青ポインタに追いつかれてしまうだろう。
さて、赤ポインタが循環に差し掛かったときに青ポインタがどこにいたとしても、2者の距離は円周の要素数よりも必ず小さいのだから、赤ポインタが一周するよりも、青ポインタに追いつかれるほうが早いことが証明できる。
循環のあるリンクリスト

2005年11月16日水曜日

VS2005 Team Suite RC (Japanese)

MSDNサブスクライバダウンロードに出てますね。
MSCに何とかRCを間に合わせた、というところでしょうか。

2005年11月15日火曜日

ゆうこりんと飯島愛のミッシング・リンク

今なら十中八九小倉優子がこなすであろう役を昔は飯島愛がやっていた事実。
まんがの森、きてみろりん。
えーと、仕事してないときはこういうことばっかり考えています。





同じことを考えてる人を発見しました。

2005年11月8日火曜日

あほブレイクビート


  • 工藤静香「嵐の素顔」のリフをバックに「今夜はブギーバック」

  • レッド・ツェッペリン「移民の歌」のリフをバックに「俺ぁ東京さ行くだ」(のラップ部分)


後者は移住の歌同士でなおさら興味深い。

えーと、仕事してないときはこういうことばっかり考えています。

2005年11月2日水曜日

JavaOne Tokyo 2005

今年のJavaOne Tokyoはいろいろ面白そうなんですが、中でも11/8のInteroperabilityトラックにちょっと注目。
JavaOne Tokyo 2005 にマイクロソフトは初めて参加します。
11 月 9 日 (水) と 10 日 (木) の無料展示会では、Windows と Java プラットフォーム間での相互運用性を中心にして展示ブースを持ちます。11 月 8 日 (火) には次の 2 セッションを担当します。
「進化する Web サービス・インターオペラビリティ」 (マイケル・ダイクス)
「Java と .NET に対応する現実的なオブジェクト指向設計手法と最新トレンド」 (萩原正義)