<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Adam Kinney posts tagged with 'javascript'</title><description>Adam Kinney blog posts filtered by a specific tag</description><link>http://adamkinney.com/blog/tags/javascript/default.aspx</link><language>en-us</language><pubDate>Sun, 07 Sep 2008 06:44:10 GMT</pubDate><generator>Oxite</generator><item><title>Silverlight 1.0 Fire Starter video site is now live</title><description>&lt;div style="float: right; margin-bottom: 10px; margin-left: 10px;margin-top:10px;"&gt;&lt;a href="http://visitmix.com/University/silverlight/firestarter/"&gt;&lt;img src="http://adamkinney.com/images/blog/firestarter_300.jpg" alt="" /&gt;&lt;/a&gt; &lt;/div&gt; &lt;p&gt;On November 29th 2007, a group of people gathered together to study Silverlight.&amp;nbsp; "What is it, really?",&amp;nbsp; "What can I do with it today?" and "There really is more than just a Media?" were all questions answered that day.&amp;nbsp; Video and audio of the event has been captured on the &lt;a href="http://visitmix.com/University/silverlight/firestarter/"&gt;Silverlight 1.0 Fire Starter video site&lt;/a&gt;, a newly inducted member of the &lt;a href="http://visitmix.com/University/"&gt;MIX University&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;You can stream the videos directly within the site or you can download the sessions in video and audio format.&lt;/p&gt; &lt;p&gt;The session titles are as follows:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;An Introduction to Silverlight - &lt;a href="http://blogs.msdn.com/mithund"&gt;Mithun Dhar&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Getting Started Programming Silverlight - &lt;a href="http://silverlight.net/blogs/jesseliberty/"&gt;Jesse Liberty&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Workflow of Silverlight with Expression and Visual Studio - &lt;a href="http://ux.artu.tv/"&gt;Arturo Toledo&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Silverlight XAML - &lt;a href="http://blogs.msdn.com/webnext"&gt;Laurence Moroney&lt;/a&gt;&lt;/li&gt; &lt;li&gt;A Development Story - &lt;a href="http://adamkinney.com"&gt;Adam Kinney&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Media, Markers and More - &lt;a href="http://blogs.msdn.com/ebooth"&gt;Ernie Booth&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Popfly and Silverlight - &lt;a href="http://adamnathan.net/"&gt;Adam Nathan&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Silverlight in the Future - &lt;a href="http://blogs.msdn.com/ebooth"&gt;Ernie Booth&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;As an added bonus, if you like the design or interactivity of the site feel free to grab the &lt;a href="http://adamkinney.com/downloads/firestartersite.zip"&gt;source code&lt;/a&gt;.&amp;nbsp; The code is not been specially prepared for review, but the code managing the HTML and Silverlight integration may be particularly interesting.&lt;/p&gt; &lt;p&gt;&lt;a href="http://visitmix.com/University/silverlight/firestarter/"&gt;Enjoy the content&lt;/a&gt; and thanks to all of the attendees who showed up and really made the event a fun time!&lt;/p&gt;&lt;img src="http://adamkinney.com/blog/291/aggviewbug/default.aspx" alt="" /&gt;</description><comments>http://adamkinney.com/blog/291/default.aspx</comments><link>http://adamkinney.com/blog/291/default.aspx</link><pubDate>Fri, 04 Jan 2008 19:53:00 GMT</pubDate><guid isPermaLink="true">http://adamkinney.com/blog/291/default.aspx</guid><dc:creator>Adam Kinney</dc:creator><slash:comments>2</slash:comments><trackback:ping>http://adamkinney.com/blog/291/trackback/default.aspx</trackback:ping><category>conferences</category><category>Expression</category><category>JavaScript</category><category>Silverlight</category><category>Silverlight Streaming</category><category>WPF</category></item><item><title>Consuming JSON data with Silverlight</title><description>&lt;blockquote&gt; &lt;p&gt;How would I use JSON data with Silverlight?&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I've been asked this a few times and &lt;a href="http://blogs.msdn.com/daiken/"&gt;it happened again today&lt;/a&gt;.&amp;nbsp; So tonight is the night to write a quick tutorial on how easy it is to do this.&amp;nbsp; You can start from scratch or from any Silverlight 1.0 template, but I will be walking through the steps using Visual Studio 2008.&lt;/p&gt; &lt;p&gt;First step is to create the project.&lt;/p&gt; &lt;p&gt;&lt;code&gt;File -&amp;gt; New -&amp;gt; WebSite... -&amp;gt; Silverlight Script Web&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Now we need some JSON data. I'm going to grab the latest posts from Twitter using their &lt;a href="http://twitter.com/help/api"&gt;simple and sweet API&lt;/a&gt;.&amp;nbsp; All I need to do is add a reference to the API and add a callback function to be called once the data has been received.&amp;nbsp; In the project template, I placed this line below the script block that contains the createObjectEx function.&lt;/p&gt; &lt;p&gt;&lt;code&gt;&amp;lt;script type="text/javascript" src="http://twitter.com/statuses/public_timeline.json?callback=&lt;strong&gt;twitterCallback&lt;/strong&gt;"&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Now to handle the loading of the data.&amp;nbsp; Within the script block containing the createObjectEx function, we first define a couple of global variables at the top.&amp;nbsp; twitterData is used to store the JSON data and scene will act as a reference to our Silverlight Application class.&lt;/p&gt; &lt;p&gt;&lt;code&gt;var twitterData;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;var scene;&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Modify the Silverlight class constructor to use the newly declared scene variable by removing the var from the line below.&lt;/p&gt; &lt;p&gt;&lt;code&gt;&lt;strike&gt;var&lt;/strike&gt; scene = new &lt;em&gt;YourProjectName&lt;/em&gt;.Scene();&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Next, add the twitterCallback function.&lt;/p&gt; &lt;p&gt;&lt;code&gt;function twitterCallback(obj)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; twitterData = obj;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; scene.loadData();&lt;br&gt;}&lt;/code&gt;&lt;/p&gt; &lt;p&gt;Now open up you Silverlight application class file.&amp;nbsp; In the project template, the default name is Scene.js.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Remove all of the functions except for the handleLoad function.  &lt;li&gt;Within the handleLoad function, remove the sample event hookup code so you are left with the plugIn definition line.  &lt;li&gt;In the handleLoad function, add a property for the rootElement:&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;code&gt;this.root = rootElement;&lt;/code&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Add the new loadData function defined below (make sure you leave a comma between handleLoad and loadData function definitions):&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;code&gt;loadData: function(){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var item;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=0;i&amp;lt;5;i++){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item = this.plugIn.content.createFromXaml('&amp;lt;Canvas&amp;gt;&amp;lt;Image Source="' + twitterData[i].user.profile_image_url + '" /&amp;gt;&amp;lt;TextBlock Canvas.Left="54"&amp;gt;' + twitterData[i].user.name + '&amp;lt;/TextBlock&amp;gt;&amp;lt;/Canvas&amp;gt;');&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item["Canvas.Top"] = i*54;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.root.children.add(item);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/code&gt;&lt;/p&gt; &lt;p&gt; The above function loops through the first 5 posts and creates a new Silverlight object for each one using their name and profile image. &lt;a href="http://msdn2.microsoft.com/en-us/library/bb412361.aspx"&gt;createFromXaml&lt;/a&gt; is the magic function which takes a string, parses it and returns an object.&amp;nbsp; The string could come from anywhere, often a separate .xaml file accessed via a &lt;a href="http://msdn2.microsoft.com/en-us/library/bb232870.aspx"&gt;downloader&lt;/a&gt; object.&amp;nbsp; Once the object is made the top position is based of the index, which causes the items to be vertically stacked.&amp;nbsp; Then the new object is added to the this.root which is a reference to the main Canvas defined in the handleLoad function above.&lt;/p&gt; &lt;p&gt;Now the last step is to open up the Scene.xaml file and remove all of the lines except for the outermost Canvas element.&lt;/p&gt; &lt;p&gt;And that's it!&amp;nbsp; Seriously, hit F5, run your project and you should see something like this:&lt;/p&gt; &lt;p&gt;&lt;img src="http://adamkinney.com/images/blog/simplejson.jpg" alt="" /&gt; &lt;/p&gt; &lt;p&gt;Now enjoy and run with it.&amp;nbsp; Hopefully this short tutorial will help you in your quest to create JSON-based Silverlight applications or at least a new Silverlight-based Twitter widget.&lt;/p&gt;&lt;img src="http://adamkinney.com/blog/290/aggviewbug/default.aspx" alt="" /&gt;</description><comments>http://adamkinney.com/blog/290/default.aspx</comments><link>http://adamkinney.com/blog/290/default.aspx</link><pubDate>Wed, 19 Dec 2007 10:22:00 GMT</pubDate><guid isPermaLink="true">http://adamkinney.com/blog/290/default.aspx</guid><dc:creator>Adam Kinney</dc:creator><slash:comments>2</slash:comments><trackback:ping>http://adamkinney.com/blog/290/trackback/default.aspx</trackback:ping><category>demo</category><category>JavaScript</category><category>Silverlight</category><category>tutorial</category></item><item><title>CoolWall - a Silverlight 1.0 application reflection</title><description>&lt;p&gt;[UPDATE:&lt;a href="http://on10.net/Blogs/adam/christmas-coolwall/"&gt;My video interview&lt;/a&gt; is now live on Channel 10]&lt;/p&gt;&lt;p&gt;A large amount of my time last week was spent on a little project called &lt;a href="http://www.mycooluncool.com/"&gt;Microsoft CoolWall&lt;/a&gt;.&amp;nbsp; &lt;a href="http://blogs.msdn.com/tims/archive/2007/12/10/share-your-christmas-wishlist-hatelist-with-silverlight.aspx"&gt;Tim Sneath already posted about the site&lt;/a&gt; going live this week and provided the story on how the app came to be:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The application was originally prototyped with the Silverlight 1.1 Alpha by &lt;a href="http://www.dotnetsolutions.ltd.uk/main/"&gt;Dot Net Solutions&lt;/a&gt;, a UK-based solutions integrator firm, and as a bit of fun, Adam agreed to try back-porting it to Silverlight 1.0 to see whether everything they'd implemented in C# could be as easily accomplished in JavaScript. I've noticed a certain preconception that Silverlight 2.0 is the "one to wait for" because it's the platform that allows you to use a "proper" language like C# or Visual Basic. Of course, having .NET languages, the base class libraries and technologies like LINQ will make RIA development a ton easier, but it's impressive what you can get out of JavaScript, particularly when coupled with the client-centric &lt;a href="http://asp.net/ajax/"&gt;Microsoft AJAX Library&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt; &lt;div style="float: right; margin-bottom: 10px; margin-left: 10px"&gt;&lt;a href="http://mycooluncool.com"&gt;&lt;img alt="Microsoft CoolWall" src="http://adamkinney.com/images/blog/coolwall_300.jpg" /&gt;&lt;/a&gt;&lt;/div&gt; &lt;p&gt;The application resulted in a great way for me to "walk the walk" and not just "talk the talk".&amp;nbsp; The "talk" I am referring to is the idea that "Yes, you can build more than a Media Player in Silverlight 1.0".&amp;nbsp; (Although the folks behind the &lt;a href="http://tvdeep.mnet.com/DetailVod_view.asp?vodid=3788&amp;amp;vodSrvid=3005"&gt;MNet.com project&lt;/a&gt; certainly didn't need to hear me say that.&amp;nbsp; Yes, it plays videos, but it has built clip editing, banner ad system and web service integration).&lt;/p&gt; &lt;p&gt;JavaScript-heavy applications are not a new thing obviously in the AJAX age, but they are for some of those watching SIlverlight from a .NET standpoint.&amp;nbsp; Sure you don't have the luxury of the CLR or even full controls at this point, but you can still do a lot with Silverlight in its current form.&amp;nbsp; This isn't a full case study, but I thought I'd review some of the concepts behind developing the CoolWall application.&amp;nbsp; And first off, I may not be a JavaScript guru look some of those masters at &lt;a href="http://www.ajaxian.com/"&gt;Ajaxian&lt;/a&gt;, but I try.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Application model&lt;br&gt;&lt;/strong&gt;Silverlight project templates in Visual Studio start you off with a JavaScript function with a few functions defined within the prototype of that function.&amp;nbsp; This is analogous to a class in C# with an empty constructor and a few methods defined.&amp;nbsp; This class, specifically the handleLoad function, is then referenced by the provided createSilverlight method which is called to instantiate your application.&lt;/p&gt; &lt;p&gt;&lt;code&gt;CoolWall.Container = function() &lt;br&gt;{&lt;br&gt;}&lt;br&gt;CoolWall.Container.prototype =&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; handleLoad: function(control, userContext) &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.control = control;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br&gt;}&lt;/code&gt; &lt;/p&gt; &lt;p&gt;I built out my application using this model and as the complexity increased I broke out certain functionality into other "modules".&amp;nbsp; While simplifying the code it also allowed me to reuse some of the classes, in the case of the button, as well as control the application initialization.&amp;nbsp; The control was necessary do to some of the events fire asynchronously and I needed to ensure all elements were created by the time they were needed.&lt;/p&gt; &lt;p&gt;Most every class also had a physical representation on the screen and linked directly to existing XAML that was created.&amp;nbsp; In some cases the XAML from the main file is handled by separate modules and in other cases the XAML is loaded dynamically along with a new instance of the class.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;UserControl Pattern&lt;br&gt;&lt;/strong&gt;The buttons defined above and the image items that you drag into place were handled via a pattern to define user controls.&amp;nbsp; The XAML comes from a separate file which is downloaded by a &lt;a href="http://msdn2.microsoft.com/en-us/library/bb232870.aspx"&gt;Downloader&lt;/a&gt; object, which stores the XAML in a string variable when the application loads. Then when the time comes to instantiate a new control, the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb412361.aspx"&gt;createFromXAML&lt;/a&gt; method is used passing the stored XAML string as parameter which then returns a Silverlight object, in this case they were Canvases with children of their own.&amp;nbsp; Then the object is added to the children collection of a canvas which lives within the main XAML.&lt;/p&gt; &lt;p&gt;To provide the interaction and integration a new JavaScript class, defined using the pattern above,&amp;nbsp; is instantiated and a reference to the newly created Silverlight object is passed in the constructor.&amp;nbsp; In this case, the newly created JavaScript object is then added to an Array in order to maintain a reference for the application state and cleanup.&lt;/p&gt; &lt;p&gt;&lt;code&gt;draggableImage = this.control.content.createFromXaml(this.xamlString, true);&lt;br&gt;...&lt;br&gt;this.items[i] = new CoolWall.DraggableImage(this, draggableImage, imageUrl, ...);&lt;/code&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;strong&gt;HTML Control Integration&lt;br&gt;&lt;/strong&gt;One of the first things you notice when investigating Silverlight for development is that there are no controls.&amp;nbsp; This may seem alarming, and yes, I am really looking forward to version 2.0 and its control set, but there is hope.&lt;/p&gt; &lt;p&gt;The integration between the Silverlight DOM and the JavaScript DOM is so well done there is no problem traversing the trees to get to HTML-based controls (&lt;a href="http://adamkinney.com/blog/252/default.aspx"&gt;you can even make it to other rich objects on the page&lt;/a&gt;).&amp;nbsp; Now the only other thing to think about is that by default the Silverlight instance is windowed like a combo box or most any other browser plug-in.&amp;nbsp; You can change this during the creation of your Silverlight application by setting the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb412380.aspx"&gt;Windowless property&lt;/a&gt; to true.&amp;nbsp; Now the Silverlight instance is rendered within the page and can be positioned with CSS like a div element.&amp;nbsp; Once the HTML textboxes are in place, you can access them with JavaScript and integrate them into your JavaScript class. &lt;/p&gt; &lt;p&gt;&lt;code&gt;handleLoad: function(control, userContext){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.searchTextBox = $get("searchTextBox");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.searchTextBox.value = "Welcome to the CoolWall";&lt;br&gt;}&lt;/code&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ASP.NET AJAX&lt;br&gt;&lt;/strong&gt;I have used the &lt;a href="http://asp.net/ajax/documentation/live/Overview/default.aspx"&gt;ASP.NET AJAX library&lt;/a&gt; before, but not to this extent.&amp;nbsp; The more I used it the more fun it was.&amp;nbsp; In this application ASP.NET AJAX, helped in two major ways.&amp;nbsp; &lt;/p&gt; &lt;p&gt;The first way was the Web Service Proxy.&amp;nbsp; Using the ScriptManager, you can add a reference to .asmx page containing your services, which will then be proxied as JavaScript functions.&amp;nbsp; Very easy to use and I love the fact that serialization and de-serialization is handled for you.&amp;nbsp; You can pass the string "00000000-0000-0000-0000-000000000000" as a parameter and it will happily convert to a Guid.Empty.&amp;nbsp; A sample call in script looks like this:&lt;/p&gt; &lt;p&gt;&lt;code&gt;CoolWallService.SearchMSNLive(searchTerm,Silverlight.createDelegate(this, this.onSearchCompleted));&lt;/code&gt;&lt;/p&gt; &lt;p&gt;The create delegate method is used there to handle the asynchronous completion of the web service call, but still maintaining the context of the class that calls the service.&lt;/p&gt; &lt;p&gt;The second way the AJAX library helped, was similar to other AJAX libraries where it &lt;a href="http://asp.net/ajax/documentation/live/ClientReference/Global/default.aspx"&gt;extends the functionality of JavaScript&lt;/a&gt;.&amp;nbsp; Code is easier to write once you have methods like Array.add() , String.format and the $get function used above.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Live Search and Live ID Integration&lt;br&gt;&lt;/strong&gt;Most of the work done here came from the prototype, but it was very simple to implement using the Web Service proxies mentioned above.&amp;nbsp; Both services seem very simple to write against, once you setup AppIDs with each service, you can leverage the code that comes with the respective SDK.&amp;nbsp; I can envision myself using the &lt;a href="http://msdn2.microsoft.com/en-us/library/bb676633.aspx"&gt;LiveID Web Authentication&lt;/a&gt; model in the future as way of providing simple, even optional, personalization to an app.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Install Experience&lt;br&gt;&lt;/strong&gt;Almost forgotten, but quickly added the &lt;a href="http://adamkinney.com/blog/271/default.aspx"&gt;optimized Silverlight install experience&lt;/a&gt;.&amp;nbsp; And I say quickly added, because the InstallCreateSilverlight.js file that comes with &lt;a href="http://adamkinney.com/blog/271/default.aspx"&gt;Silverlight Installation Experience Guide&lt;/a&gt; almost does all of the work for you.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Conclusion&lt;br&gt;&lt;/strong&gt;Even though, I wish I would have had an extra week to do this, I'm really happy to have gone through the work to benefit from the lessons learned.&amp;nbsp; There are a few more features I'd like to see like a lightbox effect to view the images in a larger size, but I'm pretty happy with what got implemented.&amp;nbsp; I still need to make my Christmas wish and this might just be the way to do it.&lt;/p&gt; &lt;p&gt;Oh and plus, I was interviewed about the application an the video should be showing up soon on &lt;a href="http://on10.net/"&gt;Channel 10&lt;/a&gt;.&amp;nbsp; The interviewer was kind of goofy, but it was fun.&lt;/p&gt;&lt;img src="http://adamkinney.com/blog/289/aggviewbug/default.aspx" alt="" /&gt;</description><comments>http://adamkinney.com/blog/289/default.aspx</comments><link>http://adamkinney.com/blog/289/default.aspx</link><pubDate>Thu, 13 Dec 2007 23:48:00 GMT</pubDate><guid isPermaLink="true">http://adamkinney.com/blog/289/default.aspx</guid><dc:creator>Adam Kinney</dc:creator><slash:comments>2</slash:comments><trackback:ping>http://adamkinney.com/blog/289/trackback/default.aspx</trackback:ping><category>Channel 10</category><category>JavaScript</category><category>Silverlight</category><category>web development</category><category>Windows Live</category></item><item><title>Volta</title><description>&lt;p&gt;At the &lt;a href="http://adamkinney.com/blog/287/default.aspx"&gt;Silverlight Fire Starter event&lt;/a&gt; last week, a few of the attendees were delighted when I told them about &lt;a href="http://projects.nikhilk.net/Projects/ScriptSharp.aspx"&gt;ScriptSharp&lt;/a&gt;, a C# compiler that outputs JavaScript. This project comes to us from &lt;a href="http://nikhilk.net/"&gt;Nikhil Kothari&lt;/a&gt;, who is consistantly churning out interesting experiments in .NET.&lt;/p&gt; &lt;p&gt;Another group that has been releasing interesting projects is &lt;a href="http://labs.live.com"&gt;Live Labs&lt;/a&gt;, the group behind projects like &lt;a href="http://labs.live.com/photosynth/"&gt;Photosynth&lt;/a&gt;.&amp;nbsp; Yesterday they announced a project named &lt;a href="http://labs.live.com/volta/"&gt;Volta&lt;/a&gt;, which is similar to ScriptSharp in that it can output JavaScript from your .NET code, but they have taken it a step further by adding tier-splitting.&amp;nbsp; In their own words from &lt;a href="http://labs.live.com/volta/blog/Announcing+Volta+Web+Development+Using+Only+The+Materials+In+The+Room.aspx"&gt;their release announcement&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;You architect and build your application as a .NET client application, assigning the portions of the application that run on the server tier and client tier late in the development process. You can target either web browsers or the CLR as clients and Volta handles the complexities of tier-splitting. The compiler creates cross-browser JavaScript for the client tier, web services for the server tier, and all communication, serialization, synchronization, security, and other boilerplate code to tie the tiers together. In effect, Volta offers a best-effort experience in multiple environments without requiring tailoring of the application.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I haven't had the chance to use it yet, but it looks very promising and just plain cool.&amp;nbsp; I like it when I read things like this from the &lt;a href="http://labs.live.com/volta/docs/recipes/interop.aspx"&gt;JavaScript Interop Recipes page&lt;/a&gt;:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Volta makes it trivial to call JavaScript from .NET languages. Simply annotate a class or an extern method with an &lt;i&gt;Import&lt;/i&gt; custom attribute that names or defines the JavaScript implementation.&lt;/p&gt;&lt;/blockquote&gt;&lt;img src="http://adamkinney.com/blog/288/aggviewbug/default.aspx" alt="" /&gt;</description><comments>http://adamkinney.com/blog/288/default.aspx</comments><link>http://adamkinney.com/blog/288/default.aspx</link><pubDate>Thu, 06 Dec 2007 19:34:00 GMT</pubDate><guid isPermaLink="true">http://adamkinney.com/blog/288/default.aspx</guid><dc:creator>Adam Kinney</dc:creator><slash:comments>0</slash:comments><trackback:ping>http://adamkinney.com/blog/288/trackback/default.aspx</trackback:ping><category>JavaScript</category><category>Live Labs</category><category>Volta</category></item></channel></rss>