++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

Archive for 5月 2010

WebSharper、Windows SDK for win 7 & .NET 4

leave a comment »

1週間ぶりに RSS 消化してたら、MSDN ブログが改修に伴って URL 変わっちゃったようでリンク切れまくりで困る・・・

Written by ufcpp

2010年5月28日 at 05:57

カテゴリー: .NET

個人情報保護ねぇ・・・

leave a comment »

今日はこのようなやり取りを twitter にて。

  • ufcpp: http://bit.ly/aCxTsN こういう業者って個人情報保護法的にどうなるんだろう。うちにもちょうどこの会社からの無差別営業来たんだけども。
    • guicheng: まず個人情報保護法第17条で不正な手段を用いた個人情報の取得が禁じられています。第15条で利用目的を極力特定する必要があり、16条で利用目的を超えた取り扱いが禁じられています。
    • yamatoya: @ufcpp 個人情報保護法に則り入手方法の開示、ならびに名簿からの削除依頼をすると良いかも。
  • ufcpp: 個人情報保護法は民事になるのかな?刑事罰なら、警察に通報とかどうなんだろう?>http://bit.ly/aCxTsN
    • guicheng: @ufcpp 法律に罰則規定があるので、どちらかというと警察の管轄かな? おそらく最初の窓口は消費者センターだと思います。
  • ufcpp: @guicheng あー、削除に応じれば平気なんですねぇ・・・。道理で、「うちからは削除しますので」をやたらと強調すると思った・・・<クレーム入れた際の対応
    • guicheng: @ufcpp はい、そこが抜け道です。しかも受け手にしてみれば検証可能性が皆無ですので、もう一度かかってきた場合にしか御上に相談できません。
    • guicheng: @ufcpp 綿密にみてみると、個人情報保護法ってのはかなりのザル法です。運用でカバーということになってるとは思うんですが、ブラック企業の手口はその何枚も上を行きますので。
      • ufcpp: @guicheng まあ、どの道いたちごっこですからねぇ。健全な企業の足かせにまでなったら困りますし。

最近、引っ越しに伴って色々と住所書いたりしてたら「駿馬レーシング」とかいう意味の分からない会社から営業電話がかかってきたんでどうしてくれようという話。営業電話とか、普段、そう気にも留めないんですけど、大のギャンブル嫌いなものでつい。

色々考えさせられるなぁ・・・

  • 普通この手の営業って「どこから番号/住所を入手されたんですか?」ってあたりで攻め立てたらひるむもんなんだけど、この会社の堂々としたことと言ったら
    • 「どちらから?」って聞いた瞬間、「少々お待ちください」 → 専門の担当者と思われる人に交代 → 「弊社は業者に依頼しただけなので関知していません」、「では、あなたの情報は削除するよう業者に依頼します」
    • 最初から悪いことやってる自覚あるから防衛もきっちりやってるなぁ
  • 普段気にも留めないのに「ギャンブルだから」気になったわけですけども、電車の広告やらコンビニの雑誌欄やらでさらされてるポルノも似たようなもんよなぁ。「中にはすごく不快な気持ちになる人がいる」
    • ゾーニングはほんときっちりやらないと
  • そんなに法規制的なことは好きじゃないんでまた悩ましいところ
    • というか、法じゃなくて電子システムで何か解決できないもんかなぁ
      • 誰にどういう情報が渡ったとか、全部履歴のこっちゃっていいんで、不正利用がマルバレするような
      • 趣味嗜好ばらしてもいいから(Amazon おすすめ商品的な)、不快なものからの営業だけは絶対来ないような
  • ちなみにギャンブル嫌いな理由:

Written by ufcpp

2010年5月27日 at 12:26

カテゴリー: 未分類

SL4 Tools リリース、Bing ショッピング、等々

leave a comment »

Written by ufcpp

2010年5月19日 at 14:17

カテゴリー: .NET

C# → VB コンバーター、Silverlightでチャート印刷、等

