ページ

2005年6月29日水曜日

Google Earth

Google Earth is awesome で知った。


Google Earth なんてものがリリースされてるんですね。NASA の WorldWind みたいなソフトです。無料のもありますが、GPS と連動できるとかいった高度な機能を搭載した有料版もあるようです (日本で使えるのかとかはよくわかりませんけど)。


さっそく、無料版をセットアップしてみました。初めて起動したときにデータを取り込んでるのか、地球が表示されるまでちょっと時間がかかりましたが、一度表示されてしまえばスムースに動きます。日本もそれなりに拡大できました。もっと細かい画像があるとより楽しいんですけどねぇ。やっぱり、アメリカ本土ほどは細かくありませんでした (たぶん Google Maps と同じ画像だと思います)。

2005年6月28日火曜日

スパムコメント対策に CAPTCHA を導入

先週末からかなりの数 (1日に400~500くらい) のスパムコメントが書き込まれてます。ただ、ストアドプロシージャを書き換えて、スパムっぽいものは非表示になるようにしてありますから、そのほとんどは表示されていません。表示されちゃったものもストアドをちょっと書き換えれば対処できています。けど、さすがにうっとうしいです。なので、CAPTCHA を導入することにしました。


CAPTCHA っていうのは、機械での読み取りがし難いように加工した画像に書かれている文字を入力してもらうことによって 「相手が機械ではなく人間であること」 を確認しようっていうものです。最近はいろいろなところで使われていますし、ググるとちゃんとした解説もたんさんでてきます。
コメント書き込みに CAPTCHA を使うようにすれば、機械的に POST することによって書き込みを行なっているスパムコメントは防ぐことができるでしょう。けど、普通にコメントを書き込もうって人の手間を増やすことになります。それに、たとえば目が不自由で読み上げソフトを使って Web を閲覧しているような方にとっては、画像に書かれた文字を入力するような CAPTCHA はかなり困った存在になると思います (Hotmail の登録時なんかは、画像だけではなく音声による CAPTCHA も用意してありますね)。


.NET で使える CAPTCHA もいろいろあるとは思いますが、今回は
Clearscreen CAPTCHA Control v1.4 Released with Community Server 1.0 support [UPDATED]
を使わせて頂きました。
このコントロールは、.Text と Community Server 1.0 に対応していますので、とても簡単に導入することができます。ただ、残念ながら画像のみで音声による CAPTCHA などといった機能はありません。


Readme.txt にも書いてありますが .Text への導入は以下の 2点だけで、リビルドも必要ありませんでした。



  1. Clearscreen.SharpHIP.dll を .Text の bin フォルダにコピーする。

  2. .Text のスキン用コントロール (Skins\スキン名\Controls フォルダ) の PostComment.ascx を書き換える。
    まず、
    <%@ Register TagPrefix="cc1" Namespace="Clearscreen.SharpHIP" Assembly="Clearscreen.SharpHIP" %>
    という 1行を追加。これは場所はどこでもいいと思うけど、私は 2行目 (<%@ Control ... %> のすぐ下) に書いています。
    次に、CAPTCHA を表示したい場所に、
    <cc1:HIPControl id="HIPControl1" runat="server" ControlMessage="この絵に表示されている文字列を入力してください (半角で4文字です)" RandomCodeLength="false" CodeLength="4" TextPattern="Percent90" BackgroundPattern="Percent40" FontSize="15" JavascriptURLDetection="false" />
    を追加。

これだけです。
また、上記のように cc1:HIPControl の方はいろいろとパラメータを指定できます。



  • ControlMessage … 画像の横に表示するメッセージ。デフォルトだと "Enter the code you see"。

  • RandamCodeLength … コードの文字数をランダムに決める。デフォルトは true。

  • CodeLength … コードの文字数。(デフォルトは RandamCodeLength が true なのでなし)

  • TextPattern … 画像のテキスト部分の HatchStyle。指定できる値は HatchStyle 列挙体 参照。デフォルトは Weave。

  • BackgroundPattern … 画像の背景部分の HatchStyle。指定できる値は HatchStyle 列挙体 参照。デフォルトは Wave。

  • FontSize … 画像のフォントのサイズ。デフォルトは 15。

  • ImageWidth … 画像の幅。

  • ImageHeight … 画像の高さ。

  • JavascriptURLDetection … 画像の src 属性をクライアントサイドの JavaScript によって指定するか。デフォルトは true。実は、true にしていると URL に #Feedback のように # が含まれているとバグります。対処方法は作者さんの blog の コメント にあります (このコメントにあるように cc1:HIPControl タグの後ろに src 属性を修正するクライアントサイドの JavaScript を埋め込む)。false にしておけば特に対処は必要ありません。

  • TrustAuthenticatedUsers … ログインしているユーザの場合は CAPTCHA を表示しません。デフォルトは true。

