| Comments

If you already pay attention to the IronRuby dev group and are on the distribution list, apologies for the dupe.  I’ve just got back from a camping trip and rifling through all my emails now.  I checked in on the IronRuby group and noticed a new project emerging from someone.

It’s from Ivan Porto Carrero and he calls it IronNails.  It was previously called something else (quite frankly I liked the other name better myself) but there was already a project named after his chosen name.  So alas, IronNails it is!  Ivan describes this as:

IronNails is a framework inspired by the Rails and rucola frameworks. It offers a rails-like way of developing applications with IronRuby and Windows Presentation Foundation (WPF). This framework uses the pattern Model - ViewModel - View - Controller (M-VM-V-C). It should be able to run on both WPF and Silverlight.  The idea is that the views can be created using a design tool like Blend for example and just save that xaml as is. The designer should not need to use anything else than drag and drop to create a GUI design. The behaviors are then added to the view by using predefined behaviors in the framework or by defining your own behavior. Source: IronNails GitHub homepage

The project is really just started so don’t expect a ton of meat there just yet, but it has a great goal and I can’t wait to see it evolve.  Ivan’s using the Rails-like framework of MVC where the XAML can serve as the view for either a WPF or Silverlight application.  The idea being that someone can create a view using a rich interface design surface like Expression Blend and write the code that targets the view which can be fine tuned to either Silverlight or full WPF.

The vision is something like this:

   1: class MyController < IronNails::Controllers::Base
   3:   view_object :some_model, :refresh => :refresh_some_model, :refresh_interval => 2.minutes
   5:   view_action :some_action, :target => :my_button, :action => :some_action_implementation
   7:   def refresh_some_model
   8:     # code here
   9:   end
  11:   def some_action_implementation
  12:     # code here
  13:   end
  15: end

If you are interested in contributing or lurking, get on over to GitHub and watch the project!

| Comments

the guys at sapphire, whom i'd previously written about their ruby in steel developer tools, just posted a preview of 'visual rails workbench,' which is a visual designer for ruby on rails.  here's one of their preview shots:

this design mode with ERb is just one of the elements of the workbench it looks like.  get the full details (as well as some comments on IronRuby support in their other tools that they've been working on) by reading the update on the sapphire site.

| Comments

i recently got an email from a developer who was using on a site to display high-quality media.  what?! you though silverlight was a windows-only technology? blasphemy!  you see, silverlight is a client-technology, which means as long as it can be served up to the browser (and the user has the plugin), the server can be your own custom version of l337hax0r web edition or whatever.  now, there are advantages of using internet information services on windows and some integration with asp.net, but that's not what this post is about.  on to the issue at hand will you...

so the email...he was getting an error message:

ActionController::RoutingError (No route matches "/player.xaml" with {:method=>:get}):

now i'm not incredibly familiar with what web server configuration he is running (although he is running netbeans/mongrel), but it got me thinking of 2 things.  first, maybe he needed to add a mime mapping.

for silverlight, the following MIME map is for .xaml files: .xaml: application/xaml+xml

but then i also thought that it might be something of some files moved around and such.  i deduced from his note that an template was being used as he mentioned he moved the javascript files to the javascripts directory of his rails application.  for those who don't know, rails is an MVC pattern web framework.  when creating a rails application you get a few different folders created for you (note: i'm just talking rails foo command here).  a lot of the work is done in controllers/models/views folder but there is also a folder called public.  within there are your typical images and javascripts type folders.  basically you can think of public mapping to "/" for static files.

now most rails applications probably wouldn't want all the encoder output to be dumped into /public as-is.  if developers are anything like me (OCD about project folder organization), then you want *.js to be in one place, etc.  i suspected that my reader put all the encoder files in the /public/javascripts folder.  this would be fine and should work okay.  but lets say you want some organization.

for example, i want to put my .js files in /public/javascripts, my jpg/pngs in /public/images and i'm going to create a folder for my xaml and a folder for media (wmv).  great, so we move all the files around then we run the Default.html page.  nothing happens.  why?  well a few things need to change if you move things around.

first, you need your hosting page (in this case right now it is Default.html) to reference the right path to the javascript locations.  so in our example we'd modify (in Default.html) lines like:

<script type='text/javascript' src="Silverlight.js"></script>
<script type='text/javascript' src="BasePlayer.js"></script>

to this:

<script type='text/javascript' src="javascripts/Silverlight.js"></script>
<script type='text/javascript' src="javascripts/BasePlayer.js"></script>

