| Comments

The MountainWest RubyConf 2008 is upon us just 2 weeks away in Salt Lake City, Utah.  Unfortunately I'm not going to be able to be there given my travel with The Code TripIronRuby, however, was able to be a sponsor of this year's conference as a Gold Sponsor.  This sponsorship is one part that enables video production of the conference for afterwards as well as a few other things.  The organizers have done a great job getting great sponsors to make this happen, and IronRuby is grateful to be a part of that.

One thing that was recently released was the Dynamic Silverlight support in Silverlight 2.  This enables Ruby (via IronRuby) to be the language that you can write Silverlight applications with.  I would have loved to be at MountainWest this year to demonstrate this as I think some Ruby developers doing web programming with Rails would find this interesting.  Essentially writing Ruby on the server and Ruby on the client (not Ruby translated to Javascript, but real Ruby).  That end-to-end language implementation I think might be interesting for some developers.  So in case I'm confusing the issue...IronRuby enables a developer to use Ruby as the scripting language in the browser using Silverlight as that bridge in the browser.  The Dynamic Silverlight site has the bits and John Lam's blog has a 3 part quick tutorial of implementation that you can check out.

I've been clamoring to get some Ruby in my Silverlight for a while and hope to post some samples of that scenario of using IronRuby in Silveright and Ruby on Rails on the server...anyone got a scenario that is common that you may want to see?

| Comments

John Lam just announced that the Dynamic Silverlight bits are now available.  What that does is enable you to write code targeting Silverlight in Ruby (IronRuby) or Python (IronPython).

The Dynamic Silverlight bits are implemented as Silverlight extensions which means that they will be downloaded on an as-needed basis.  The additional download is currently about 712KB download in size.  If you are interested in looking at running Ruby in the client on the desktop in addition to if you are running Ruby on the server, this might be of interest to you.  Check it out and some of John's tutorials as well as an update on IronRuby from his MIX08 session.

| 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:

   1:   
   2:   
   3:   
   4:  function get_mediainfo(mediainfoIndex) {
   5:      switch (mediainfoIndex) {        
   6:   
   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:

   1:   
   2:   
   3:   
   4:  function get_mediainfo(mediainfoIndex) {
   5:      switch (mediainfoIndex) {        
   6:   
   7:          case 0:
   8:              return  { "mediaUrl": "media/CodeTripSample.wmv",
   9:                        "placeholderImage": "images/CodeTripSample_Thumb.jpg",
  10:                        "chapters": [               
  11:                                    ] };                                                                
  12:                            
  13:          default:
  14:               throw Error.invalidOperation("No such mediainfo");
  15:       }
  16:  }
  17:   
  18:  function StartWithParent(parentId, appId) {
  19:      new StartPlayer_0(parentId);
  20:  }
  21:   
  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.