ほかにもありますが、とりあえずこんなところで。
(PersistDotTextComments という魅力的なプロパティがあるんだけど、残念ながら実装されていないみたい)

2005年6月27日月曜日

Longhorn Browsing and RSS

Channel 9: Longhorn (heart) RSS


先日アナウンスがあった 「Longhorn に RSS サポートを加える」 という件ですが、これに関するビデオが Channel 9 にありました。Longhorn と IE7 でのデモなども含まれているようです。

2005年6月24日金曜日

Visual Studio のリリースとデバッグの違い

Retail vs Debug settings for C# and VB.NET in Visual Studio より


以下、重要なところを要約。(完全な訳になってるわけではないです。訳が怪しいところもありますし、はしょってるところもあります)


----


Visual Studio の設定をデバッグからリリースに変えると何が変わるの?という件について。
まず、以下のことは C# と VB.NET のプロジェクトに関することである。


IL における主な違いは DebuggableAttribute についてである。v1.1 のこの属性には独立にトグルできる以下の 2つのフラグがある:


TrackDebugInfo:
これは JIT されたコードと IL の間のマッピングを作成することを許可する。これはリリースではパフォーマンス上の理由でオフにされる。


DisableOptimazation:
これは JIT に (JIT が IL をコンパイルする際に) 最適化されたコードを生成すべきか否かを知らせる。私は現時点の IL は変わってないと思う (訳注: JIT によって生成されるコードが同じという意味じゃなくて、リリースだろうがデバッグだろうが IL は同じだけど JIT された結果は違う、という意味だと思う。。。あってるかな?)。


※ PDB の生成はコンパイラの選択だが、普通は DisableOptimization がセットされていると PDB が生成されるだろう。なぜならそれはデバッグしたいであろうときにセットされるものだから。


v2.0 (Whidbey) では以下の若干の違いがある。
TrackDebugInfo はいつもセットされる。なぜなら、リリースをデバッグすることはそれ無しではまったく不可能だし、パフォーマンスの影響はとても小さいから。
DisableOptimization はこれまでと同じ。
あと 2つのフラグが追加されたが、今回の質問にはまったく関係しない (ので略)。


v2.0 (Whidbey) でプロジェクトの設定がリリースかデバッグかによってどう変わるかをまとめると、、、


まず、現時点ではリリースかデバッグがに関わらず同じ IL が作成される。


リリースでは、DebuggableAttribute に JIT が最適化されたネイティブコードが生成するようにセットされる。IL ソース行と C#/VB ソース行のマップの PDB ファイルなどは生成されない。


デバッグでは、DebuggableAttribute に JIT がデバッグ可能なネイティブコードを生成するようにセットされる。IL ソース行と C#/VB ソース行のマップの PDB ファイルが生成される。


※ 私は、VS にリリースビルドであっても PDB を生成させることはできると思う。けれども、どうやってやるのかはしらないし、リリースビルドでデバックするのは大変なのでそんなことをしたがる人があるとは思わない。


だから、デバッグビルドは大きなバイナリができるだろうけど、それは PDB が追加されてるだけである。
また、デバッグビルドの主なパフォーマンスへの影響は JIT によって生成されるネイティブコードがデバッグ可能で、従ってリリースに比べるとほんとに遅いものになるということである。

Team Foundation Server の MSF for Agile テンプレートがアップデート

Updated MSF for Agile Software Development Process Template より


「Team Foundation Server の beta2 を使ってるなら MSF for Agile のテンプレートのアップデート版がダウンロードできるようになったよ」 ということみたいです。
# 私は Team Foundation Server は入れてないのでよくわかりませんが。

XmlReader and XmlWriter articles by Alex Homer

XmlReader and XmlWriter articles by Alex Homer より


上記の XML Team の blog によると 「Alex Homer による .NET 2.0 の XmlReader と XmlWriter に関するすばらしい記事」 とのことです。
# 読んでみたいけど、ちと長いな(^^;

