Archive for September 2008
Watch the satnav
It looks incredible, but this may be the first satnav – only there’s no sat, so maybe it’s just a nav…
Ruby Tuesday #20 : Prevent monkeypatching
Monkeypatching is the practice of redefining methods in classes at runtime. According to this Wikipedia article, the exact definition varies between the Ruby and Python communities. Some think it’s a good thing, while others take a different view. If you want to prevent it from happening, here’s an answer : make methods immutable.
Ruby Tuesday #19 : Silverline
Even though I’ve been focussing on Python today, I couldn’t let this Tuesday pass without writing something Ruby related. Silverline is a Ruby on Rails plugin that allows you to write client side Ruby (courtesy of Silverlight.) Here’s how it works:
Silverline also lets you run pieces of your Rails application on the client, removing the need to write a separate JavaScript or Flash application simply to move functionality to the client. This is accomplished by flagging certain actions as "client", and running the necessary pieces of your Rails application and Rails itself on IronRuby in the browser.
To see it in action, check out this watch. There’s more demo-ness here.
Running Python from C#
Having posted a number of times about Ruby over the last few months, I thought I should also write a bit about Python. The first thing I decided to try and do was to run some IronPython from C#. I downloaded version 2.0 beta 5, which includes the latest version of the DLR. I created a Console Application and added references to Microsoft.Scripting.dll and Microsoft.Scripting.Core.dll – the assemblies that constitute the DLR. I also added a reference to IronPython.dll and IronPython.Modules.dll. I decided to try to output some text, set a variable in IronPython and retrieve the value in C#. Here’s the code:
ScriptRuntimeSetup setup = new ScriptRuntimeSetup(); setup.LanguageSetups.Add(IronPython.Hosting.Python.CreateLanguageSetup(null)); ScriptRuntime runtime = new ScriptRuntime(setup); runtime.IO.RedirectToConsole(); ScriptEngine engine = runtime.GetEngine("IronPython"); ScriptScope scope = engine.CreateScope(); ScriptSource source = engine.CreateScriptSourceFromString("print 'Hello World'\r\na=1", SourceCodeKind.Statements); source.Execute(scope); Console.WriteLine(scope.GetVariable("a"));
I’m impressed that C# and IronPython can interact like this. The possibilities for extending applications with runtime dynamic code are intriguing – worth looking into.