noting that of course there are more than just these two files.  now if we run the application it would still fail.  this is for two reasons, both of which are in StartPlayer.js.  the first is on or about line 8 of the script:

   4:  function get_mediainfo(mediainfoIndex) {
   5:      switch (mediainfoIndex) {        
   7:          case 0:
   8:              return  { "mediaUrl": "CodeTripSample.wmv",
   9:                        "placeholderImage": "CodeTripSample_Thumb.jpg",

the next is on or about line 24:

  22:  function StartPlayer_0(parentId) {
  23:      this._hostname = EePlayer.Player._getUniqueName("xamlHost");
  24:      Silverlight.createObjectEx( {   source: player.xaml', 

these both need to map to the right references of where that content has moved...so noting my above folder changes (images/javascripts/media/xaml) my StartPlayer.js file now starts like this:

   4:  function get_mediainfo(mediainfoIndex) {
   5:      switch (mediainfoIndex) {        
   7:          case 0:
   8:              return  { "mediaUrl": "media/CodeTripSample.wmv",
   9:                        "placeholderImage": "images/CodeTripSample_Thumb.jpg",
  10:                        "chapters": [               
  11:                                    ] };                                                                
  13:          default:
  14:               throw Error.invalidOperation("No such mediainfo");
  15:       }
  16:  }
  18:  function StartWithParent(parentId, appId) {
  19:      new StartPlayer_0(parentId);
  20:  }
  22:  function StartPlayer_0(parentId) {
  23:      this._hostname = EePlayer.Player._getUniqueName("xamlHost");
  24:      Silverlight.createObjectEx( {   source: 'xaml/player.xaml', 

and all is well -- my rails app starts and my silverlight content is loaded.  my resulting rails app structure looks like this:

simple enough, but if you move things around you might not have known where you need to change things.  you may wonder why you don't have to change the MediaElement in the player.xaml file.  well, if you are using an expression encoder template, the Url of that element is controlled by the StartPlayer.js mediaUrl attribute being passed to the player.

so if you have static information for your rails app this would probably work fine for you, but i suspect your rails application might be using views and such.  so you'd probably want to ensure you are modifying the appropriate view in views/layouts to ensure the javascript reference is correct, etc.

hope this helps.

| Comments

the guys over at sapphiresteel software released ruby in steel text edition, a full-featured ruby on rails IDE built on the visual studio 2008 shell.

as a microsoft developer interested in looking at ruby on rails early on, i loved when the sapphire project was first released.  i had played with earlier version and after re-paving my machine need to take a look at the updated versions.

if you don't own a copy of visual studio 2008, when you get the ruby in steel text edition, you get visual studio 2008 (ruby language support only) -- so this isn't an add-on only, it is a full deal.  if you already have vs2008, this will install into your current environment.  it has all the goodness you'd expect of an IDE: color coding, snippets, code folding, integrated debugger, and interactive consoles.

the sapphire guys also have the developer edition which is a little more full featured, and includes a faster debugger and few other features like dynamic update intellisense.  DHH was quoted as saying:

"Ruby In Steel is particularly interesting to developers coming over from the Microsoft world as Visual Studio is a familiar environment to them. That'll likely ease the transition." source: InfoWorld

i think this is great for people interested in learning new environments as well as new languages.  already being familiar with a tool like visual studio may help you understand about ruby without having to learn any new tool.

and no, it doesn't run on a mac.

| Comments

okay, now in a session for php developers -- or maybe rails developers...don't know yet.

this session is from simon minnee from silverstripe, a cms solution provider.  simon quickly adds this disclaimer:

this presentation is not intended to be a language war.  he admits that he is a novice with regard to Rails versus what he's presenting, etc.  de admits, in fact, that his understanding is naive.  he says "i just thought the title would be edgy.  forgive me."

hmm...clever simon, clever -- got me in the door.

he talks about their choice using PHP over Rails:

gets the job doneproductive framework with lots of cool stuff
language people love to hatevery trendy
variety of hosting optionsharder to host
good NZ gov't acceptancetoo new for gov't

simon talks first about the use of the PHP5 __call() method...essentially enabling the creation of 'magic methods' that are implicitly defined.  i'm not really getting this as i can't read the code from afar and he's covering it pretty fast.  apparently the decks are available at http://silverstripe.com/rails-envy

now we're talking aggregation -- adding versioning to DataObject (as an example -- admittedly criminally oversimplified).

okay, 20 minutes later and he's done with his talk...um, wow.  no envy elimination here.  simon mentioned some stuff with defineMethods functions that i think if i had a deeper understanding of the benefits...i'm not sure this session did a service to other merits of PHP5.