2005年6月23日木曜日

SQLCLR の IS NULL と IsNull

IS NULL vs. IsNull より


SQLCLR の UDT が null であることを確認するのは IS NULL がいいのか IsNull がいいのか、っていう話。詳しい内容は上記 blog をみてもらうとして、結論は 「IS NULL ならば UDT をデシリアライズする必要はないけど、プロパティやメソッドを呼ぶにはデシリアライズしてインスタンスを生成する必要がある。なので Query 1 のほうがパフォーマンスがいい」 ということらしい。なるほど、言われてみればもっともだな。

2005年6月20日月曜日

Re: VB2005 ではフォームをインスタンス化しなくて良い

じゃんぬねっと日誌: 「VB2005 ではフォームをインスタンス化しなくて良い」 でもりあがってた話題ですが、VB2005 って、


Form1.Show()


なんてことができるんですね。ここの Form1 っていうのがクラス名であってインスタンス名じゃないってとこがミソですね。


んで、当然のことながらどうやってるのか気になるところ。さっそく ildasm で見てみました(笑)
VB2005 の Form1.Show() の 1行によって生成された IL を C# 風に書いてみると


My.MyProject.MyForms forms = My.MyProject.get_Forms();
Form1 frm = forms.get_Form1();
frm.Show();


という感じになっています。


なるほどねぇ。やっぱり My なんですねぇ。
My の中の MyProject には Forms っていう MyForms クラス (のインスタンス) を返すプロパティがあるんですね。そして、MyForms には Form1 というプロパティがあると。で、この Form1 プロパティは Form1 クラスのインスタンスを返すと。ちなみに、この Form1 プロパティは常に同じインスタンスを返すようです。なので、Form1.Show() を 2回やったからといって 2つのフォームが開くわけではありません。


ここで重要なのは MyForms クラスは .NET Framework にあらかじめ用意されているわけではなく、プロジェクトにあわせてその場で作られてるってところですね。My.MyProject.WebServices も同じような感じです。


私は、これが My の My たるところだと思ってます。普通の処理であれば C# で 「My もどき」 を実装することだって特に問題はないはずです。しかし、こういう風に 「プロジェクトにあわせてプロジェクトごとに自動的に作られる」 部分はどうしようもないんですよね。「VB's *My* for C# Developers」 に 「My もどき」 の That というクラスを C# で実装するという記事がありますが、ここでも My.MyProject の部分は含まれていないようです。たぶんこれを何とかするには Visual Studio のマクロなどを使って動的にソースを生成するとかしないとどうしようもないんじゃないかと思います。


で、VB2005 では Visual Studio が My.MyProject の部分をうまいことやってるのか、それとも、VB コンパイラのレベルでなんとかしているのかは調べていません(VS を使わずに vbc でやってみればわかることですが)。

2005年6月18日土曜日

GZipStream なんてあったんだ

Using GZipStream for Compression in .NET [Brian Grunkemeyer] より


へぇ、.NET Framework 2.0 には GZipStream なんてあったんですね。

Visual Studio 2005 June CTP

MSDN Subscribers Download に VS2005 June CTP が上がっているそうです。
CTP Madness によると互換性があるのは SQL Server 2005 Express June CTP だけとのことです。ということは Avalon & Indigo SDK beta1 RC とかとはいっしょに入れれないんですね。

2005年6月15日水曜日

CTP Madness

Visual Studio 2005、SQL Server 2005、Avalon & Indigo (WinFX) SDK などなど .NET Framework 2.0 に関係するツールたちは何度も CTP や beta がリリースされていて、すぐには 「どれがどのバージョンと共存できるのか」 ということがわかりません。


そんなときに使えるツール
http://channel9.msdn.com/ctpmadness/Default.aspx


これで、たとえば 「Avalon and Indigo Beta1 RC」 を選択すると、VS2005 beta2 や SQL Server 2005 April CTP、June CTP と共存できるってことがすぐわかりますし、それぞれのダウンロード先もわかります。すばらしい

Visual Studio 2005 Beta2 Patch for Visual C++ Developers

Visual Studio 2005 Beta2 Patch for Visual C++ Developers


