Re.Mark

Watch the satnav

Posted in General, Kit by remark on September 30, 2008

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

Posted in Design, Ruby by remark on September 30, 2008

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

Posted in Ruby, Software, silverlight by remark on September 23, 2008

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#

Posted in .NET, Python, Software, Tools, c# by remark on September 23, 2008

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.