leave a comment »

あと、@IT にて、僕の書いた WPF 入門の連載が始まりました→ 第1回 いよいよWPFの時代。WPFの習得を始めよう

公式にはグランドトップ(@IT のトップページの一番上、表紙扱い記事)にしていだけ、twitter では皆様に RT 宣伝しまくっていただけ、本当にありがたい限りです。

内容に関しては、入門ということもあって初回は概要説明です。本当にこれから WPF を学ぶ人はもちろん、「自分は WPF を使いたくてしょうがないんだけど、どうやって上司やチームメンバーを説得しよう」とかお悩みの人は是非。あと、こういうプログラミングモデルのレベルの話でいうと、ほんとに WPF と Silverlight とで差が皆無なんで Silverlight を学び始めたいという方も使えるのではないかと。

Written by ufcpp

2010年5月14日 at 13:59

カテゴリー: .NET

戦闘力

leave a comment »

戦闘力

作画: Paese

この意味がわかるな?

 

すみません。つい勢いで。

その他の VS チームのスペックはこちら参照→ "Dogfooding" VS 2010 and .NET 4

結構前の話なんですけども、Tech Days の後にみんなで行った飲み会でこんな感じの話がでたわけですよ、「戦闘力はんぱねぇ」みたいな。単純に大規模開発のチーム力って面を見るならほんとに○リーザ様。○ジータも○ッコロさんも絶望するレベル。

ちなみに、たぶん、3500人ってのは VS の GUI まわりだけじゃなくて、.NET 4/C#, VB 含めた全体かと。.NET Framework もランタイム、ライブラリともに大幅書き換えしたみたいですし。あと、聞き及んでる感じからの推測では、3500人の内わけはプロジェクト管理500人、開発1500人、テストエンジニア1500人ってところですかね。開発とテストがほぼ同数くらいって話なんで。それくらいやらないといまどきのソフトウェアって品質の担保できないんですよねぇ。

Written by ufcpp

2010年5月13日 at 13:28

カテゴリー: C#たん

Visual Studio 2010 からソースコードを PowerPoint にコピーすると文字化けする

leave a comment »

表題のとおり。VS の不具合とするにはちょっと微妙なんですけどもねぇ・・・

症状

例えば、以下のコードをコピって

var str = "サンプル";

PowerPoint に張り付けるとこうなる↓

var str = "サTン?プvル?";

これはひどい・・・。

原因?

一応、大方の原因の予想は付いていて、たぶん、

  1. VS 2010 では、ソースコードをコピーした時に RTF 形式の場合、他バイト文字をエスケープするようになった
  2. PowerPoint がエスケープされた文字を正しく解釈しない

1はどういうことかというと、上記のソースコードをコピーした後、クリップボードの中身を RTF で GetData すると、以下のような RTF になっていることが分かります。

"{\rtf\ansi{\fonttbl{\f0 MS Gothic;}}{\colortbl;\red0\green0\blue255;\red163\green21\blue21;}\f0 \fs19 \cf1 var\cf0  str = \cf2 "\uinput2\u12469 ?T\uinput2\u12531 ??\uinput2\u12503 ?v\uinput2\u12523 ??"\cf0 ;\par }"

この、\input2\uXXXX みたいになっている部分がもともと日本語だった部分。XXXX のところには Unicode が十進数化された物が入っています。確か、VS 2008 の時は日本語も日本語のまま入ってたはず。なんでこんな仕様変更しやがりますか・・・。(GetData("text") だと普通に日本語のまま入ってるんですけどね・・・)

で、クリップボードに RTF で入ってくれてるおかげで、例えば Word に張り付けると、var とか ”” の部分の構文ハイライトの色がそのまま貼り付けできるわけなんですが、問題は、PowerPoint がこのエスケープされた文字を正しく読めないという・・・。ひどい。

対策?

バグ報告?

