Planet .NET Japan

July 29, 2010

中の技術日誌ブログ

わんくま囲碁勉強会 東京#1 やります。

第1回わんくま囲碁勉強会 東京#1
8/13
13:00
日本棋院 市ヶ谷会館で

参加確定者:中、長月葵

参加してもいいなという方は是非コメントつけておいてください。

ちなみに私も実力は25級程度と始めたばかりのレベルなので、みんなも是非参加して私を負かせてください。

by 中博俊 at July 29, 2010 23:01 UTC

Hiroshi Okunushi's blog

【TechEd】 早期割引 30% オフは 7/30 – カウントダウン “0”

24 時を過ぎてますので本日が早期割引の 最終日 です。(*^_^*) さてと。今日は最終日なんでまだの方は是非滑り込んでくださいね。 昨晩 Tech・Ed のサイトではセッションスケジュールの v3.0 (7/28 版)がアップしており、いくつかの更新がまた入っていますのでお見逃しなく! 参加者に配布されるバッグの写真なんかも載ってますからね。ここにリンク貼って載せておきますか。 全体が黒って久しぶりな気がしますね。今回のも使い勝手よさそうな気がします。 ここのところ茶系+ベージュとか茶系+白...(read more)

by Hiroshi Okunushi at July 29, 2010 18:03 UTC

Kazzの「JとNの狭間で」

[Android][SDK]AsyncTask

AsyncTaskクラス(android.os.AsyncTask)は任意のタスク(処理)をUIスレッドとバックグラウンドスレッドに分割して実行するためのクラスである。 AsyncTask - Android Developers シングルスレッドモデルで動作するAndroidのGUIアプリケーションを書く場合には殆ど必須といっても良いクラスだが、このクラス、既視感というか、どこかで使った記憶がある。 SwingWorker - Java Platform SE 6 JFC/Swingにある、同様の目 ...

by Kazzz at July 29, 2010 00:00 UTC

July 28, 2010

中の技術日誌ブログ

スリープマシンが勝手に上がる・・・

image

この設定無効にすればあがらないかも・・・

by 中博俊 at July 28, 2010 10:12 UTC

8月のわんくま勉強会

8月も3回勉強会があります。セッションの情報だけ書きますね。

次回は福岡

http://wankuma.com/seminar/20100807fukuoka13/Default.aspx

その次は名古屋

http://wankuma.com/seminar/20100821nagoya14/Default.aspx

そして横浜

http://wankuma.com/seminar/20100828yokohama03/Default.aspx

まず福岡ですが、コミュニティ向けMSDNがおそらく当選率が一番高くなるのがこの福岡勉強会です。

すでにここまでの2会場で手に入れられなかったので、参戦するといってくれている人が居ます。

福岡はいつもハードな話があったりオリジナリティがたかいですねぇ。他の会場でも聞きたいセッションが多いです。

名古屋はちょっと1スピーカーだけまだ情報が出てませんがここも非常におもしろいセッションがいっぱいです。

中でも文字コードの話するらしいので、つっこみがたくさん出来ると思って手ぐすね引いてます!

そして最後に横浜

今回もTechEd延長戦としてネイティブな話やりますよ。

今回もものすごーーーい濃いセッションで埋めてみました。会場が広めなので是非お誘い合わせの上ご参加ください。

MSDNのチケットは横浜会場までありますので、ご参加ください。

by 中博俊 at July 28, 2010 09:33 UTC

窓際プログラマーの独り言

Microsoft.Web.Administration API


C:\Windows\System32\inetsrv\Microsoft.Web.Administration.dll

をプロジェクトの参照設定に加えると、

Microsoft.Web.Administration API

が利用可能になります

例えば、以下のようなコードを書くと、


IIS の "Default Web Site" に、アプリケーションを追加できます。

by gushwell at July 28, 2010 00:11 UTC

Kazzの「JとNの狭間で」

[徒然]PayPal X

PayPal XはPayPal決済をアプリケーションから利用するための、開発者コミュニティ。 PayPal X Developer Network PayPal用のAPIはJava、ASP.NET、Ruby、PHP等様々な言語、プラットホームから使用することができる。 日記でも書いたが、私は海外通販を繰り返すうちにクレジットカードの情報を盗用されたことがある。 2005-11-21 やられた 2005-12-16 カードは信用できないらしい それ以降は懲りて海外通販にクレジットカード決済を使うのは金輪 ...

