2009年2月23日

外部アプリケーションを起動する

自分が作っているアプリケーションとは別の、外部アプリケーションを起動するには、Visual BasicではShell関数を使用していた。.NETにおいてもVisualBasic名前空間に存在しているが、せっかくなのでC#流に(C#でもVisualBasic名前空間を使用することは可能)。

C#ではProcessクラスを使用する。

一番簡単な方法はProcessクラスのStartメソッドに、外部アプリケーションのパスを指定する方法。

System.Diagnostics.Process.Start("ping", "localhost");

外部アプリケーションが終了するまで、待機するにはStartメソッドで取得したProcessクラスオブジェクトのWaitForExitメソッドを呼ぶ

System.Diagnostics.Process p = System.Diagnostics.Process.Start("ping", "localhost");
p.WaitForExit();

StartメソッドにはProcessStartInfoクラスのインスタンスを渡すオーバーライドも存在する。ProcessStartInfoクラスを使用すれば、より詳細に外部アプリケーションを制御できる。
例えば、CreateNoWindowsプロパティ、UseShellExecuteプロパティを指定するとpingのプロンプトは表示されない。

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.FileName = "ping";
info.Arguments = "localhost";

info.CreateNoWindow = true;
info.UseShellExecute = false;

System.Diagnostics.Process p = System.Diagnostics.Process.Start(info);
p.WaitForExit();

ProcessクラスのStandardOutputプロパティから外部アプリケーションの標準出力を取得できる

System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo();
info.FileName = "ping";
info.Arguments = "localhost";

info.CreateNoWindow = true;
info.UseShellExecute = false;
info.RedirectStandardOutput = true;

System.Diagnostics.Process p = System.Diagnostics.Process.Start(info);

while (!p.HasExited)
{
    Console.WriteLine(p.StandardOutput.ReadLine());
}
p.WaitForExit();

2009年2月13日

1234567890秒の日

2009/2/13 23:31:30(UTC)は、1970/1/1からの秒数であるUNIXタイムがちょうど「1234567890秒」となる。日本時間では2009/2/14 8:31:30。朝だ。

こちらに紹介されているが、1234567890 Dayというサイトがあるらしい。
http://www.1234567890day.com/

C#で1970/1/1から1234567890秒後を表示するコードを書いてみた

    DateTime unix = new DateTime(1970, 1, 1);
    DateTime partytime = unix.AddSeconds(1234567890);
    Console.WriteLine(partytime.ToString());
    Console.WriteLine(partytime.ToLocalTime().ToString());

2009年2月10日

第60回 さっぽろ雪祭り

さっぽろ雪祭りも今年で第60回。仕事の帰りに寄ってみた。こんなにじっくり見たのは小学生以来かも。

P1000085
25周年

P1000081

P1000082
アイドル的な

P1000078

P1000077
お掃除中

他にもいくつか撮ってきている。

http://picasaweb.google.co.jp/fel97048/SAPPOROSNOWFESTIVAL2009#

2009年2月8日

CLR/H Tech Dayのメモ

2009/2/7に開催されたCLR/H Teck Dayに参加してきた。

  1. C#4.0の衝撃
    • 数ある新機能の中でも、動的言語との統合が目玉
    • オプション引数・名前付き引数は、Python・Rubyなどでも実装されている為かも
    • COMの呼び出しでは、Type Missingが不要に(VBでは今までも省略できていた)
    • プロジェクターの色合いがおかしい
    • 動的型付け(Option Strict Off再び)
    • インテリセンスは当然効かない
    • COMやIronPython・IronRubyの呼び出し等に限定するのが妥当か
    • オプション引数のデフォルト値は、オーバーライドでは引き継がれない?
  2. SilverlightでAnimation
    • Silverlightでは本当の3D演算はない
    • 擬似的に見せることは可能
    • 自分で決めうちでコーディングしてしまう
    • SinとかCosとか使って計算(俺まったく覚えてねー)
    • 衝突判定は、円を用いるのが簡単
    • 大阪弁ええなー
    • VisualStateManagerでパタパタアニメ
    • ボタンの表示切替などにも利用できるのでは

    • お土産頂きました
  3. Silverlight Toolkitについて
    • 飛び入りのセッション
    • サンプルの日本語化をした
    • チャート(グラフ)は、使用するチャート(棒グラフか円グラフか等)を変えるだけで、同じ使用方法で表示を変えられる。
    • 円グラフでゲームキャラクタも

今回は満員で予約締切になるほどの大盛況。LTではSilverlightをGearsを使ってオフラインでも動かすという、MicrosoftとGoogleの夢のコラボも(トラブルで5分以内に動作確認できなかったけど)。今回も非常に楽しいイベントだった。

2009年2月7日

よりPythonicなPythonを目指して

@ITにPython 3での機能変更についての記事が公開されている。

よりPythonicなPythonを目指して[前編]
Python 3が後方互換性を捨ててでも求めたもの

  • print()関数 - 式から関数へ
  • 8ビット文字列から、ユニコード文字列へ
  • 新しい文字列型「bytes型」

よりPythonicなPythonを目指して[後編]
言語としての一貫性を重視したPython 3の進化

  • int型の統合、数値の扱いの変更
  • イテレータとview
  • より明確な文法となった「例外」
  • モジュールの統合や改名
  • Python 3の進化の方向性

後方互換性を捨てたバージョンアップの内容がわかりやすい。Python 3からPythonをはじめる者にとっても、非常に為になる記事。

さて、すっかりPythonの勉強をサボってしまった。何かネタを決めて取り組んでみよう。

2009年2月3日

Windows 7 のインストールで遊ぶ

2009/1/13にWindows 7 Betaの一般配布が開始されていた。いろいろなところでインストールのスクリーンショットつきのレポートを見た。それらを見てある画面を見てちょっと気になったことがあった。

ある画面
ある画面

背景画像とウィンドウがきれいに重なっているが、ウィンドウをずらしたらどうなるのだろう、と。

ずらしてみた。

ずらしてみた

世の中そんなものだ。
よく見てみると、初期の位置でも完全に一致しているわけではなかった。無駄なことをしてしまった。
こんな事を仕事中に考えているからといって、暇なわけではない。