一応、クリップボード触れる人なら対策は取れるんですけどねぇ・・・。以下のような正規表現 Replace でいじれば。

Regex regU = new Regex(@"\uinput2\u(?<code>-?d*)s..", RegexOptions.Compiled);

string DecodeU(Match m)
{
    return new string((char)int.Parse(m.Groups["code"].Value), 1);
}

var rtf = Clipboard.GetData(DataFormats.Rtf) as string;
rtf = regU.Replace(rtf, DecodeU);
Clipboard.SetDataObject(rtf);

ないわー。

自分がなんでこんなの知ってるかって言うと、C# によるプログラミング入門のサンプルコード載せるのに使ってるから。普通そんなの知らないですよねぇ・・・。

追記:

というか、この正規表現(だいぶ前に自分で書いたもの)、よく見たら、よく分からない謎の2文字を読み飛ばして無視するような黒魔術的コードになってますねぇ。ちょうど、PowerPoint に張り付けた時に出てきてる化け文字に一致してるし、この部分が VS のバグっぽいかも。

追記2:

中さんがちょうど昨日バグ報告入れてたw うーん、RC の頃から気づいてたわけで、「英語版だからよね?」とか言わずに Connect に報告入れておくべきだったのかな。

Written by ufcpp

2010年5月11日 at 15:19

カテゴリー: 未分類

C# たん絵、もう1枚

leave a comment »

VS 2010 リリース記念のと一緒にもう1枚描いてもらってたやつ。

C# たん

作画: Paese

  • 今回は C# たんの本性的な絵をということで
    • 「神々しさとトリックスターっぽさを同時に出せない?」みたいな注文
    • 最初はもっと神々しさと威厳持った感じ(ストリートファイターのボス的な)も考えてたけど、頭身的に無理ぽということでトリックスターな感じを足してごまかす
    • 最終的に、表情は可愛いままで、姿勢で神々しさとトリックスターっぽさを出してもらうことに
      • 姿勢的にイメージ材料として提示したのは FF VI のケフカだったり
  • 過去の傾向的に、背景こってるものは pixiv でお気に入り登録されやすいっぽいので、今回はがんばってもらうことに
    • F# たんのとかはダントツで被お気に入りが多いようで
      • 「本に埋もれた感じ」が好きな人は pixiv にかなり多いのかなぁと
      • 特にこれ、女性受けよかったみたい

Written by ufcpp

2010年5月8日 at 16:37

カテゴリー: C#たん

IE preview 2、WP開発トレーニングキット4月版、CLI on the Web、等

leave a comment »

  • HTML5 and Same Markup: Second IE9 Platform Preview Available for Developers
    • IE9 preview のバージョンが上がったって
  • Windows Phone Developer Training Kit April Refresh
    • WP7 向け開発トレーニングキットがバージョンアップ
    • Push Notification のハンズオンが付いたり
    • サンプルがいくつか増えたり
  • CLI on the Web – Miguel de Icaza
    • Mono の中の人がプラグインなしの first class citizen としてのブラウザー内 CLI 実行に興味をお持ちのようです
      • 開発者がWeb開発にいろんな言語を選べるようになるし
      • strongly-typed な言語使えばパフォーマンス上がるはずだし
      • ブラウザー API を拡張する安全なメカニズムも提供できて、技術革新進みそう
    • それはほんとに可能ならやって欲しいですねぇ
      • HTML+JavaScript が Silverlight 並の表現力手に入れるってシナリオよりは現実味ありそう
      • でも、Google Native Client 辺りと泥沼の消耗戦しそう・・・
  • CassandraのLINQProvider作ったよ( ̄∇  ̄ )
    • LINQ で使えてなんぼですよね

Written by ufcpp

2010年5月6日 at 14:41

カテゴリー: .NET

immutable

with 8 comments

変数の immutability に関する議論、今に始まった話でもないんでしょっちゅう見かけるには見かけるんですけど、まとめ的な話はあんまりきれいにまとまってるところ見かけないなぁとか思ったり。