by Kazzz at July 28, 2010 00:00 UTC

[Android][SDK]Market Licensing package revision 1

Licensing Service Technology Highlights ttp://android-developers.blogspot.com/2010/07/licensing-service-technology-highlights.html Android Marketの新たなライセンスサーバのサービス公開(無料で使うことができる)に合わせて、様々なライセンス管理を実行するためのLicense Verification Library (LVL)を含める形でSDKが更新されてい ...

by Kazzz at July 28, 2010 00:00 UTC

July 27, 2010

Hiroshi Okunushi's blog

【TechEd】 早期割引 30% オフは 7/30 – カウントダウン “3”

くどいですけどお付き合いください。(*^_^*) 今日を入れてあと 3 日 で 30% オフが終わります。 さてと。今回は講師の準備とその運営を支えるシステムについて話を書いてみましょうか。 Tech・Ed って運営する際に準備段階から参画していくメンバーが増加していくそんなプロジェクトです。まず、立ち上げはじめる際にイベント運営の核になるメンバーがある時期に決まります。そこから様々なものが動き始めます。 ●まずは SharePoint を作るところから 以前、活用事例にもなったのですが、Tech...(read more)

by Hiroshi Okunushi at July 27, 2010 17:48 UTC

Kazzの「JとNの狭間で」

[Android][SDK]モーダルダイアログが欲しい (その2)

いろいろと考えたが、モーダルダイアログと近似した振る舞いのダイアログとするのはよいが、Androidの場合UIスレッドを止めるのは御法度なので、本来の意味のモーダルは実現できない。なのでAsyncTask等を使用して他のスレッドを使用している場合を想定し、そのスレッドの処理をブロックするスレッドモーダル(造語)を実現することにする。 実現するには以下の仕組みが必要だ。 1. ダイアログが閉じたことを関知する仕組み 2. ダイアログが閉じるまで処理スレッドをブロックする仕組み 1.に関しては、Dialo ...

by Kazzz at July 27, 2010 00:00 UTC

July 26, 2010

中の技術日誌ブログ

2011年わんくま勉強会の日程(予定)

2011年のわんくま勉強会の日程を仮に決定しました。

実際には変わる可能性がありますが(場所取りの都合などもあるので)、おおむねこの日程で開催を行います。

皆さんもスケジュールを空けておいてくださいね。

by 中博俊 at July 26, 2010 15:00 UTC

Kazzの「JとNの狭間で」

[Android][SDK]モーダルダイアログが欲しい

Androidに用意されているダイアログ(Dialog)では、Windowsで言うところのメッセージボックスのようにモーダルなダイアログは無い。画面の大きさが限られているためにモーダルのように見えるが、上部レイヤに表示されているウインドウに過ぎない。 new AlertDialog.Builder(this) .setMessage(”モーダルに見えるかい?”) .setPositiveButton(”OK”, null) .show(); 上記の様に書かれたコードはダイアログがモーダルであれば ...

by Kazzz at July 26, 2010 00:00 UTC

July 25, 2010

Hiroshi Okunushi's blog

【TechEd】今年の Tech・Ed を最大限活用する方法(受講編)

色々なピースを組み合わせてご自身でご覧になりたいのは間違いないのはわかりつつ、セッションを組んだ方の立ち位置でこんな受け方もあるんだ的な案をいくつか考えてみましたのでご参考まで。 しかし、汎用的にやるべきは、申し込みが開始されたらまずはハンズオンラボに申し込みをすることです。これだけは事前登録で受講上限があるので開始されたらすぐに申し込みましょう。8月入ったらオープンするのではと読んでいます。 ☆ とにかく クラウド びっしり コース!! T1-302 次世代 Microsoft Online Services...(read more)

by Hiroshi Okunushi at July 25, 2010 23:36 UTC

窓際プログラマーの独り言

ナイト(騎士)の最適配置問題

チェスのナイト(騎士)を以下の規則に従って配置するパズルです。

