July 29, 2010
中の技術日誌ブログ
わんくま囲碁勉強会 東京#1 やります。
第1回わんくま囲碁勉強会 東京#1
8/13
13:00
日本棋院 市ヶ谷会館で
参加確定者:中、長月葵
参加してもいいなという方は是非コメントつけておいてください。
ちなみに私も実力は25級程度と始めたばかりのレベルなので、みんなも是非参加して私を負かせてください。
by 中博俊
Hiroshi Okunushi's blog
【TechEd】 早期割引 30% オフは 7/30 – カウントダウン “0”
by Hiroshi Okunushi at July 29, 2010 18:03 UTC
Kazzの「JとNの狭間で」
[Android][SDK]AsyncTask
by Kazzz at July 29, 2010 00:00 UTC
July 28, 2010
中の技術日誌ブログ
スリープマシンが勝手に上がる・・・
この設定無効にすればあがらないかも・・・
by 中博俊
8月のわんくま勉強会
8月も3回勉強会があります。セッションの情報だけ書きますね。
次回は福岡
http://wankuma.com/seminar/20100807fukuoka13/Default.aspx
- 13:00 ~ 13:30 ライトニングトーク
- 13:40 ~ 14:30 「ASP.NET ことはじめ」by Sugaさん Lv1くまー
- 14:40 ~ 15:30 「Japanino(Arduino)で始める、組み込みプログラミング入門」by JuJuさん Lv1くまー
- 15:40 ~ 16:30 「MEF超入門2」by 関谷さん Lv1くまー
- 16:40 ~ 17:30 「OpenCVでお気楽画像処理」by dolan Lv1くまー
その次は名古屋
http://wankuma.com/seminar/20100821nagoya14/Default.aspx
- 10:30 ~ 11:10 「りょーいちのデジタルカメラ再入門」by りょーいち Lv 1くまー
- 11:10 ~ 11:50 「レッツ文字コード(基礎)」by ダウスさん Lv 1くまー
- 11:50 ~ 12:20 ライトニングトーク 5分間の真剣勝負
- 13:10 ~ 13:40 TDD道場
- 13:40 ~ 14:30 「できる!CI―50分でわかるCI応用」by bleis-tiftさん Lv 3くまー
- 14:40 ~ 15:30 「(調整中)」by (調整中) Lv 1くまー
- 15:40 ~ 16:30 「OCaml やってみる」by rfさん Lv 1くまー
そして横浜
http://wankuma.com/seminar/20100828yokohama03/Default.aspx
- 12:10 ~ 13:00 「Boostのあるプログラミング生活」by アキラさん Lv3くまー
- 13:15 ~ 14:05 「とある関数の接合部 sexyhook !」by rtiさん Lv2くまー
- 14:20 ~ 15:10 「Observer-0X」by επιστημη Lv2くまー
まず福岡ですが、コミュニティ向けMSDNがおそらく当選率が一番高くなるのがこの福岡勉強会です。
すでにここまでの2会場で手に入れられなかったので、参戦するといってくれている人が居ます。
福岡はいつもハードな話があったりオリジナリティがたかいですねぇ。他の会場でも聞きたいセッションが多いです。
名古屋はちょっと1スピーカーだけまだ情報が出てませんがここも非常におもしろいセッションがいっぱいです。
中でも文字コードの話するらしいので、つっこみがたくさん出来ると思って手ぐすね引いてます!
そして最後に横浜
今回もTechEd延長戦としてネイティブな話やりますよ。
今回もものすごーーーい濃いセッションで埋めてみました。会場が広めなので是非お誘い合わせの上ご参加ください。
MSDNのチケットは横浜会場までありますので、ご参加ください。
by 中博俊
窓際プログラマーの独り言
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
by Kazzz at July 28, 2010 00:00 UTC
[Android][SDK]Market Licensing package revision 1
by Kazzz at July 28, 2010 00:00 UTC
July 27, 2010
Hiroshi Okunushi's blog
【TechEd】 早期割引 30% オフは 7/30 – カウントダウン “3”
by Hiroshi Okunushi at July 27, 2010 17:48 UTC
Kazzの「JとNの狭間で」
[Android][SDK]モーダルダイアログが欲しい (その2)
by Kazzz at July 27, 2010 00:00 UTC
July 26, 2010
中の技術日誌ブログ
2011年わんくま勉強会の日程(予定)
2011年のわんくま勉強会の日程を仮に決定しました。
実際には変わる可能性がありますが(場所取りの都合などもあるので)、おおむねこの日程で開催を行います。
皆さんもスケジュールを空けておいてくださいね。
- 2011/01/15 名古屋?
- 2011/01/22 東京
- 2011/02/05 大阪?
- 2011/02/19 東京
- 2011/02/26 福岡?
- 2011/03/26 東京#
- 2011/04/02 大阪?
- 2011/04/09 名古屋
- 2011/04/23 東京
- 2011/05/14 福岡?
- 2011/05/28 東京
- 2011/06/04 大阪?
- 2011/06/25 東京#
- 2011/07/09 名古屋
- 2011/07/23 東京
- 2011/08/06 大阪?
- 2011/08/13 C80 (8/12-8/14予想)
- 2011/08/20 福岡?
- 2011/08/24-26 TechED 2011 (予想)
- 2011/08/27 横浜
- 2011/09/10 東京
- 2011/10/01 大阪?
- 2011/10/22 東京
- 2011/10/29 名古屋
- 2011/11/12 福岡?
- 2011/11/19 東京
- 2011/12/03 大阪?
- 2011/12/17 東京
by 中博俊
Kazzの「JとNの狭間で」
[Android][SDK]モーダルダイアログが欲しい
by Kazzz at July 26, 2010 00:00 UTC
July 25, 2010
Hiroshi Okunushi's blog
【TechEd】今年の Tech・Ed を最大限活用する方法(受講編)
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が必要です」のエラー
プログラムを修正していたら、いつのまにか、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”
by Hiroshi Okunushi at July 25, 2010 10:28 UTC
Kazzの「JとNの狭間で」
[Android][SDK]金科玉条
by Kazzz at July 25, 2010 00:00 UTC
July 24, 2010
Hiroshi Okunushi's blog
【TechEd】今年の Tech・Ed を最大限活用する方法(会場編)
by Hiroshi Okunushi at July 24, 2010 15:10 UTC
【TechEd】 早期割引 30% オフは 7/30 – カウントダウン “7”
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 でできるよ!って事は某元俺がルールな人から教わった。
まで。
RSS
OPML