というので、まだそんなにきれいに整理できてるわけでもないけど、ちょっと書いてみる。

値の不変性

値の不変性にもいくつか種類があって、

  1. constant: コンパイル時定数に名前を付けておきたい
    • 扱いが完全にリテラルと一緒になるやつ
      • C# の const
      • C++ の場合、#define の代替としての const
    • ようは、パフォーマンス的な話で、コンパイル時に解決できる値は全部コンパイル時にやっちゃいたいって話
    • ぶっちゃけ、リテラルが定義できるようなものだけ const 付けれればいいのかなぁと
      • C# の場合、整数型と string と enum だけが const になれる
      • C++ は逆に、constexpr & ユーザー定義リテラル認める方向で進化してるっぽいですけど
  2. immutable: 初期化時以外は値の変更不可
    • 不用意なタイミングで値が変わって困るくらいなら、そもそも初期化時以外で値の書き換えできないようにしたい
      • 特に、並列処理やってると、よそのスレッドで値書き換えられたりすると意味わからない結果を招く
    • ローカル変数の場合はほとんどの変数が immutable で事足りる
      • 実際、mutable であって欲しいのはループで集計用とかカウンターに使う変数だけ。それ以外で変数を書き換えることってめったにない
  3. one-phase construction: データは一気に初期化したい
    • 「x と y は同時には 0 になっちゃいけない」みたいな、複数のメンバーに渡ったデータ検証を考えた時、x と y を別個に set されると一時的とはいえ不整合が起きる
    • コンストラクターでしか値の初期化しないならそういう心配しなくていいよねということ(その意味では 2. の immutable の派生)
    • まあ、コンストラクターに限定する必要はないけど、とにかく、プロパティ値の set は全プロパティ一気にやりたい(なので実は別に immutable と関係ない)

不変なものの作り方

1. の constant の方は古くからある概念なんで割と素直に理解できる話。ただ、C++ の場合は 2. の意味でも const キーワードを使っちゃうんで話が複雑に・・・。その点、まあ、キーワード増えて気持ち悪いのは気持ち悪いけど、const と readonly を分けた C# は正しいと思う。

C# での 2. の immutable の保証、値型の場合には readonly つければ済むことですが、参照型の場合には参照の上書きができないだけで参照先のデータまでは readonly にならないんで、少し工夫が必要というか、クラス作成側で immutable になるようにクラスを作らないとダメ。例えば、

public class Data
{
    public Data(int x, int y) { X = x; Y = y; }
    public int X { get; private set; }
    public int Y { get; private set; }
}

みたいなクラスを作れば、コンストラクター以外で値を変更できない immutable なクラスになる。

C++ みたいに「普段 mutable な型が const キーワード付けた時だけ immutable になる」っていうのは無理。最も、C# でそれが必要になる場面っていうとあんまり思いつかないですが。C++ の場合はパフォーマンスの問題から普段 mutable な型の const 参照を作る機能が必要だったけど、C# の場合にはそもそも class が全部参照なんで。

ちなみに、C# 3.0 で導入された匿名型はこういうタイプの immutable になってる。

2種類の immutable

immutable には2種類考え方があって、

  1. 内部的に immutable
    • private メンバー含め、全部がほんとに初期化時以外書き換わらない
  2. 見かけ上 immutable
    • public なメンバーが初期化時以外で書き換わっていないように見える
    • 例えば内部的に計算結果のキャッシュを持つとか、private メンバーが書き換わってる可能性は否定しない
    • いわゆる遅延評価ってのをやろうとするとこっちにならざるを得ない

前者の内部的な immutable はコンパイラーによるチェックで保証もできるけど、後者の見かけ上の immutable はプログラマーの裁量とテストに頼るしかなくて大変。