英語版しかないみたいですが、VS2005 beta2 VC++ デベロッパ向けパッチというのが出ています。私は当てていません(というか、日本語版の VS2005 beta2 を入れたので当てれるのかどうかもわからない)ので、このパッチがどういうものかとかはよくわかりません。

Spec# preliminary release (いつの間に)

ずいぶん前に
Spec#
Spec# (ちょっと追加)
で書いた Spec# ですが、いつの間にか preliminary release というバージョンがリリースされてました(仮リリースって意味なのかな?)。
http://www.research.microsoft.com/specsharp/
このリリースは .NET Framework 1.1、Visual Studio.NET 2003 用とのことです。Visual Studio 2005 用は 「will be soon」 なんて書いてありますね (ほんとなのかな?)。

2005年6月13日月曜日

New Recommendations for Using Strings in Microsoft .NET 2.0

Comparing strings in Whidbey より


MSDN Library に New Recommendations for Using Strings in Microsoft .NET 2.0 という記事が載ったそうです。
# まだ読んでないけど、これは読んどかなくちゃいけないな。

Anders Hejlsberg 氏へのインタビュー

Microsoft's Hejlsberg touts .Net, C-Omega technologies より


InfoWorld 誌による Anders Hejlsberg 氏 (C# の設計者) へのインタビュー記事です。インタビュー自体は TechEd 2005 Orlando の際に行なわれたみたいです。


いちおうざっと読んでみました。もちろん、よく意味がわからないとことかいっぱいあるんですけどね。


最初は 「C++ とか VB とかあるのに C# の(C# を作った)狙いはなに?」 なんて感じの質問から入ってます。Hejlsberg 氏は 「curly brace family の中に現代的な言語を作るのが効果的 (?effectively) だった」 なんて言ってますね。curly brace family っておもしろい表現だなぁ。日本語で言うと中括弧族 っていう感じかな。で、「Edit&Continue をなんで C# に入れたの?」 と。これには 「元の計画では時間的に無理だということになってたけど、入れれそうになったのとたくさんのフィードバックがあったから」 ということだそうです。んで 「VS2005 の C# の目玉は?」 との問いには 「IDE として見ると Edit&Continue とリファクタリング」 って感じでリファクタリング機能についてちょっと語ってますね。そして 「言語としては Generics」 と。


中ほどの 「What is the importance of the C-Omega project at Microsoft?」 という問い。Hejlsberg 氏はやっぱり C# のようなプログラミング言語と SQL、XQuery といった問い合わせ言語をいかに統合していくか、ということを重要視しているようです。プロトタイプ (Cω のこと?) から多くのことを学び、その多くの知識を C# やそれ以外の言語に適用するという作業を今行なっているところだ、なんて感じのことも書いてあります (もちろん、これらは VS2005 以降のことだ、とあとのやり取りで出てきます)。けど、Cω のもう一つの機能である Polyphonic C# の部分については何も言ってなさげだな。


そして、しばらく 「Eclipse はどうよ?」 というやり取り。っていうか、この記者さん Eclipse に思い入れでもあるのかな?ずいぶんしつこく聞いてるような。けど、Hejlsberg 氏って C# という言語が主な担当であって、IDE のことを聞かれてもどうしようもないような。。。
最後のほうの 「anti-Microsoft に対して言いたいことは?」 という問いに対しての 「今の Microsoft はすごく透過的なったし、すごく開放的になった」 というのは激しく同意。

トラックバックスパム

最近、トラックバックによるスパムがずいぶん来るようになりました。けど、そのほとんどは .Text が自動的にはじいてくれてます。と言うのも、.Text は相手先にちゃんと自分へのリンクがあるか確認してるからです。たとえば、こちらの記事 A に対してトラックバックが送られてきたとします。このとき .Text はトラックバック送信元 (この URL はトラックバック自身に含まれている) の記事を取得し、その記事のなかに A へのリンクがあるかを確認しています。きちんとリンクが見つかればトラックバックとして登録しますが、見つからなかった場合はエラーを返してトラックバックとして受け付けません。この場合、.Text 上はどこにも記録は残りませんから、IIS のアクセスログを見たりとかしないとそういうトラックバックが来ていたこと自体わかりません。で、最近来ているトラックバックスパムもこの仕組みのおかげではじかれてました。


んが、存在しない記事に対するトラックバックが受け付けられてました。トラックバックスパムは機械的に URL を作ってるのか存在しない記事番号に対しても送られてきたりします。この場合も上記のようなチェックはしているんですが、ちょっとしたコードの問題で受け付けられてしまいます。まぁ、受け付けられても記事自体が存在しないわけですから、Web 上のどこにも表示はされません。けど、データベースには格納されてしまいますし、管理者の Feedback ページでは表示されますからうっとおしいのは確かです。


というわけで、存在しない記事へのトラックバックをエラーとするように修正。
Dottext.Framework\Tracking\TrackBackHandler.cs の 98行目くらいに


Entry trackedEntry = Entries.GetEntry(postId,true);
if (trackedEntry == null)
{
trackbackResponse (context, 1, "EntryID is invalid or missing" ) ;
}



というように青字の部分を追加してビルドすれば OK です。

start.com/3

start.com/3 より


start.com がバージョンアップして /3 になったそうです。
ちなみに、ほんとうの URL には辿り着くには最初に簡単な 5つのクイズに答える必要があるみたいです。それぞれの答えは MSN Search の結果を見ればすぐにわかると思いますけど。

2005年6月11日土曜日

Acrylic

A new product announced: 'Acrylic' より


コードネーム 'Acrylic' というプロダクトのベータ版がダウンロードできるようになったそうです。
'Acrylic' っていうのは Creature House Expression 3 の次期バージョンで、プロフェッショナル向けのベクタベースのイラストレーションツール、とのことです。


へぇ、'Acrylic' どころか Creature House Expression 3 というのも知りませんでした。見てみたら Windows 用と Macintosh 用のフリーダウンロードバージョンがあるんですね。

2005年6月10日金曜日

VS2005 Express をレジストレーションすると eBook がもらえた(そうです)

以前に書いた 「VS2005 Express をレジストレーションすると eBook がもらえる?」 ですが、小野@どっとねっとふぁん さんがコメントを付けてくださいました。


日本語版の Visual Studio 2005 Express beta2 でもレジストレーション後に送られてくるメールに書いてあるキーで eBook が読めるようになるそうです (もちろん、英語の eBook ですが)。けど、C# Express と VWD とでは読める本が違うんですね。へぇ。詳しくは上記のエントリの小野さんのコメントを参照して下さい。


コメントありがとうございました>小野さん

WSE 3.0 CTP for VS2005 beta2

WSE 3.0 CTP (for Visual Studio 2005 Beta 2) available for download より


Web Services Enhancements 3.0 の CTP です。VS2005 beta2 用だそうです。
と言っても WSE って (2.0 も含めて) どんなものなのかよく知らないんですけどね。つか、WS-* 自体ほとんど知らないんですけどね(^^;
# ちなみに Indigo もぜんぜん知らない(^^;

本場の TechEd はすごいなぁ

今、行なわれている TechEd 2005 Orlando ですが、やっぱり本場の TechEd はすごいんですねぇ。


エバンジェリストグループ Blog: 「Tech ED 2005 に参加しています
プレカンファレンスも入れると 6日間もあるのか。。。
うーん、夜 10時まで BOF ですか。。。
って、Agenda を見ると Jam Session なんてものが夜中の 1時まであるぞ(^^ もちろん、Jam Session は技術的なセッションじゃなくて、ほんとにジャムセッションみたいですが(^^;
むぅ、Special Events によると、パーティはユニバーサル・スタジオ・オーランドを PM7:30~PM11:00 まで貸し切りですか。。。VIP 待遇を受けるんですか。。。アトラクションも乗り放題ですか。。。食事も無料ですか。。。


いったい何人くらい参加してるんだろう?
と思ったら http://japan.cnet.com/news/ent/story/0,2000047623,20084215,00.htm こちらに約1万1000人とかって書いてあった。(スティーブ・バルマーのキーノートスピーチの聴講者の数みたいだから TechEd 全体だともっと多いのかも)


おぉ
Podcast Videos at TechEd 2005 - includes Don Box Pod Attack
こんなの発見。なんか Microsoft の撮影スタッフが Don Box のセッションに乱入したりしてるみたいです(^^;

VS2005 は 11月前半ですか

# すでに今さらなニュースですが、自分の覚え書きとして。


Visual Studio 2005 と SQL Server 2005 (共に英語版) のリリースが 11月 7日の週ということになったとのこと。
http://msdn.microsoft.com/launch2005/


日本語版は、いつくらいかなぁ。