2009年05月29日

WebProxy.GetDefaultProxy() は古い形式です

   このエントリーをはてなブックマークに追加 Clip to Evernote
ずいぶん前に書いた以下のようなソースをコンパイルしたら、最後の行で、
'System.Net.WebProxy.GetDefaultProxy()' は古い形式です
と警告が出ます。


.NET2.0になりObsolete 属性がついたためです。
この警告を消そうと、代替APIを探したのですが見つかりません。
いくつかのWebサイトを参考に、


という記述を追加してみたのですが、実行時にエラーになります。
また、


と書き換えてみましたが、同様に実行時エラー。

困りました。
警告が出てもこのまま残しておこうかなと、諦めかけたのですが、 なんのことはなかったです。
単に、


の行を削除するだけでよかったみたいです。
わざわざ、Proxyプロパティに設定をしなくても、自動的にシステムのプロキシ情報が使われるように変更になったみたいです。(たぶん)

参考URL:GetDefaultProxy の代替えは?  

Posted by gushwell at 22:48Comments(0)TrackBack(0)

2009年05月27日

LINQ to SQL では、Lastは使えない

   このエントリーをはてなブックマークに追加 Clip to Evernote
LINQ to SQL で Last を使おうとしたらSystem.NotSupportedException実行時例外になりました。
-------
Message="クエリ演算子 'Last' はサポートされていません。"
-------

クエリの結果は集合なんだから当たり前か。
でも、順序付けしてあげれば、できるかもと思い、OrderByの結果に対して、Lastメソッドを適用しましたが、同様のエラーになりました。
MSDNみたら、ちゃんと書いてありました。SkipWhileとかElementAt メソッドなんかもサポートされていません。

LINQ to Entities もおんなじですね。
http://msdn.microsoft.com/ja-jp/library/bb738474.aspx  
Posted by gushwell at 22:34Comments(0)TrackBack(0)

2009年05月21日

implicitによる暗黙の型変換

   このエントリーをはてなブックマークに追加 Clip to Evernote
いきなりですが、何らかの都合で独自の日付クラスが必要になったとします。

とはいっても、.NET 標準のDateTime構造体を使わないで済ませることもできません。
当然ながら、この2つの型の相互変換が必要になってきます。
どうやるのがよいのか。

のように、MyDateクラスに、ToDateTimeメソッドと FromDateTime staticメソッド を追加するのがひとつの方法です。
以下のようなメソッドを書けばいいわけですね。

これはこれで良いと思うのですが、いちいちメソッド呼び出しを書くのが面倒です。
int -> double へ自動的に型変換が行えるように、MyDateとDateTimeが相互に代入できればもっと、コードが簡潔になります。
そんなときに使えるのが、implicitキーワードです。


こんな風に、operatorキーワードとあわせて使うと、
なんと、こんな記述が可能になります。

ここでは、MyDateは、classとして定義しましたが、structであっても同じことです。
  
Posted by gushwell at 23:22Comments(0)TrackBack(0)

2009年05月19日

What's New in the .NET Framework 4

   このエントリーをはてなブックマークに追加 Clip to Evernote
MSDNライブラリに、こんなページが出来てたんですね。

What's New in the .NET Framework 4

.NET Framework4.0には、Tupleが入るみたいです。
  
Posted by gushwell at 22:10Comments(2)TrackBack(0)

2009年05月17日

[パズル]円環の塗り分け

   このエントリーをはてなブックマークに追加 Clip to Evernote
問題
放射状にn等分された円環を2色で塗り分けて、図のように内環と外環とを切り離します。外環を固定し、内環を回転してずらしたとき、どの位置でも(最初の位置を除き)内外同色の組み合わせと、内外異色の組み合わせの数の差を1以下にしたいとします。
n=31の時に、このような塗り分け方をひとつ求めるプログラムを作ってください。
Ring_335_297
図の例では、
同色:2つ
異色:6つ
となり、差は4となり、当てはまりません。

----
これをどうやって実現するかですが、問題がn=31であり、色が2色なので、ビット配列で円環を表すこととします。