1.すべての空きがどれかのナイトの効き筋になっていること。
  複数のナイトから効いていてもかまわない。
2. ナイト同士は互いに効き筋にはない。
3. なるべく少ない数のナイトで配置する。


「プログラミング小品集」に掲載する中では、久しぶりに長めのプログラムでした。
そして実行時間も...
この手のパズルは解を求めるのに時間がかかるのは仕方がないとは思うけど、もう少し速くしたかったなー。


求まった解を見てみると、対称性をもったきれいな配置だなーって思います。

ところで、デバッグ中に、chromeで動かしてみたら、ブラウザがエラーを表示してしまいました。
どうも、長時間 Silverlightからの応答がないのが理由のようでした。
そのため、Backgroundworkerを使い、応答なしを回避しました。IEだと大丈夫なのにね。

ソースコードはこちらに掲載しています。

by gushwell at July 25, 2010 13:40 UTC

Silverlight:RGBを指定してColorオブジェクトを生成する


RGBを指定してColorオブジェクトを生成する方法です。


指定の 8 ビット カラー値 (赤、緑、青) から Color オブジェクトを作成します

ARGB値 を指定することもできます。

第1引数がアルファ値となります。アルファ値は、透明度を意味し、 0 が完全透明、255が完全不透明です。

by gushwell at July 25, 2010 11:45 UTC

ラングトンのアリ


「ラングトンのアリ」のプログラムは、多くのサイトで動くものが公開されていますが、
Silverlightで公開している方は、いないようなので、昔作ったものを Silverlightに移植してみました。

Silverlightで別スレッドから、BeginInvokeを呼び出し、UIスレッドで描画するサンプルとしてどうぞ。

ソースコードはこちらに掲載しています。

ランダムに動いているアリが、突然規則的に直線の道を作り出すのって不思議ですね。



by gushwell at July 25, 2010 11:44 UTC

DataSetデザイナーで「列には有効なDataTypeが必要です」のエラー

型付DataSet の プロパティの型を、独自に定義したenum型に変更していたのだけれど、
プログラムを修正していたら、いつのまにか、DataTypeが
「列には有効なDataTypeが必要です。」
というエラーメッセージが出て、DataSetデザイナーが開かなくなってしまいました。

初めは、どこが悪いのかまったくわからず Visual Studio 2008を起動しなおしたり、
DataSet.xsd をソース管理から再取得したりしましたが、エラーは出続けたままです。

いろいろ調べて、xxxxDataSet.xsd ファイル(これは、xmlファイルです)の


の部分が正しくないことに気がつきました。
リファクタリングで、このAbcEnum 型が定義されているプロジェクトを、別のプロジェクトに移したのが原因でした。

DataSetデザイナーが、AbcEnumの型を読み込もうとしても、指定したアセンブリには、その AbcENum型は存在しないので、

「列には有効なDataTypeが必要です。」

というエラーになっているようでした。
xxxxDataSet.xsd の中身を手で書き直すことで、無事DataSetデザイナーを開くことが出来ました。

by gushwell at July 25, 2010 11:42 UTC

Hiroshi Okunushi's blog

【TechEd】 早期割引 30% オフは 7/30 – カウントダウン “6”

    くどいですけどお付き合いください。(*^_^*) あと 6 日 で 30% オフが終わります。 さて、今回はコンテンツの中身にメスを入れてみましょう。 まず、どうやってトラック分けが決まったかを書いておきましょう。もう 4 回も関与しているので例年との比較も整理してお届けします。本題に入る前に少し余談を書かせてください。 皆様、今 マイクロソフトの社内ではある標語があります。”We’re all in” というもので、社内中を駆け巡っています。場合によってはクラウド系のイベントとかでこの標語をご覧になったことがあるかもしれません...(read more)

by Hiroshi Okunushi at July 25, 2010 10:28 UTC

Kazzの「JとNの狭間で」

[Android][SDK]金科玉条

Android でリアルタイムゲームの開発方法 : Google Developer Day 2009 Japan http://code.google.com/intl/ja/events/developerday/2009/sessions.html Android でリアルタイムゲームの開発方法/クリス プルエット 一年近く前の資料だが、スレッドの責任分担やAndroidアプリケーションの性能を詰めるヒントとして非常に参考になる。 ただ、元々C++のプログラマが書いていることや、描画処理以 ...

