Articles tagged 'coding'

RubySharp Aug 22 2006

Recently I’ve been toying with John Lam’s pet project, RubyCLR. The very notion of Ruby and C# interaction interests me, as there are around a billion different situations in which I’d like to combine the two, to get the best of both worlds.



Now, I notice in a post today, that he has spotted that Tim Ng, a guy who works on the Visual Basic compiler team, has been playing with his creation. Only, the way he went about it seemed a little complex, and wasn’t using RubyCLR’s compatibility with interfaces to the max. So, I thought I’d outline a little test scenario I knocked up when I first started playing with it.



I’ll assume that you’ve followed the instructions, and are setup with the latest version of RubyCLR (I was using the code straight from the source tree).



Firstly, the code for the C# side of things (the “host”). This defines the interface, and provides a class for executing implementations of the interface:



Host.cs:


using System;

public interface IAddIn
{
string Name { get; }
string Author { get; }
void Work();
}

public class Host
{
public static void Execute(IAddIn addin)
{
Console.WriteLine("[{0}] : {1} by {2}",
addin.GetType().FullName,
addin.Name,
addin.Author);
addin.Work();
}
}

We can simply compile this into a standalone assembly:


csc -t:library Host.cs


This will output Host.dll, which we will now consume in our super-duper Ruby script, empowered by the magic RubyCLR. I won’t stick the entire contents of the client Ruby script here, however the full thing is available from here (the full C# source file from above is available here). For now, lets just look at the implementation of our C# written interface within Ruby:



class MyAddIn
implements IAddIn

def get__name
return "My first Ruby/.Net add-in!"
end

def get__author
return "El Draper"
end

def work
puts "This is coming straight from my Ruby written add-in!"
end
end

As you can see, in order to implement the Name and Author properties, we define Ruby methods called get__name and get__author (note the double underscore).


This is all useless unless within my Ruby script I actually call my C# host and pass an instance of my Ruby written add-in. After referencing the Host.dll assembly:


reference_file ‘Host.dll’


I’m able to make the call to the host:


Host.Execute(MyAddIn.new)


Running this is then easy - once you’ve executed the “setenv.cmd” batch file within the root of the RubyCLR project, simply execute:


ruby Client.rb


(ensuring that Client.rb and Host.dll reside in the same directory).


This then outputs:


[T32dda3e3] : My first Ruby/.Net add-in! by El Draper

This is coming straight from my Ruby written add-in!


(N.B. the type name changes each and every time the script is run, as the concrete wrapper type created around the Ruby code and passed through onto the CLR is dynamically generated at run-time using System.Reflection.Emit).


The above shows that we can define an object that implements a .Net interface within Ruby, and then pass an instance of this into a .Net written host class. It then executes methods directly on the object that itself then executes Ruby code. Pretty snazzy eh!


Like Tim, I have a number of things I’d like to be able to extend this with. For one, I’d like to be able to “compile up” the concrete CLR types representing Ruby objects, and then execute this from within a .Net host, namely a C# application. My work on tweaking the RubyCLR code so far has resulted in being able to correctly output the dynamically generated assemblies, however these types when executed within a C# host application result in memory errors, presumably because it is lacking the reference to the Ruby host context and the original Ruby source file. So I need to be able to instantiate a Ruby object from my compiled emitted assembly, and then somehow build a Ruby context back to the original source file so it can correctly execute the code, but all from within a .Net host. This is really a reverse of the main scenario that RubyCLR I think was probably invented for, but none-the-less I think it should be possible. Any ideas, John? ;-)


Technorati Tags: , , , , , , ,

Comments

Sweet deal Aug 17 2006

Hmm, check this out. Seems like a pretty interesting opportunity, in an amazing city…


Technorati Tags: , , , ,

Comments

RIDE-ME, one time Aug 13 2006

So, RIDE-ME has hit version one, and I’m proud to say I was able to be a part of it. In fact this is the first release that has some of my work in it, namely the add-in architecture, and the console add-in built on top of that. It’s shaping up pretty nicely now, and recently I’ve been working on a Rails project using RM with almost no problems. I know I’m a bit behind the times blogging about the release, but come on people, please digg it - we are getting plenty of downloads but a spot on the digg.com frontpage wouldn’t go a miss ;-)

