>>> I guess one option would be for them to create a C# project and package 
>>> their IR code in there. That project could also have the hosting and 
>>> bootstrapping logic to hooked that module into the rest of the app. That's 
>>> certainly the simplest way.

Scott, I don't think that's the "simplest way" to take Ruby code and 
dynamically load it in a Silverlight app ... especially since it has to do with 
creating a static C# project =P But in all seriousness ...

If you want your app to download a ruby library on demand, let's call it a 
"plugin" for argument sake, then your app needs to have the logic of how to 
find plugins and download them. You seemed to suggest that the plugin would do 
its own loading, but I don't see that being a possibility as your app will need 
to somehow invoke the plugin to run. Anyway, 
Microsoft.Scripting.Silverlight.dll has logic to download zip files and allow 
for loading files from them, so you can use that directly in your app (here 
I've written this in Ruby, but it can be easily translated to C# and using the 
DLR hosting API if that's what your main app is written in):

# disclaimer -- this might not work as it's been only typed
# into email client, so let me know if you have trouble with it.
include System
include Microsoft::Scripting::Silverlight
dst = DynamicScriptTags.new nil
dst.zip_packages.add Uri.new("http://some-server.com/someplugin.zip";) # you can 
add many zip-packages ...
dst.download_external_code(lambda {
  # here you can get access to the zip file through Ruby's
  # file-system APIs, and then load those files inside it ...
  $LOAD_PATH << "someplugin" # adds someplugin.zip to Ruby's load path
  require 'init' # imagine that plugins have a init.rb file as a convention for
                 # initialization; this would kick off the loading of the plugin
})

If you don't want to do the work to implement this, then you can use the 
built-in support for downloading libraries on demand: 
http://ironpython.net/browser/docs.html#zip-files. As you can see, this is the 
same idea - from your app pull in this zip file and use Ruby code inside it.

Hopefully that enough to get you started, let me know if you have any other 
questions.
~Jimmy

From: ironruby-core-boun...@rubyforge.org 
[mailto:ironruby-core-boun...@rubyforge.org] On Behalf Of Scott Jacobsen
Sent: Tuesday, May 04, 2010 5:23 PM
To: ironruby-core@rubyforge.org
Subject: [Ironruby-core] unsubscribe



On 05/04/2010 06:03 PM, Miguel Madero wrote:
Jimmy,

I was thinking more of an scenario where one of the teams in a project do one 
of the modules in IronRuby that would be downloaded on demand.

I guess one option would be for them to create a C# project and package their 
IR code in there. That project could also have the hosting and bootstrapping 
logic to hooked that module into the rest of the app. That's certainly the 
simplest way. I was thinking to use Chiron to download the XAP and let a 
"ModuleLoader" worry about how hosting it. Now that I mentioned it I guess we 
could do something similar with Gestalt.

I will play a bit with both options on the weekend.

Miguel
On Tue, May 4, 2010 at 3:59 AM, Jimmy Schementi 
<jimmy.scheme...@microsoft.com<mailto:jimmy.scheme...@microsoft.com>> wrote:
When using IronRuby in a Silverlight app where the main language is C# or VB, 
then you wouldn't be using Chiron at all. You'd add the script files to your 
Silverlight project, and use the DLR hosting API to run them.

You could still use script-tags in this scenario as well; you'd need to look at 
the source for Microsoft.Scripting.Silverlight.DynamicApplication and call into 
its initialization logic from your app.

From: 
ironruby-core-boun...@rubyforge.org<mailto:ironruby-core-boun...@rubyforge.org> 
[mailto:ironruby-core-boun...@rubyforge.org<mailto:ironruby-core-boun...@rubyforge.org>]
 On Behalf Of Miguel Madero
Sent: Sunday, May 02, 2010 8:18 PM
To: ironruby-core@rubyforge.org<mailto:ironruby-core@rubyforge.org>
Subject: Re: [Ironruby-core] Using Ruby's standard libraries in Silverlight

I think the Chiron model is better for different scenarios. You mentioned OOB, 
but also if IronRuby (or other Dynamic Languages) are used as part of a 
statically compiled app where XAPs and assemblies are distributed in the 
typical SL way. Not sure how we would do it with Gestal as I've seen that it 
relies on the Script tags. Is there a way of doing that programmatically?


On Thu, Apr 1, 2010 at 2:40 PM, Jimmy Schementi 
<jimmy.scheme...@microsoft.com<mailto:jimmy.scheme...@microsoft.com>> wrote:
Wow, a lot of questions to answer here; let me know if I missed one ...

> What is the recommendation for using Ruby's standard libraries in Silverlight 
> applications?
> Should the lib be copied to the project dir? should a reference be added to 
> the manifest? some other technique?

Depends on whether your using the Chiron to generate a XAP file, or your using 
dlr.js and embedding Ruby code in the HTML page with script-tags.

Chiron to generate the XAP:
Just copy the necessary Ruby stdlib files into your XAP file directory. If you 
just want to reference an entire directory, you can use the "-path" Chiron.exe 
option.

Script-tags:

See the IronPython docs on this: 
http://ironpython.net/browser/docs.html#zip-files. Basically you must have a 
script-tag like this: <script type="application/x-zip-compressed" 
src="lib.zip"></script>. Then you can reference the "lib" directory in your 
scripts, including adding it to the path: <script type="text/ruby">$: << "lib"; 
require 'erb';</script>.


You can also just list out each Ruby file used:



# foo.rb

require 'bar'



<!-- index.html -->

<script type="text/ruby" src="foo.rb" defer="true"></script>

<script type="text/ruby" src="bar.rb" defer="true"></script>

<script type="text/ruby">

  require 'foo'

</script>


I hope this shows that script-tags just download the script, and add it to the 
"virtual file-system" that the DLR-languages see. The "defer" attribute causes 
the script to not be run; it will be run when a script requires it.

> I zipped the libs folder and added it to the page as <script 
> type="application/zip" src="lib.zip"></script>.
> When I try to require the assemblies, the files are not found.
>
> I tried to make the case simpler and zipped a simple rb file to a zip and 
> included it in the page as well:
> <script type="application/zip" src="test.zip"></script>
> I tried:
> require "TestClass.rb"
> require "TestClass"
> require 'test.zip/TestClass.rb'
> require 'test.zip/TestClass'
>
> None of these worked.
>
> By the way, I see that Chiron loads the zip files...
>
> What am I doing wrong?

Change the mime-type to application/x-zip-compressed and try requiring 
"test/TestClass" ... that will work. We should also allow application/zip as 
the mime-type: 
http://ironpython.codeplex.com/WorkItem/View.aspx?WorkItemId=26676. Keep in 
mind that Silverlight can only read archived files created with a deflate ZIP 
algorithm; but using Chiron to create the zip file will ensure it works ... 
something like "Chiron.exe /d:lib /x:lib.zip".

> for assemblies you need to add an appmanifest I think

Actually, all the AppManifest.xaml does it load the assemblies for you; you can 
use "require" or "load_assembly" to accomplish the same thing, so I advise 
against touching the AppManifest.xaml, unless your XAML has dependencies on an 
assembly.

Keep in mind there is no way to have an "assembly script-tag" ... you must put 
the assembly in a ZIP file.

> if you put a app\myfile.rb in the zip file, you should be able to do require 
> 'app/myfile'

Close ... you have to use the file filename in the require call, or add the zip 
file name to the path (see example above). Today this only works when you use 
the zip file name without it's extension, but that's a bug IMO: 
http://ironpython.codeplex.com/WorkItem/View.aspx?WorkItemId=26677.
> Which brings up another question - are we willing to "standardize" Gestalt by 
> making it the best practice for using DLR languages in Silverlight?
Well on its way; the http://ironpython.net/browser/ page only has documentation 
for the "Gestalt"-way, though the Chiron/XAP model will also be documented. Fun 
fact: while the first version of Gestalt (0.5) was made completely 
independently by the visitmix.com/labs<http://visitmix.com/labs> team, the 1.0 
release was completely rewritten and merged into 
Microsoft.Scripting.Silverlight.dll. In fact, the current source code on 
gestalt.codeplex.com<http://gestalt.codeplex.com/> is only the code from 0.5; 
the latest source code for Microsoft.Scripting.Silverlight is in IronRuby's 
GitHub and IronPython's CodePlex source repos.
Keep in mind the previous Chiron/XAP file model isn't going away; Gestalt takes 
[too-must] advantage of how Silverlight expects apps to be structured, so there 
are some limitations to it. The glaring limitation is you can't run gestalt 
apps out-of-browser; HTML doesn't work there ... there might be a way around 
this by using Silverlight's ability to host HTML content IN a Silverlight 
control, but that hasn't been tested yet. So the Chiron/XAP model will continue 
to be supported, but I don't advise using it unless you need to run 
out-of-browser. You can also combine the two; the IronRuby tutorial uses the 
Chiron/XAP model for the app, but the Gestalt-way to enable tests running in 
the browser.
~Jimmy

_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org<mailto:Ironruby-core@rubyforge.org>
http://rubyforge.org/mailman/listinfo/ironruby-core



--
Miguel A. Madero Reyes
www.miguelmadero.com<http://www.miguelmadero.com/> (blog)
m...@miguelmadero.com<mailto:m...@miguelmadero.com>

_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org<mailto:Ironruby-core@rubyforge.org>
http://rubyforge.org/mailman/listinfo/ironruby-core



--
Miguel A. Madero Reyes
www.miguelmadero.com<http://www.miguelmadero.com> (blog)
m...@miguelmadero.com<mailto:m...@miguelmadero.com>






_______________________________________________

Ironruby-core mailing list

Ironruby-core@rubyforge.org<mailto:Ironruby-core@rubyforge.org>

http://rubyforge.org/mailman/listinfo/ironruby-core


_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to