by Kazzz at July 25, 2010 00:00 UTC

July 24, 2010

Hiroshi Okunushi's blog

【TechEd】今年の Tech・Ed を最大限活用する方法(会場編)

こんなこと例年書いたことないんですが、結構会場で「先に言っておいてくれればいいのに」というような話をいただくことが多くて、事前に情報提供が足りないというのは事実なんだろうということで書いておきます。あとで #techedjp にも短縮URL でつぶやいておこうと思います。参加登録をお決めになった方にはぜひ読んでいただきたいです。 ・セッションの資料について 今年の Tech・Ed でもエコの観点から資料を印刷して配布することはしません。資料の印刷は日本でだけずっと行われてきたことで、他の国では早い段階から導入されていたことです...(read more)

by Hiroshi Okunushi at July 24, 2010 15:10 UTC

【TechEd】 早期割引 30% オフは 7/30 – カウントダウン “7”

さぁ Tech・Ed Japan 2010 の割引申し込み期間がそろそろ終わろうとしています。7/30 までが締切になっていますので申し込みをお考えの方でまだ登録されていない方は金曜までに必ずお願いします。それ以降は税込で10万円超えてしまいますので。(*^_^*) 私はコンテンツの側を見ているのでお客様申し込み関係は担当が違うためにちゃんと計算したことなかったんですが、早期割引を過ぎてしまうと3万円以上高くなるんですね。このタイミングを逃さないようにお願いします。 一方で、特別価格というのもあるのでお忘れなく...(read more)

by Hiroshi Okunushi at July 24, 2010 14:30 UTC

July 26, 2009

菊池 Blog

構造体型に対するユーザー定義デフォルトコンストラクタ

ネタ元: ユーザー定義のデフォルトコンストラクタと配列の初期化 - NyaRuRuの日記

.NET アセンブリの仕様としては,構造体にユーザー定義のデフォルトコンストラクタを定義することは可能.ただ,仮に定義したとしても配列の初期化では呼び出されないという点だけで十分に罠過ぎる.

んー、もうちょっと段階分けて書かないと語弊があるかも知れませんですよ。

CTS(Common Type System)のメタデータ構造的にはどんな型にでもデフォルトコンストラクタを定義する事は可能(パラメーターの無い ctor を書く事ができるという意味で)

CLI (CLR)的には値型のデフォルトコンストラクタは呼ばれない。

なんで値型のデフォルトコンストラクタが呼ばれないかというと、呼ぶコードが無いからの一言で済んでしまうんだけど、ILをみてみれば話は速かったりする。

IL でフィールドを定義する時やローカル変数を定義する時には単純にエリアの確保宣言だけなわけでそこにはデフォルトコンストラクタを呼ぶコードもなければ、参照型では生成時に実行する newObj 的な何らかのオペコードが絡んでいるわけでもない。

要するに呼べって言われてないから呼ばれない。

だから値型にデフォルトコンストラクタを定義する意味がない。

結果としてどんなに頑張ってもコンパイラで暗黙に ctor を呼ぶコードを生成するかあきらめて0初期化を受け入れるかの二択

んで

ちなみに値型配列について,ユーザー定義のデフォルトコンストラクタを適用したい場合は,Array.Initialize という専用メソッドを呼び出してやるか,勝手にこのメソッド呼び出しを挿入してくれる言語とコンパイラが必要.

これもまた語弊があって、こういう言語とコンパイラを作ったとするとILレベルでの相互運用性に非常に難のある罠言語ができる

なぜなら、CLI上の言語の殆どはここまでの話しの通りに CLI 仕様そのままをユーザーに受け入れさせるべく言語仕様を設定して実装されている。デフォルトコンストラクタを自動的に呼んでくれるコンパイラのはきだしたアセンブリに含まれる値型をインスタンス化する場合にもそのように動く。

結果的にそんな言語を作ってデフォルトコンストラクタを頑張って定義しても他言語と相互運用する場合に破綻する可能性が非常に高く、そういう言語とコンパイラ+相互運用を実現するために既存の.NET言語とのすり合わせをやる何らかのランタイムが必要。要するに ValueTypeのデフォルトコンストラクタでの初期化を実現する VIR (Value type Initialization support Runtime)をDLRみたいに必死こいて実装しないと駄目で、言語とコンパイラを作ってもその中でクローズドな解にしかなりません。

 