Comments

RIDE-THIS Jul 18 2006

My first real contribution to project RIDE-ME, the add-in architecture, is now in the trunk of the source tree. Check it out, comment, submit patches or let me know feedback. I’m pretty pleased with it, and it should foster some nice add-in development hopefully :-)

Comments

For all these times, that we walked away Jul 14 2006

Bit of a catch-up here, as it’s been far too long since I blogged:

  • England are out, and the World Cup is over. The first event left me feeling raw anger towards the Portuguese (who over the years have given me plenty to be pissed about). The second was a rather bittersweet event. On the one hand, I’d far rather see neither France nor Italy win it, but out of the two I would have to have reluctantly picked the aging French surrender monkeys, rather than the greasy match-fixing Italians, to have won it. But the Zidane incident made the entire thing worthwhile, it was pure enjoyment seeing him getting his marching orders, with the classic shot of him leaving the field yards away from the World Cup trophy, combined with the fact than an Italian was for once legitimately polaxed.
  • I got me SkyHD installed, and it is sw-eeeet. I can now watch HD sporting events, movies, and other assorted goodies (including alsorts of random documentaries, which I’d never usually watch except for the fact that it’s in HD). The box itself is sleek and chic, and bar a couple of random lock-ups last couple of days, has behaved excellently for a first generation piece of equipment. Oh, and the Sky+ PVR system is fantastic, I forgot how much I missed being able to setup entire series to be recorded with a couple of remote clicks.
  • I’m wrapping up the add-in architecture for RIDE-ME. I hope to have it in my branch by the end of this weekend, and then merge it over after then to trunk. We can then test the hell out of it, while the other guys start to write whatever add-ins they can dream up. Eventually, in the 1.0 release, it’ll see the light of day, and we hope to build a nice add-in community around it. Oh, and I’m now hosting all of the resources for the RIDE-ME project.
  • Did I mention HD? I’m currently watching Die Hard With A Vengeance apparently in HD (didn’t even realise HD cameras were around back in ‘95), and Bruce Willis never looked so good.
  • I’ve been having a lot of fun with the object/relation mapping framework I’m working on at the minute, integrating it tightly with the model-view-controller framework I knocked together. It’s starting to come together, and I’ve just implemented associations in queries (read: joins). I’ve got a reason for putting all of this together, and that reason is almost ready for the big-time, so watch this space…
  • I’ve ordered a SleepTracker watch, but there’s no stock at the minute so I gotta wait.
  • The new Rise Against album is fantastic, along with the latest albums from Billy Talent and Lostprophets, expect reviews soon
  • RubyCLR is superb, I think John Lam might be a genius
I think that’s mostly it believe it or not, so peace out for now.

Comments

DotNetKicks... Jun 28 2006

is a Digg like clone, centered around .Net content. Useful resource for .Net developers.


Technorati Tags: , , , , ,

Comments

Get offensive like Tet Jun 28 2006

Interesting article from Ted Neward, starting with an interesting analogy, segwaying into a brief history of the Vietnam war, and ending up with the crux of the article being about object/relational mapping, the black art of mapping objects to relational database tables. Interesting concepts and ideas, I’m still reading and digesting much of what the article has to say.

While I’m linking like a link-whore this evening, DHH finally blogs about his ActiveResource sweetness committed to the Rails trunk the other day. His post includes the slides from RailsConf, and the entire concept sparks a load of potential ideas off with me.


Technorati Tags: , , , , , , ,

Comments

Plug In Baby Jun 27 2006

Here’s a good post from Phil Haack about plugins, and making a plugin architecture resilient to versioning. He presents some good ideas, some stuff worth thinking about in there. I’m thinking about and working on plugins loads at the minute, including working on an add-in architecture for Project RIDE-ME. Reading this post though made me start to question some of the terminology, where a lot of the time I’m using “plugin” out of context. The way I now see it, there are plugins, add-ins, and providers. I’m about to refactor a bit of code I’ve been working on, as it is effectively a provider system, for database and logging providers, however I’ve referred to it throughout as plugins, and I feel this is now slightly out of context…

