このブログの中を検索する

2012/03/30

ドッグフーディング=自社製品を自社内で使い倒し


title: ドッグフーディング=自社製品を自社内で使い倒し
url: http://csharptan.wordpress.com/2011/12/11/%E6%96%B0%E6%A9%9F%E8%83%BD%E3%81%8C%E5%85%A5%E3%82%8B%E3%81%BE%E3%81%A7/

snippet:

-----引用-----
ドッグフーディング(dogfooding)ってのは、自社製品を自社内で使い倒して洗練しろという意味です。

ドッグフーディングは、つまり、await演算子前提で作られた、マイクロソフト製の非同期APIをまず充実させろということになります。
-----引用-----

await演算子の歴史


title: await演算子の歴史
url: http://csharptan.wordpress.com/2011/12/11/%E6%96%B0%E6%A9%9F%E8%83%BD%E3%81%8C%E5%85%A5%E3%82%8B%E3%81%BE%E3%81%A7/

snippet:

-----引用-----
まず、2005年前後(ちょうどC# 3.0の正式版が出た頃です)、.NETの方向性として「宣言的、動的、非同期」の3つが上がっていました。Taskクラスも、かなり早い時期からプレビュー版が公開されていました(後に、.NET 4で正式採用)。

そして、await演算子の原形となるアイディアは、確か、2009年ですかね。その年のPDC 2009だったと思うんですが、少しだけデモがありました。当時は、awaitではなく、yieldキーワードを使っていたはずです。それから、開発者が実際に触ってみれるもののプレビュー版が公開されたのは2010年10月です。

正式版は来年でしょうか、まだ未定ですが。来年だとして、7年くらい掛けてることになりますか。
-----引用-----

I/O待ち時間が長い処理は非同期実行


title: I/O待ち時間が長い処理は非同期実行
url: http://csharptan.wordpress.com/2011/12/10/%e9%9d%9e%e5%90%8c%e6%9c%9fio%e5%be%85%e3%81%a1/

snippet:

-----引用-----
I/O待ち(特に通信のレスポンス待ち)にParallelクラスを使おうとすると、大量のスレッドが作られます(これも環境次第ですが、私のところでは70個くらいのスレッドが立ちました)。
-----引用-----

-----引用-----
var tasks = Common.GetQueries(context, keys)
    .Select(x => x.ExecuteAsync()
        .ContinueWith(t => { lock (w) Common.Output(t.Result, w); })
    ).ToArray(); // ToArray を付けて、ここで全タスクを先に起動してしまう。
Task.WaitAll(tasks.ToArray());

待つだけのための無駄なスレッドはなくなります。I/O待ちキューは、「I/Oを待っている処理がある」という程度の小さい情報しか持ちません。
-----引用-----

2012/03/29

LINQデータ処理の方法 : IEnumerableとIQueryable


title: LINQデータ処理の方法 : IEnumerableとIQueryable
url: http://csharptan.wordpress.com/2011/12/09/2%e7%a8%ae%e9%a1%9e%e3%81%aelinq/

snippet:

-----引用-----
LINQ、つまりC#(やVB)のデータ処理の方法として、大まかにいうと以下のような2つの方式があります。
  • 内部加工方式: データ全件もらって、プログラム中で加工
  • 外部クエリ方式: クエリを投げて、外部のサーバー上で処理してもらって、結果だけ受け取る
C#的にいうと、LINQを、IEnumerableを使って書く(内部加工)か、IQueryableを使って書く(外部クエリ)かの差です。

Key-Valueストアのようなデータベースでは、書けるクエリに制限があるため、外部クエリと内部加工のハイブリッドな処理が必要になります。
  • C#なら、AsEnumerableを付けるだけで一発切り替え
  • ただし、AsEnumerableを付ける位置にはくれぐれも気を付けましょう
-----引用-----

コンパイル結果のバイト コード(Java仮想マシンの中間言語)を見るには


title: コンパイル結果のバイト コード(Java仮想マシンの中間言語)を見るには
url: http://csharptan.wordpress.com/2011/12/08/%e3%82%b8%e3%82%a7%e3%83%8d%e3%83%aa%e3%83%83%e3%82%af/

snippet:

-----引用-----
Javaコードを例えばProgram.javaという名前で保存して、

javac Program.java
javap -c Program
-----引用-----

値型と参照型


title: 値型と参照型
url: http://csharptan.wordpress.com/2011/12/07/%e5%80%a4%e5%9e%8b/

snippet:

-----引用-----
値型と参照型:
  • 継承や仮想メソッドを使う場合、 値型でなく参照を使わないとうまく動かない 
  • 参照型を使うと、1段階余計な間接参照が起こります。
  • オブジェクトのサイズが小さく、読み書きの頻度が高い場合、無視できないコストになります。
-----引用-----

主成分分析


title: 主成分分析
url: http://csharptan.wordpress.com/2011/12/05/%e7%b5%b1%e8%a8%88%e6%95%b0%e5%ad%a6/

snippet:

-----引用-----
X={xij} (第i週のj曜日のPV)
RX=X^T X (Xの相関行列)
RX=V^T Λ V (相関行列を固有値分解)
として、固有値のうち、絶対値が最大のものが、Λ の k 行目に現れるものとします。すると、
Y=V^T X (Xを相関行列の固有ベクトルを使って分解)
のk行目に、主成分(データ系列をもっともよく表す成分)が現れます。
-----引用-----

2012/03/28

Sho : Microsoft Researchの数値解析ライブラリ


title: Sho : Microsoft Researchの数値解析ライブラリ
url: http://research.microsoft.com/en-us/projects/sho/

snippet:

用途
  • 固有値分解
  • 行列計算

.NET 正規表現 書式設定 リファレンスまとめ


title: .NET 正規表現 書式設定 リファレンスまとめ
url: http://csharptan.wordpress.com/2011/12/02/%e6%96%87%e5%ad%97%e5%88%97%e5%87%a6%e7%90%86%e3%81%a3%ef%bc%81/

snippet:
-----引用-----

// d:10進数、0詰め桁数指定 
Console.WriteLine("{0:d}, {0:d4}", 5); // 5, 0005 

// f: 小数点、小数点以下の桁数指定 
Console.WriteLine("{0:f}, {0:f5}", 0.1234); // 0.12, 0.12340 

// g: f か e かを自動選択 
Console.WriteLine("{0:g}, {1:g}", 1200000000000000.0, 0.12); // 1.2e+15, 0.12

// r: 復元するのに十分な桁数で出力 
Console.WriteLine("{0:r}", 0.1234567890123456789f); // 0.123456791 

-----引用-----

2012/03/21

Google Chrome拡張機能(アドオン)の作り方

title: Google Chrome拡張機能(アドオン)の作り方
url: http://code.google.com/chrome/extensions/getstarted.html

snippet:

-----引用-----
  1. Create a folder somewhere on your computer to contain your extension's code.
  2. Inside your extension's folder, create a text file called manifest.json, and put this in it:
    {
      "name": "My First Extension",
      "version": "1.0",
      "description": "The first extension that I made.",
      "browser_action": {
        "default_icon": "icon.png"
      },
      "permissions": [
        "http://api.flickr.com/"
      ]
    }
  3. Copy this icon to the same folder:

    Download icon.png
  4. Load the extension.
    1. Bring up the extensions management page by clicking the wrench icon  and choosing Tools > Extensions.
    2. If Developer mode has a + by it, click the + to add developer information to the page. The + changes to a -, and more buttons and information appear.
    3. Click the Load unpacked extension button. A file dialog appears.
    4. In the file dialog, navigate to your extension's folder and click OK.
If your extension is valid, its icon appears next to the address bar, and information about the extension appears in the extensions page, as the following screenshot shows.

-----引用-----

AppleとSony

title: AppleとSony

2012/03/10

CSSセレクタ

title: CSSセレクタ
url: http://msugai.fc2web.com/web/CSS/selector.html

snippet:


-----引用-----
セレクタ = スタイルを適用する対象を選択するもの
CSS の書式 = セレクタ { プロパティ: 値; プロパティ: 値 }
  • 属性セレクタ = a[target="_blank"] { font-weight: bold }
  • 子供セレクタ = body > p { line-height: 1.5 }
  • 隣接セレクタ = h1 + h2 { margin-top: -5mm }
-----引用-----

データベースモデリングのためのEclipseプラグイン

title: データベースモデリングのためのEclipseプラグイン
url: http://enterprisezine.jp/dbonline/detail/3827
http://ermaster.sourceforge.net/index_ja.html

snippet:

-----引用-----
ERMasterはオープンソースのERモデリングツールの中でも最も高機能と思われるツール

Eclipse上でグラフィカルにER図を作成し、ER図からDDLを生成できたり、既存のデータベースからリバースエンジニアリングでER図を作成できるのはもちろんのこと、ドキュメントとして必要な情報を入力することができたり、テーブル定義をExcelファイル(Excelファイルのフォーマットはカスタマイズすることも可能)やJavadoc風のHTMLとしてエクスポートすることができるなど業務で利用することを強く意識した機能が多く搭載されているのが特徴です。
-----引用-----

2012/03/04

できる!並列・並行プログラミング

title: できる!並列・並行プログラミング
url: http://www.slideshare.net/pfi/ss-9780450

snippet:

-----引用-----
ロックのもたらすバグ・不具合一覧
  • アンロックし忘れ
  • デッドロック →つまり ロックの順番を同じにしなければならない
  • ロックの不足(Race Condition = 競合)
  • ロックの過剰(全然並列にならない)
  • モジュラリティの欠如 →つまり ロックを用いたプログラムを組み合わせることは不可能である
-----引用-----

エラー処理を書いてはいけない

title: エラー処理を書いてはいけない
url: http://research.preferred.jp/2011/12/do-not-write-error-handling/

snippet:

-----引用-----
  • リソース管理をしてはいけない →そこで RAII
  • ロック処理を書いてはいけない →そこで
    • メッセージパッシング
    • Software Transactional Memory(STM)
    • Concurrent Revisions
  • エラー処理を書いてはいけない →そこで モナド?
-----引用-----