んで、ILレベルで値型に対してエリア宣言のみでなく何らかのイニシャライズ動作を行う為のop Codeを割り当てなかった理由は知らない、「MSの中の人に聞いてくれ」だけど、仕様文書ではパフォーマンスの為となってるし多分パフォーマンスを強く意識しての事だが本質的にはプリミティブオペレーションが複雑になりすぎるからだと思います。

NyaRuRuさんも言及してるけど、配列の初期化を代表格として値型変数がレジスタ割り当てされた時どうすんのよ(一旦メモリにおいてデフォルトコンストラクタ呼んでからレジスタに引き戻す?)とか、ローカル変数にパラメータをそのまま入れる時にローカル変数のデフォルトコンストラクタは呼ぶべき?とか。ローカル変数、フィールド、演算中のテンポラリワーク、色々あるけどすべてにわたって整合性のあるルールとして妥当だったのが「デフォルトの0初期化以外はコード上で明示的に呼ばない限りには行わない」って事かと。

 

by 菊池 at July 26, 2009 04:07 UTC

July 24, 2009

菊池 Blog

日本語版は機械翻訳されたコンテンツとなります。

ネタ元: 渋木宏明(ひどり) Tumblr - MSDNマガジンが機械翻訳だと!MSは爆発しろ!!

うぎゃーーーーー

http://msdn.microsoft.com/ja-jp/magazine/default.aspx

ご案内: 今後、マガジンの日本語版は機械翻訳されたコンテンツとなります。新しい機械翻訳テクノロジの急速な進歩によって、マイクロソフトのコンテンツを世界のより多くの言語で、より早くお伝えできるようになります。機械翻訳されたコンテンツに対する評価やコメントなど、皆様のフィードバックをお寄せください。

機械翻訳にするぐらいならもう MSDN マガジンなんてやめてしまえ、機械翻訳の読みづらい間違いだらけの日本語読むより原文の方が読みやすいんじゃーーーーー。

 

by 菊池 at July 24, 2009 09:37 UTC

Where に埋め込む為に Expression Tree をさらにこねる

LINQ to SQL ではパラメータークエリを作るための CompiledQuery クラスがある。

こいつを使うと LINQ to SQL が SQL 文に変換した結果をキャッシュできるし、パラメータ化したクエリを実行できるのでSQLサーバーサイドでのプランキャッシュも有効に働くため、LINQ to SQLで性能を出す為には利用必須と言いたい機能である。

この子を使うと言語上で面白い効果が表れる。

var q = (HogeDataContext db) => from db.table where ... select ... ;

通常は上記はコンパイルできない。 ラムダを var に突っ込むなと怒られる。

var q = CompiledQuery.Compile(  (HogeDataContext db )=>from db.table where ... select ... );

これはコンパイルが通る。なぜなら var は CompiledQuery.Compile の戻り値で示されるFunc型だと決まるし、CompiledQuery.Compile の引数によってラムダは式木である事が強制されてあいまいさが消えるのである。

さて、このようにメソッド引数を介してあいまい性を消す事ができるという知識とそれをもとにちょっとしたユーティリティメソッドを作らないと匿名型を使ったパラメータクエリの元の式木をいじるのは厄介な問題を抱える事になる。

public static Expression<Func<TResult>> AsExpression( Expression<Func<TResult>> expression ) { return expression }
public static Expression<Func<T1,TResult>> AsExpression( Expression<Func<T1,TResult>> expression ) { return expression }
… Func のT4まであるパターンに従って作る

って感じで渡されたそのものをそのまま返す何もしないメソッドを作ると式木を var で持つのが簡単にできる。

var q = AsExpression( (HogeDataContext db) => from db.table where ... select ... );

AsExpression を作った事により引数型で式木である事が強制されるし、戻り値で式木である事が強制されるのでエラーにならずに式木を匿名型に突っ込む事ができるようになったわけだ。(これができないと匿名型を返す LINQ to SQLクエリの式木をいじるなんて事は不可能だ)

 