そのために、BitArrayというクラスを作成します。
このクラスは、Rotateという要素を右にひとつずらすメソッドがあります。
はみ出た要素は、ぐるっと回って先頭に格納されます。
つまり、円環を表しているということです。
またインデクサも用意し、bits[n] のようにアクセスできるようにしています。 各要素のとりうる値は、1 と 0 です。
クラス Ringは、外環と内環をデータに持っています。IsOKメソッドは、どの位置でも、内外同色の数と内外異色の数の差が1以下ならば、trueを返します。
つまり、その円環は、求める円環ということになります。
このIsOKの下請けメソッドとして、Turn と、CountSameColorがあります。
同じ色の数がわかれば、異なる色の数もわかるので、カウントするのは、同色の数だけです。
Printメソッドは確認用です。

クラスSolverは、円環の配色のパターンすべてに対して、求める円環かどうかを調べていきます。問題は一つだけ求めれば良いので、求まった時点で、ループをやめています。
なお、すべての塗り分けパターンを求めるのは、数字を 1から2,3,4.. と加算することで、そのビットパターンを求めています。これを 0 と 1の組み合わせとして求めようとすると、もっと複雑なコードを書かなければならなくなります。

以下が、C#で書いたコードです。今回は、ちょっと LINQ度が低かったかな。
僕のPCだと、 46秒かかっています。もっと効率のよいやり方があるとは思うのですが、深入りはしていません。

※当記事に掲載したコードは、『ナノピコ教室・プログラミング問題集』(駒木悠二+有澤誠 編 共立出版株式会社)に掲載されている問題を一部変更し、GushwellがC#で解いたものです。   
Posted by gushwell at 21:48Comments(0)TrackBack(0)

2009年05月14日

逐語的リテラル文字列の中でダブルクォーテーション

   このエントリーをはてなブックマークに追加 Clip to Evernote
C#だと、正規表現のパターン文字列を書くのに、逐語的リテラル文字列(@付き文字列)だと便利な場合があるんだけど、このパターンの中で、ダブルクォーテーション文字を入れようと、


と書いたらエラーになった。
※ 正規表現をかなり単純化したので、@を使うまでも無い例になってしまいました。

この場合、\(バックスラッシュ)はエスケープ文字ではないので、当たり前だけど、 どうやって書いたらよいのか悩んでしまった。

と書けばOKでした。
  
Posted by gushwell at 22:02Comments(0)TrackBack(0)

2009年05月11日

今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)

   このエントリーをはてなブックマークに追加 Clip to Evernote
元ネタ:
[Programming]今までどのくらいプログラミング言語を触ってきたか
今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)
[etc]今までどのくらいプログラミング言語を触ってきたか(3秒で飽きたものも含む)

僕の場合も思い出して書いてみる。
ほぼ時系列に並べました。ここに書いたほとんどの言語はもうすっかり忘れています。年がばれますね。

FORTRAN
N-BASIC
AppleII BASIC
TL/1
LOGO
RATFOR
PASCAL
Ada
COBOL
FACOMアセンブラ
F-BASIC
HyperTalk
C
MASM
AWK
Prolog
C++
Delph
Java
XSLT
T-SQL
JScript/WSH
C#
Ruby
JavaScript
Perl
Haskell
F#

バッチファイルやJCL、HTMLなどは僕の中ではプログラミング言語では無いので、入れてません。
  
Posted by gushwell at 23:34Comments(4)TrackBack(0)

2009年05月06日

[パズル]凸多角形の外周

   このエントリーをはてなブックマークに追加 Clip to Evernote
問題
任意の数の点が与えられた時、点と点を結び凸多角形の外周を作ってください。 凸多角形の外側には点が存在しないようにします。

--------------

FrameLine01FrameLine02


この問題は、Consoleアプリケーションとして解いても面白みがないし、検証も厄介なので、WPFアプリとして作成してみました。
どうやって解くかは、C#のコードに挿入したコメントを読んでください。

今回もLINQを使っています。IEnumerableは、もう手放せませんね。
WPFの勉強になりました。

実は、この問題は、外周の中の点も結んで、線分が交差しない三角形の編み目を作るという問題の一部なのですが、 三角形の網目を作るアルゴリズムが思い浮かばなかったのでパスしています。

※当記事に掲載したコードは、『ナノピコ教室・プログラミング問題集』(駒木悠二+有澤誠 編 共立出版株式会社)に掲載されている問題を一部変更し、GushwellがC#で解いたものです。  
Posted by gushwell at 22:58Comments(0)TrackBack(0)