IronPythonの紹介ビデオ
MicrosoftのRSSをチェックしていたら、 MSDN TV で IronPython の作者さん(だよね?)が IronPython のデモンストレーションをしていた。
- MSDN TV: IronPython: Python on the .NET Framework
http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20051110PythonJH/manifest.xml - Download details: IronPython: Python on the .NET Framework
http://www.microsoft.com/downloads/details.aspx?familyid=f9296971-f926-4be5-9870-f6ee3b1977a3&displaylang=en
感想な。
- 作者さんって、すげぇ若いのな。
- Pythonの所を、「ぱいふぉん」って呼んでいたなぁ。
- IronPythonって、コマンドラインからは、 ipc で呼び出すんだね。
- デモ中に、"import this"をやっていて、笑った。
- .NET Frameworkの呼び出しって、"import System"ってな感じでロードできちゃんだ。すげぇ
- コマンドラインから、簡単にウィンドウを呼び出しちゃうのよ。
コードの改変も簡単にやってのけちゃう。
> from AvalonStartup import * > ss = SpeechSynthesizer() > ss.SpeakTextAsync("Hello from IronPython") > > w = Window() > w.Show() > w.SizeToContent = SizeToContent.WidthAndHeight > b = Button(Content="Click Me") > w.Content = b > b.FontSize = 100 # ここまでで、"Click Me"ってボタンのウィンドウが出来ちゃう > def doit(*args): print args > b.Click += doit # ここまで行うと、"Click Me"ってボタンを押すと、doit 関数が呼ばれちゃう > calc = LoadXaml('calc.xaml') # これで、計算機なウィンドウが出現して、動いちゃう > for b in buttons: print b System.Windows.Controls.Button: 1 System.Windows.Controls.Button: 2 ... # 上の処理で、全ボタンが列挙されちゃう > for b in buttons: b.Background = Brushes.Blue # 上の処理で、全ボタンの背景色を青にしちゃう > for b in buttons: b.LayoutTransform = RotateTransform(90) # 上の処理で、ボタンの中の文字('1'とか'+'とか)を傾けちゃう > def sayit(b, e): ss.SpeakTextAsync(b.Name) > for b in buttons: b.Click += sayit # 上の処理で、ボタンを押す都度に、ボタンの名前を喋ってくれる
- VC# 2005の中から、IronPythonのコードを呼び出せる
using IronPython.Hosting; ... public void RunScript(Object a, Object b) { PythonEngine engine = new PythonEngine(); engine.SetVariable("win", this); engine.Execute("win.SetImage('c:/images/itrun.jpg')"); } # ここまでで、C#のコードからIronPythonのエンジンを呼び出して、しかも、C#のアプリケーションと連携処理している
- 更に、外部スクリプトの呼び出しも簡単だし、連携処理も出来ている。
public void RunScript(Object a, Object b) { PythonEngine engine = new PythonEngine(); engine.SetVariable("win", this); OpenFileDialog ofd = new OpenFileDialog(); ofd.ShowDialog(); engine.RunFile(ofd.FileName); } <simple.py>: text = TextBlock(text='MSDN Rocks', FontSize=100, Foreground = Brushes.White) a = DoubleAnimation(0.0, Duration(TimeSpan.FromSeconds(3))) a.RepeatBehavior = RepeatBehavior(3) text.BeginAnimation(Shape.OpacityProperty, a) Canvas.SetLeft(text, 50) Canvas.SetTop(text, 15) win.Content.Children[1].Children.Add(text) # engine.RunFileで、外部スクリプトコード(simple.py)を呼び出せる。 # しかも、engine.SetVariable("win", this)で定義したウィンドウオブジェクトに対して、外部スクリプトからアクセス出来る。 # 上のコードを動かすと、画面に"MSDN Rocks"ってでかい文字を書き込む事ができる。
- 外部スクリプトで発生したエラーをキャッチして、VC# 2005でデバッグできる。
しかも、ブレークもかけられるし、変数ウオッチも可能。変更も可能。コールスタックも見られる。すげぇ。 - 外部アセンブリのロードと呼び出しも簡単にやってた。
import sys sys.LoadAssemblyFromFile("AgentServerObjects.dll") from AgentServerObjects import * a = AgentServerClass() id, rest = a.Load("merlin.acs") ch = a.GetChracter(id) ch.SetSize(128,128) ch.MoveTo(0, 0, 0) ch.Show(0) ch.MoveTo(600,100,2000) ch.Play("Announce") ch.MoveTo(300,150,1000) ch.Play("Think") ch.Play("Search") ch.Play("Congratulate") ch.Hide(0)
と、まぁ、ひたすら すげぇ。と感嘆していた。
個々で似たような事は、COM技術との組み合わせ(Win2k時代か)で実現可能なものなんだけど、シームレスにしかも、呼び出しが非常に簡単になっている点が素晴らしい。
だって、スクリプトエンジンの呼び出しが、単に"PythonEngine engine = new PythonEngine();"で済んじゃうんだよ!?
ActiveX(COM)時代のえらい面倒な手続きが一気に簡素化!
こりゃ、ぐれいと!以外の何者でもありませんがな。