んで、 where 部を可変にした LINQ to SQL クエリを作るにはもうひとつの段階が必要で、from …での LINQ シンタックスから一旦離れる必要がある。なぜなら、式木として組み立てた predicate を呼ぶ方法が無くなってしまうから。

var pred = AsExpression( (ItemType item) => item.value!=null );

として from i in db.Item where pred(i) select i は全くもってコンパイルが通らない。predは変数なのにメソッドの様に使ったと怒られる。

当然に predは確かに式木なんでそのままでは呼べない。

これをメソッドチェインで書くとどうなるか。

var items = db.Item.Where( pred );

めでたく items にクエリを格納できるはずだ。

そして冒頭に出てきた CompiledQuery の問題が再燃する。

var items = AsExpression( ()=> db.Item.Where(pred) );
Console.WriteLine( items );

とやると

() => value(ConsoleApplication4.Program+<>c__DisplayClass0).Item.Where(value(ConsoleApplication4.Program+<>c__DisplayClass0).pred)

とか言う表示になるはずだ(仔細は貴方の環境次第だが、value(…).predとなっているはずだ)、これをCompiledQueryにしようとしても駄目だ、式木は pred を実行時に参照解決して動作するという事になっているのだ。

もちろん LINQ to SQLで作られたSQL文 がSQL Server上で実行されるときに pred がどうなってるかなんて見に来る事はできないしうまくいかない。

この pred への参照にpred自体を埋め込まなければLINQ to SQL で実行する事はできないしCompiledQueryで使うこともできない。

    public class EmbedLambdaValueVisitor : ExpressionVisitor
    {
        private LambdaExpression _embedLambda;

        public EmbedLambdaValueVisitor(LambdaExpression embedLambda)
        {
            _embedLambda = embedLambda;
        }

        public Expression EmbedLambda( Expression expression )
        {
            return base.Visit(expression);
        }

        protected override Expression VisitMemberAccess(MemberExpression m)
        {
            var lambda = Expression.Lambda(m);
            var func = lambda.Compile();
            if (func.Method.ReturnType == _embedLambda.GetType())
            {
                var value = func.DynamicInvoke();
                if (value == _embedLambda)
                {
                    return _embedLambda;
                }
            }
            return base.VisitMemberAccess(m);
        }
    }

上記の ExpressionVisitor 派生はこの問題を解決する。

EmbedLambdaValueVisitor embed = new EmbedLambdaValueVisitor( pred );
Expression q2 = embed.EmbedLambda(items);
Console.WriteLine( q2 );

とするとこうなっているはずだ

() => value(ConsoleApplication4.Program+<>c__DisplayClass0).Item.Where( (item)=> item.value!=null );

めでたく pred を参照しているところに pred の内容を埋め込む事ができた。

VisitMemberAccessの動作が肝だけど、単純に MemberExpression を LambdaのBodyとして作りコンパイル実行して MemberExpressionの結果を取っている(型チェックなどはショートカットに過ぎない)。それが置き換え対象として指示されたLambdaと一致したら MemberExpression の代わりに Lambda を返す事で式木中のMemberExpressionがラムダの実体に置き換えられるという流れだ。

これを必要なだけ繰り返して MemberExpression をうまくどけてあげれば式木として作ったクエリがLINQ to SQLを介して実行できるようになるだろう。

 

ちなみに from ... select 形式からメソッドチェインの形式への変換は LINQPad でできるよ!って事は某元俺がルールな人から教わった。

by 菊池 at July 24, 2009 05:28 UTC

Planet .NET Japan とは

RSS を集めて配信しているサイトを Planet と呼びます。Planet .NET Japan は、日本の .NET 関連サイトの Planet です。1時間に一回更新しています。サイトの追加・削除やお問い合わせは まで。

Planet .NET Japan のRSS と OPML

RSS RSS

OPML OPML

ヘッドライン

July 29, 2010
July 28, 2010
July 27, 2010
July 26, 2010
July 25, 2010
July 24, 2010
July 26, 2009
July 24, 2009

配信中のサイト

Landscape - エンジニアのメモ
Powered by Planet!
Last updated: July 30, 2010 02:53 UTC