Archive for 5月 2009
Visual Studio 2010 β1を肴に飲む会やってきた
遅くなったけど、昨日のレポートを。
こういうレポート、ちゃんとcsharp-users.jpドメイン内のどこかに残しとくべきだよなぁ。いずれページ作らなきゃ。
参加者:
以下、出た話題で覚えてるところを。
M Grammer
- 前に僕の書いた C++ パーサーの話題から、C++のソース解析の話に
- 「だるい」とか「絶対やりたくない」とかなんとかいいつつ、意外とC++ パーサーを書こうとしたことがある人いたりいなかったり
- pdb(VC++のデバッグシンボルデーターベース)解析してリフレクションもどき使ってリフレクションしてる人もいるよ(Gauche で使われてるとか)
そういや、ちょうどOslo May 2009 CTPも出たところですよね。
今朝、やっとMay CTPインストールしてみて、C++ パーサーがちゃんと動くか確認してみました。
- M Grammarの文法変わってないんで特に問題は出ず。
- June CTPではバグでパースできなかった if (x < 10) みたいなコードでの問題(小なりがパースできない)は解消してた
- でも、if (x < 0 && 10 > x) は相変わらずパースできない(< 0 && 10 > の部分を #include <header> の <> と勘違いされる)。これはやっぱバグよなぁ。フィードバック入れとこう。
まさかTeXが下火に
M Grammarの話と関連して、
- M Grammar、yacc/lexとかbison/flexとかを置き変えれそうなものがようやく出たね
- なまじ、そこそこちゃんとしてて、デファクトに近い地位を得てるものを現代風に洗練する作業って、なかなか誰もやらないよね
- makeがMSBuild(非.NETだとAntとか)に、シェルがPowerShellにとなってるわけだし、M Grammarにも頑張って欲しい
- TeXですら、最近下火というか、MS Word入稿な学術会議・論文誌増えてるし
- まして、最近はLaTeXのスタイル用意されてなくて、Wordテンプレしかないところも
Intel SSD
SSDエヴァンジェリストとして名高い(?)NyaRuRuさんがIntel SSDのスピードがいかほどのものかをデモ(笑)
ノートPC再起動 → 即ログイン → ログインした瞬間(まだ色々常駐アプリ起動途中)にVS2008起動 → F1キー押してヘルプ起動
という一連の操作で、あのクソ重たいことで有名なVSのヘルプがものの1・2秒で開くという。
で、ちょうど先週、僕はノートPCを新調したんですけども、SSD搭載モデルにしたんですよね。その場でこのノートPC開いてNyaRuRuさんと同じことやってみた。やっぱり速い。
Code Contrasts
ちゃんと、VS2010な話題も。
- VS2010というか、.NET 4で注目の昨日の1つにCode Contracts(契約プログラミング支援ライブラリ)がある
User Manual を見ると「VS2010にはContracts用のコードスニペットが入ってる」って話なのに、実際試してみたら出てこないなぁって思ってたんですけども、どうも、VS2010 β1には間に合ってなかったみたい。で、開発サイトから最新版を取ってきてインストールすると使えるようになるとか。
ぶっちゃけ、ライブラリの使い方とか、ドキュメント読んで覚える気あまりない(VSに頼って覚えたい)ので、これは早速最新版をインストールしないと。
最近のMicrosoftは、こういう部分部分を小出しにするの認めてるのよなぁ。考えてみたらすごいことかも。
あと、「Code Contractsからは激しくMS Research臭がする」みたいな話題も。確かに、ばかでかい会社だと製品に作ってる部署の色が出ますよね。
VS2010はWPFでプラグイン書けるよ
- Silverlightに取って食われそうなWPFですけど、VS2010のプラグインがWPFで書けるといわれるとやっぱりうれしい
- 誰か、何か書いてみた?(あるいは書いてみない?)という話題から・・・
- ドキュメントコメントに図を埋め込みたいよね
- 「外部の画像ファイルのパスを書いて、それをプラグインで表示」ってのはすでにあるらしい
- やっぱ、図もテキストベースで描きたいよね(笑)
- はてなのgraph記法とかみたいなので、グラフ出したり音鳴らしたり(笑)
- XAML埋め込む?
- VS2010を痛IDE化するプラグイン
- で、また海外の開発者から「ジャパニーズはクレイジーだ」みたいなこと言われると
- ちゃんと、上司が現れた時に隠す機能も入れないとね
Silverlightデモ
最近、++C++; の勉強用ページにSilverlightを使ったデモを足してたりするわけですが。
で、昨日これの話題も出て、「いっそのこと、Silverlight上に仮想OS実装して、仮想CLR実装して、仮想Silverlight実装して、SilverlightでSilverlightの仕組みをデモしたりとかどうですか?みたいなこと言われたり(笑)
それは冗談としても、コンパイル結果を見ながらXAMLを編集できるようなオンラインエディターくらいはあってもいいよなぁ。
てか、前々から結構思ってるんだけど、オンラインエディターはあった方が。wonderflの.NET版。初心者のとっつきやすさって観点から。
VS 2010 β1を肴に飲もうの会は29日(金)20時から新宿で
土曜に書いたVS 2010 β1を肴にして飲み会開こうかって話、29日(金)の20時から新宿でという感じに。
数名はまだ増えても大丈夫。
C#ユーザー会 飲み会(VS 2010 β1を肴に飲もうの会)
タイトル通り、Visual Sutdio 2010 のβ1が出たことだし、そろそろ C# ユーザー会でまた懇親会でも開こうかと思っています。
今のところ、
- 場所は新宿近辺
- 来週~再来週(25日の週~6月第1週)あたりで、個人的には平日の晩希望
で考えています。
まず、大まかに、参加したいって人がどのくらいいるかを知りたいので、興味のある方は希望日等添えてご連絡いただけると嬉しいです。
連絡方法は、http://ufcpp.net/ のトップページのプロフィールからたどるなりして、メールでも、ここのコメントでも、mixi でも、twitter の DM でも、なんでも OK です。
土日は出かけてる方も多いと思われるので、25日(月)の晩ごろまでとりあえず様子見。その後、人数等を見て詳細考えてまた告知いたします。
Visual Studio 2010 β1
以下感想等。
- インストールオプションが「.NET開発」と「C++開発」のチェックボックス2つだけになってる!
- 開始10秒でVS落ちたw
- 社名に変な文字が入ってたくさい・・・
- AssemblyCompany属性のパース中に落ちてた。そこを別エディターで開いて書き変えたら解決。
- VM上じゃなくて、実機で使えるとかなり快適
- C# 4.0の仕様追加・変更なし
- ただ、CTPの時に実装間に合ってなかった部分は当然実装された
- dynamic 型同士の演算子呼び出しとか、static関数のdynamic dispatchも可能に
- IEnumerable<T>とかに in/out フラグがちゃんとついてる
さて、VS2010がβになったら書こうと思ってたネタが多々。C# 4.0関連(特にdynamic)を詳しく書いたり、並列処理がらみの話書いたり。でも今週、帰省しないといけない用事が入ってるのよなぁ・・・
日本C#ユーザー会 開発室
ドメイン取ったはいいけど見事に放置中のC#ユーザー会、一応、何かやろうっていうアイディアだけはあるんですよ。アイディアだけは。
で、それも、手元に置いとくとどんどん埋もれて行っちゃうので、パブリックにしようとずっと思ってて。「パブリックにするぞ」ってこと自体が埋もれちゃう前に、とりあえずブログ化。
まずは今現在出てる話を3件ほど:
わんくま同盟 東京勉強会#33 行ってた
ちょっと体調悪いんで懇親会二次会には出ずに早めに帰宅。
MGrammarの話とかやると結構重要あるんですかね、わんくま。一応、C++(の一部分)をパースできる程度にはMGrammar使ってるんで。
そういや、アキラさん曰く、僕にならわかる小ネタをC++テンプレートテクニックに仕込んであるって話らしいんですよね。ちょっと隅々まで読んでみなきゃ。(目次読みしかしてなかったり。流し読みくらいはしてて、プロパティもどきとか仮想関数テーブル自前実装とか、テンプレートを使うとずいぶんきれいに書けるんだなぁって関心はしてたんですけど。)
あと、懇親会はSilverlightを囲む会の佐保さんの隣だった。users.jpシリーズの1つ、silverlight-users.jpを立ててるのもこの方。zio3さんとかとC#-users.jpを立てるかって話になったときに、「あれ?C#-users.jpってまだないんだっけ?」「ああ、あるのはSilverlightの奴」みたいな会話してたんですけども。
Silverlight-users.jpとC#-users.jpとで一緒に何かできるといいんですけどもね。とりあえず、Silverlightを囲む会の東京進出の際にはお手伝いしますという話はしてきました。
フォルダを移動したらオートで
今日の小ネタ。
今日、同僚がこんな感じのPowerShellスクリプトを書いてた。(WindowsPowerShell/profile.ps1 の中に書いて、PowerShell起動時に自動で読まれるようにしてた。)
というか、「PowerShellの細かい文法教えろ」って呼び出されて、一緒にスクリプト書いてた。
$script:IsActivated = $false
$script:originalPrompt = (Get-Command Prompt).ScriptBlock
function Prompt()
{
if(-not $script:IsActivated)
{
if($(pwd) -match ‘特定のパス’)
{
$configFile = Join-Path $(pwd) ‘設定ファイル名’$path = cat $configFile |
%{ if($_ –match ‘paths*=(?<v>.*)’) { $matches.v } }
$env:Path += ‘;’ + $path$script:IsActivated = $true;
}
}& $script:originalPrompt
}
どういうものかというと、
- Prompt関数を上書きすることで、フォルダを移動した瞬間を拾う。(それ以外も拾っちゃうけど)
- 特定のフォルダに移動したときに、設定ファイルを読み込んで、
- 設定中のパス設定を、環境変数のPATHに追加。
- 1回だけその処理をしたいので、フラグ立てて終了。
- プロンプトの内容自体は上書きしたくないので、前のPromptの内容を覚えておいて、それを呼び出す。
上から順に、簡単な説明:
- Prompt関数
- プロンプト表示は、実はPrompt関数が毎度呼び出されてる → Prompt関数を上書きしちゃえばフォルダを移動した瞬間も拾える。
- フォルダ判定
- pwd (Get-Location に対するエイリアス)で今いるフォルダのパスを取れる。
- $(pwd) –match ‘パス’ で特定のパスにいるかどうか判定
- 設定ファイルから値を取得
- cat(Get-Content に対するエイリアス)でファイルの中身取る。
- $_ –match ‘パターン’ した後は、$matches 変数に正規表現マッチの結果が入る。
- パターンのところに (?<tag>.*) って感じでtagを入れておくと、$matches.tag で()内の値を取れる。
- $IsActivated = $true でフラグ立て。PowerShellの論理値リテラルはtrueじゃなくて$trueなので注意。
- 同僚、Githubにパスを通してるせいで $IsActivated = true が構文エラーにならなくてはまってた(Githubに true.exeって実行ファイルがあるんで、これを呼んじゃってた)。
- 以前のPromptを保存
- Prompt関数上書き前に、(Get-Command Prompt).ScriptBlock で以前の中身を取得しておく。
- $originalPrompt = (Get-Command Prompt) だけだと、& $originalPrompt で上書き後のPromptを参照しちゃうので永久ループにはまる。
数式入力
数日前の記事だけど、Windows 7の手書き数式入力とWord 2007 MS Mathアドインのキーボード数式入力で入力速度の競争してみたって。
結果は、流石に入力スピードは手書きの方が早かったけども、割と間違いだらけだったとか。Mathアドインの方はエラーなし。
以下、それぞれに関してちょっとメモ書き。
- Windows 7 数式手書き認識
- Vistaでも、タブレットをつなぐと手書き認識機能が使えるけど、7だと数式も認識してくれるし、タブレットなくてもマウスだけで使える
- 書いた数式はMathMLでコピーできる
- Mathematicaとかに張り付けられる
- でも、確かMS Math 3.0ってMathMLに対応してないよね?書式は独自形式だし。
- MS MathはMS Mathで別に手書き入力ウィンドウ持ってるけど、使い勝手はWindows 7の奴の方がよさそう・・・。
- 参考:
- Word 2007 MS Mathアドイン
- 「行形式」っていう、Unicode文字を使って1行で記録する方式を作ったみたい。
- 例えば、nの二乗和は: ∑_(n=1)^10▒n^2
- 10とnの間にグルー(糊)演算子っていう、見えない文字が入ってて、これがネックになるんでIMEを使った入力は多分できない。
- sumって打ってスペース押したら自動的に∑に変換してくれる支援機構付き。
- 独自な入力方式だけど、なれると割と使いやすい。
- インテリセンスが効くLaTeXみたいな感じで使えないこともない。
- 残念ながら、MathMLへのエクスポート機能は付いてないっぽい。
- コピペすると「行形式」Unicode文字列になる。
- Microsoft Math 3.0の数式入力形式とはまた別。
- あっちはあっちでまた独自形式・・・
- 参考:
- Microsoft Math 3.0
- なぜか「行形式」使えないし、エクスポートもできない。
- Word Mathアドインはこれのサブセットなんじゃなかったっけ?なんで形式一緒じゃない?
- また別の独自形式。
- 例えば: seriesSum(n^5, n, 1, 10)
- まあ、入力補助(インテリセンス的な)はWord Mathアドインとほぼ一緒。
- こっちはMathMLへのエクスポート可能。
- 参考:
もうちょっと協調性持とうよ・・・
とはいえ、いい時代になったものですよ、ほんと。
最近はC#を中心としてプログラミングネタばっかり書いてますけども、++C++; には数学がらみのコンテンツも結構あるわけですよ。
これを書き始めた当時は、ブラウザで数式表示ってあんまりいいのがなかったんですよねぇ。LaTeX2HTMLとかはあったけども、数式は画像化されちゃうし、あんまり奇麗じゃなかったし。で、結局は独自形式使ってHTMLで数式表示してたり・・・。
今だと、FireFoxだとMathML表示できるらしいし、IEでもアドイン入れれば表示はできるんですが。でも、MathMLってものすごい入力しづらいんですよねぇ。基本的にキーボードで打ち込むようには考えられてないので。なので、今のところはMathMLで何かをやる気にはまだなれない。
でも、最近の数式手書き認識とかMS Mathの頑張りを見てると、あと数年もすればもうちょっと楽に数式入力できて、もうちょっと楽にブラウザで数式表示できる時代になってるかもしれないですね。「やっとか」って感じですけど、ちょっと期待。
Silverlightでスタック型仮想マシン&コンパイラ
一昨日書いた奴、Silverlight版が完成。
スタック型仮想マシンエミュレーター
昨日書いた話、順調に進行中。
let factorial(x) = x > 1 ? x * factorial(x – 1) : 1;
let sum(n) = n * (n + 1 ) / 2;
let n = 5;
let x = factorial(n);
let y = sum(n);
(x + y) * x * y;
というようなソースコードに対して、以下のような出力が出るようになった。
左から順に、
- 抽象構文木を階層的に表示したもの
- 仮想マシン語コード
- スタックの状態(5段目の再帰呼び出し中)
あと残りのtodoは:
- Silverlight化
- 色分けしたりしてもうちょっと見やすくする
- ソースの入力ウィンドウ作る
- プロジェクトの整理(テストコードとかコメント足す)
やっぱり、スタックのデモなのかコンパイラのデモなのかよくわからない。