Plugin: something fairly generic, to be able to “plug in” new components to change almost any aspect of an application
Add-in: something that is contained, used more within rich user interfaces to provide a specific bit of UI content or functionality, much more refined than a general purpose plugin
Provider: some kind of general functionality such as data querying, logging, that can be achieved against different sources, hence the need for differing providers

This is now how I’m starting to formalize some of the terms above, and while almost all of the reflection code remains the same regardless, the design of the architecture depends heavily
on which of the above you are trying to achieve.


Technorati Tags: , , , , , ,

Comments

Rail Riding Jun 9 2006

So I came across what looks to be a nice little Windows based Ruby on Rails IDE - RIDE-ME. It’s written in .Net which is cool, and while still in its early phases, seems to be looking quite nice. Also, they are looking for C# developers to join the fold and help out, so with my experience in C# programming, and my almost unhealthy interest in Ruby and Rails, I feel compelled to contribute!

Haven’t posted much recently, but there’s a few things I’ve got that I want to post when I got more time, so hopefully over the coming weekend I’ll get it done.


Technorati Tags: , , , , , , ,

Comments

Stacked Actors Apr 25 2006

So, day two of the UML course, and it’s starting to get useful. Use cases, leading on to class diagrams, has me intrigued as a coder. I want to get cracking now trying it out on a system I’m designing (designing before coding, wowee!), but upon looking for some decent UML software, preferably a plug-in for VS 2005, I’m most disappointed. Now I understand VS 2005 has some class diagram tools built-in, but while it looks like UML, it doesn’t smell quite like UML (am I missing something?). I really want something that lets me create any of the different types of UML diagrams (such as use case, class diagrams etc), however the only software I’ve so far come across (such as Borland’s Together plug-in for VS 2003/2005) costs a shitload of money. So, I’m going to keep digging, but my options look limited…

1) personal, “free but only for non commercial” or trial versions - basically yucky cut-down tools
2) NetBeans 5, or at least the latest alpha/beta whatever, seems to have some UML diagramming tools - but come on, a different IDE just for diagrams?
3) a separate tool, such as an open source tool - again, I’d prefer it within my main IDE, but oh well…. *sigh*

Anyone have any ideas? As some may have guessed, this is one of the reasons I quickly cobbled together the ability to add basic comments again tonight, benching all of the big ideas I’ve got for my blogging software in favour of quickly deploying a way for my loyal readers (both of you, including that Google search bot) to post any suggestions they may have!

More UML tidbits soon hopefully…


Technorati Tags: , , , , ,

Comments

Fragile Development Apr 24 2006

Today I did a bit of modelling - data modelling that is. I started my five-day UML course, as I’m attempting to learn the deadly art of analysis. It was actually quite interesting - after Getting Real recently (must get round to finishing that book) I was starting to dispense more with documentation/design diagrams and all that in favour of writing the damn code. However there are times when I need to crystallize my thoughts, gather design details, and really plan more complex concepts. It seems after today that UML, and design analysis, is a good way of doing that. In many ways, the course I’m doing (which is actually object-oriented design and analysis, specialising in UML) does tie in with a few agile concepts - in particular, the idea of smaller iterations of development, and an especially agile process for coping with design/requirement changes. On top of this, the idea of use cases defining functionality, doubling up nicely as easy scenarios for testing, ties in with test-driven development. So while I initially poo-poo’d heavy-handed design, analysis, and UML, I’m finding it refreshing to look at a project from a far more architectural point-of-view - especially when the model-view-controller pattern was brought up as being a Good Thing ™ - something I’ve spent a lot of my spare time working on recently. Over-all: interesting stuff, and expect a few more thought provoking posts (with hopefully even more amusing titles).


Technorati Tags: , , , , , , ,

Comments

Intriguing Apr 18 2006

Catching up on some of the weekends tidbits, I noticed RSSBus - this looks quite interesting, and reading through the whitepaper brings up some intriguing ideas - however until I can play with the actual product, I’m not sure how useful it’ll actually end up being. Not sure I count as an “early adopter” or “influencer” either ;-)


Technorati Tags: , , , , ,

Comments

Page 2 of 3 | Next page | Previous page