C++ の const は元来 1. の意味。ただ、メンバー変数に mutable キーワードを付けることで、無理やり 2. の意味の immutable を実現可能。その場合、結局のところほんとに immutable になってるかどうかはプログラマーの裁量に任せられる・・・のであんまり意味があるようにも思えないという欠点あり。

不変なものの使いどころ

C# とかでの class の使い方も種類があって、

  1. 普通に OOP 的な意味のクラス、操作の対象
    • GUI の UI 要素とか、ファイルシステムのオブジェクトとか、WCF の Service とか
    • 本質的に mutable なもの(immutable にしても役に立たないもの)も多くて、あんまり immutablity を考える意味なさげ
  2. データを表すもの
    • O/R マッパー的に言うところの Entity、WCF 的に言うところの DataContract
    • こっちは、データの不整合防止とか並列処理すること見こすと、極力 immutable の方がよさげ
      • LINQ で使うような型は特に

なので結局、C# に immutable を保証する機能を入れるとするなら、

  • Entity 相当のものの immutable を保証する機能を足す
    • 無難なのは、「不変なものの作り方」のところで書いた getter だけが public なプロパティを持ったクラスを生成するような構文糖衣かなぁ
      • メソッドも getter アクセスしかしない
      • C++ の const みたいに普段 mutable な型を immutable に変える機能までは不要なんじゃないかと
      • C# の言語上での保証はできても、IL 上での保証をどうやるか難しそう
    • 見かけ上の immutable は考えない方がよさげ
      • そもそも並列化を見こすということなら、見かけ上の immutable はない方がいいし
      • それにそこを考え出すと、コンパイラーによる静的なチェックだけでは限界があって CodeContract みたいな仕組みとの連携も必要で複雑になるし
  • スレッドをまたいで渡していいのはその immutable なオブジェクトだけに限るような仕組みを何か足す
    • Parallel LINQ は 4.0 ですでに入っちゃったんで、これから言語的な保証を足すのはもう難しいかもしれないけども
      • プラクティスとして「Parallel LINQ で使う場合には IEnumerable<T> の T は immutable にしましょうね」というくらいしか
    • Axum みたいなアクター型のタスク並列機能を追加するなら、アクター間の通信には immutable な型しか認めないとか

ってところなのかなぁとか思ったりしています。

Written by ufcpp

2010年5月5日 at 17:16

カテゴリー: 未分類

WP7 Tools更新、Spindex、MS Web N-gram Services、等

leave a comment »

  • やっと Windows Phone Developer Tools CTP が Visual Studio 2010 の RTM 版で動くようになったって
    • ダウンロード: http://www.microsoft.com/downloads/details.aspx?FamilyID=cabcd5ed-7dfc-4731-9d7e-3220603cad14&displaylang=en
    • ただ、当たり前のように英語版のみ
      • ちょっと試した感じ、日本語 VS しか入れてないとインストールできない
      • でも、Visual Web Developer の英語版(日本語 VS と共存可能)をインストールした後なら Tools も入った
      • ↑で一度入れてしまえば日本語 VS でも WP7 開発可能
      • なら最初から言語ではじかなくてもいいのに・・・
  • Spindex Tech Preview
    • FUSE Labs (こないだ Docs を公開してたとこ。MS 内のソーシャル関連の研究やってるとこ)が新たに公開したサービス
    • twitter とか Facebook とかの情報を全部まとめて一元管理するとか
    • とりあえず、invite request 出してみた
  • Microsoft Web N-gram Services Now in Public Beta Worldwide
    • MS が持ってる N-gram データに誰でもアクセスできるようになったみたい
      • bing がウェブからクロールしてきたものっぽい
    • 検索、翻訳、音声処理などに使いたい方は是非
  • Use IntelliTrace without Visual Studio .NET
    • VS 使わず IntelliTrace 単体で動かす方法
    • でもやっぱ VS Ultimate 入れてないとこのツールも入らないのかな?

Written by ufcpp

2010年5月5日 at 11:45

カテゴリー: .NET