サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
今年の「#文学」
siokoshou.hatenadiary.org
C#5 では、ループ変数とラムダ式の嫌な問題を一つ直すようです。 var values = new List<int>() { 0, 1, 2 }; var funcs = new List<Func<int>>(); foreach ( var v in values ) funcs.Add( () => v ); foreach ( var f in funcs ) Console.WriteLine( f() );このコードを実行すると C#4 までは予想に反して「2 2 2」ですが、C#5 からは「0 1 2」となります。Windows 8 CP 上の Visual Studio 11 で試した結果です。C# の「破壊的」仕様変更であり、後方互換性がなくなります。 これまでも、この問題には簡単な回避策があり、ループ中で v をいったん var v2 = v; と別の変数に入れてラム
iOS4が位置情報の全履歴を保存してた問題が広く公開されて数日経ちますが、公開当日こそ各ニュースサイトで大きく取り上げられたものの、その後はほとんど議論もされずに急速に風化してますね。なんだか不思議です。ちょっと怖いことでも書いてみますよ。 位置情報の問題は2つあって、一つはAppleが位置情報の全履歴を記録していること。もう一つはその情報がバックアップしてるパソコンに平文で置いてあるということ。 パソコンにフリーソフトをインストールした数日後に、あなたが仕事に行ってる間に自宅に空き巣が入ったら、それは偶然じゃないかもしれないよ、ということです。パソコンに平文で時刻情報付きの位置情報履歴があって簡単に読み出せるということは、そういうことです。ちょっとおおげさかもしれませんけど。 バックアップは今すぐ暗号化することをオススメします。 [追記] iOS4.3.3で位置情報はPCにバックアップさ
http://sites.google.com/site/siokoshou/ Windows 7 x64 でのみ動作確認済みです。.NET3.5 入り XP でも動きます。 ↓のMac版とだいたい同じモノのつもりです。でも、Mac持ってないし本家のモノを動かしたわけではないので本当に同じかわかりません。 http://petewarden.github.com/iPhoneTracker/ 本家同様、日時は週単位に丸め、緯度経度もある程度丸めています。 そもそもの iPhone Tracker についてはこちらをどうぞ。 http://japanese.engadget.com/2011/04/20/ios-4-pc/ 追記 ソース公開しました。Visual Studioのプロジェクトです。不要と思われるファイルを消してあります。不足があればすいません。 このプログラムでは csharp
プログラムでは整数の四則演算はよくよく注意しないと足をすくわれることがあります。 整数と呼んでるものが普通と違って範囲があって循環しているためです。最大値と最小値の絶対値が 1 ズレているのもいや〜な問題の元になります。 この 1 ズレのため除算で整数オーバーフローが発生します。除算でですよ。 int の最小値を -1 で割ったときに結果が表現できないためです。除算と剰余ではただこの 1 ケースのみオーバーフローが起きます。 このケースは仕様書にちゃんと書いてあります。仕様書によると checked では例外スロー。unchecked では「unchecked コンテキストでは、System.ArithmeticException (またはコンテキストでのサブクラス) がスローされるか、または左のオペランドを結果値としてオーバーフローを報告しないかは、実装で定義されます。」実装依存だそうで
昨日の記事は例が悪かったのでわんくまの中さんに正反対に誤読されて残念なので、わかりやすく一覧表にしてみました。 string の StartsWith, EndsWith, IndexOf, LastIndexOf のカルチャー依存/非依存(ordinal)の状況 .NET2〜3.5.1 カルチャー依存 .NET4 CTP ordinal .NET4 beta1 カルチャー依存 (元に戻した) .NET4 beta2 カルチャー依存 .NET4 正式版 カルチャー依存 (たぶん) CTP ではセキュアな変更を行ったものの、互換性のために beta1 以降元に戻されました。 BCL チームによると UPDATE for .NET 4 Beta 1 In order to maintain high compatibility between .NET 4 and previous relea
ずいぶん前にも書きましたが string の IndexOf には罠があります。ただ単に IndexOf( "Hoge" ) と書くと IndexOf( "Hoge", StringComparison.CurrentCulture ) の動作をしてしまいます。きっとあなたがやりたいことは IndexOf( "Hoge", StringComparison.Ordinal ) だと思います。 .NET4 で、この文字列の危険な落とし穴を修正しようとしたようですが、結局変更はキャンセルされたようです。BCL Team Blog によると、CTP では StartsWith, EndsWith, IndexOf, LastIndexOf をカルチャー依存から非依存(ordinal)に変更したけど、β1で戻したよとあります。実現していれば大きな影響を与えただけに反対されたのでしょうか? 変更しよ
実用性はないけどおもしろいw こんなにゆがんでてもスクロールできるし、クリックもできる。Chromium を利用しているっぽい。よく読んでないのでよくわかってないんだけど。ClickOnce でインストールできますが、サーバーが遅いのかものすごーく時間がかかるのでご注意を。5年後のインターネットはブラウザの四角い枠がなくなってるかもね。 via http://chriscavanagh.wordpress.com/2009/08/25/a-real-wpf-webbrowser/ こちらにソースもあります。 http://wpfchromium.codeplex.com/SourceControl/ListDownloadableCommits.aspx 3Dバージョンもあった(^^; http://chriscavanagh.wordpress.com/2009/08/27/wpf-3d
Visual Studio 2010 では EXE を作るプロジェクトのデフォルトが Any CPU から x86 に変わります。また、DLL を作るプロジェクトは Any CPU のままです。これらの理由を説明している記事を見つけました。 AnyCPU Exes are usually more trouble than they're worth - Rick Byers 良い記事なのでかいつまんで勝手に訳してみます。だいぶはしょっているいいかげんな訳なので、できれば原文も読んでください。それと、訳についてアドバイスがもらえるとうれしいです。 勝手訳 AnyCPU Exes are usually more trouble than they're worth AnyCPU EXE は通常、価値よりもトラブルのほうが多い 私は過去数ヶ月にわたってここ(と一部の顧客)の人々と「AnyCP
via http://west-wind.com/weblog/posts/32765.aspx ちょっと笑える記事w 実行ファイルの名前に「Documentation;Help;Install;More Info;Readme;Read me;Read First;Setup;Support;What's New;Remove」が含まれると「タスク バーにこのプログラムを表示する」が表示されなくてピンで留めることができないそうな。 開発者はご注意を。 キーワードは以下のレジストリにあるそうです。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileAssociation\AddRemoveNames
http://msdn.microsoft.com/ja-jp/library/ms743618.aspx この MSDN ライブラリの記事に欠けている図を勝手に描いてみた。 クラス名に出てくる Element は HTML の「要素」(タグと言われることのほうが多い)と思えばよい。 WPF は汎用性高すぎなせいか、カラクリを理解しないと使いこなせない面があるように思います。
ただその行で Ctrl-c や Ctrl-x するだけ。行を複製するなら Ctrl-c, Ctrl-v で OK。 # まじか…今まで知らなかった…。
id:siokoshou:20090817#p1 のつづきです。.NET Framework を調べて、名前付け/設計の参考にしてしまおうというシリーズの2回目です。今回は bool を返すメソッドとプロパティの接頭辞を調べてみました。 Top30 Top は Is で bool を返すメソッドとプロパティ全体の 26.80% を占めています。Is, Can, Contains, Has, Should あたりは納得です。いかにも bool が返ってきそうな疑問文風です。MoveNext が bool 返すのは微妙と思ってたけど、Move?↑と上がり調子で訊いてると思えば、ありに思えてきました。Try は昨日書いたように .NET では bool を返すパターンです(そうじゃないのも混じってるけど)。 ダメなのもありますね。Check はどっちが true かわからないから bool を返
名前大事。間違いなく大事。名前大事を逆手にとって、名前をランダムに改変して読めなくするツールがあることからも、名前がいかに大事かわかります。 名前大事はわかるけど、うまい名前が浮かばないことがよくあって、そういうときはメソッドがうまく設計できていないときだったりもします。じゃあ、きれいに設計されている .NET Framework を調べて、名前付け/設計の極意を学んでみようと思いついたのでやってみました。 あまり手を広げると大変なので、今日はメソッド名の頻出接頭辞を調べてみました。 MSDN にあるメソッド名のガイドラインから抜粋 .NET ではメソッド名は ToString のように Pascal 形式で名前を付けます パラメータ名などには typeName のように Camel 形式を使います メソッド名には動詞または動詞句(うーん、苦手…)を使います 通常、メソッドはデータを操作す
.NET4.0 から従来よりも抽象的で簡単に使える並列ライブラリがどさっと追加されます。おもしろそうなので VisualStudio2010 のベータ1で試してみました。 結論から書くと Parallel.For すばらしい! Concurrent なコレクションはロックなしで複数タスクからデータの追加ができた 今回は約1.4倍しか速くならなかった。不本意。きっと次回に続く 並列?並行? Parallel? Concurrent? ちょっと名前に混乱があるのでまずはここから。 Parallel は並列、Concurrent は並行。 増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編 作者: 結城浩出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/03/21メディア: 大型本購入: 15人 クリック: 287回この商品を含むブログ (206件) を見る 結
ずいぶんと気合入れて追加してきてるみたい。気になるものをメモ。あとでしっかり読……みたい。 http://blogs.msdn.com/pfxteam/archive/2009/03/04/9457880.aspx ConcurrentBag : スレッドセーフってどういうこと?ロックしないで複数のスレッドから同時に Add できる? System.Lazy, System.LazyVariable, System.Threading.LazyInitializer, System.Threading.ThreadLocal http://msdn.microsoft.com/ja-jp/library/system.collections.concurrent(VS.100).aspx http://msdn.microsoft.com/ja-jp/library/system.thre
id:siokoshou:20090704 のはてブのコメント見てるとわからないってコメントが結構あるので、もう一度がんばって説明してみます。まあわかったところで得はないかもしれませんw public static int GetNumberOfTrailingZeros( long x ) { if ( x == 0 ) return 64; ulong y = ( ulong ) ( x & -x ); int i = ( int ) ( ( y * 0x03F566ED27179461UL ) >> 58 ); return table[ i ]; } static int[] table; table = new int[ 64 ]; ulong hash = 0x03F566ED27179461UL; for ( int i = 0; i < 64; i++ ) { table[
一番右端の立っているビット位置(RightMostBit)を求めるコードで速いのないかなーと探していたら、ものっっっすごいコードに出会ってしまったのでご紹介。2ch のビット演算スレで 32bit 値のコードに出会って衝撃を受けて、その後 64bit 値版のヒントを見つけたのでコードを書いてみました。 この問題は ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか (Google book search で原著 Hacker's delight が読めたのでそれで済ませた) で number of trailing zeros (ntz) として紹介されています。bit で考えたときに右側に 0 がいくつあるかを数えるもの。1 だと 0、2 だと 1、0x80 なら 7、12 なら 2 といったぐあい。0 のときに表題どおりの問題として考えるといくつを返すの?ってことになるので、
数日前、オレンジニュースで「2008年度人工知能学会の発表資料「頻出パターン発見アルゴリズム入門 −アイテム集合からグラフまで−」(PDF)が紹介されてました。データマイニングに興味があったので読んでみると、タイトルどおりのわかりやすい入門記事だったのでコードを書いて遊んでみました。 3000件ちょいのデータを使って頻出集合を求めてみたところ、はじめは5分もかかってげんなりしたけど、入門記事の高速化の方法をいくつか試していくと3分40秒になり、あるところで突然1秒を切り、現在は0.1秒程度にまで速くなりました!これは楽しすぎ!プログラマにとって中毒性ありですw 頻出集合 データマイニングは紙おむつを買った人はビールも一緒に買う人が多いという神話でおなじみのあれ。頻出集合とはデータマイニングの基本で、例えば一人一人の買った物のデータからある回数以上一緒に買われたものの集合のことです。{1,2
文字列の高速検索の歴史を年表にしてみたんだけど、年表にしたらめちゃくちゃおもしろいことに気づいてしまいました!今日のエントリーは必見ですよ! id:siokoshou:20060323 に書いた EXACT STRING MATCHING ALGORITHMS に各論文の発表された雑誌が載ってたので、年表に並べてみました。いろいろ検索しててあちこちでみかけた名前だけ並べてます。 1977 KMP 1977 BM (Boyer-Moore algorithm) 1980 BMH (Horspool algorithm) 1990 Sunday Quick Search algorithm 1992 Shift Or algorithm 1992 Turbo-BM algorithm (繰り返し対策.DNAのように文字種の集団が小さい場合に有効) んで、注目のポイントはここ。 1980 BMH
こんばんは、siokoshou です。子供のころ、子供向け教育番組の「テレビの前のよい子のお友達」ってのが誰のことかわかりませんでしたw そういうお約束は小さい子供には難しいと思いますです。 さて、WPF の Binding チートシートのご紹介。バインディングは奥深いし、文法もごちゃごちゃしててややこしいですよね。MSDN ライブラリでドキュメントを見ても、能書きが多くてイマイチです。それはそれで必要なんだけど、それだけじゃなくて、パッと一覧できる実用的なサンプルもたくさん載せるべきだと思います。 で、それに近いものを作っちゃった人がいて Lester's WPF blog で紹介されてたので、リンク張っときます。PDF です。3/11まではちょっと怖いけど(^^; Lester's WPF blog の記事 直リン (PDF) ひじょーーに便利! DropShadowEffect のプ
http://msdn.microsoft.com/ja-jp/library/system.windows.documents.typography.contextualalternates.aspx これはおもしろい!これを使えば、手書きフォントがもっとそれっぽくなるね!日本語だとグリフをいくつも用意するのは現実的じゃないかもしれないけど…。
id:siokoshou:20070225 をもうちょっと改良してみるの巻。 CodeZineで同じネタがVB化されてました。 元ネタはこちら。http://www.microsoft.com/japan/msdn/columns/winforms/winforms02182005.aspx CodeZineの記事は明らかに元ネタを参考にしているのに参考資料にあげてないのは、元ネタのコードがそのままじゃ動かないから?それより、EULAに抵触するような気がしないでもないけど、動かないコードを載せたまま更新してないMSDNのほうがどうかと思うので、まあいいや。 この SortableBindingList、実はかなりお気に入り。SortableBindingList.DataSource に List BindingSource.DataSource に SortableBindingList
こんばんは、siokoshou です。忘れられない CPU 命令は eieio です。 最近 x86 アセンブラがマイブームです。 x86 に詳しくなかったんですがインテルのマニュアルと古い本を何冊か読んでちょっとわかってきました。で、ネットをふらふらしてたらおもしろそうなネタが転がってたので、高速化にチャレンジしてみました。もっと速いコードが示されてるので実用的な意味はありませんが(^^; 続きを読む 前のエントリーの続き。 パイプラインの長い現代 CPU の敵はジャンプだ!ってことでジャンプを cmov 命令(条件 mov)に置き換えてみたんだけど、逆に遅くなってしまいました。cmov にあこがれてて、いつか使ってみたいと思ってたのにガッカリした!! やみくもに使ってもうまくいくわけじゃないんですねぇ。 さらに続き。 もう飽きてきたころに、なんで C のほうが速いんだろうってことで o
nsharp さんに教えてもらったビデオを見てみました。ごちゃごちゃしたメモだけどもう眠いのでそのまま書き残しておきます。 http://channel9.msdn.com/Showpost.aspx?postid=358968 「LINQなんてのは、実装は適用連鎖ですが、根底にある発想は関数合成の方だったりします。」って言葉がとても気になったので。 ヒゲと帽子が似合うって話はおいといてw 関数の合成、圏論のモノイド、関数合成がモノイドを成すこと、そしてモナドを説明してくれるビデオ。でも、英語聞き取るのが難しいorz 型 A を取って同じ型 A を返す(集合 A から A への)関数全体は、関数合成、恒等関数 id (Iコンビネータですね)に関してモノイドを成す、っていう定番のお話。そして、関数合成とモナドの「>>=(bind、束縛)」は同じように「くっつけるもの」だって言ってるようです。
類似文字列を求める処理を書いてみました。文字列を与えると、候補文字列の配列中から近いもの順に返してくる関数です。あいまい検索などに応用できます。 書いてみましたと言っても、以前書いた Diff クラスの使い方の一例だったりします。これ書いてて思い出したけど、Diff 結果の読み取り方を書こうと思ってたのに忘れてた…。まあまたいつかそのうち…(^^; この処理は2つの文字列の編集距離を求めて、近いもの順に並べる処理を行っています。編集距離とは、挿入・削除・置換によって一方の文字列をもう一方の文字列にするのに何回操作が必要かという回数です。ただし、置換を含めるよりも挿入と削除だけの操作の距離を使ったほうが精度がよいので、ここで紹介するものは置換を数えません。つまり、一文字の置換は挿入と削除の距離2とします。コメントアウトしてある部分を生かして前の行をコメントアウトすると置換を一回と数えます(精
クライアントで動く .NET アプリのアプリケーション設定で、ユーザースコープなデータを定義すると user.config ファイルに記録されます。この user.config ファイルを探して列挙するコードを書きました。id:siokoshou:20071227#p1 のファイル列挙のサンプルとしてどうぞ。 ApplicationSettingsBase.Upgrade() をオーバーライドするときや、よそのアプリの user.config を見たいときなどに使えます。 user.config の FileInfo を列挙して返します。バージョンが新しいものから古いものへ、同じバージョンがあれば(署名してないと実行ファイルのパスを変えると user.config は異なるディレクトリに記録される)書き込み時刻が新しいものから古いものへ、という順に並べて返します。LINQ でさらに絞り込み
WPF のアニメーションの簡単さがスゴイ。マウスが乗ったらミョンと大きくなって、はずれたらミョーンと縮むアニメがこれだけでできちゃう。 <Style x:Key="PhotoItems" TargetType="{x:Type ListBoxItem}"> <Setter Property="MaxHeight" Value="150" /> <Setter Property="MinHeight" Value="150" /> <Setter Property="MaxWidth" Value="150" /> <Setter Property="Margin" Value="50" /> <Style.Triggers> <EventTrigger RoutedEvent="Mouse.MouseEnter"> <EventTrigger.Actions> <BeginStoryboa
おもしろい記事を見つけて読みふけってしまったので、おもしろいとこだけぎゅぎゅっと抜粋。 via http://blogs.msdn.com/madst/archive/2006/10/10/What-is-a-collection_3F00_.aspx コレクション初期化子の設計話。なんで「IEnumerable + Add メソッド」なんて変な設計なのさ?って疑問への答え。 駄訳 コレクションとは何か? ICollection は役にたたない、失敗だった。そして ICollection で直した(注:実際、ICollection は ICollection と無関係)。これでみんな ICollection 使うよねヽ(^o^)丿→ 誰も使わなかった(T-T) 誰もは言いすぎた。でも、コレクション初期化子を設計する際、LINQ + リフレクションで .NET フレームワークを調べてみたら、
次のページ
このページを最初にブックマークしてみませんか?
『当面C#と.NETな記録』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く