<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6810771</id><updated>2012-01-10T18:29:56.136-08:00</updated><category term='MsDewey'/><category term='Windows Communication Foundation'/><category term='Transcode'/><category term='Offline'/><category term='Performance'/><category term='Expression Blend'/><category term='ClickOnce'/><category term='Apple'/><category term='RIA'/><category term='XAML'/><category term='Freem'/><category term='Home Run'/><category term='Australia'/><category term='JXTA'/><category term='Courses'/><category term='Rendering'/><category term='IEM'/><category term='Graphics'/><category term='Safari'/><category term='Parser'/><category term='Humor'/><category term='Video'/><category term='Trusted Apps'/><category term='Windows Vista'/><category term='Gadget'/><category term='ODF'/><category term='Rasterization'/><category term='Resource'/><category term='NBC'/><category term='Yahoo Pipes'/><category term='UX'/><category term='Free Markets'/><category term='DreamSpark'/><category term='756'/><category term='Design'/><category term='Barry Bonds'/><category term='.NET Framework'/><category term='Darfur'/><category term='Out-of-browser'/><category term='Live Search'/><category term='Maps'/><category term='EmbeddedResource'/><category term='Out of Browser'/><category term='Learning'/><category term='Layout'/><category term='New York Times'/><category term='Viacom'/><category term='Outlook 2007'/><category term='Branding'/><category term='The Colbert Report'/><category term='OOXML'/><category term='Silverlight Streaming'/><category term='.NET'/><category term='Media'/><category term='technology'/><category term='PlayTable'/><category term='Microsoft'/><category term='Online shopping'/><category term='Navigation'/><category term='Community College'/><category term='URI'/><category term='London'/><category term='light bulbs'/><category term='XBAP'/><category term='Programming'/><category term='Futures'/><category term='Windows Presentation Foundation'/><category term='reflector'/><category term='Mashup'/><category term='Merc'/><category term='Audio'/><category term='Mix07'/><category term='Markets'/><category term='ComponentOne'/><category term='Hybrid Cars'/><category term='Stephen Colbert'/><category term='DMCA'/><category term='Major League Baseball'/><category term='WPF/E'/><category term='Software'/><category term='Surface'/><category term='Sidebar'/><category term='Commute'/><category term='Google Gears'/><category term='Yahoo'/><category term='Application Model'/><category term='Namescope'/><category term='Content'/><category term='Eneagled'/><category term='Olympics'/><category term='Benefits'/><category term='Popfly'/><category term='Controls'/><category term='Code Names'/><category term='name scope'/><category term='YouTube'/><category term='Beginner'/><category term='Google'/><category term='Sun'/><category term='British Library'/><category term='SEO'/><category term='WCF'/><category term='Tafiti'/><category term='SuperFetch'/><category term='Predicting'/><category term='WPF'/><category term='Times Reader'/><category term='Silverlight'/><title type='text'>Even a chimp can write code</title><subtitle type='html'>Ideas on software and elsewhere by Ashish Shetty: erstwhile chimp and occasional re-inventor of the wheel.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default?start-index=101&amp;max-results=100'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>251</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6810771.post-1556103197837422882</id><published>2010-04-15T14:41:00.000-07:00</published><updated>2010-04-15T15:22:26.610-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Of Crashing and Sometimes Burning</title><content type='html'>I don't feel we've narrated the story about error and exception handling in Silverlight very well. We started out in v1.0 with a relatively sucky error reporting and diagnostics story and only did real work in building a robust internal infrastructure and adding diagnostics support incrementally, starting with Silverlight 2. We've since made big strides.&lt;br /&gt;&lt;br /&gt;Our core tenet is to always provide a robust and reliable operating experience for apps.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;What conditions can cause crashes?&lt;/h4&gt;Crashes are rare occurences. Ideally we'd avoid them altogether. They are symptoms of one of the following conditions:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A bug in the platform&lt;/li&gt;&lt;li&gt;A security mitigation being acted out&lt;/li&gt;&lt;li&gt;The app doing an illegal reentrant call&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Crashes due to platform bugs&lt;/strong&gt;&lt;br /&gt;These are rare because few bugs of that severity ever get past our quality gates. This remedy is used within Silverlight only in situations where there's a reasonable chance the platform is in uncertain state and going ahead might be fraught with problems. Within this category, there are two variants: shutting down the app and then the runtime; and tearing down the host process. &lt;/p&gt;&lt;p&gt;Of the two variants, the former is the more common approach. It is typical for Silverlight to notify the app via Application.UnhandledException, and most times followed by raising the OnError DOM event for the OBJECT tag prior to shutdown. If you don't see either of these happening, then that might also indicate a bug, and you should report it. &lt;/p&gt;&lt;p&gt;In some situations Silverlight may not consider it tenable to continue processing. Instead it takes recourse to a failfast - aka a forceful teardown. Examples include when the internal state machine appears to be corrupt or required data is missing (an ExecutionEngineException thrown but not necessarily).&lt;/p&gt;&lt;p&gt;If you think you've found a platform bug that is causing crashes, we'd love to get our hands on a simplified repro app with sources. If the bug does not reproduce reliably, we'd appreciate crash dumps. &lt;/p&gt;&lt;p&gt;We will fix most of these issues as and when they're reported.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Crashes due to an in-built security mitigation&lt;/strong&gt;&lt;br /&gt;When Silverlight detects an Access Violation (aka segfault) or a Stack Overflow, or a Buffer Overflow, the runtime's built-in failfast routines kick in. These are deliberately designed to disallow app code to catch/suppress/rethrow these exceptions, and instead prevent any exploit from taking effect. Doing that would be folly... therein lie known attack vectors. Even in the most benign situations Silverlight assumes past performance is an indicator of future performance (&lt;em&gt;no, we wouldn't be good investors with that mindset!&lt;/em&gt;) and finds its extreme action justifiable. &lt;/p&gt;&lt;p&gt;We will not "fix" issues in this category.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Crashes due to reentrancy&lt;/strong&gt;&lt;br /&gt;Silverlight does not deal well with reentrant behavior. Simply put, if Silverlight calls app code in a synchronous callout, it expects the call to be blocking, and it does not expect to be called back via that or another avenue until the blocking call exits. But when it finds itself in this situation, Silverlight will teardown with extreme prejudice, bringing down app, runtime and host (browser) together with a Null AccessViolation. A Null AV is different from a regular AV.&lt;/p&gt;&lt;p&gt;Here's how to tell if this is happening to you. The simple way is to look for "Null AccessViolation" in your dump. A more contrived way requires symbols and involves looking at the callstack:&lt;/p&gt;&lt;pre&gt;KernelBase.dll!DebugBreak()  Line 81             C&lt;br /&gt;npctrl.dll!CWindowsServices::DebugBreak()  Line 4270 + 0x8 bytes        C++&lt;br /&gt;npctrl.dll!DisplayDebugDialog(unsigned int uClass=1, unsigned short * pFileName=0x5ef4ef78, int iLine=64, int iValue=0, unsigned short * pTestString=0x5ef36dec, unsigned short * pMessage=0x037d9a0c)  Line 926        C++&lt;br /&gt;npctrl.dll!XcpVTrace(unsigned int uClass=1, unsigned short * pFileName=0x5ef4ef78, int iLine=64, int iValue=0, unsigned short * pTestString=0x5ef36dec, unsigned short * pMessageString=0x5ef31e78, void * pVArgs=0x037d9c00)  Line 1036     C++&lt;br /&gt;npctrl.dll!CWindowsServices::XcpTrace(unsigned int uClass=1, unsigned short * pFilename=0x5ef4ef78, int iLine=64, int iValue=0, unsigned short * pTestString=0x5ef36dec, unsigned short * pMessageString=0x5ef31e78, ...)  Line 7258     C++&lt;br /&gt;npctrl.dll!&lt;span style="color:#ff0000;"&gt;CReentrancyGuard::CheckReentrancy&lt;/span&gt;(int bNullAvOnReentrancy=1)  Line 64 + 0x36 bytes              C++&lt;br /&gt;npctrl.dll!CXcpDispatcher::OnReentrancyProtectedWindowMessage(HWND__ * hwnd=0x004b039a, &lt;span style="color:#ff0000;"&gt;unsigned int msg=1026&lt;/span&gt;, unsigned int wParam=0, long lParam=0)  Line 900 + 0xa bytes  C++&lt;br /&gt;npctrl.dll!CXcpDispatcher::WindowProc(HWND__ * hwnd=0x004b039a, unsigned int msg=1026, unsigned int wParam=0, long lParam=0)  Line 807 + 0x18 bytes    C++&lt;br /&gt;user32.dll!_InternalCallWinProc@20()  Line 106         Asm&lt;br /&gt;user32.dll!UserCallWinProcCheckWow(_ACTIVATION_CONTEXT * pActCtx=0x00000000, long (HWND__ *, unsigned int, unsigned int, long)* pfn=0x5f10bc90, HWND__ * hwnd=0x004b039a, _WM_VALUE msg=1026, unsigned int wParam=0, long lParam=0, void * pww=0x00e267f8, int fEnableLiteHooks=1)  Line 163 + 0x12 bytes         C&lt;br /&gt;user32.dll!DispatchMessageWorker(tagMSG * pmsg=0x5f10bc90, int fAnsi=0)  Line 2591 + 0x1e bytes        C&lt;br /&gt;user32.dll!DispatchMessageW(const tagMSG * lpMsg=0x037d9dec)  Line 999     C&lt;br /&gt;user32.dll!DialogBox2(HWND__ * hwnd=0x002902ac, HWND__ * hwndOwner=0x000b0924, int fDisabled=0, int fOwnerIsActiveWindow=0)  Line 1150           C&lt;br /&gt;user32.dll!InternalDialogBox(void * hModule=0x760b0000, DLGTEMPLATE * lpdt=0x04923388, HWND__ * hwndOwner=0x000708fe, int (HWND__ *, unsigned int, unsigned int, long)* pfnDialog=0x7611eec8, long lParam=58564704, unsigned int fSCDLGFlags=0)  Line 1314 + 0x9 bytes           C&lt;br /&gt;user32.dll!SoftModalMessageBox(_MSGBOXDATA * lpmb=0x00000030)  Line 1237 + 0x18 bytes  C&lt;br /&gt;user32.dll!MessageBoxWorker(_MSGBOXDATA * pMsgBoxParams=0x037da060)  Line 791             C&lt;br /&gt;user32.dll!&lt;span style="color:#ff0000;"&gt;MessageBoxIndirectW&lt;/span&gt;(const tagMSGBOXPARAMSW * lpmbp=0x037da0d4)  Line 528 + 0xe bytes              C&lt;br /&gt;ieframe.dll!6132ecd5()      &lt;/pre&gt;The presence of &lt;code&gt;CReentrancyGuard::CheckReentrancy&lt;/code&gt; indicates the reentrancy guard; message 1026 indicates WM_INTERNAL_TICK the veritable sign of the &lt;strike&gt;apocalypse&lt;/strike&gt; reentrancy; and the presence of a (non-Silverlight, in this case from NTUser) MessageBox at the bottom indicates an actor that pumps messages including Silverlight messages. Note that Silverlight's own MessageBox will not cause this reentrancy - it and the reentrancy guard were specifically designed to play well with each other. So I recommend using that any place you'd consider using an alert.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now consider that SizeChanged and LayoutUpdated events are raised synchronously as part of a layout pass. (I've previously expressed &lt;a href="http://nerddawg.blogspot.com/2008/07/death-taxes-and-latency.html"&gt;my firm preference for all things async&lt;/a&gt; -- I'd have loved for these events to be async but lost that argument since it'd have broken WPF compat and eliminated a couple scenarios. But I digress.) Now if you were to use the DOM Bridge within a SizeChanged event handler to, say, do an alert(), that'd align all the stars. The alert would pump messages; Silverlight would be in a blocking call, not expecting any messages in its internal queue; its little "reentrancy guard" would see this as reentrant behavior, and initiate adverse action terminating with a Null AV.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Silverlight's behavior in this situation was intended to be moral equivalent of a shock collar. We wanted app authors to detect these situations at development time and fix their code, so it never shipped with reentrant behavior. &lt;/p&gt;&lt;p&gt;This condition is the most common cause for crashes in Silverlight, and is indicative of programming error in the app.&lt;/p&gt;&lt;p&gt;We're constantly evaluating whether this sort of positive reinforcement through &lt;a href="http://en.wikipedia.org/wiki/Operant_conditioning"&gt;operant conditioning&lt;/a&gt; actually works. If you have anecdotes or feedback, please drop a line. Bear in mind that we have done a poor job at advertising this behavior, and I do sincerely apologize. So the fact that it took you a good while longer than average to debug such an issue is unfortunate but explained away by that.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Where to look for crash dumps?&lt;/strong&gt;&lt;br /&gt;While developing apps on Windows, with Windows Error Reporting (Watson) you should see the path in the UI shown upon a crash. Alternately look under %Temp% for dirs with "WER" prefix, and look for a .mdmp file prefixed by process name. If this is an out of browser app, you should see "sllauncher.exe.mdmp" instead of one for the browser's executable.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;h4&gt;Further reading&lt;/h4&gt;With the context from this post, I hope you will see the MSDN doc on &lt;a href="http://msdn.microsoft.com/en-us/library/cc189070(VS.95).aspx"&gt;Silverlight Error Handling&lt;/a&gt; in new light. Some of that content originated from my original spec on the topic written circa Silverlight 2. It will help you understand control flow. In addition, this topic page will help you understand &lt;a href="http://msdn.microsoft.com/en-us/library/2w8f0bss(VS.95).aspx"&gt;how best to handle exceptions in your own Silverlight app code&lt;/a&gt;. &lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;A word on diagnostics&lt;/h4&gt;If we could rewrite the past and change something, we'd have tweaked our initial conditions to one that enforced error reporting best practices in our internal development of the runtime. This would have eliminated having to perform triage and surgery on a rapidly evolving runtime as we added better diagnostics. There are still too many E_FAILs in our code that bubble up and result in the totally unhelpful "Unknown error" and the wildly melodramatic "Catastrophic error". There's a bit of dark humor in the backstory, but that's for another time.&lt;br /&gt;&lt;br /&gt;Our work is not done though. We continue to seek feedback from app authors and fix our oversights. Keeping Silverlight easy to develop against is a giant priority for our team. Making sure you have great diagnostics and get past issues fast is one way we can make that happen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1556103197837422882?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1556103197837422882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1556103197837422882' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1556103197837422882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1556103197837422882'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2010/04/of-crashing-and-sometimes-burning.html' title='Of Crashing and Sometimes Burning'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-6481404443499598241</id><published>2010-04-15T12:28:00.000-07:00</published><updated>2010-04-15T12:46:44.737-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Four scores!</title><content type='html'>Silverlight 4 is now live! Here's &lt;a href="http://www.silverlight.net/getstarted/silverlight-4/#whatsnew"&gt;what's new&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;End users can get it here: &lt;a href="http://www.microsoft.com/GetSilverlight"&gt;microsoft.com/GetSilverlight&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;App authors can get the runtime and tools here: &lt;a href="http://www.silverlight.net/getstarted/"&gt;silverlight.net/GetStarted&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Developer docs for Silverlight are &lt;a href="http://msdn.microsoft.com/en-us/library/cc838158(v=vs.95).aspx"&gt;on MSDN&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The team is taking a much-deserved couple days off to recharge. Besides, the sun's out in Seattle this week - after what seems like decades.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-6481404443499598241?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/6481404443499598241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=6481404443499598241' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6481404443499598241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6481404443499598241'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2010/04/four-scores.html' title='Four scores!'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-286490834214794680</id><published>2010-04-15T12:24:00.000-07:00</published><updated>2010-04-15T12:28:15.581-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Can you access a loose XAML file from LoadComponent?</title><content type='html'>&lt;p&gt;The answer is no. The job of &lt;a href="http://msdn.microsoft.com/library/ms596995(VS.95).aspx"&gt;Application.LoadComponent&lt;/a&gt; in Silverlight is to “merge” a specified XAML file with a specified object. &lt;/p&gt;&lt;code&gt;public void Application.LoadComponent(object, Uri);&lt;/code&gt; &lt;p&gt;In doing so, it does a series of validations:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;checks that neither parameter is null &lt;/li&gt;&lt;li&gt;checks whether the specified XAML URI is absolute or relative. Absolute URIs are not allowed. &lt;/li&gt;&lt;li&gt;checks whether the specified XAML is embedded within an assembly. If not, LoadComponent fails. &lt;/li&gt;&lt;li&gt;checks whether the root element declared in the specified XAML is actually the same type as that of the specified object. If not, LoadComponent fails. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;and only then attempts to merge the two in a custom parsing step.&lt;/p&gt;&lt;h4&gt;Well, why not?&lt;/h4&gt;&lt;p&gt;The last bullet point above is consequential in why we don’t allow loose XAML. LoadComponent thinks of an assembly as a logical boundary. In the presence of XAML with contents like this:&lt;/p&gt;&lt;code&gt;&amp;lt;UserControl x:Class=”Foo”&amp;gt; …&lt;/code&gt; &lt;p&gt;the only unambiguous way for Silverlight to identify and locate “Foo” is if it knew the DLL where that type was defined. Iterating through all DLLs loaded in the AppDomain isn’t an optimal solution at all. This is why it insists that the XAML be embedded within a DLL. Then it knows the un-qualified type is defined within that DLL. In practice, the URI specified on the LoadComponent call ends up being something like: &lt;/p&gt;&lt;code&gt;/SomeAssemblyName;component/Page.xaml&lt;/code&gt; &lt;p&gt;which has metadata on the provenance of said XAML i.e. that it came from an assembly with short name “SomeAssemblyName”. Silverlight can now happily match it against the type backing the other specified parameter – the object.&lt;/p&gt;&lt;h4&gt;How does one work around this?&lt;/h4&gt;&lt;p&gt;A workaround exists, but it has some limitations. You can use XamlReader.Load() to have Silverlight create an &lt;a href="http://msdn.microsoft.com/en-us/library/cc189034(VS.95).aspx"&gt;object tree&lt;/a&gt; from your specified markup. The caveat being that said XAML cannot have &lt;a href="http://msdn.microsoft.com/en-us/library/cc221357(VS.95).aspx"&gt;code-behind associations&lt;/a&gt; i.e. a backing type as root element, or event handler declarations. This approach is ideal if you’re dealing with sprites that are injected into the app, with other plumbing hooked up programmatically.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;Aside: This is part of a &lt;em&gt;recycling bits&lt;/em&gt; series I've been considering for a while. I frequently find myself answering the same questions over email or other forums, and figure I'd give some of those FAQs airtime on this blog, so as to multiply any benefits the information might have.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-286490834214794680?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/286490834214794680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=286490834214794680' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/286490834214794680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/286490834214794680'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2010/04/can-you-access-loose-xaml-file-from.html' title='Can you access a loose XAML file from LoadComponent?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5112059604158913583</id><published>2010-03-18T16:17:00.000-07:00</published><updated>2010-03-18T16:44:25.777-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Trusted Apps'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Out-of-browser'/><category scheme='http://www.blogger.com/atom/ns#' term='Out of Browser'/><title type='text'>Stepping outside the browser with Silverlight 4</title><content type='html'>Thanks to all those who attended the talk "CL10 - Stepping outside the browser with Silverlight 4" at the Mix 2010 conference or caught it via the &lt;a href="http://live.visitmix.com/MIX10/Sessions/CL10"&gt;recorded session online&lt;/a&gt;. I talked about the evolution of Silverlight into a general purpose development platform, far away from its origins as a browser plugin. I walked through features that light up outside the browser through our deliberate nested doll design approach - both in Silverlight 3 and continuing into Silverlight 4 now. I also talked about trusted apps and emphasized how important getting the right user experience and removing friction from app deployment was to us in the Silverlight team.&lt;br /&gt;&lt;br /&gt;Here is the &lt;a href="http://cid-404c2ff7814e399f.skydrive.live.com/self.aspx/Public/Silverlight%20beyond%20the%20browser/Mix2010%5E_CL10%5E_SteppingOutsideTheBrowserWithSilverlight4.pptx"&gt;slide deck from the talk&lt;/a&gt;. Source code for the basic sandboxed app is archived &lt;a href="http://cid-404c2ff7814e399f.skydrive.live.com/self.aspx/Public/Silverlight%20beyond%20the%20browser/SandboxedApp.zip"&gt;here&lt;/a&gt;; and code for the trusted app can be found &lt;a href="http://cid-404c2ff7814e399f.skydrive.live.com/self.aspx/Public/Silverlight%20beyond%20the%20browser/ImageShop.zip"&gt;here&lt;/a&gt;. Hope you find it valuable.&lt;br /&gt;&lt;br /&gt;The Q&amp;amp;A session at the end was very useful. I appreciate all the interest in this space and was happy to learn of the apps people were building. We could only get here "with a little help from our friends" in the ecosystem. We can continue that conversation on this blog, or you can send me email (ashsh).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Update: as a postscript, the slide deck I linked to here looks different from the one I used in the talk. Due to "technical difficulties" the podium machine had an older copy of the deck from one of my previous uploads, and I only found out once I was into the talk (silly me for not checking). So if I looked like I crapped a brick at the beginning, now you know why. Live and learn.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5112059604158913583?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5112059604158913583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5112059604158913583' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5112059604158913583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5112059604158913583'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2010/03/stepping-outside-browser-with.html' title='Stepping outside the browser with Silverlight 4'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-7427178101503471342</id><published>2009-07-25T15:45:00.001-07:00</published><updated>2009-07-25T15:51:34.808-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offline'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Out-of-browser'/><category scheme='http://www.blogger.com/atom/ns#' term='Out of Browser'/><title type='text'>Silverlight out-of-browser apps: Remove</title><content type='html'>&lt;p&gt;Removing a Silverlight out-of-browser app is as easy as &lt;a title="Installing a Silverlight offline and out-of-browser app" href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-install.html"&gt;installing&lt;/a&gt; it was previously. From within the app, just right-click and choose &lt;em&gt;“Remove this application…”&lt;/em&gt;. &lt;/p&gt;  &lt;a href="http://1.bp.blogspot.com/_vO3QC5qlK78/SmuLaNCX-UI/AAAAAAAAAFs/x-TPe6N6RXk/s1600-h/SL+out-of-browser+Remove+context+menu+item.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 242px; height: 70px;" src="http://1.bp.blogspot.com/_vO3QC5qlK78/SmuLaNCX-UI/AAAAAAAAAFs/x-TPe6N6RXk/s320/SL+out-of-browser+Remove+context+menu+item.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5362533063607187778" /&gt;&lt;/a&gt;&lt;p&gt;Just so you don’t wipe away apps by accident, Silverlight will ask you to confirm, and when you do, the app is uninstalled and its binaries are scavenged from the offline application cache. &lt;/p&gt;&lt;a href="http://4.bp.blogspot.com/_vO3QC5qlK78/SmuLaa0twJI/AAAAAAAAAF0/gfSoAw8vlLU/s1600-h/SL+out-of-browser+Remove+confirmation.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 124px;" src="http://4.bp.blogspot.com/_vO3QC5qlK78/SmuLaa0twJI/AAAAAAAAAF0/gfSoAw8vlLU/s320/SL+out-of-browser+Remove+confirmation.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5362533067307991186" /&gt;&lt;/a&gt;&lt;p&gt;Data persisted by the app into &lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-local.html"&gt;local data store&lt;/a&gt; (Isolated Storage) is not removed. It is still consumable by the in-browser version of the app.&lt;/p&gt;  &lt;p&gt;On Mac OS X, dragging the app bundle into the Trash can is another way to remove the app. &lt;/p&gt;  &lt;p&gt;In line with our guiding principles which involve keeping the consumer end user firmly in control, keeping it simple and staying out of the way, the Remove experience does not allow the app to programmatically delay, defer or prevent its own uninstall.&lt;/p&gt;  &lt;p&gt;Previous posts in this series:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/03/introducing-offline-and-out-of-browser.html"&gt;Introducing Offline and Out of Browser support in Silverlight&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-support-what.html"&gt;The kinds of apps you can build&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-install.html"&gt;Install&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-launch.html"&gt;Launch&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-network.html"&gt;Network Awareness&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-local.html"&gt;Local Data Store&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/07/silverlight-out-of-browser-apps-how.html"&gt;Updates&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-7427178101503471342?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/7427178101503471342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=7427178101503471342' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7427178101503471342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7427178101503471342'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/07/silverlight-out-of-browser-apps-remove.html' title='Silverlight out-of-browser apps: Remove'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vO3QC5qlK78/SmuLaNCX-UI/AAAAAAAAAFs/x-TPe6N6RXk/s72-c/SL+out-of-browser+Remove+context+menu+item.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5649020131811151478</id><published>2009-07-10T19:58:00.001-07:00</published><updated>2009-07-10T20:14:53.243-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offline'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Out-of-browser'/><category scheme='http://www.blogger.com/atom/ns#' term='Out of Browser'/><title type='text'>Silverlight out-of-browser apps: How Updates Work</title><content type='html'>&lt;p&gt;Silverlight makes updating your &lt;a href="http://nerddawg.blogspot.com/2009/03/introducing-offline-and-out-of-browser.html"&gt;out-of-browser XAP&lt;/a&gt; a breeze. It does the heavy lifting for you, asking that you merely invoke the update logic from within your app at a time or frequency of your choosing, and respond to events raised by Silverlight. &lt;/p&gt;&lt;p&gt;If an updated XAP has been published to your web server, Silverlight will download and induct it to the offline application cache. The next time your app is activated, Silverlight will ensure the updated bits are activated and the old bits are scavenged.&lt;/p&gt;&lt;h4&gt;What the app author needs to do&lt;/h4&gt;&lt;p&gt;Employ the async-pattern APIs exposed for updates in your out-of-browser apps. The trigger method is the &lt;code&gt;Application.CheckAndDownloadUpdateAsync()&lt;/code&gt; method. Hook up an event handler for the &lt;code&gt;CheckAndDownloadUpdateCompleted&lt;/code&gt; event. See, there’s not much to it! No messing with version numbers or the like.&lt;/p&gt;&lt;h4&gt;Gotchas?&lt;/h4&gt;&lt;p&gt;Well the only thing to watch out for is the situation when a new version of Silverlight comes out (say v4) and your app is built against it, but the consumer is running an older runtime (say, v3) and an appropriate older version of your app. In this situation, the app update cannot be applied because it requires a runtime update first. Silverlight notifies your app of this situation by setting the event arg’s &lt;code&gt;Error&lt;/code&gt; property value to &lt;code&gt;System.PlatformNotSupportedException&lt;/code&gt;. &lt;/p&gt;&lt;p&gt;All in all, here’s the code you’re going to write:&lt;/p&gt;&lt;form id="aspnetForm" method="post" name="aspnetForm" action="http://msdn.microsoft.com/system.windows.application.checkanddownloadupdateasync(VS.95).aspx"&gt;&lt;div id="contents"&gt;&lt;div id="ctl00_LibFrame" class="resizableArea"&gt;&lt;div id="ctl00_raRight" class="rightSection"&gt;&lt;div class="RightPanel"&gt;&lt;div class="ContentArea"&gt;&lt;div class="topic"&gt;&lt;div id="mainSection"&gt;&lt;div id="mainBody"&gt;&lt;div id="ctl00_MTContentSelector1_mainContentContainer_cpe46165" class="MTPS_CollapsibleRegion"&gt;&lt;div style="DISPLAY: block" id="ctl00_MTContentSelector1_mainContentContainer_cpe46165_c" class="MTPS_CollapsibleSection"&gt;&lt;div id="snippetGroup"&gt;&lt;div id="ctl00_MTContentSelector1_mainContentContainer_ctl29_CSharp" class="libCScode"&gt;&lt;div dir="ltr"&gt;&lt;pre style="WORD-WRAP: break-word; WORD-BREAK: break-all" id="ctl00_MTContentSelector1_mainContentContainer_ctl29CSharp" class="libCScode" space="preserve"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; SomeMethod()&lt;br /&gt;{&lt;br /&gt;    Application.Current.CheckAndDownloadUpdateAsync();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; App_CheckAndDownloadUpdateCompleted(object sender,&lt;br /&gt;&lt;br /&gt;                   CheckAndDownloadUpdateCompletedEventArgs e)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:blue;"&gt;if&lt;/span&gt; (e.UpdateAvailable)&lt;br /&gt;    {&lt;br /&gt;        MessageBox.Show(&lt;span style="color:maroon;"&gt;&lt;span style="color:maroon;"&gt;"An update has been downloaded. "&lt;/span&gt;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color:maroon;"&gt;&lt;span style="color:maroon;"&gt;"Restart the application to run the new version."&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:blue;"&gt;else&lt;/span&gt; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (e.Error != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp;&lt;br /&gt;        e.Error is PlatformNotSupportedException)&lt;br /&gt;    {&lt;br /&gt;        MessageBox.Show(&lt;span style="color:maroon;"&gt;&lt;span style="color:maroon;"&gt;"An application update is available, "&lt;/span&gt;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color:maroon;"&gt;&lt;span style="color:maroon;"&gt;"but it requires a new version of Silverlight. "&lt;/span&gt;&lt;/span&gt; +&lt;br /&gt;            &lt;span style="color:maroon;"&gt;&lt;span style="color:maroon;"&gt;"Visit the application home page to upgrade."&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color:blue;"&gt;else&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        MessageBox.Show(&lt;span style="color:maroon;"&gt;&lt;span style="color:maroon;"&gt;"There is no update available."&lt;/span&gt;&lt;/span&gt;);&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/form&gt;&lt;h4&gt;What the app publisher needs to do&lt;/h4&gt;&lt;p&gt;If you handle application deployments or administer web servers, all you need to do is xcopy the new XAP (plus any external content files it needs) in place of the old XAP. Silverlight will take it from there. &lt;/p&gt;&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;p&gt; &lt;/p&gt;&lt;p&gt;In the end, a word to the wise... Make sure you clearly articulate your app's update policy to your end users. Whether you auto-update, or require user-initiation; whether you update upon every app launch or at another discrete frequency; let your app's consumer audience know. Ideally you'd grant them the ability to override your defaults. This is the right thing to do. The user must always be in control.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Previous posts in this series:&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/03/introducing-offline-and-out-of-browser.html"&gt;Introducing Offline and Out of Browser support in Silverlight&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-support-what.html"&gt;Silverlight out-of-browser support: What kind of apps can you build?&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-install.html"&gt;Silverlight out-of-browser apps: The Install&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-launch.html"&gt;Silverlight out-of-browser apps: Launch&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-network.html"&gt;Silverlight out-of-browser apps: Network Awareness&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-local.html"&gt;Silverlight out-of-browser apps: Local Data Store&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5649020131811151478?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5649020131811151478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5649020131811151478' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5649020131811151478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5649020131811151478'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/07/silverlight-out-of-browser-apps-how.html' title='Silverlight out-of-browser apps: How Updates Work'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-8707852652534940680</id><published>2009-07-10T09:58:00.000-07:00</published><updated>2009-07-10T19:27:48.100-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Three Years and Three Versions</title><content type='html'>Silverlight 3 just shipped! 3 is so much bigger than 2; and here's &lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx"&gt;what's new&lt;/a&gt;. See &lt;a href="http://weblogs.asp.net/scottgu/archive/2009/07/10/silverlight-3-released.aspx"&gt;Scott's post &lt;/a&gt;announcing the release to web (RTW) and outlining the major features.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/silverlight"&gt;Microsoft.com/silverlight&lt;/a&gt; gets a facelift. Goodbye dusk (theme), hello dawn. Be sure to check out the &lt;a href="http://www.microsoft.com/silverlight/overview/default.aspx"&gt;overview of Silverlight 3 there&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Thanks to all of you for your persistent feedback and support in making this such a powerhouse of a release. Keep that feedback coming - we're already working on 4.&lt;br /&gt;&lt;br /&gt;More soon...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-8707852652534940680?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/8707852652534940680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=8707852652534940680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8707852652534940680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8707852652534940680'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/07/three-years-and-three-versions.html' title='Three Years and Three Versions'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-7747360822011682353</id><published>2009-05-09T16:32:00.000-07:00</published><updated>2009-05-09T16:49:47.482-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>User-initiated operations in Silverlight</title><content type='html'>User-initiated operations in Silverlight:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;must be initiated by the user via an input device like keyboard, mouse or accessibility client...&lt;/li&gt;&lt;li&gt;...within Silverlight&lt;/li&gt;&lt;li&gt;have an in-built timeout&lt;/li&gt;&lt;li&gt;have atomicity of transaction&lt;/li&gt;&lt;li&gt;cannot be marshalled across the specific Silverlight plugin's boundaries&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;#1 is obvious. &lt;/p&gt;&lt;p&gt;#2 isn't. Silverlight will not honor user-initiated operations that start from an HTML element, have a JavaScript handler which calls into a Silverlight scriptable API or other such endpoint.&lt;/p&gt;&lt;p&gt;#3, the in-built timeout in a user-initiated operation exists to eliminate long running, blocking, iterative, recursive tasks within one user-initiated method call. The timeout value is sort of a magic number, chosen to be small enough to no be a pain point for most developers and their scenarios, and large enough not to compromise on its goals.&lt;/p&gt;&lt;p&gt;#4 indicates that you cannot combine two operations in Silverlight which both require user initation into one transaction. &lt;/p&gt;&lt;p&gt;#5 means that the user-initiated "bit" doesn't traverse the Silverlight plugin boundaries, via IPC calls such as local messaging or even intra-process calls via DOM bridge or Scriptable object features.&lt;/p&gt;&lt;p&gt;These may look like quirks but are actually "features" that exist in Silverlight as secure defaults and to provide consistency of behavior across its supported browser and platform matrix. It is important for every Silverlight designer and developer to understand these nuances.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-7747360822011682353?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/7747360822011682353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=7747360822011682353' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7747360822011682353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7747360822011682353'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/05/user-initiated-operations-in.html' title='User-initiated operations in Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-3060559343721808109</id><published>2009-04-27T19:03:00.000-07:00</published><updated>2009-04-27T19:03:26.504-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offline'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Out-of-browser'/><category scheme='http://www.blogger.com/atom/ns#' term='Out of Browser'/><title type='text'>Silverlight out-of-browser apps: Local Data Store</title><content type='html'>&lt;p&gt;Silverlight applications – whether in-browser or out-of-browser, and whether running online or offline - can persist data into a local data store referred to as “&lt;a href="http://msdn.microsoft.com/en-us/library/bdts8hk0(VS.95).aspx"&gt;Isolated Storage&lt;/a&gt;”. With the new offline/out-of-browser support in Silverlight 3, the platform further ensures that an app has access to the &lt;em&gt;same&lt;/em&gt; Isolated Storage data regardless of whether it was activated in-browser or locally. This way, apps can share data between the in-browser and out of browser versions. As I’d mentioned in a previous post, Silverlight will enforce the provenance URI of the XAP in either case, ensuring that when each queries for its local store, it gets the very same artifact.&lt;/p&gt;  &lt;h4&gt;What can you do with this power?&lt;/h4&gt;  &lt;p&gt;Scenario #0: Local playback sure beats network playback.&lt;/p&gt;  &lt;p&gt;Scenario #1: Assuming you have consumer use cases that involve using your in-browser and out-of-browser apps interchangeably, you now have a way to share data between them. &lt;/p&gt;  &lt;p&gt;Scenario #2: If you need to share data between your in-browser app and your newly minted out-of-browser app immediately upon install (detach), you can use this local store as your custom “cookie store”. &lt;/p&gt;  &lt;p&gt;Scenario #3: If your out-of-browser app detects no network connection, it can still take user input but persist that into local store, to later playback when connectivity is regained.&amp;#160; &lt;/p&gt;  &lt;h4&gt;Internals&lt;/h4&gt;  &lt;p&gt;Silverlight’s Isolated Storage feature provides a virtual file system in which apps can create and store both files and directories with arbitrary data. &lt;/p&gt;  &lt;p&gt;Apps are abstracted from the lower level file I/O functionality; they do not (need to) know where the files are stored or what sort of internal formats and directory hierarchies are in place. While apps can use file paths and dot-out syntax, these paths cannot escape the bounds of the virtual file system. This sort of virtualization provides isolation of app data, preventing other apps from inadvertently reading from or writing to your app’s store. Hence the term “Isolated” in the name. Apps and app authors do need to recognize that data stored in this persistence store is per-user and per-domain.&lt;/p&gt;  &lt;p&gt;The Isolated Storage feature in Silverlight persists app data within a directory in the user profile (&lt;code&gt;\%AppData%\LocalLow\Microsoft\Silverlight\is&lt;/code&gt; on Windows Vista and up and &lt;code&gt;/Users/&amp;lt;user&amp;gt;/Library/Application Support/Microsoft/Silverlight/is&lt;/code&gt; on Mac OS X). The AppData folder is a hidden folder. This has the beneficial side effect of hiding your data from from OS search utilities (Windows desktop search and Spotlight) as well as the casual user. This should not be seen as a security boundary – only as a perpetuating the isolation of data.&lt;/p&gt;  &lt;h4&gt;Quotas&lt;/h4&gt;  &lt;p&gt;The space allocated for local data storage in a Silverlight app is bounded by a default quota assigned to that app’s domain of origin. At install (detach) time out-of-browser Silverlight apps will have 25MB space available within the Isolated Storage by default. Contrast this to the default quota of 1MB enjoyed by conventional in-browser Silverlight apps.&lt;/p&gt;  &lt;p&gt;Needless to say, more space is available to the app upon user consent when the app invokes the System.IO.IsolatedStorage.IsolatedStorageFile.IncreaseQuotaTo() method. That method invocation itself needs to be in response to a user-initiated action such as mouse click or key press.&lt;/p&gt;  &lt;p&gt;When your out-of-browser app is uninstalled, Silverlight does not reclaim your special quota or erase data persisted there. &lt;/p&gt;  &lt;h4&gt;Encryption&lt;/h4&gt;  &lt;p&gt;Although the isolated storage maintains data in an obscure location, it should not be confused with secure or encrypted data. However apps can easily &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.aesmanaged(VS.95).aspx"&gt;encrypt and decrypt isolated storage files&lt;/a&gt;; they may also &lt;a href="http://msdn.microsoft.com/en-us/library/system.security.cryptography.hmacsha256(VS.95).aspx"&gt;sign and validate the signature of an isolated storage file using the SHA256 hash function&lt;/a&gt;.&lt;/p&gt;  &lt;h4&gt;Gotchas&lt;/h4&gt;  &lt;p&gt;When saving to a virtual file system, one needs to be aware of inherent limits on file path size. This is imposed on you because the Isolated Storage’s root dir itself occupies several characters in the path (151 on Vista/Win7, 183 on XP/2K, 160 on OS X) effectively leaving you only the remainder (109, 77 and 100) respectively for your own file and directory names before Silverlight’s limit of 260 chars for a file path is hit.&lt;/p&gt;  &lt;h4&gt;Saving files outside of Isolated Storage&lt;/h4&gt;  &lt;p&gt;Silverlight 3 allows for saving files outside of isolated storage. Saving to any location on the client-side file system requires user initiation and the use of the &lt;a href="http://msdn.microsoft.com/library/system.windows.controls.savefiledialog(VS.96).aspx"&gt;SaveFileDialog control&lt;/a&gt; - a new “safe” control which allows saving one file at a time via a stream with your app code not having access to the file system or structure. Saving data to the server via an HTTP postback is another option.&lt;/p&gt;  &lt;p&gt;----&lt;/p&gt;  &lt;p&gt;This was #6 in my ongoing series of posts on Silverlight’s new offline and out of browser support. Hope it is helping you gear up. &lt;/p&gt;  &lt;p&gt;Previous posts in this series:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/03/introducing-offline-and-out-of-browser.html"&gt;Introducing Offline and Out of Browser support in Silverlight&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-support-what.html"&gt;Silverlight out-of-browser support: What kind of apps can you build?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-install.html"&gt;Silverlight out-of-browser apps: The Install&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-launch.html"&gt;Silverlight out-of-browser apps: Launch&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-network.html"&gt;Silverlight out-of-browser apps: Network Awareness&lt;/a&gt;&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Related links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/bdts8hk0(VS.95).aspx"&gt;Isolated Storage documentation&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/system.io.isolatedstorage(VS.95).aspx"&gt;Isolated Storage API reference&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd458794.aspx"&gt;MSDN magazine article : Isolated Storage in Silverlight 2&lt;/a&gt;&amp;#160; &lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-3060559343721808109?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/3060559343721808109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=3060559343721808109' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3060559343721808109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3060559343721808109'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-local.html' title='Silverlight out-of-browser apps: Local Data Store'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-6601174052555291619</id><published>2009-04-22T16:29:00.001-07:00</published><updated>2009-04-22T16:36:10.439-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offline'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Out-of-browser'/><category scheme='http://www.blogger.com/atom/ns#' term='Out of Browser'/><title type='text'>Silverlight out-of-browser apps: Network Awareness</title><content type='html'>&lt;p&gt;There will be times when your Silverlight app is run but the end user does not have a network connection. A key attribute of making a functional offline Silverlight app is building in network awareness. In this post, we’ll look at how easy Silverlight 3 makes this for you.&lt;/p&gt;  &lt;h4&gt;The API&lt;/h4&gt;  &lt;p&gt;Silverlight provides current network status via the NetworkInterface.GetIsNetworkAvailable() method. Apps can be notified of changes in network availability via the NetworkChange.NetworkAddressChanged event. The NetworkInterface and NetworkChange types are both declared in the System.Net.NetworkInformation namespace.&lt;/p&gt;  &lt;p&gt;Here’s sample usage of the network detection APIs:&lt;/p&gt;  &lt;div style="border-bottom: windowtext 1pt solid; border-left: windowtext 1pt solid; padding-bottom: 1pt; padding-left: 4pt; padding-right: 4pt; background: #fdffe5; margin-left: 0.05in; border-top: windowtext 1pt solid; margin-right: 0.05in; border-right: windowtext 1pt solid; padding-top: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt"&gt;   &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;...&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #424456; mso-themecolor: text2"&gt;NetworkChange&lt;/span&gt;.NetworkAddressChanged +=&amp;#160; &lt;br /&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new&lt;/span&gt; &lt;span style="color: #424456; mso-themecolor: text2"&gt;EventHandler&lt;/span&gt; (OnNetworkChange);&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;}&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="color: blue"&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="color: blue"&gt;       &lt;br /&gt;void&lt;/span&gt; OnNetworkChange (&lt;span style="color: blue"&gt;object&lt;/span&gt; sender,&lt;span style="color: #424456; mso-themecolor: text2"&gt; EventArgs&lt;/span&gt; e) &lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;{&lt;span style="color: blue"&gt; &lt;/span&gt;      &lt;p&gt;&lt;/p&gt;   &lt;/p&gt;    &lt;p&gt;&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="color: blue"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if&lt;/span&gt; (&lt;span style="color: #424456; mso-themecolor: text2"&gt;NetworkInterface&lt;/span&gt;.GetIsNetworkAvailable())&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;nwIndicatorEllipse.Fill =       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new &lt;span style="color: #424456; mso-themecolor: text2"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color: #424456; mso-themecolor: text2"&gt;Colors&lt;/span&gt;.Green);&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00b050"&gt;// and do something&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;} &lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;else&lt;/span&gt; &lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;nwIndicatorEllipse.Fill =       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; new &lt;span style="color: #424456; mso-themecolor: text2"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color: #424456; mso-themecolor: text2"&gt;Colors&lt;/span&gt;.Red);&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #00b050"&gt;// and do something else&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;} &lt;/p&gt;    &lt;p style="margin: 0in 0in 0pt; background: #fdffe5" class="Code"&gt;} &lt;/p&gt;    &lt;p&gt;&lt;/p&gt; &lt;/div&gt;  &lt;h4&gt;What This Feature Is&lt;/h4&gt;  &lt;p&gt;The NetworkAddressChanged event – as the name suggests - advertises a change in IP address (availability). It is to be used in concert with the NetworkInformation.GetIsNetworkAvailable() to identify whether the recent change resulted in the system obtaining an IP address or losing one. The IP address is seen as a good primordial proxy for availability of network connection or lack thereof.&lt;/p&gt;  &lt;p&gt;This feature is an answer to the question &lt;em&gt;“Is this is a good time to make an outbound network request?”&lt;/em&gt;. Silverlight plays an enabling role in detecting offline status, telling you whether it’s worth your while to make an outbound call, or alternately to cache and persist data locally until network connectivity is regained.&lt;/p&gt;  &lt;h4&gt;What this Feature Isn’t&lt;/h4&gt;  &lt;p&gt;This feature is not an answer to the question &lt;em&gt;“Is my site (or web service) up and running at this moment?”&lt;/em&gt;. The way I see it, Silverlight doesn’t play an enabling role in that situation – that is something your app can achieve with 10 lines of code. And such a service indicator is better off taking the actual URI and returning an actual response, rather than being a glorified HTTP HEAD wrapper.&lt;/p&gt;  &lt;h4&gt;Gotchas&lt;/h4&gt;  &lt;p&gt;Say you have 2 adapters – a wireless and wireline Ethernet – both of which are connected. If your wireless connection drops, the NetworkAddressChanged event is raised but in the handler when you query NetworkInformation.GetIsNetworkAvailable(), you still get true because your wireline Ethernet connection is still valid. When that goes down as well, the event is raised yet again and the NetworkInformation.GetIsNetworkAvailable() returns false. Always remember: from your NetworkAddressChanged handler, you must query GetIsNetworkAvailable to definitively find out the connectivity situation. &lt;/p&gt;  &lt;p&gt;Other gotchas include the “illusion of connectivity”. This happens when you have some connectivity (say you’re on a WiFi network in an airport or a coffee shop) but not any Internet connectivity until you sign in or pay up. Your app may see GetIsNetworkAvailable return true, but should still try that actual outbound request to ascertain this.&lt;/p&gt;  &lt;p&gt;In some cases virtual machines (e.g. Hyper-V running on your Windows Server or running Windows with Parallels on your Mac) may interfere with this feature and your app may see false positives. &lt;/p&gt;  &lt;p&gt;---&lt;/p&gt;  &lt;p&gt;Previous posts in this series:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/03/introducing-offline-and-out-of-browser.html"&gt;Introducing Offline and Out of Browser support in Silverlight&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-support-what.html"&gt;Silverlight out-of-browser support: What kind of apps can you build?&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-install.html"&gt;Silverlight out-of-browser apps: The Install&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-launch.html"&gt;Silverlight out-of-browser apps: Launch&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Related links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://videos.visitmix.com/MIX09/T78M"&gt;Peter Smith’s “Offline network detection in Silverlight” talk from Mix 09&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/ncl/archive/2009/03/24/code-patterns-for-online-offline-network-detection.aspx"&gt;Code patterns for Online/Offline Network Detection&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-6601174052555291619?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/6601174052555291619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=6601174052555291619' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6601174052555291619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6601174052555291619'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-network.html' title='Silverlight out-of-browser apps: Network Awareness'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-1921776148503190775</id><published>2009-04-21T18:13:00.001-07:00</published><updated>2009-07-10T19:22:01.671-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offline'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Out-of-browser'/><category scheme='http://www.blogger.com/atom/ns#' term='Out of Browser'/><title type='text'>Silverlight out-of-browser apps: Launch</title><content type='html'>&lt;p&gt;Silverlight 3 offline/out-of-browser apps maintain a sticky presence on your desktop upon the initial detach (install) operation. They can be looked up and launched in an experience not unlike the one you see with conventional desktop applications. You can search for and find these apps using OS search utilities (Windows desktop search, Spotlight on OS X) where they show up in as Programs.&lt;/p&gt;&lt;h4&gt;Application id&lt;/h4&gt;&lt;p&gt;Silverlight uses some indirection from the shortcut to the real app binaries on Windows (however on the Mac, the bundle created on install &lt;em&gt;is&lt;/em&gt; the app, with limited metadata squirreled away in the &lt;em&gt;offline application cache&lt;/em&gt;). This isn’t because we drink the “architecture astronaut” kool-aid on indirection, rather because doing so in this case allows us to add runtime logic around housekeeping which is effective when updates for the app or runtime exist. If you deconstruct the shortcut to a Silverlight out-of-browser app on Windows, you’ll find a command like this:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre style="WIDTH: 448px; HEIGHT: 56px"&gt;“C:\Program Files\Microsoft Silverlight\&amp;lt;&lt;em&gt;version&lt;/em&gt;&amp;gt;\&lt;br /&gt;                                    sllauncher.exe &amp;lt;&lt;em&gt;app id&lt;/em&gt;&amp;gt;” &lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Ignore the newlines above. You’ll notice that the app id is a string made with the union of the domain of origin and some random number/text e.g. www.mysite.com.3509. During install on Windows, Silverlight creates a directory hive within your user profile so it can store the app binaries along with other metadata. It also assigns the app an identifier which is unique for a specific user on that machine. It appends this id into the shortcut, wherever the app is to be referenced. &lt;/p&gt;&lt;br /&gt;&lt;h4&gt;The app launch sequence&lt;/h4&gt;&lt;p&gt;When the shortcut is activated, the command is run, and as a result, sllauncher.exe is launched with that app id as argument. The launcher is a container program that chiefly handles the windowing logic for the app, while instantiating and deferring to Silverlight the specific function of loading and running the app. Among the things the launcher controls are the window adornments like icon and title text, a settings such as position. This is just scratching the surface. In future we expect to provide more window customization.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;When sllauncher.exe hosts Silverlight, the runtime does a reverse lookup of the XAP file using the app id, additionally collects all metadata persisted in the offline application cache and then initializes Silverlight core services to the provenance URI of the XAP. This is the app’s original site of origin, not the location it was loaded off disk. This cascades into the correct (i.e. original) networking and security settings being applied to the app. All &lt;a href="http://nerddawg.blogspot.com/2008/03/silverlight-2-demystifying-uri.html"&gt;fallback lookups for relative URIs&lt;/a&gt; get resolved against the right base URI. All policy settings for cross-domain and cross-scheme access get applied properly; and the app has access to the same local persistence store (Isolated Storage) as its in-browser sibling. If not for the ExecutionState data exposed by the Silverlight runtime, the app would “think” it was running within the browser like it did prior to install. If updates to the XAP were successfully downloaded in a previous app launch, Silverlight will scavenge the old bits and use the updated bits instead. It is now ready to launch the app.&lt;/p&gt;&lt;br /&gt;&lt;h4&gt;Was the app locally activated?&lt;/h4&gt;&lt;p&gt;Upon launch, Silverlight applications can detect whether the current activation was from within a browser, or locally as a standalone window (aka out of browser). This is done by looking at the RunningOffline property of the Application type. When the value is true, the app was locally activated. When false, the app was activated via an OBJECT tag within a web page in the browser.&lt;/p&gt;&lt;br /&gt;&lt;div style="BORDER-BOTTOM: windowtext 1pt solid; BORDER-LEFT: windowtext 1pt solid; PADDING-BOTTOM: 1pt; PADDING-LEFT: 4pt; PADDING-RIGHT: 4pt; BACKGROUND: #fdffe5; MARGIN-LEFT: 0.05in; BORDER-TOP: windowtext 1pt solid; MARGIN-RIGHT: 0.05in; BORDER-RIGHT: windowtext 1pt solid; PADDING-TOP: 1pt; mso-element: para-border-div; mso-border-alt: solid windowtext .5pt"&gt;&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;partial&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; App : &lt;span style="font-size:0;"&gt;Application&lt;/span&gt; &lt;/p&gt;&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;{&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; App () &lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;{&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;...&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Startup +=&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color:blue;"&gt;this.&lt;/span&gt;App_Startup;&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;}&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="color:blue;"&gt;void&lt;/span&gt; App_Startup(&lt;span style="color:blue;"&gt;object&lt;/span&gt; sender, &lt;span style="font-size:0;"&gt;StartupEventArgs&lt;/span&gt; e) &lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;{&lt;/p&gt;&lt;p style="MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (Application.Current.IsRunningOutOfBrowser) &lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;{&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;this.RootVisual = new OutOfBrowserPage();&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;} &lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;else &lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;{&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;span style="mso-tab-count: 1"&gt;&lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;this.RootVisual = new PageToBeDisplayedInBrowser();&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;}&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;}&lt;/p&gt;&lt;p style="TEXT-INDENT: 0.45in; MARGIN: 0in 0in 0pt; BACKGROUND: #fdffe5" class="Code"&gt;&lt;/p&gt;&lt;p&gt;}&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;del&gt;&lt;p&gt;Note: we’re changing API names to better reflect behavior; so expect the code snippet to change with Silverlight 3 RTW, but the principles will more or less remain true.&lt;/p&gt;&lt;/del&gt;&lt;br /&gt;&lt;p&gt;In the next post we will look at network awareness in offline/out-of-browser Silverlight apps. See you then.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Previous posts in this series:&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/03/introducing-offline-and-out-of-browser.html"&gt;Introducing Offline and Out of Browser support in Silverlight&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-support-what.html"&gt;Silverlight out-of-browser support: What kind of apps can you build?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-install.html"&gt;Silverlight out-of-browser apps: The Install&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;[Update 10-Jul-09]: Code snippets updated for Silverlight 3 RTW.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1921776148503190775?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1921776148503190775/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1921776148503190775' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1921776148503190775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1921776148503190775'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-launch.html' title='Silverlight out-of-browser apps: Launch'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-7269956955480299717</id><published>2009-04-12T12:15:00.000-07:00</published><updated>2009-07-10T19:06:49.964-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offline'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Out of Browser'/><title type='text'>Silverlight out-of-browser apps: The Install</title><content type='html'>&lt;p&gt;There are three main pillars to the new offline and out-of-browser feature set in Silverlight. These pillars are also tied to user experience; namely Install, Launch and Manage. In additions there are framework-level APIs and behind the scenes support from the runtime for a plethora of things that cross-cut these 3 pillars.&amp;#160; &lt;/p&gt;&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/_vO3QC5qlK78/SeI-M77MnyI/AAAAAAAAAEI/o-wOwFuYuYk/s1600-h/SL3OOBPillars.PNG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 212px;" src="http://4.bp.blogspot.com/_vO3QC5qlK78/SeI-M77MnyI/AAAAAAAAAEI/o-wOwFuYuYk/s320/SL3OOBPillars.PNG" border="0" alt=""id="BLOGGER_PHOTO_ID_5323886101470682914" /&gt;&lt;/a&gt;In this post we will look specifically at the Install operation.&lt;/p&gt;&lt;p&gt;A Silverlight app needs to be specially crafted for that out-of-browser function. There’s not much to it really: the application manifest (AppManifest.xaml) should be adorned with the &lt;code&gt;OutOfBrowserSettings&lt;/code&gt; element which declares such metadata on the app as short name, window title, blurb and icons. No worries, tools make this easy for you via the Silverlight application project properties pane. Silverlight treats the presence of this element as an indication from the app author for opt-in to the out-of-browser feature set. Only this class of apps can be “installed”.&lt;/p&gt;&lt;p&gt;The install operation itself can be achieved in one of two ways:&lt;/p&gt;&lt;ul&gt;  &lt;li&gt;via platform UI on the context menu that says &lt;em&gt;“Install {app short name} onto this computer…”&lt;/em&gt;&lt;/li&gt;  &lt;li&gt;via app driven UI which calls the &lt;code&gt;Install()&lt;/code&gt; method on the Application type&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Implicit in either case is the fact that install is required to be a user-initiated operation. And that too user-initiated within the Silverlight display surface on a web page. This allows us (building the runtime and platform) to better control the user experience and guarantee predictability, security etc.&lt;/p&gt;&lt;p&gt;Further, Silverlight apps cannot be installed without the consumer end user specifically consenting to this action. This removes the element of surprise. We’ve tried to maintain consistency with the experience one intuits on a particular operating system, while also balancing the needs of Silverlight app authors and our own user experience goals. As a result, you will see different UX on Windows and Mac – each appealing to its demographic. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;On Windows, Silverlight shows an application modal dialog like this, seeking the user’s permission to proceed:&lt;/p&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_vO3QC5qlK78/SeI-iR3xbUI/AAAAAAAAAEQ/LWs9xzStIzY/s1600-h/SLoobConsentDefaultIcons.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 145px;" src="http://3.bp.blogspot.com/_vO3QC5qlK78/SeI-iR3xbUI/AAAAAAAAAEQ/LWs9xzStIzY/s320/SLoobConsentDefaultIcons.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5323886468139150658" /&gt;&lt;/a&gt;The dialog is modeled as a confirmation dialog, and the user is asked to allow or deny permission in context, with the assertion &lt;em&gt;“You are installing {app short name} from {domain of origin}”&lt;/em&gt;.&amp;#160; &lt;/p&gt;&lt;p&gt;&lt;a href="http://3.bp.blogspot.com/_vO3QC5qlK78/SeI-3BpWF4I/AAAAAAAAAEY/scCrsM17Jr4/s1600-h/SLoobInstallMac.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 146px;" src="http://3.bp.blogspot.com/_vO3QC5qlK78/SeI-3BpWF4I/AAAAAAAAAEY/scCrsM17Jr4/s320/SLoobInstallMac.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5323886824560924546" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;The astute reader will notice that the dialogs are similar across Windows and Mac OS X – at least in principle – but each adheres to the native OS theme. The Mac dialog does not seek shortcut preferences, given that Mac users are expected in the very next step to drag the out-of-browser app bundle into a location of their choice, much like they would when installing another application.&lt;/p&gt;&lt;p&gt;A dialog of the form above is shown when the app declares no icons of its own. You see the “fallback” icon shown by the runtime.&amp;#160; When the app declares its own brand icon, Silverlight will gladly display it at install time, as the following screenshot of the dialog on Windows attests: &lt;a href="http://2.bp.blogspot.com/_vO3QC5qlK78/SeI_DUr0gFI/AAAAAAAAAEg/01ElOYDvv7g/s1600-h/SLoobConsentAppIcons.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 145px;" src="http://2.bp.blogspot.com/_vO3QC5qlK78/SeI_DUr0gFI/AAAAAAAAAEg/01ElOYDvv7g/s320/SLoobConsentAppIcons.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5323887035830009938" /&gt;&lt;/a&gt;If the install were initiated via the &lt;code&gt;Install()&lt;/code&gt; method call on the UI thread, the method would synchronously block until the consumer end user made their decision. If they declined, the method returns false; otherwise true. The other install related activities happen asynchronously. The platform signals this to the app via the &lt;code&gt;InstallStateChanged&lt;/code&gt; event and the &lt;code&gt;InstallState.Installing&lt;/code&gt; state; it inducts the XAP, along with some metadata and housekeeping information into the offline application cache within the user’s profile dir. When this is successfully completed, the platform raises the &lt;code&gt;InstallStateChanged&lt;/code&gt; event with the &lt;code&gt;InstallState.Installed&lt;/code&gt; state. This is the official notification to the hitherto in-browser app that its out-of-browser copy has been installed. The out-of-browser app gets a higher default quota (25MB to the previous 1MB) within Isolated Storage for its local data persistence needs. The in-browser and out-of-browser apps share this Isolated Storage with each other. We’re not yet sure if the magic number of 25MB is the right one (or if there is in fact any right value); it is however orders of magnitude higher than the default for in-browser apps and we hope it will open up new scenarios and result in the proverbial 80% of our apps not having to ask the consumer user for a quota increase yet again.&lt;/p&gt;&lt;p&gt;Upon successful install, Silverlight auto-launches the newly installed app – all sandboxed, out of the browser, and ready to go! The salient points of this Install operation are:&lt;/p&gt;&lt;br /&gt;&lt;ul&gt;  &lt;li&gt;keep it lightweight&lt;/li&gt;  &lt;li&gt;showcase the app brand, not the technology powering it&lt;/li&gt;  &lt;li&gt;keep the decision simple for the consumer, and in context&lt;/li&gt;  &lt;li&gt;get the consumer to their desired goal in the shortest time possible i.e. launch the app upon install&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;More about the story behind the Launch experience in the next post. Until then, cheerio, toodle-ooh and all that.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Related posts:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/03/introducing-offline-and-out-of-browser.html"&gt;Introducing Offline and Out of Browser support in Silverlight&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-support-what.html"&gt;Silverlight out-of-browser support: What kind of apps can you build?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;[Update 10-Jul-09] API names updated to reflect Silverlight 3 RTW&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-7269956955480299717?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/7269956955480299717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=7269956955480299717' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7269956955480299717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7269956955480299717'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-install.html' title='Silverlight out-of-browser apps: The Install'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vO3QC5qlK78/SeI-M77MnyI/AAAAAAAAAEI/o-wOwFuYuYk/s72-c/SL3OOBPillars.PNG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5758842090734449498</id><published>2009-04-01T19:51:00.001-07:00</published><updated>2009-04-01T20:00:42.575-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offline'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Out-of-browser'/><category scheme='http://www.blogger.com/atom/ns#' term='Out of Browser'/><title type='text'>Silverlight out-of-browser support: What kind of apps can you build?</title><content type='html'>&lt;p&gt;This is first in my series of technical drilldown posts on the new offline and out of browser support in Silverlight 3.&lt;/p&gt;&lt;p&gt;It is something of a tradition in Microsoft to list out scenarios when a new feature set is being conceived. This practice is by no means unique to this company. I feel that doing so establishes a common baseline and taxonomy which immensely helps as the concept matures and gains complexity. Typically these scenarios are fleshed out in functional specifications. &lt;/p&gt;&lt;p&gt;In this post, I summarize the flavors of apps and scenarios that are enabled by the new offline and out of browser support in Silverlight 3. Most of these are self-explanatory and so using another Microsoft tradition, I will stick to concise bullet points rather than prose. A list similar to the one below in fact was used by our crew when we started our planning for this feature set a few months ago:&lt;/p&gt;&lt;h3&gt;Connectedness&lt;/h3&gt;&lt;h4&gt;Fully disconnected app&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;App has no networking needs &lt;/li&gt;&lt;li&gt;Reliance on Silverlight just as an installation vehicle for the app &lt;/li&gt;&lt;li&gt;We don’t expect this will be very common &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Occasionally connected app&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;App is resilient to network outage &lt;/li&gt;&lt;li&gt;Conditionally persists data into iso store or cloud based on network availability &lt;/li&gt;&lt;li&gt;This is the sweet spot for our feature offerings and where most of our attention goes &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Connected app&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;App uses the offline feature set only for the sticky desktop presence &lt;/li&gt;&lt;li&gt;We don’t expect this will be very common &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;/h4&gt;&lt;h3&gt;User experience&lt;/h3&gt;&lt;h4&gt;App behaves exactly the same in browser and out&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;App author wants to deliver the same experience in either case &lt;/li&gt;&lt;li&gt;“Try before you buy”, “Get more features upon install” and other such progressively enhanced SKU situations &lt;/li&gt;&lt;li&gt;Our data suggests consumers find comfort in apps that – in broad brushes – seem similar OOB as when they did in-browser &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;App shows different UI in-browser and out-of-browser&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;App author wants to exploit the real estate available in standalone window &lt;/li&gt;&lt;li&gt;Browser page could have limited functionality which lights up only upon detach &lt;/li&gt;&lt;li&gt;Browser page shows only the “Install” badge and the “real” UI only shows up when launched out of browser &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;&lt;/h4&gt;&lt;h3&gt;Approach&lt;/h3&gt;&lt;h4&gt;Porting an existing Silverlight 2 app to run offline/out-of-browser&lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Even though the feature is a new addition to SL3, &lt;em&gt;some&lt;/em&gt; SL2 apps can benefit from it &lt;/li&gt;&lt;li&gt;Requires no changes to code and no rebuilds &lt;/li&gt;&lt;li&gt;Can be done as a post-production step by modifying the manifest and optionally adding icons into the XAP&lt;/li&gt;&lt;li&gt;Build disconnected and connected apps, but not occasionally connected &lt;/li&gt;&lt;/ul&gt;&lt;h4&gt;Building a new offline/out-of-browser app &lt;/h4&gt;&lt;ul&gt;&lt;li&gt;Our mainline scenario &lt;/li&gt;&lt;li&gt;Leverage everything the offline/out-of-browser feature set and the rest of Silverlight has to offer &lt;/li&gt;&lt;li&gt;Build disconnected, connected and occasionally connected apps&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;In the next post, we will look at the pillars of this feature, starting with the install (a.k.a detach) operation.&lt;/p&gt;&lt;p&gt;Related posts:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2009/03/introducing-offline-and-out-of-browser.html"&gt;Introducing Offline and Out of Browser support in Silverlight&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5758842090734449498?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5758842090734449498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5758842090734449498' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5758842090734449498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5758842090734449498'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-support-what.html' title='Silverlight out-of-browser support: What kind of apps can you build?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-7158665065053466834</id><published>2009-03-18T09:39:00.001-07:00</published><updated>2009-07-25T15:18:24.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Offline'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Out of Browser'/><title type='text'>Introducing Offline and Out of Browser support in Silverlight</title><content type='html'>&lt;p&gt;Today we are making a radical upgrade to your web experience with Silverlight 3’s support for offline and out of browser apps. App authors can now build one app that works in the browser and out; at home, at work or on the go. &lt;/p&gt;  &lt;p&gt;Among the new set of features enabling this experience are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Sticky presence on the desktop&lt;/strong&gt;: Upon user consent, a Silverlight app can be detached and pinned on the user’s desktop using familiar OS metaphors for this action. On Windows this can be through Start menu and/or Desktop shortcuts. On the Mac the user can drag and drop the application bundle to a location of their choice.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Run outside of browser&lt;/strong&gt;: activating the app locally launches it outside of the web browser. Our data suggests consumers find this more intuitive as a result of clicking on a desktop shortcut.&amp;#160; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Safe by default&lt;/strong&gt;: Silverlight still retains a rigid security sandbox within which the app operates. Apps &lt;strong&gt;cannot&lt;/strong&gt; elevate beyond the privileges granted by this sandbox. Our philosophy is to stretch this sandbox by providing features within it on a case by case basis. More on this in future.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Non-administrative install&lt;/strong&gt;: Along with the sandbox, Silverlight furthers the consumer’s security by never requiring administrative privileges either for install or for run. An exception may be if optionally a user on the Mac wants to drop the app bundle into a dir that requires sign-on. In that case Silverlight honors the framework set out by the OS and user intuition.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Higher default persistence space&lt;/strong&gt;: the default quota for Isolated Storage for Out of Browser apps is a higher value than for browser based apps. It is currently 25MB.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Network awareness&lt;/strong&gt;: One of the key ingredients of this feature set is the ability for Silverlight apps to be aware of network connectivity and to be notified when that changes. Apps can cache data (or outbound calls) into Isolated Storage and post-back (or playback) when connectivity is regained. This works in Silverlight apps in the browser and out.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Built-in auto update&lt;/strong&gt;: Silverlight will check for new versions of the app asynchronously upon app requesting such a check, guaranteeing users an instant-on experience. Updates are applied at next launch, providing apps complete control over when and how frequently updates are applied with Silverlight doing all the heavy lifting.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Execution state notifications to the app&lt;/strong&gt;: Silverlight notifies the app on momentous events throughout its lifetime and transition from in-browser to out-of-browser, allowing the app to model its UI accordingly.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A short note on our philosophy before I end: When my team and I originally started thinking about delivering this feature set, we were absolutely certain about some things. Namely that this would be inherently a part of Silverlight, requiring no new runtimes/frameworks, no additional downloads, no new learning curve for app authors, no security elevations for consumer installs. That is the Carmot, if you will, in our offline and out of browser support. We’re also introducing a user experience that – in my biased opinion – fits well with the rest of the web; a model that allows consumers to try before they install; a model that takes an app familiar to them on the Web and makes it a companion on their desktop. Contrast that a model that requires consumers to have “install intent” and click on a hyperlink or a badge in good faith to experience an app they haven’t hitherto seen. There’s certainly a place for that install model and we’ve supported that in other products in the past for non-Web scenarios. And finally, I’m closely watching where support for offline applications in HTML5 goes and how mainstream browsers adopt it. At some point I do want our model to co-exist with the experiences they introduce.&lt;/p&gt;  &lt;p&gt;Developers can &lt;del&gt;evaluate and play with the &lt;a href="http://silverlight.net/getstarted/silverlight3/default.aspx"&gt;Silverlight 3 Beta&lt;/a&gt;&lt;/del&gt; build these apps &lt;a href="http://silverlight.net/getstarted/"&gt;using Silverlight 3&lt;/a&gt; right now. There's great runtime and tools support.&lt;/p&gt;  &lt;p&gt;In future posts, I will be introducing this feature set from a technical perspective.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Post script&lt;/strong&gt;: You can now understand why there’s been radio silence on this blog for months. This feature took a lot of Mountain Dew, sweat and tiers from a couple handful of the best darned engineers in the world. And a lot of questions, comments, critiques and feedback from the best darned customers a product can have. Here’s to takeoff and the EAP!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;[Update 10-Jul-09] Auto-update section modified based on changes post beta; now reflective of Silverlight 3 RTW behavior&lt;br /&gt;[Update 25-Jul-09] Links updated to Silverlight 3 RTW&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-7158665065053466834?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/7158665065053466834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=7158665065053466834' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7158665065053466834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7158665065053466834'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2009/03/introducing-offline-and-out-of-browser.html' title='Introducing Offline and Out of Browser support in Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-1372614774709075030</id><published>2008-10-28T14:32:00.000-07:00</published><updated>2009-04-15T16:58:18.989-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SEO'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Search Engine Optimization for Silverlight applications</title><content type='html'>&lt;p&gt;My whitepaper on &lt;a href="http://silverlight.net/learn/whitepapers/seo.aspx"&gt;Search Engine Optimization for Silverlight &lt;/a&gt;is now online: &lt;a href="http://silverlight.net/learn/whitepapers/seo.aspx"&gt;http://silverlight.net/learn/whitepapers/seo.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It provides a story for Silverlight 2 application authors and publishers who want their apps and content to show up in search engine results pages (SERPs) today.&lt;br /&gt;&lt;br /&gt;Downloadable copies are here on the MS Download Center:&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/1/d/7/1d7ac97c-dd36-4d89-bb64-7f1858328850/Search%20Engine%20Optimization%20for%20Silverlight%20Applications.doc"&gt;Word Doc&lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/1/d/7/1d7ac97c-dd36-4d89-bb64-7f1858328850/Search%20Engine%20Optimization%20for%20Silverlight%20Applications.xps"&gt;XPS &lt;/a&gt; | &lt;a href="http://download.microsoft.com/download/1/d/7/1d7ac97c-dd36-4d89-bb64-7f1858328850/Search%20Engine%20Optimization%20for%20Silverlight%20Applications.pdf"&gt;PDF&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Thanks to Dan Penn, Jon Rooney and Nitya Ravi for all their help in getting this off the ground.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1372614774709075030?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1372614774709075030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1372614774709075030' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1372614774709075030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1372614774709075030'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/10/search-engine-optimization-for.html' title='Search Engine Optimization for Silverlight applications'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5688995895396387733</id><published>2008-09-26T08:38:00.000-07:00</published><updated>2008-09-26T08:47:13.298-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight 2 RC0: Here's what's new</title><content type='html'>&lt;p&gt;The &lt;a href="http://silverlight.net/GetStarted/sl2rc0.aspx"&gt;Silverlight 2 release candidate &lt;/a&gt;build has been released to developers so they can prepare for the upcoming release to web (RTW) of the product, and migrate their Beta 2 applications forward. This build has a number of functional, performance and stability related bug fixes. We’ve had to making some &lt;a href="http://download.microsoft.com/download/6/f/e/6fe1f43d-9d0c-4346-ad08-602df9bcb3cf/BreakingChangesBetweenBeta2andRelease.doc"&gt;breaking changes &lt;/a&gt;along the way. There are also a few new features (which explains the silence on this blog and others like it, over the past few weeks). Here’s an incomplete list:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Per-frame callbacks&lt;br /&gt;&lt;/strong&gt;Create physics animations or override the animation system by hooking up for the CompositionTarget.Rendering event.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Controls&lt;br /&gt;&lt;/strong&gt;PasswordBox, ComboBox (well, a non-editable dropdown list only for now), MessageBox and ProgressBar.&lt;br /&gt;Updated look and feel for controls.&lt;br /&gt;IsEnabled and IsEnabledChanged added to the Control type.&lt;br /&gt;Exposed virtual On* events on Control e.g. OnGotFocus, OnKeyDown, OnKeyUp, OnMouseEnter etc.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Support for popping up windows&lt;/strong&gt;&lt;br /&gt;Use the HtmlPage.PopupWindow API, in association with the new AllowHtmlPopupWindow param on the OBJECT tag to open a URI in a new browser window upon a user-initiated action. Note: doesn’t work on Safari because it doesn’t implement the right NPAPI contracts for this.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Accessibility&lt;br /&gt;&lt;/strong&gt;Improvements in accessibility and UI automation on Silverlight controls. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Networking&lt;br /&gt;&lt;/strong&gt;Support for making HTTP requests on background threads.&lt;br /&gt;Upload support added to WebClient.&lt;br /&gt;Support for percent escaped internationalized URIs for remote endpoints.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Input&lt;br /&gt;&lt;/strong&gt;A new LostMouseCapture bubbling event for when you lost capture.&lt;br /&gt;Support for global keyboard character input into a TextBox (diacritics, non-ASCII characters etc.) &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Resources&lt;br /&gt;&lt;/strong&gt;Extended the kinds of things that can be designated as application or element level resources e.g. Color, FontFamily, TextAlignment and many many more.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;XAML&lt;br /&gt;&lt;/strong&gt;Default value support for custom dependency properties via PropertyMetadata.&lt;br /&gt;Support for object element syntax for StaticResource.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;With this release, the Silverlight 2 product is feature complete. Absent any major last-minute fire drills, the public surface area (APIs) in this RC should mirror the upcoming RTW product. Thank you for helping us build this product. Your feedback has been our magnetic north. Just a few more days until the ship sails…! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5688995895396387733?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5688995895396387733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5688995895396387733' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5688995895396387733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5688995895396387733'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/09/silverlight-2-rc0-heres-whats-new.html' title='Silverlight 2 RC0: Here&apos;s what&apos;s new'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-3745597021276282691</id><published>2008-07-23T20:55:00.000-07:00</published><updated>2008-07-23T21:04:11.023-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Death, Taxes and Latency</title><content type='html'>By the time Silverlight came around, the problems afflicting web applications all round were well known and somewhat well understood. The burden of dealing with network latency, cancellation and errors should not be thrust on every web developer. Platforms have a unique role in abstracting away these problems. However, beyond band-aid solutions, web platforms haven’t provided any effective remedies. With Silverlight we’ve tried to tackle these head on. I wouldn’t say we’ve solved them, but we’re a ways ahead than many others out there in recognizing and fixing issues in this space. &lt;br /&gt;&lt;br /&gt;Our strategy involves giving fish as well as fishing lessons. Silverlight enforces an asynchronous programming model for just about every latency, cancellation or conflict -afflicted scenario your web app would encounter. We further the mindset that much everything you’re trying to access can be on a remote machine or can take forever to return or can simply fail. This defensive posture is critical. And so whether it is invoking and consuming a web service, or modifying the UI from off-thread, there is an API in Silverlight that does this asynchronously. We go further though. Aside from areas where it simply must be compatible with prior art in Windows Presentation Foundation (WPF), it is de jure for events in Silverlight to be async. As of Beta 2 I can only think of layout events as being synchronous a.k.a. blocking and at least one more I can’t talk about just yet being added in RTW.&lt;br /&gt;&lt;br /&gt;The novice developer may encounter a bit of friction in learning how to code to this asynchronous programming model. But there is friction in learning that Ctrl+Alt+Del unlocks a Windows machine, but you master it pretty quickly, and it becomes muscle-memory after a while. Likewise, we hope you will master async coding soon enough and be on your way to building web apps the way they were meant to. You and your app consumers will be the better off for it.&lt;br /&gt;&lt;br /&gt;Another axis to this is the provision of tools and user experience options in Silverlight around async coding. This includes the options of using BackgroundWorker, multi-threading, splash screens and other forms of progress indication. Whatever your expertise, there’s an option available for you.&lt;br /&gt;&lt;br /&gt;Still another axis is the defensiveness in the platform to counter issues like reentrancy. Silverlight has a reentrancy guard which will throw a Null AV (resulting in a process shutdown) if it detects reentrant behavior such as a draw call from within an existing draw call. You can be sure to catch these things at development time, rather than deal with them at runtime.&lt;br /&gt;&lt;br /&gt;Given the ambient environment where Silverlight is hosted and run, the runtime needs to deal with problems such as message pumping and reentrancy arising from STA threads. Besides it doesn’t own its own UI thread – the browser does. Async patterns really shine here. Please tell us how we’re doing in this area. Has the predominantly async model been a hindrance in your development or had you not noticed until you saw this blog post?&lt;br /&gt;&lt;br /&gt;Remember, like death and taxes, latency issues afflict all who build apps for the web. Asynchrony fixes one of those.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-3745597021276282691?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/3745597021276282691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=3745597021276282691' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3745597021276282691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3745597021276282691'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/07/death-taxes-and-latency.html' title='Death, Taxes and Latency'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-4356877772265254382</id><published>2008-06-08T18:00:00.001-07:00</published><updated>2008-06-16T06:10:34.908-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Navigation'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Pages in Silverlight</title><content type='html'>&lt;p&gt;Pages as a paradigm likely pre-date the web itself although they have been popularized by document-based markup languages deriving from SGML. Windows Presentation Foundation (WPF) with XAML further codifies Pages as a first-class UI element from its heretofore usage as a logical element. Looking back from Silverlight, this is as good a point in history to start as any. WPF has built-in support for reusable pages in its applications, and the task of navigation between them. It provides the infrastructure for declarative navigation via hyperlinks or programmatic navigation via &lt;a title="NavigationService in WPF" href="http://msdn.microsoft.com/library/system.windows.navigation.navigationservice.aspx"&gt;NavigationService&lt;/a&gt;, and a journal that remembers which pages were navigated to or from. For XBAPs on IE7+, WPF supports integration of the journal with the browser's Back and Forward buttons, while elsewhere it displays a substitute navigation bar with this functionality (the limitation is an effect of how the XBAP host plugs into the browser). There is also a building block called PageFunction which introduces a paradigm for invoking pages as if they were methods, providing a neat little way to build wizard UI. Unlike WPF, Silverlight does not support these things, as of version 2. This post isn't about brooding that absence though -- instead we'll look at the lay of the land in Silverlight 2 with regard to pages and navigation, and look at common workarounds.&lt;/p&gt;&lt;p&gt;Although Silverlight does not have the Page type at this time, the term is currently used for its root visual UserControl. That root visual object is analogous to the root window in WPF, can only be set once for the lifetime of the app, and is effective once the Application's Startup event is raised. The act of navigating from one page to another is similar in principle to the act of removing one child element from an invisible root and adding another child in its place. [Actually given the journal it is more like switching Z-indices between siblings, so that one gets prominence while the other is made inconspicuous]. You can use this same principle in devising the notion of paging in a Silverlight app.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This recipe requires the following ingredients:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;App.xaml.cs&lt;/strong&gt;: the code-behind for the Application&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Frame.cs&lt;/strong&gt;: a user control which will serve as our "navigation frame". This has no UI.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Page1.xaml&lt;/strong&gt;/&lt;strong&gt;Page1.xaml.cs&lt;/strong&gt;: a user control representing a unique "page". This has a button whose click event navigates away to Page 2.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Page2.xaml&lt;/strong&gt;/&lt;strong&gt;Page2.xaml.cs&lt;/strong&gt;: similar to Page 1 in logic and function, only this represents the second page in your app. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Step 1: Create a navigation frame&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This is a really simple user control. It has a public Navigate method which is passed a "page" object for which it duly resets its original content. &lt;/p&gt;&lt;pre&gt;&lt;div   style="font-family:monospace;font-size:10pt;"&gt;// Contents of Frame.cs&lt;/div&gt;&lt;div   style="font-family:monospace;font-size:10pt;"&gt; &lt;/div&gt;&lt;div   style="font-family:monospace;font-size:10pt;"&gt;public class NavigationFrame : UserControl { &lt;/div&gt;&lt;p&gt;        // Navigate the frame to the specified content&lt;br /&gt;        public void Navigate(UIElement content)&lt;br /&gt;        {&lt;br /&gt;            // the existing content of this user control is&lt;br /&gt;            // discarded and the specified param is plugged in&lt;br /&gt;            // its place&lt;br /&gt;            this.Content = content;&lt;br /&gt;        }&lt;br /&gt;    } &lt;p&gt;    // Optional abstraction for page config&lt;br /&gt;    public static class Pages&lt;br /&gt;    {&lt;br /&gt;        // for simplicity we're using static properties,&lt;br /&gt;        // but this could just as easily be a URI to&lt;br /&gt;        // Type mapping table&lt;br /&gt;        public static UserControl HOME_PAGE = new Page1();&lt;br /&gt;        public static UserControl ANOTHER_PAGE = new Page2();&lt;br /&gt;    }&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Step 2: Wire up the navigation frame as the app's RootVisual&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Ordinarily the code generated by Silverlight tools (Visual Studio or Blend) will have a user control hooked up as Application.RootVisual within the Startup event handler. You will change this to hook up the navigation frame. Then hook up the user control to be the navigation frame's content (by invoking the NavigationFrame.Navigate method you created above).&lt;/p&gt;&lt;pre&gt;&lt;div   style="font-family:monospace;font-size:10pt;"&gt;// Contents of App.xaml.cs&lt;/div&gt;&lt;p&gt;// the Startup event handler sets the root visual&lt;br /&gt;private void App_Startup(object sender, StartupEventArgs e)&lt;br /&gt;{&lt;br /&gt;    // Navigate to home page&lt;br /&gt;    Navigate(Pages.HOME_PAGE);&lt;br /&gt;} &lt;p&gt;public void Navigate(UIElement content)&lt;br /&gt;{&lt;br /&gt;    // Create frame on an as-needed basis&lt;br /&gt;    if (this.frame == null)&lt;br /&gt;    {&lt;br /&gt;        this.frame = new NavigationFrame();&lt;br /&gt;        this.RootVisual = this.frame;&lt;br /&gt;    } &lt;p&gt;    // Navigate to content&lt;br /&gt;    this.frame.Navigate(content); &lt;p&gt;} &lt;div   style="font-family:monospace;font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Step 3: Build your pages&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Now that the navigation infrastructure is ready, go ahead and create a couple pages. These are merely user controls which would otherwise have been hooked up directly as the RootVisual. That part is simple. An important attribute in this equation is the fact that pages need to provide the experience of "navigating away". You can use a hyperlink, a button, or trap mouse/key events. We'll use a button and insert the navigation logic in it's click event handler.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;div size="10pt" face="monospace"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;// Contents of Page1.xaml.cs &lt;/div&gt;&lt;p&gt;// on btn click, this navigates to the second page&lt;br /&gt;private void navigateButton_Click(object sender,&lt;br /&gt;                                  RoutedEventArgs e)&lt;br /&gt;{&lt;br /&gt;     (Application.Current as App).Navigate(Pages.ANOTHER_PAGE);&lt;br /&gt;}&lt;div size="10pt" face="monospace"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div size="10pt" face="monospace"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="FONT-SIZE: 10pt; FONT-FAMILY: monospace"&gt; &lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Let's create another user control which will be &lt;em&gt;navigated to&lt;/em&gt;.&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;&lt;div style="FONT-SIZE: 10pt; FONT-FAMILY: monospace"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;// Contents of Page2.xaml.cs &lt;/div&gt;&lt;p&gt;// on btn click, this navigates to the first page&lt;br /&gt;private void navigateButton_Click(object sender,&lt;br /&gt;                                  RoutedEventArgs e)&lt;br /&gt;{&lt;br /&gt;     (Application.Current as App).Navigate(Pages.HOME_PAGE);&lt;br /&gt;}&lt;div size="10pt" face="monospace"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="FONT-SIZE: 10pt; FONT-FAMILY: monospace"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt; &lt;/div&gt;&lt;div style="FONT-SIZE: 10pt; FONT-FAMILY: monospace"&gt; &lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Well, that's all there is to it really. Build and run, and you've got your simple little navigation application.&lt;/p&gt;&lt;p&gt;In this pattern, the &lt;em&gt;navigation frame &lt;/em&gt;element:&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;is the equivalent of the implicit navigation control &lt;/li&gt;&lt;br /&gt;&lt;li&gt;is a container with no visible visual properties (e.g. Background, etc.) &lt;/li&gt;&lt;br /&gt;&lt;li&gt;has only a Content element representing the current page &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;a href="http://2.bp.blogspot.com/_vO3QC5qlK78/SEyBjfd-YbI/AAAAAAAAACQ/M2yqJdU9kFE/s1600-h/SilverlightNavigationApplication_ClassDiagram.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5209681315703447986" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_vO3QC5qlK78/SEyBjfd-YbI/AAAAAAAAACQ/M2yqJdU9kFE/s400/SilverlightNavigationApplication_ClassDiagram.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;In the pattern, the &lt;em&gt;page&lt;/em&gt; element:&lt;/p&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;is the equivalent of the navigable Page &lt;/li&gt;&lt;br /&gt;&lt;li&gt;has visuals or contains visual elements &lt;/li&gt;&lt;br /&gt;&lt;li&gt;can be attached and detached from the tree on a navigate event (i.e. the current element is removed, and a new one added in its place) &lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;p&gt;Our example used the &lt;strong&gt;Navigate By Object&lt;/strong&gt; approach. Note that we invoked the Navigate method and passed it a page object. You could tweak the logic so your pages can be given data as part of the Navigate call. You could just as easily add URI-to-type mapping into the Pages utility type. That would allow you to replicate the &lt;strong&gt;Navigate By URI&lt;/strong&gt; approach which is more organic to content on the web. If you use the Navigate By Object approach and you have a journal that maintains a back/forward stack of pages you've previously navigated to, you can incur a working set hit. This is because your journal will retain references the page objects in memory for long intervals - usually the life of the app - preventing the garbage collector from reclaiming them. Using the Navigate By URI approach in such situations can offer better use of memory. This is because you can delay instantiation of page objects until when the Navigate needs to happen.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In closing, there is a good case for pages, navigation service, journalling, transition animations, deep linking etc. to be part of the Silverlight platform. This is certainly of interest to us as we look toward the next version of the runtime and it's framework. I'd like your thoughts and feedback on these features and how important they are to your scenarios.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Further reading:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms750478.aspx"&gt;Navigation overview in WPF&lt;/a&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a title="Page in WPF" href="http://msdn.microsoft.com/en-us/library/system.windows.controls.page.aspx"&gt;Page&lt;/a&gt;, &lt;a title="Hyperlink control in WPF" href="http://msdn.microsoft.com/en-us/library/system.windows.documents.hyperlink.aspx"&gt;Hyperlink&lt;/a&gt; and &lt;a title="Navigation Service in WPF" href="http://msdn.microsoft.com/en-us/library/system.windows.navigation.navigationservice.aspx"&gt;NavigationService&lt;/a&gt; &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Jesse Liberty: &lt;a href="http://silverlight.net/blogs/jesseliberty/archive/2008/05/31/multi-page-applications-in-silverlight.aspx"&gt;Multi-page applications in Silverlight&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Dave Relyea: &lt;a href="http://blogs.msdn.com/devdave/archive/2008/06/13/navigation-with-transition-effects.aspx"&gt;Navigation with Transition Effects&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;PS: For &lt;/span&gt;&lt;a href="http://nerddawg.blogspot.com/2008/03/silverlight-2-application-model.html#c7743351203048741566"&gt;&lt;span style="font-size:78%;"&gt;Ben&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;. Sorry this has been long overdue.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;PPS: Thanks to &lt;a href="http://www.mikedub.net/"&gt;Michael Weinhardt&lt;/a&gt; for valuable insights.&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;&lt;strong&gt;Update [06/16/2008]&lt;/strong&gt;: Dave has a new post on navigation with transition effects. Link under the Further Reading section above.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-4356877772265254382?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/4356877772265254382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=4356877772265254382' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4356877772265254382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4356877772265254382'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/06/pages-in-silverlight.html' title='Pages in Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vO3QC5qlK78/SEyBjfd-YbI/AAAAAAAAACQ/M2yqJdU9kFE/s72-c/SilverlightNavigationApplication_ClassDiagram.png' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-2134612225621668296</id><published>2008-06-08T13:41:00.001-07:00</published><updated>2008-06-08T13:43:10.679-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>How to tell a Silverlight assembly from a .NET Framework one?</title><content type='html'>&lt;p&gt;Silverlight 2 application code is compiled to Common IL and packaged into assemblies (.dll) which are in turn deflated into a Zip file (container with .xap extension). The IL is a CPU- and platform- independent instruction set. The Silverlight runtime has in it the Core CLR which executes this IL. Given that .NET Framework involves much of the same things save for the .xap packaging, how does one tell between a DLL built for Silverlight versus one for .NET Framework?&lt;/p&gt;&lt;p&gt;Well, the answer is in one of the security assumptions that Silverlight's Core CLR makes to distinguish a core platform assembly from a transparent code app assembly. The &lt;em&gt;mscorlib.dll&lt;/em&gt; in Silverlight is signed with a different key than it's namesake in .NET Framework. This is apparent in it's full name, or specifically it's public key token. &lt;/p&gt;&lt;p&gt;The public key token for mscorlib in Silverlight is:&lt;/p&gt;&lt;code&gt;7cec85d7bea7798e&lt;/code&gt; &lt;p&gt;while the public key token for mscorlib in .NET Framework is:&lt;/p&gt;&lt;code&gt;b77a5c561934e089&lt;/code&gt; &lt;p&gt;So the trick to sniffing out an arbitrary managed code assembly for its allegiance - Silverlight or .NET Framework - is to look through it's list of referenced assemblies, locate mscorlib and then check the public key token. &lt;a title="AssemblySniffer: Detects whether an assembly was built for Silverlight or .NET Framework" href="http://nerddawg.members.winisp.net/AssemblySniffer/"&gt;Here is a sample application&lt;/a&gt; that does that.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-2134612225621668296?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/2134612225621668296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=2134612225621668296' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2134612225621668296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2134612225621668296'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/06/how-to-tell-silverlight-assembly-from.html' title='How to tell a Silverlight assembly from a .NET Framework one?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-6326073998855893893</id><published>2008-06-05T09:21:00.000-07:00</published><updated>2008-06-06T22:45:54.258-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Beta 2 of Silverlight 2 has just shipped</title><content type='html'>The second beta of Silverlight 2 has just been released. The team has been cranking away and there are some new features and lots of bug fixes to show. A big thanks to all who provided vital feedback on our previous pre-releases!&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Animation &lt;ol&gt;&lt;li&gt;Support for animating custom data points &lt;/li&gt;&lt;li&gt;Object Animation support (animating structs) &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Deep Zoom &lt;ol&gt;&lt;li&gt;New XML-based file format &lt;/li&gt;&lt;li&gt;MultiScaleTileSource to wire up your own images and get the Deep Zoom experience &lt;/li&gt;&lt;li&gt;Better notifications when sub-images enter the view &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Controls &lt;ol&gt;&lt;li&gt;Customize the look and feel of controls using Visual State Manager. Interactive control templates were never so easy. &lt;/li&gt;&lt;li&gt;Some base controls are now part of the core platform, rather than packaged into apps. Say hello to smaller app sizes. &lt;/li&gt;&lt;li&gt;Calendar now supports multi-selection and blackout dates &lt;/li&gt;&lt;li&gt;New TabControl&lt;/li&gt;&lt;li&gt;Control properties changes (Background, Tooltip, FontFamily, FontSize…) &lt;/li&gt;&lt;li&gt;DataGrid improvements: auto size, reorder, sort, performance and more &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;TextBox &lt;ol&gt;&lt;li&gt;IME Level 3 input support &lt;/li&gt;&lt;li&gt;Text wrapping and multiline selection highlighting in textbox &lt;/li&gt;&lt;li&gt;Scrolling and clipboard support &lt;/li&gt;&lt;li&gt;Document level navigation keys &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Improvements in error handling, reporting &lt;/li&gt;&lt;li&gt;Parser and Property system &lt;ol&gt;&lt;li&gt;DependencyProperty.Register/RegisterAttached now supports PropertyMetadata &lt;/li&gt;&lt;li&gt;New DependencyObject.ClearValue &lt;/li&gt;&lt;li&gt;Visual tree helper &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Data-binding &lt;ol&gt;&lt;li&gt;Per binding level validation &lt;/li&gt;&lt;li&gt;Support for element syntax for binding markup extensions &lt;/li&gt;&lt;li&gt;Binding to attached properties &lt;/li&gt;&lt;li&gt;ItemsControl extensibility (OnItemsChanged method) &lt;/li&gt;&lt;li&gt;Fallback in value conversion (Binding.UnsetValue) &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Input &lt;ol&gt;&lt;li&gt;Support for limited keyboard input in Full Screen mode (arrow, tab, enter, home, end, pageup/pagedown, space). I've seen more than a few requests for this on the forums. &lt;/li&gt;&lt;li&gt;Managed APIs for Inking and stylus input &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Networking and Data &lt;ol&gt;&lt;li&gt;Cross Domain support in Sockets &lt;/li&gt;&lt;li&gt;Cross Domain security enhancements &lt;/li&gt;&lt;li&gt;HttpWebRequest and WebClient callable from background threads &lt;/li&gt;&lt;li&gt;Upload support in WebClient &lt;/li&gt;&lt;li&gt;Isolated Storage: default size increased to 1MB and new ability to change quota with user consent. Also a new management UI. &lt;/li&gt;&lt;li&gt;Duplex communications ("push" from server to Silverlight client with no need to "poll" for data) &lt;/li&gt;&lt;li&gt;LINQ -to- JSON serialization &lt;/li&gt;&lt;li&gt;Significantly improved SOAP interop &lt;/li&gt;&lt;li&gt;"Add New Item" template in Visual Studio for "Silverlight-enabled WCF Service" &lt;/li&gt;&lt;li&gt;ADO.NET Data Services support &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;UIAutomation and Accessibility support in the platform &lt;/li&gt;&lt;li&gt;Media &lt;ol&gt;&lt;li&gt;Platform support for Adaptive Streaming (also referred to by people as multi bitrate), the ability for Silverlight to switch between media depending on network and CPU conditions &lt;/li&gt;&lt;li&gt;Content protection with PlayReady DRM and Windows DRM &lt;/li&gt;&lt;li&gt;Basic server-side playlist (SSPL) support &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Localization &lt;ol&gt;&lt;li&gt;Changes to localized application model. You now create one xap per locale, instead of one monolithic multilingual app &lt;/li&gt;&lt;li&gt;Expanded localization languages of runtime and SDK &lt;/li&gt;&lt;li&gt;Japanese SDK Installer and documentation (July 10) &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;Several changes to make API and behavior more compatible with WPF &lt;/li&gt;&lt;li&gt;Tools &lt;ol&gt;&lt;li&gt;Beta 1 projects will be automatically ported to Beta 2&lt;/li&gt;&lt;li&gt;Remote debugging for VB on the Mac &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;CLR &lt;ol&gt;&lt;li&gt;A new developer-oriented runtime package with debugging binaries, localized strings, docs etc. &lt;/li&gt;&lt;li&gt;Support for OS fallback logic for resources &lt;/li&gt;&lt;li&gt;CurrentCulture and CurrentUICulture isolation to AppDomain level &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;DLR &lt;ol&gt;&lt;li&gt;Performance improvements &lt;/li&gt;&lt;li&gt;Various new DLR and IronPython 2.0 Beta 2 language features &lt;/li&gt;&lt;li&gt;Various new IronRuby features &lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;We're not quite done for Silverlight 2, but are getting really close. There's some ongoing work to get more controls delivered (Scott has said the expectation was to ship over 100 controls) at and beyond RTW. I know people have asked for ComboBox and PasswordBox. We'll also have per-frame callback support (CompositionTarget.Rendering event) to light up those physics animation scenarios you're dreaming of, and further accessibility work on controls, improvements to PNG support in imaging, among other things. Needless to say, the focus from here on will be to stabilize and ship a solid product. &lt;/p&gt;&lt;p&gt;I hope you like what we've cooked. Please &lt;a href="http://silverlight.net/forums"&gt;keep that feedback coming&lt;/a&gt;. Without you this would not be possible and be quite meaningless.&lt;/p&gt;&lt;p&gt;Further content:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Get &lt;a href="http://www.microsoft.com/silverlight/resources/install.aspx?v=2.0"&gt;Silverlight 2 Beta 2&lt;/a&gt; now!&lt;/li&gt;&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=120655&amp;amp;clcid=0x409"&gt;Breaking changes between Silverlight 2 Beta 1 and Beta 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Install &lt;a href="http://go.microsoft.com/fwlink/?LinkId=120319"&gt;Beta 2 tools for Visual Studio 2008&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb404700(VS.95).aspx"&gt;Silverlight 2 Beta 2 documentation on MSDN&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Scott Guthrie: &lt;a href="http://weblogs.asp.net/scottgu/archive/2008/06/06/silverlight-2-beta2-released.aspx"&gt;Silverlight 2 Beta 2 released&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-6326073998855893893?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/6326073998855893893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=6326073998855893893' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6326073998855893893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6326073998855893893'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/06/beta-2-of-silverlight-2-has-just.html' title='Beta 2 of Silverlight 2 has just shipped'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-2851031157534113496</id><published>2008-05-13T19:00:00.001-07:00</published><updated>2008-05-13T19:02:37.841-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><title type='text'>WPF 3.5 SP1: Don't let the SP moniker fool you</title><content type='html'>&lt;p&gt;Yesterday the WPF team shipped some major horsepower features in the vastly understated preview Service Pack to .NET Framework 3.5. It is an exception to the rule for an SP release to have features, and not just bug fixes. In the mold of Windows XP SP2, this SP of .NET Framework 3.5 is chock full of new WPF features.&lt;/p&gt;  &lt;p&gt;For the first time the .NET Framework has been divided into a Client profile which - intuitively - does not contain server specific libraries such as ASP.NET. This cuts down the size of the .NET Framework to about 25MB (which as Dr. Sneath reminds us is close to Adobe Reader's size) and people like me with a Java background can associate it loosely with the Java SE and Java EE split. In many ways, this is the realization of the Longhorn-era &amp;quot;WinFX&amp;quot; give-or-take a couple assemblies. &lt;/p&gt;  &lt;p&gt;Given my previous association with the WPF Application Model, I'll begin with a shout out to improvements from and driven by that crew. The Web Browser control in WPF is embodied by the Frame element. There's new support for interop between WPF and HTML content hosted within it (&lt;em&gt;yay for DOM and script access!&lt;/em&gt;). In addition to the existing support for rendering HTML content via URI comes new support for rendering HTML via a stream. This allows for dynamically created HTML content to be rendered in a WPF app. And oh, XBAP enthusiasts will note that this all works in the partial trust sandbox. The progress UI on XBAP launch gets a perf boost and is now an instant-on UI. There's wide ranging real and perceived perf enhancements in the product that customers will truly love. Besides, there are some ClickOnce improvements allowing you to customize the activation error experience, suppress/customize the ClickOnce UI, set up file associations (&lt;em&gt;yes, despite my reservations to this&lt;/em&gt;), opting out of signing your apps (&lt;em&gt;I've long maintained that shelling out 300 bucks for a cert is good news for Verisign and gang but bad tidings for hobbyist developers; good to see this change&lt;/em&gt;) but with support for corps to block unsigned apps (&lt;em&gt;so this is a wash security-wise&lt;/em&gt;). And yeah, ClickOnce-deployed apps can be launched with a click of a hyperlink on Firefox!&amp;#160; &lt;/p&gt;  &lt;p&gt;An update to Visual Studio 2008 now lets you target your apps specifically to this Client profile of .NET Framework. You have an option of packaging up your app in an installer which will bootstrap .NET Framework 3.5 and uses some nifty tricks (like asynchronous NGEN) to speed up the time between the click and bits showing up on screen.&lt;/p&gt;  &lt;p&gt;This release contains the graphics features demoed at Mix 08, like extensible shader effects which will let you harness the power of the GPU while still using animation, data-binding, media, composition and other WPF goodness. Fittingly, as has been WPF's charter, these features bring advanced concepts like &lt;a href="http://msdn.microsoft.com/en-us/library/bb509561(VS.85).aspx"&gt;HLSL effects&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/SIMD"&gt;SIMD processing&lt;/a&gt; to the realm of application developers like me with simple abstractions and none of the complexity (I mean creating an effect is still the realm of experts, but using it is as simple as instantiating a control in WPF which I'm perfectly capable of doing, equating it with something like a DataGrid). Besides, there's deeper DirectX integration so you can blend or overlay D3D content with WPF.&lt;/p&gt;  &lt;p&gt;There's a new DataGrid and Office Ribbon control provided out of band with WPF. &lt;/p&gt;  &lt;p&gt;I can go on and on, but I should stop now because I can't hold this smile much longer. The WPF and other partners contributing to .NET Framework kick some major bootay with this release. Calling it a Service Pack is a classic understatement. Readers who are familiar with Silverlight, but not so much with WPF are encouraged to dig deeper. And do let us know which of these features you'd like to see in Silverlight.&lt;/p&gt;  &lt;p&gt;Further content:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://channel9.msdn.com/Showforum.aspx?forumid=14&amp;amp;tagid=329"&gt;Channel 9's ongoing WPF Series&lt;/a&gt; has a set of videos where folks from the team talk about features and do demos&lt;/li&gt;    &lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2008/05/12/visual-studio-2008-and-net-framework-3-5-service-pack-1-beta.aspx"&gt;Scott Guthrie: VS 2008 and .NET Framework 3.5 SP1&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/tims/archive/2008/05/12/introducing-the-third-major-release-of-windows-presentation-foundation.aspx"&gt;Tim Sneath: Introducing the third major release of WPF&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/greg_schechter/archive/2008/05/12/a-series-on-gpu-based-effects-for-wpf.aspx"&gt;Greg Schechter: A series on GPU based effects for WPF&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-2851031157534113496?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/2851031157534113496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=2851031157534113496' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2851031157534113496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2851031157534113496'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/05/wpf-35-sp1-don-let-sp-moniker-fool-you.html' title='WPF 3.5 SP1: Don&amp;#39;t let the SP moniker fool you'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-2753338442547463422</id><published>2008-04-14T15:15:00.000-07:00</published><updated>2008-04-14T15:15:54.429-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Rendering'/><category scheme='http://www.blogger.com/atom/ns#' term='Graphics'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Rasterization'/><category scheme='http://www.blogger.com/atom/ns#' term='Layout'/><title type='text'>Silverlight 2: Layout and Rendering engines</title><content type='html'>&lt;p&gt;A layout engine which does precise and optimal size or position calculations is critical in any user interface framework for building responsive, interactive and high-performance applications. The term "layout engine" is often interchangeably used with "rendering engine" to mean code that takes markup content along with styles, templates and other formatting instructions to display content on screen. As prominent examples, you know of Trident, the layout engine in Internet Explorer, or Gecko which performs a similar function in Netscape/Mozilla family browsers. &lt;/p&gt;  &lt;p&gt;In Silverlight, we typically look at the layout and rendering engines as two distinct things rather than one amorphous entity. The former handles the math which dictates how UI elements are sized and positioned on screen, and how they may be constrained or clipped in order to fit into the bounding box. The latter deals with the logic of taking bits representing graphical objects and showing them on screen. Lets do a quick lap around these features.   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Silverlight layout engine&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Among the goals of the layout engine is to:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Enable highly complex and dynamic user interfaces where elements can be automatically positioned&lt;/li&gt;    &lt;li&gt;Provide a gradient of Panel choices in which to place UI elements, as well a mix of knobs to achieve very precise positioning: absolute/relative sizes, margins, padding, static or specified sizes as well as dynamic or calculated sizes&lt;/li&gt;    &lt;li&gt;Allow app code to participate in layout. This can be as simple as being notified on layout events, or as niche as extending the layout behavior by actively participating in the process&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;With the design patterns and public APIs of the layout engine in Silverlight, we've stayed close to the behavior displayed by Windows Presentation Foundation (WPF), even if the implementation is custom keeping in mind the needs and constraints of Silverlight. &lt;/p&gt;  &lt;p&gt;Very simply put, layout in WPF or Silverlight is a recursive operation that involves two passes, measurement and arrangement. During measurement, a child element is effectively told by its parent element &lt;em&gt;&amp;quot;Here's how much room is available to all you kids and your 'gear'. Tell me how much &lt;/em&gt;you&lt;em&gt; really need.&amp;quot;&lt;/em&gt; Once all appropriate elements in the tree have been measured in this way, the arrangement pass kicks in. At this time, the elements' sizes are finalized. The parent element can choose to say either &lt;em&gt;&amp;quot;Sure you can have your own room&amp;quot;&lt;/em&gt; or if the demands are profligate, then &lt;em&gt;&amp;quot;Oh, the kids these days! I'd like champagne on a beer budget too. But no can do. Get your things together - you and your brother are rooming up.&amp;quot;&lt;/em&gt; After arrangement, the elements in the tree are ready to be rendered. &lt;/p&gt;  &lt;p&gt;Example of a grid with constrained size. The rectangle within it asks the parent for all its got -- and gets it:&amp;#160; &lt;br /&gt;&lt;font face="Courier New" size="1"&gt;&amp;lt;Grid Width=&amp;quot;250&amp;quot; Height=&amp;quot;600&amp;quot;&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Rectangle Fill=&amp;quot;Red&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;lt;/Grid&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Example of a stack panel with constrained size. The first rectangle gets what it desires. The second rectangle gets clipped because it desires more than the parent has room for:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="1"&gt;&amp;lt;StackPanel Width=&amp;quot;&lt;font color="#ff0000"&gt;250&lt;/font&gt;&amp;quot; Height=&amp;quot;600&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Rectangle Fill=&amp;quot;Red&amp;quot; Width=&amp;quot;&lt;font color="#ff0000"&gt;250&lt;/font&gt;&amp;quot; Height=&amp;quot;300&amp;quot;/&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Rectangle Fill=&amp;quot;Green&amp;quot; Width=&amp;quot;&lt;font color="#ff0000"&gt;300&lt;/font&gt;&amp;quot; Height=&amp;quot;300&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;lt;/StackPanel&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Needless to say, the layout algorithm employs optimizations to ensure layout doesn't happen until absolutely necessary, and when it does, there selectiveness on which items need to be considered. I won't go into too much detail but primarily this keys off the knowledge that certain properties such as Width, Height, Visibility, Stretch, Alignments, Margins etc. are deemed layout-affecting and a change to one or more of these invalidates the current layout, causing Silverlight to re-layout i.e. measure and arrange its UI elements.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Silverlight rendering engine&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Silverlight uses vector graphics as its rendering data format, giving its graphics the ability to scale to any size or display resolution.&lt;/p&gt;  &lt;p&gt;In WPF, the Visual class is the basic abstraction that provides rendering support. UI controls like Button, ListBox etc. derive from UIElement and FrameworkElement, which derive from Visual. In Silverlight we've dispensed of the Visual type, folding its functionality into its child types. This way we can keep the object hierarchy shorter, have one less type to deal with, small size reductions and still be a subset of WPF both conceptually and behaviorally. Silverlight also generally discards the notion of distinct visual and logical trees, effectively reducing to one tree where visual/drawing/logical info is persisted. This tree is the effective consolidation of elements you created in markup or code, containing all rendering info needed to output to screen. The tree determines rendering order as well - starting with the root visual (the top-most node), progressing to its children from left to right. If an element has children, then they are traversed before its siblings.&lt;/p&gt;  &lt;p&gt;Silverlight uses &lt;a href="http://msdn2.microsoft.com/en-us/library/ms748373.aspx#visual_rendering_behavior"&gt;retained mode rendering&lt;/a&gt; and employs a custom rendering pipeline, not relying on OS libraries like GDI/GDI+/WPF for better consistency and performance across platforms. It uses occlusion culling among other approaches to prevent &lt;a title="Definition of overdraw in graphics" href="http://www.exaflop.org/glossary/gloss.cgi?graphics.overdraw"&gt;overdraw&lt;/a&gt;. This is particularly significant if you consider that a typical application has 3-4x overdraw and perhaps 10x if effects are employed. Another very significant (but not commonly known) fact about Silverlight's rendering engine is its &lt;a href="http://en.wikipedia.org/wiki/Multi-core"&gt;many-core&lt;/a&gt; support; specifically how it was architected to utilize the raw power of multiple cores and subdivide rendering tasks to be processed in parallel by CPU cores as they have available time. This provides phenomenal linear speed increases when you have dual, quad or 8 core machines. In this regard, Silverlight has few peers. Of course, one must not gloss over the detail that other functions such as tree walks, layout, template expansions etc. do not necessarily scale linearly.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Post-script:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Blog posts are never a substitute for &lt;a title="Silverlight 2 Documentation" href="http://msdn2.microsoft.com/en-us/library/bb404700.aspx"&gt;good documentation&lt;/a&gt; (and we're fortunate to have a &lt;a title="Silverlight SDK Doc Writers&amp;#39; Blog" href="http://blogs.msdn.com/silverlight_sdk/default.aspx"&gt;great team of doc writers&lt;/a&gt;). My intent with this post was to mix the &amp;quot;how&amp;quot; with the &amp;quot;why&amp;quot;. One of my mental models is to view teams based on what I call &amp;quot;team DNA&amp;quot;. In this respect, the UI platform team in Silverlight traces its DNA to the User32, GDI/GDI+, Trident, WinForms and WPF teams (Note: I'm way oversimplifying - we have a far more diverse team in ideas, outlooks and heritage than I can describe with words; but bear with me here). I think the team's DNA gives it a rich corpus of experience in blending the web and desktop, plus the ability to distil things on the &amp;quot;what works&amp;quot;, &amp;quot;what doesn't work&amp;quot; and &amp;quot;what didn't work then, but will now&amp;quot; buckets. In the spirit of evolution and due to the unique size and platform requirements, the layout and rendering engines as other areas in Silverlight, introduce optimizations and use different algorithms than their WPF cousins. Feedback is always appreciated.&lt;/p&gt;  &lt;p&gt;Further reading:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/cc189087(VS.95).aspx"&gt;Object positioning and layout in Silverlight 2&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms745058.aspx"&gt;The WPF Layout System&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms748373.aspx"&gt;Overview of WPF Graphics Rendering&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-2753338442547463422?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/2753338442547463422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=2753338442547463422' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2753338442547463422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2753338442547463422'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/04/silverlight-2-layout-and-rendering.html' title='Silverlight 2: Layout and Rendering engines'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-1175066805703142140</id><published>2008-03-11T20:13:00.000-07:00</published><updated>2008-04-11T21:28:25.050-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>How to tell the screen resolution from within a Silverlight app</title><content type='html'>&lt;p&gt;There isn't a direct API for detecting the screen width and height from within a Silverlight app. Fortunately, JavaScript provides you a way, viz. via the &lt;code&gt;screen.width&lt;/code&gt; and &lt;code&gt;screen.height&lt;/code&gt; properties. So with a nifty use of Silverlight's HTML DOM Bridge, these values can be read with little issue.&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; screenWidth = &lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;.Parse(&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;    HtmlPage&lt;/span&gt;.Window.Eval(&lt;span style="color:#a31515;"&gt;"screen.width"&lt;/span&gt;).ToString()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;                             );&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt; screenHeight = &lt;span style="color:#2b91af;"&gt;Int32&lt;/span&gt;.Parse(&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#2b91af;"&gt;    HtmlPage&lt;/span&gt;.Window.Eval(&lt;span style="color:#a31515;"&gt;"screen.height"&lt;/span&gt;).ToString()&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;font-size:85%;"&gt;                             );&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Then when your app runs in fullscreen mode, you'd get the screen resolution using the Silverlight plug-in's ActualWidth and ActualHeight.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:blue;"&gt;int&lt;/span&gt;&lt;span &gt; screenWidth = &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;       &lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;.Current.Host.Content.ActualWidth;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;color:blue;"&gt;int&lt;/span&gt;&lt;span style="font-size:85%;"  &gt; screenHeight =&lt;br /&gt;       &lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;.Current.Host.Content.ActualHeight;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1175066805703142140?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1175066805703142140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1175066805703142140' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1175066805703142140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1175066805703142140'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/04/how-to-tell-screen-resolution-from.html' title='How to tell the screen resolution from within a Silverlight app'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-1935552612586402258</id><published>2008-03-11T19:46:00.001-07:00</published><updated>2009-04-27T19:20:52.285-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='URI'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='EmbeddedResource'/><category scheme='http://www.blogger.com/atom/ns#' term='Resource'/><category scheme='http://www.blogger.com/atom/ns#' term='Content'/><title type='text'>Silverlight 2: Demystifying URI references for app resources</title><content type='html'>&lt;p&gt;In this post we will look at how application data files can be referenced using relative Uris from within XAML or code in your Silverlight 2 application.&lt;/p&gt;&lt;p&gt;Silverlight provides you with a luxury of choices for how you declare your application data files. These are the non-code artifacts of your app, such as images, videos, fonts etc. The build action for any file - i.e. how you declare it in your project file or within Visual Studio or Blend - is consequential to how it can be referenced in XAML or code via a Uri. While care was taken to ensure defaults that gel with the programmers intuitiveness while referencing them in Uris, there are always subtle issues that the intrepid Silverlight designer or developer must be aware of. If you come to Silverlight with previous WPF experience, the contents of this post should be old news to you. If not, fear not; Silverlight is designed to be easy to learn and easy to master. &lt;/p&gt;&lt;p&gt;Let's take Image files as an example as we walk through the various cases. Once you understand how this works, you can extrapolate behavior for MediaElement (audio/video) or MultiScaleImage (SeaDragon in Silverlight) or perhaps even fonts. While examples below show XAML syntax, the same applies to code.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Files marked as &lt;span style="color:#ff8000;"&gt;Resource&lt;/span&gt;&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Get embedded in the app assembly within the XAP &lt;/li&gt;&lt;li&gt;Are accessible using a relative Uri, relative to the XAML file from where they are being referenced&lt;br /&gt;For e.g. &lt;code&gt;&amp;lt;Image Source=”Foo.jpg” /&amp;gt;&lt;/code&gt; &lt;/li&gt;&lt;li&gt;When not found, there is no fallback. The ImageFailed event is raised. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Tip&lt;/strong&gt;&lt;/u&gt;: Using assembly qualified Uris is most reliable both from within and outside that assembly. E.g. &lt;code&gt;&amp;lt;Image Source=”/&lt;em&gt;{assemblyShortName}&lt;/em&gt;;component/Foo.jpg”/&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Tip&lt;/strong&gt;&lt;/u&gt;: You can programmatically extract any application resource using &lt;code&gt;Application.GetResourceStream(uri).Stream&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Files marked as &lt;span style="color:#ff8000;"&gt;Content&lt;/span&gt;&lt;/strong&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Get added to the XAP at the conceptual application root &lt;/li&gt;&lt;li&gt;Are accessible using a relative Uri, relative to the application root. This requires the use of a leading slash&lt;br /&gt;For e.g. &lt;code&gt;&amp;lt;Image Source=”/Foo.jpg” /&amp;gt;&lt;/code&gt; &lt;/li&gt;&lt;li&gt;When not found, the resource loading mechanism falls back to the application’s site of origin and looks for the image under the same (web root) dir as the XAP is located &lt;/li&gt;&lt;li&gt;When not found, the ImageFailed event is raised. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Tip&lt;/strong&gt;&lt;/u&gt;: this is a no-brainer when you have a resource that is commonly used from within 2 assemblies in the XAP&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Files marked as &lt;span style="color:#ff8000;"&gt;None&lt;/span&gt; &lt;/strong&gt;(with CopyToOutputDirectory set appropriately):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Don’t get copied into the XAP, but the CopyToOutputDirectory metadata will ensure it gets copied alongside the XAP &lt;/li&gt;&lt;li&gt;Are accessible using a relative Uri, relative to the application root. This requires the use of a leading slash&lt;br /&gt;For e.g. &lt;code&gt;&amp;lt;Image Source=”/Foo.jpg” /&amp;gt;&lt;/code&gt; &lt;/li&gt;&lt;li&gt;This is the fallback path of the above &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Tip&lt;/strong&gt;&lt;/u&gt;: in most cases you want to keep your video files out of the XAP. They are not encumbered by x-domain download restrictions. You do not get compression benefits from keeping them in the XAP. Rather you can use streaming or progressive download if they are outside.&lt;/p&gt;&lt;p&gt;Files marked as None, as well as image and audio/video files not marked at all in the project (i.e. external to the project), can always be referenced using absolute Uris.&lt;/p&gt;&lt;p&gt;Files marked as &lt;span style="color:#ff8000;"&gt;&lt;strong&gt;EmbeddedResource&lt;/strong&gt;&lt;/span&gt;: &lt;ul&gt;&lt;li&gt;Get embedded into the assembly in a manner that Silverlight cannot use for URI references either from XAML or code&lt;/li&gt;&lt;li&gt;Should be changed to &lt;strong&gt;Resource&lt;/strong&gt;, and used as detailed above.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Hopefully this demystifies Uri usage in Silverlight for you. If we can make improvements in the runtime or in tools to make this easier for you, please post a comment here. Feedback is always appreciated. &lt;/p&gt;&lt;ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Related links&lt;/strong&gt;:&lt;ul&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2005/11/resources-in-windows-presentation.html"&gt;Resources in WPF - Part 1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nerddawg.blogspot.com/2005/12/more-on-resource-loading-in-wpf.html"&gt;Resources in WPF - Part 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/library/cc296240(VS.95).aspx"&gt;Silverlight resource files - documentation on MSDN&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1935552612586402258?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1935552612586402258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1935552612586402258' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1935552612586402258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1935552612586402258'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/03/silverlight-2-demystifying-uri.html' title='Silverlight 2: Demystifying URI references for app resources'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-8380470746478674121</id><published>2008-03-11T12:34:00.000-07:00</published><updated>2008-03-12T10:36:48.486-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Audio'/><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight Streaming'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Transcode'/><category scheme='http://www.blogger.com/atom/ns#' term='Media'/><title type='text'>Transcoding media files for Silverlight</title><content type='html'>&lt;p&gt;Silverlight supports Windows Media Audio and Video (WMA, VC-1/WMV7-9) and MP3 formats. If you have existing media assets in other formats, you can convert them into a format Silverlight can understand. There are a couple ways to do this.&lt;/p&gt;&lt;p&gt;On your desktop using &lt;a href="http://www.microsoft.com/expression/products/overview.aspx?key=encoder"&gt;Expression Encoder&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Use the user interface for granular control over the entire user experience on your media files with support for encoding, enhancement and publishing for Silverlight&lt;/li&gt;&lt;li&gt;Or use the command line interface for batch processing &lt;/li&gt;&lt;li&gt;Choose this when you do not have abundant bandwidth to upload media assets to Silverlight Streaming for encoding or transcoding &lt;/li&gt;&lt;li&gt;Choose this if you have adequate CPU power on your desktop to transcode your assets &lt;/li&gt;&lt;li&gt;Expression Encoder can upload your media files to the Silverlight Streaming service using &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=382a3306-b212-4df3-af86-5d48be550b94&amp;amp;displaylang=en"&gt;this plug-in&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In the cloud using Silverlight Streaming&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The companion service to Silverlight on the cloud at &lt;a href="http://silverlight.live.com/"&gt;http://silverlight.live.com/&lt;/a&gt; provides transcoding support in the Video Management area &lt;/li&gt;&lt;li&gt;Choose this if you have enough bandwidth to upload (unencoded) media assets to the cloud &lt;/li&gt;&lt;li&gt;Choose this if you do not have adequate CPU power on your desktop machines to efficiently encode/transcode media assets &lt;/li&gt;&lt;li&gt;Choose this if you would like to offload your media hosting to Microsoft's high performance, geo-scale content delivery network (CDN)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;PS: my one gripe is that the Silverlight Streaming SDK docs do not explicitly say which file formats it can transcode for you. I know they support .mov, but what about .flv? Hoping they fix this soon.&lt;br /&gt;&lt;em&gt;&lt;br /&gt;Update [3/12/2008]&lt;/em&gt; :  Thanks to Anoop Anantha, WL Platform Architect, I've now learned that Silverlight Streaming will transcode mpeg2, mpeg4, divX, H.264, flv formats, among others, to a Silverlight-friendly wmv format. He mentioned they will be updating the docs.&lt;/p&gt;&lt;p&gt;PPS: tip o' the hat to &lt;a href="http://blogs.msdn.com/angus_logan"&gt;Angus Logan&lt;/a&gt; for his excellent talk at Mix 08 on Windows Live services.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-8380470746478674121?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/8380470746478674121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=8380470746478674121' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8380470746478674121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8380470746478674121'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/03/transcoding-media-files-for-silverlight.html' title='Transcoding media files for Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-2293775048021950297</id><published>2008-03-10T17:25:00.000-07:00</published><updated>2008-03-10T17:26:17.380-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>How to pass initialization params to a Silverlight 2 app</title><content type='html'>&lt;p&gt;This is something of an FAQ on our internal discussion lists, so I figured it merited a post.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Step 1&lt;/u&gt;: Declare the &lt;code&gt;initParams&lt;/code&gt; param on the Silverlight plug-in and pass in a comma-delimited set of key-value pair tokens. For e.g. &lt;em&gt;&amp;quot;key1=value1,key2=value2,key3=value3&amp;quot;&lt;/em&gt;.&lt;/p&gt;  &lt;p style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;object&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font face="Consolas, Courier New"&gt; &lt;/font&gt;&lt;span style="color: red"&gt;&lt;font face="Consolas, Courier New"&gt;type&lt;/font&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;=&amp;quot;application/x-silverlight&amp;quot;&lt;/span&gt; &lt;/font&gt;&lt;span style="color: red"&gt;       &lt;br /&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; width&lt;/font&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;=&amp;quot;100%&amp;quot;&lt;/span&gt; &lt;span style="color: red"&gt;height&lt;/span&gt;&lt;/font&gt;&lt;span style="color: blue"&gt;&lt;font face="Consolas, Courier New"&gt;=&amp;quot;100%&amp;quot;&amp;gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;param&lt;/span&gt; &lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;source&amp;quot;&lt;/span&gt; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="color: red"&gt;       &lt;br /&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; value&lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue"&gt;&lt;font face="Consolas, Courier New"&gt;=&amp;quot;ClientBin/SLInitParams.xap&amp;quot;/&amp;gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span&gt;&lt;span style="color: green"&gt;&lt;font face="Consolas, Courier New"&gt;&amp;lt;!-- startPage key can have values Page1 or Page2 --&amp;gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span&gt;&lt;span style="mso-tab-count: 3"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;param&lt;/span&gt; &lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;initParams&amp;quot;&lt;/span&gt; &lt;/font&gt;&lt;span style="color: red"&gt;       &lt;br /&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; value&lt;/font&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;=&amp;quot;startPage=Page1&amp;quot;&lt;/span&gt; &lt;/font&gt;&lt;span style="color: blue"&gt;&lt;font face="Consolas, Courier New"&gt;/&amp;gt; &lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height: 115%"&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;object&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;For best results, the key and value tokens in the &lt;code&gt;initParams&lt;/code&gt; string must be restricted to alphanumeric values. There currently isn't support for escaping equality signs or commas, for instance, should they exist in the key or value part of the token.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Step 2&lt;/u&gt;: In the Application's &lt;code&gt;Startup&lt;/code&gt; event handler, extract the initialization parameters via &lt;code&gt;StartupEventArgs.InitParams&lt;/code&gt; property. You'll get an &lt;code&gt;IDictionary&amp;lt;string, string&amp;gt;&lt;/code&gt;.&lt;/p&gt;  &lt;p style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="color: green"&gt;&lt;font face="Consolas, Courier New"&gt;// Contents of App.xaml.cs &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span style="color: blue"&gt;&lt;font face="Consolas, Courier New"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font face="Consolas, Courier New"&gt; &lt;span style="color: blue"&gt;void&lt;/span&gt; Application_Startup(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;/font&gt;&lt;span style="color: #2b91af"&gt;       &lt;br /&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; StartupEventArgs&lt;/font&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt; e) &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span&gt;&lt;font face="Consolas, Courier New"&gt;{        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; string&lt;/span&gt; startPage = e.InitParams[&lt;span style="color: #a31515"&gt;&amp;quot;startPage&amp;quot;&lt;/span&gt;];         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; if&lt;/span&gt; (startPage != &lt;span style="color: blue"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; startPage.Equals(&lt;span style="color: #a31515"&gt;&amp;quot;Page1&amp;quot;&lt;/span&gt;)) &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none" class="MsoNormal"&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Load Page1          &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this&lt;/span&gt;.RootVisual = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Page&lt;/span&gt;();         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; else&lt;/span&gt;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Load Page2          &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; this&lt;/span&gt;.RootVisual = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;AlternatePage&lt;/span&gt;();         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;/span&gt;&lt;font face="Consolas, Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font face="Consolas, Courier New"&gt;} &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas, Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Simple, huh? I have &lt;a href="http://cid-404c2ff7814e399f.skydrive.live.com/self.aspx/Public/Silverlight2/SLInitParams.zip"&gt;a sample project on how to pass initialization params to a Silverlight 2 app, and conditionally show UI&lt;/a&gt;, up on my sky drive.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-2293775048021950297?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/2293775048021950297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=2293775048021950297' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2293775048021950297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2293775048021950297'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/03/how-to-pass-initialization-params-to.html' title='How to pass initialization params to a Silverlight 2 app'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5055652821022313627</id><published>2008-03-10T07:25:00.001-07:00</published><updated>2008-03-10T07:27:16.166-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Application Model'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight 2: Application model</title><content type='html'>&lt;p&gt;The first public beta of Silverlight 2 is now live. If you've played with building apps on it, you know we weren't kidding when we used the "Windows Presentation Foundation / Everywhere" moniker. Although we didn't inflict that monstrosity of a name on you, we did bring much of the sheer goodness of WPF in the APIs, the depth of functionality, the extensibility points and the overall experience designing or developing one of these babies.&lt;/p&gt;  &lt;p&gt;In this first installment of a series of posts on Silverlight 2 features, I'll talk about the new Application Model. I'll loosely define an Application Model as &amp;quot;the principles on what constitutes an application, how it's lifetime is governed, and the set of services offered by a platform or runtime to the application&amp;quot;. The Silverlight 2 Application Model borrows heavily from that of WPF. And it's goals are to be simple and predictable, to provide extensibility hooks, and otherwise to stay out of the way.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Silverlight 2 application      &lt;br /&gt;&lt;/strong&gt;The Silverlight 2 application is a client-side entity running within the confines of a host such as a browser. It is a packaged archive -- we use the Zip data compression and archival format -- with the &lt;code&gt;.xap&lt;/code&gt; file extension and &lt;code&gt;application/x-silverlight-app&lt;/code&gt; MIME type. Despite the introduction of this new application file, the Silverlight 2 runtime continues to support vanilla XAML content specified via file Uri or inline reference to SCRIPT block a la the v1.0 programming model.&lt;/p&gt;  &lt;p&gt;Here's an outline of the features supported in the new application model:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;New application package unit&lt;/li&gt;    &lt;li&gt;Encapsulation of application functionality in a type deriving from System.Windows.Application, along with app definition XAML&lt;/li&gt;    &lt;li&gt;Application lifetime: ctor, Startup event, Exit event&lt;/li&gt;    &lt;li&gt;Handle exception conditions in a central location at the app level&lt;/li&gt;    &lt;li&gt;Support for declarative dependency downloads, as well as programmatic for more granular control&lt;/li&gt;    &lt;li&gt;Utility methods to extract app resources or resources from arbitrary Zip packages&lt;/li&gt;    &lt;li&gt;Access to the Silverlight plug-in's object model via the Host property&lt;/li&gt;    &lt;li&gt;Default splash screen provided by the platform, with ability to override it using custom XAML and JavaScript&lt;/li&gt;    &lt;li&gt;Support for activating a Silverlight application from cross-domain (x-domain) to HTML page; secure by default, and ingress/egress need to be &lt;em&gt;opted into&lt;/em&gt;.&lt;/li&gt;    &lt;li&gt;Ability to refactor application functionality into individual pieces, daisy-chained together and dynamically loaded at runtime&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;A more &lt;a href="http://cid-404c2ff7814e399f.skydrive.live.com/self.aspx/Public/Silverlight2/Silverlight%202%20Application%20Model.pptx"&gt;detailed overview of the new Silverlight 2 application model is provided in this slide deck&lt;/a&gt; I've posted on my sky drive. The &lt;a href="http://msdn2.microsoft.com/en-us/library/cc221365(VS.95).aspx"&gt;Silverlight 2 application model documentation on MSDN&lt;/a&gt; is a must-read. As always, feedback is appreciated. You can drop a comment here or post on the &lt;a href="http://silverlight.net/forums/"&gt;Silverlight forums&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5055652821022313627?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5055652821022313627/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5055652821022313627' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5055652821022313627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5055652821022313627'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/03/silverlight-2-application-model.html' title='Silverlight 2: Application model'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-1533418692668233255</id><published>2008-02-23T10:08:00.000-08:00</published><updated>2008-02-23T10:35:05.403-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='British Library'/><category scheme='http://www.blogger.com/atom/ns#' term='XBAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>British Library's Turning The Pages project now in Silverlight</title><content type='html'>The British Library's Turning The Pages project is currently featuring &lt;a href="http://www.bl.uk/ttp2/hiddentreasures.html"&gt;5 treasures from across the United Kingdom&lt;/a&gt;. In addition to the Windows Vista version (specifically a WPF browser app a.k.a. XBAP) of the app, there's now a new Silverlight version for broader browser and platform reach.&lt;br /&gt;&lt;br /&gt;I love this app and often use it as an example to explain what I do in Microsoft to lay persons. A tip for the authors of the Silverlight 1.0 flavor of the app: it'd be cool to see mousewheel support for the Zoom function. &lt;a href="http://blois.us/blog/2007/08/mouse-wheel-support-in-silverlight.html"&gt;Here's a post &lt;/a&gt;from Pete that explains the approach.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1533418692668233255?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1533418692668233255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1533418692668233255' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1533418692668233255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1533418692668233255'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/02/british-librarys-turning-pages-project.html' title='British Library&apos;s Turning The Pages project now in Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-8717855609079465177</id><published>2008-02-22T09:52:00.000-08:00</published><updated>2008-02-23T09:56:26.963-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Unwrapping Silverlight 2</title><content type='html'>Ahead of the first public Beta of Silverlight 2, Scott posts &lt;a title="Overview of Silverlight 2 features" href="http://weblogs.asp.net/scottgu/archive/2008/02/22/first-look-at-silverlight-2.aspx"&gt;this overview&lt;/a&gt; and follows up with a series of tutorials that will get you up to speed with the breadth of features being introduced:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-1-creating-quot-hello-world-quot-with-silverlight-2-and-vs-2008.aspx" target="_blank"&gt;Part 1: Creating "Hello World" with Silverlight 2 and VS 2008&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-2-using-layout-management.aspx" target="_blank"&gt;Part 2: Using Layout Management&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-3-using-networking-to-retrieve-data-and-populate-a-datagrid.aspx" target="_blank"&gt;Part 3: Using Networking to Retrieve Data and Populate a DataGrid&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-4-using-style-elements-to-better-encapsulate-look-and-feel.aspx" target="_blank"&gt;Part 4: Using Style Elements to Better Encapsulate Look and Feel&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-5-using-the-listbox-and-databinding-to-display-list-data.aspx" target="_blank"&gt;Part 5: Using the ListBox and DataBinding to Display List Data&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-6-using-user-controls-to-implement-master-detail-scenarios.aspx" target="_blank"&gt;Part 6: Using User Controls to Implement Master/Details Scenarios&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-7-using-control-templates-to-customize-a-control-s-look-and-feel.aspx" target="_blank"&gt;Part 7: Using Templates to Customize Control Look and Feel&lt;/a&gt;&lt;br /&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-8-creating-a-digg-desktop-application-using-wpf.aspx" target="_blank"&gt;Part 8: Creating a Digg Desktop Version of our Application using WPF&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is just an hors d'oeuvre before the Beta is available for public download. Soon! Hope you love what we've cooked.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;: Adam does a &lt;a href="http://adamkinney.com/blog/310/default.aspx"&gt;CliffsNotes take on Scott's posts&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-8717855609079465177?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/8717855609079465177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=8717855609079465177' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8717855609079465177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8717855609079465177'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/02/unwrapping-silverlight-2.html' title='Unwrapping Silverlight 2'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-435818729533525037</id><published>2008-02-20T05:23:00.000-08:00</published><updated>2008-02-20T05:48:07.178-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DreamSpark'/><category scheme='http://www.blogger.com/atom/ns#' term='Software'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Free Microsoft Software for Students</title><content type='html'>Microsoft is making professional development software available at no charge to post-secondary school and university students worldwide. The initiative called DreamSpark was &lt;a href="http://www.microsoft.com/presspass/features/2008/feb08/02-18DreamSpark.mspx" title="DreamSpark announcement from Microsoft PressPass"&gt;announced&lt;/a&gt; yesterday starting with 11 countries, and will soon grow to more countries over the year. &lt;br /&gt;&lt;br /&gt;Among the products available currently are Windows Server, the Expression Suite of products, XNA Game Studio, SQL Server and the new Visual Studio.&lt;br /&gt;&lt;br /&gt;Students attending accredited university, college, junior college, community college, or a tertiary/higher education institution can go to the &lt;a href="https://downloads.channel8.msdn.com/" title="Microsoft DreamSpark: Free software for students"&gt;DreamSpark site&lt;/a&gt; on MSDN now to sign up.&lt;br /&gt;&lt;br /&gt;PS: Kudos to Academic DPE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-435818729533525037?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/435818729533525037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=435818729533525037' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/435818729533525037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/435818729533525037'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/02/free-microsoft-software-for-students.html' title='Free Microsoft Software for Students'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-9019539227566758819</id><published>2008-02-14T19:49:00.000-08:00</published><updated>2008-02-23T10:50:03.617-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Life at Microsoft</title><content type='html'>Booyakasha. If you've ever pondered the question, then check this look at &lt;a href="http://on10.net/blogs/tina/Life-At-Microsoft/"&gt;life at Microsoft&lt;/a&gt;, courtesy of the folks at On10.&lt;br /&gt;&lt;br /&gt;Update: inline now...&lt;br /&gt;&lt;iframe src="http://on10.net/blogs/tina/21054/player/" frameborder="0" height="325" scrolling="no" width="320"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-9019539227566758819?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/9019539227566758819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=9019539227566758819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/9019539227566758819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/9019539227566758819'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/02/life-at-microsoft.html' title='Life at Microsoft'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5753515500347402365</id><published>2008-01-07T17:05:00.000-08:00</published><updated>2008-01-07T17:05:19.873-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='NBC'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Olympics'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Olympics online coverage to be powered by Silverlight</title><content type='html'>This one is big for &lt;a href="http://silverlight.net"&gt;my team&lt;/a&gt;. My colleagues and I on the Silverlight product development team are enthused &lt;a href="http://universalsports.nbcsports.com/articles/show/38941?sport_id=0"&gt;about NBC Universal's choice of our platform &lt;/a&gt;to power the user experience on their site for the upcoming Beijing 2008 Olympics. I think providing a compelling experience around the thousands of hours of live feeds and on-demand content is just the kind of challenge that Silverlight was built for. &lt;br /&gt;&lt;br /&gt;Here's to Silverlight 2.0, of which you'll hear more in the days and months to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5753515500347402365?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5753515500347402365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5753515500347402365' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5753515500347402365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5753515500347402365'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2008/01/olympics-online-coverage-to-be-powered.html' title='Olympics online coverage to be powered by Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-568867205740766232</id><published>2007-10-18T09:30:00.000-07:00</published><updated>2007-10-18T09:42:29.529-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Popfly'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Popfly: Now open to all</title><content type='html'>This morning the &lt;a href="http://www.popfly.com"&gt;Popfly&lt;/a&gt; team &lt;a href="http://popflyteam.spaces.live.com/Blog/cns!51018025071FD37F!264.entry"&gt;announced &lt;/a&gt;a new Beta and have removed the invitation-only restriction on that site. Just sign in to &lt;a href="http://www.popfly.com"&gt;Popfly.com&lt;/a&gt; with your Live ID. You can create your own gadgets, mashups and web pages using &lt;a href="http://www.microsoft.com/silverlight"&gt;Silverlight&lt;/a&gt; powered tools. No programming skills required. &lt;br /&gt;&lt;br /&gt;PS: If someone from the Popfly team is reading this, how about adding a "Sign up" link on the landing and overview pages to eliminate the guess-work?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-568867205740766232?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/568867205740766232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=568867205740766232' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/568867205740766232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/568867205740766232'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/10/popfly-now-open-to-all.html' title='Popfly: Now open to all'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-2315982022653731810</id><published>2007-09-05T07:46:00.000-07:00</published><updated>2007-09-05T08:02:47.977-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Nothing beats shipping: Silverlight 1.0 is here!</title><content type='html'>Today Microsoft &lt;a href="http://www.microsoft.com/presspass/press/2007/sep07/09-04SilverlightPR.mspx" title="Silverlight 1.0 press release"&gt;announced &lt;/a&gt;the debut release of &lt;a href="http://www.microsoft.com/silverlight"&gt;Silverlight&lt;/a&gt;, the new cross-browser, cross-platform technology for developing compelling media experiences and RIAs. I joined the Silverlight effort around November of 2006 from working on WPF 3.5 feature areas, and it has been a wonderful ride. Working on two different product releases – Silverlight 1.0 and 1.1 - simultaneously is a very unique experience not easily summarized in a blog post. The kind of stuff this team has done in a matter of months is nothing short of amazing. We joke internally about how someday books will be written about these episodes; and needless to say, about the giants upon whose shoulders people like me stood. But for now, I’m happy and tremendously fortunate to have been a part of shipping a great product that millions will use and love.&lt;br /&gt;&lt;br /&gt;Congratulations to my colleagues on the Silverlight team and the leadership in Microsoft’s Developer Division.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/Silverlight/Install.aspx"&gt;Get Silverlight&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-2315982022653731810?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/2315982022653731810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=2315982022653731810' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2315982022653731810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2315982022653731810'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/09/nothing-beats-shipping-silverlight-10.html' title='Nothing beats shipping: Silverlight 1.0 is here!'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5456820776125440674</id><published>2007-08-21T11:06:00.000-07:00</published><updated>2007-08-21T11:32:12.903-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MsDewey'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Tafiti'/><title type='text'>Tafiti - Search Visualization with Silverlight</title><content type='html'>Microsoft today announced the launch of &lt;a href="http://www.tafiti.com"&gt;Tafiti&lt;/a&gt;, an experimental web site showcasing a different take on the &lt;a href="http://www.live.com"&gt;Live Search&lt;/a&gt; experience. The site "helps people use the Web for research that spans multiple queries and sessions by helping them visualize, store and share the result." While the search is powered by the Live Search engine, the client experience is built on &lt;a href="http://www.microsoft.com/silverlight"&gt;Silverlight&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;With Tafiti and &lt;a href="http://www.msdewey.com"&gt;Ms. Dewey&lt;/a&gt; before it, it is interesting to see development teams at Microsoft move out of the rut of the run-of-the-mill search interface and experiment with specialized usage scenarios with richer visualizations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5456820776125440674?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5456820776125440674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5456820776125440674' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5456820776125440674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5456820776125440674'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/08/tafiti-search-visualization-with.html' title='Tafiti - Search Visualization with Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5764056805537603560</id><published>2007-08-11T19:21:00.000-07:00</published><updated>2007-08-11T19:50:10.885-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='ComponentOne'/><title type='text'>Silverlight 1.1 controls from ComponentOne</title><content type='html'>&lt;a href="http://labs.componentone.com/"&gt;ComponentOne Labs&lt;/a&gt; features a suite of over 30 UI controls and components for Silverlight 1.1. This is an impressive list covering the gamut with buttons, text controls, lists, date pickers and layout containers. Apparently charting controls and grid are in the works. You can play with these controls on &lt;a href="http://labs.componentone.com/Sapphire/" title="Silverlight 1.1 controls from ComponentOne"&gt;their slick gallery&lt;/a&gt;. I'm very impressed. &lt;br /&gt;&lt;br /&gt;My team shipped a set of &lt;a href="http://nerddawg.blogspot.com/2007/05/silverlight-ui-controls.html" title="Silverlight 1.1 UI Controls"&gt;sample UI controls&lt;/a&gt; with the &lt;a href="http://go.microsoft.com/fwlink/?LinkID=89145&amp;clcid=0x409"&gt;Silverlight 1.1 Alpha SDK&lt;/a&gt; building on the platform's basic foundations for control extensibility. I've been pleasantly surprised by the the sorts of things the community has done with what can only be kindly referred to as rudimentary support in the platform. As Silverlight 1.1 evolves, you will see the platform provide a lot of the building blocks such as robust keyboard/input support, a layout system, basic UI controls and more. The possibilities are endless. Of course, there's still a lot to get done. If you've read this far, you probably care. &lt;a href="http://silverlight.net/forums/" title="Silverlight discussions and forums"&gt;Please tell us&lt;/a&gt; about your experiences building RIAs using Silverlight and what you'd like to see in the platform and the framework.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5764056805537603560?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5764056805537603560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5764056805537603560' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5764056805537603560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5764056805537603560'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/08/silverlight-11-controls-from.html' title='Silverlight 1.1 controls from ComponentOne'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-3486897809507566505</id><published>2007-08-08T06:05:00.000-07:00</published><updated>2007-08-08T06:25:26.248-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='756'/><category scheme='http://www.blogger.com/atom/ns#' term='Barry Bonds'/><category scheme='http://www.blogger.com/atom/ns#' term='Major League Baseball'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Home Run'/><title type='text'>Barry Bonds hits 756th homer</title><content type='html'>Barry Bonds hit his 756th home run last night passing Hank Aaron's record. In terms of records in baseball, this is probably the single most important one, earning anyone that holds it the arguable distinction of being the &lt;em&gt;greatest player of all time&lt;/em&gt;. As a San Francisco Giants fan with little to boast about thus far, I am going to savor this moment for a long time. &lt;br /&gt;&lt;a href="http://mlb.mlb.com/news/article.jsp?ymd=20070806&amp;content_id=2133618&amp;vkey=news_mlb&amp;fext=.jsp&amp;c_id=mlb"&gt;Here's the video of the moment&lt;/a&gt;... in Silverlight, courtesy of Major League Baseball.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-3486897809507566505?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/3486897809507566505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=3486897809507566505' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3486897809507566505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3486897809507566505'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/08/barry-bonds-hits-756th-homer.html' title='Barry Bonds hits 756th homer'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-2464004863155573461</id><published>2007-07-30T09:26:00.001-07:00</published><updated>2007-07-30T09:31:01.915-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight 1.0 Release Candidate</title><content type='html'>&lt;p&gt;I am happy to announce the availability of Silverlight 1.0 RC. Much of our team has been&amp;nbsp;working on this heads-down for the past few weeks. For those not familiar with (Microsoft) pre-release software nomenclature, an RC is the last major milestone before the final release of a product. I think with this RC we have a great solution for building media-rich experiences that span browsers and platforms.&lt;/p&gt; &lt;p&gt;You can get the runtime &lt;a title="Download Silverlight" href="http://www.microsoft.com/silverlight/downloads.aspx"&gt;here&lt;/a&gt; and &lt;a title="Changes between Silverlight 1.0 Beta and RC" href="http://folders.live.com/self.aspx/kocj18oD+kQ/Silverlight/Silverlight%201.0%20SDK%20RC%20Preview.zip"&gt;here's&lt;/a&gt; information on what's changed between Silverlight 1.0 Beta and now. The Silverlight &lt;a href="http://www.microsoft.com/silverlight"&gt;product&lt;/a&gt; and &lt;a href="http://silverlight.net/"&gt;community&lt;/a&gt; sites&amp;nbsp;both have updated content. If you are a designer or developer, then you might want to look at the downloads page on the Silverlight.net community site for tools, documentation and SDK support, including info on Expression Blend 2 August Preview. This Silverlight 1.0 RC release comes on the heels of the twin releases of &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx"&gt;Visual Studio 2008 Beta 2&lt;/a&gt; and &lt;a href="http://go.microsoft.com/?linkid=7171923"&gt;.NET Framework 3.5 Beta 2&lt;/a&gt;. Kudos to all the teams involved in this. &lt;/p&gt; &lt;p&gt;The RC has breaking changes from the previous releases. There are also a few new features like support for accessing the root element via silverlightPlugin.content.root for one. This was a frequent ask on the &lt;a href="http://silverlight.net/forums/"&gt;Silverlight forums&lt;/a&gt; and we were&amp;nbsp;glad to oblige.&lt;/p&gt; &lt;p&gt;&lt;em&gt;This post had been sitting in my &lt;a href="http://writer.live.com"&gt;Live Writer&lt;/a&gt; app since Friday and I only just got a chance to hit the shiny blue Publish button. &lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-2464004863155573461?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/2464004863155573461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=2464004863155573461' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2464004863155573461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2464004863155573461'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/07/silverlight-10-release-candidate.html' title='Silverlight 1.0 Release Candidate'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5127582730471214140</id><published>2007-06-21T09:57:00.000-07:00</published><updated>2007-06-21T10:08:30.820-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Expression Blend'/><title type='text'>nibbles: snack tutorials for hungry designers</title><content type='html'>&lt;a href="http://www.nibblestutorials.net"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_vO3QC5qlK78/RnqwBVC-W9I/AAAAAAAAABc/HMM-g87DDA0/s400/nibbles.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5078565066689633234" /&gt;&lt;/a&gt;&lt;br /&gt;Celso Gomes has a new site up called &lt;a href="http://www.nibblestutorials.net/"&gt;&lt;strong&gt;nibbles&lt;/strong&gt;: snack tutorials for hungry designers&lt;/a&gt;. &lt;br /&gt;In his words: &lt;blockquote&gt;&lt;em&gt;The concept of nibbles is simple: snack tutorials for hungry designers. The tutorials will teach a few steps at a time, so they will be short and easy to follow - the perfect creative snack.&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;There are a few tutorials on using Expression Blend and Silverlight already up, with content on Blend and WPF coming soon. New additions will be announced on &lt;a href="http://blog.nibblestutorials.net/"&gt;the &lt;strong&gt;nibbles&lt;/strong&gt; blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5127582730471214140?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5127582730471214140/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5127582730471214140' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5127582730471214140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5127582730471214140'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/06/nibbles-snack-tutorials-for-hungry.html' title='nibbles: snack tutorials for hungry designers'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vO3QC5qlK78/RnqwBVC-W9I/AAAAAAAAABc/HMM-g87DDA0/s72-c/nibbles.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-4680041284963793816</id><published>2007-06-14T16:39:00.000-07:00</published><updated>2007-06-14T17:12:22.262-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight links</title><content type='html'>&lt;a href="http://blogs.msdn.com/jstegman"&gt;Joe&lt;/a&gt; has a comprehensive &lt;a href="http://blogs.msdn.com/jstegman/archive/2007/06/06/more-v-1-0-changes.aspx"&gt;list of breaking changes between the 1.0 Beta and the forthcoming 1.0 RTW release of Silverlight&lt;/a&gt;. It's a small list but the changes were mostly requested by the community via forums and 1:1 interactions. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://vivekdalvi.wordpress.com"&gt;Vivek&lt;/a&gt; has been blogging up a storm in this past couple months &lt;a href="http://vivekdalvi.wordpress.com/tag/silverlight"&gt;on Silverlight&lt;/a&gt; topics. Some good posts there on his experience building a sample search app using Silverlight, a hyperlink control etc. (Thanks to &lt;a href="http://www.laurenlavoie.com"&gt;Lauren&lt;/a&gt; for the tip)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-4680041284963793816?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/4680041284963793816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=4680041284963793816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4680041284963793816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4680041284963793816'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/06/silverlight-links.html' title='Silverlight links'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-4756515773007526749</id><published>2007-06-14T16:25:00.000-07:00</published><updated>2007-08-10T19:26:47.614-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Outlook 2007'/><title type='text'>Outlook 2007 look and feel with WPF</title><content type='html'>Ronnie Saurenmann, one of our architect evangelists in Switzerland, sent a link (via email) to a Hands-on Lab (HOL) on how to build an &lt;a href="http://office.microsoft.com/en-us/outlook"&gt;Outlook 2007&lt;/a&gt; UI look and feel using Windows Presentation Foundation. He says this was done &lt;em&gt;"90% in Blend and 10% manual XAML"&lt;/em&gt; tweaking. There's an &lt;a href="http://www.00001001.ch/download/HOL/WPF_XBAP/OutlookWPF/OutlookUI Browser.xbap"&gt;XBAP demo of the app&lt;/a&gt; in case you want to see the results, along with a &lt;a href="http://www.00001001.ch/download/HOL/WPF/Outlook_HOL_WPF.pdf"&gt;lab manual&lt;/a&gt; with step-by-step details and &lt;a href="http://www.00001001.ch/download/HOL/WPF/Outlook_HOL_WPF_projects.zip"&gt;sample source code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update:&lt;/strong&gt; Fixed source code link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-4756515773007526749?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/4756515773007526749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=4756515773007526749' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4756515773007526749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4756515773007526749'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/06/outlook-2007-look-and-feel-with-wpf.html' title='Outlook 2007 look and feel with WPF'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-6662662211691928014</id><published>2007-06-14T16:18:00.000-07:00</published><updated>2007-06-14T16:21:36.697-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='XAML'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Why is XAML case-sensitive?</title><content type='html'>In short, because &lt;a href="http://msdn2.microsoft.com/en-us/library/ms752059.aspx"&gt;XAML&lt;/a&gt; is XML, and XML is case-sensitive. Rob Relyea, fellow program manager and owner of the XAML specification at Microsoft &lt;a href="http://rrelyea.spaces.live.com/Blog/cns!167AD7A5AB58D5FE!2055.entry"&gt;explains&lt;/a&gt; with details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-6662662211691928014?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/6662662211691928014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=6662662211691928014' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6662662211691928014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6662662211691928014'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/06/why-is-xaml-case-sensitive.html' title='Why is XAML case-sensitive?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-1336432148177927865</id><published>2007-06-14T13:18:00.000-07:00</published><updated>2007-06-14T13:33:25.910-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='SuperFetch'/><category scheme='http://www.blogger.com/atom/ns#' term='Safari'/><category scheme='http://www.blogger.com/atom/ns#' term='Apple'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Joel Spolsky's brush with Vista's SuperFetch</title><content type='html'>In &lt;a href="http://www.joelonsoftware.com/items/2007/06/11.html"&gt;a scathing post on the new Safari 3 for Windows&lt;/a&gt;, Joel remarks how slow the browser is while starting up. He likens Apple's performance claims as reality distortion, but later makes an update saying:&lt;blockquote&gt;&lt;em&gt;The more I run Safari on Vista, the faster it launches. Am I hallucinating? Is there a cosmic force that means just when I complain about Safari taking 57 seconds to launch, as soon as that complaint is made public, it launches much more quickly? Am I going insane? Or is someone playing a clever prank on me?&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;Well Joel, you're not going insane. Ironically this is Microsoft's Windows Vista coming to Safari's rescue. You see, Windows Vista has a little known feature called &lt;a href="http://www.microsoft.com/windows/products/windowsvista/features/details/superfetch.mspx"&gt;SuperFetch&lt;/a&gt;, which&lt;blockquote&gt;&lt;em&gt;enables programs and files to load much faster than they would on Windows XP–based PCs.&lt;br /&gt;&lt;br /&gt;When you're not actively using your computer, background tasks—including automatic backup programs and antivirus scans—run when they will least disturb you. These background tasks can take up system memory space that your programs had been using. On Windows XP–based PCs, this can slow progress to a crawl when you attempt to resume work.&lt;br /&gt;&lt;br /&gt;SuperFetch monitors which applications you use the most and preloads these into your system memory so they'll be ready when you need them. Windows Vista also runs background programs, like disk defragmenting and Windows Defender, at low priority so that they can do their job but your work always comes first.&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://channel9.msdn.com/showpost.aspx?postid=242429"&gt;Windows team has figured out&lt;/a&gt; that the more you use something, the more you must like it and the easier and faster it should be to load. But you won't see that in a Microsoft ad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1336432148177927865?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1336432148177927865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1336432148177927865' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1336432148177927865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1336432148177927865'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/06/joel-spolskys-brush-with-vistas.html' title='Joel Spolsky&apos;s brush with Vista&apos;s SuperFetch'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-6842462531442846583</id><published>2007-06-06T08:19:00.000-07:00</published><updated>2007-06-06T08:49:35.933-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Darfur'/><title type='text'>Eyes On Darfur</title><content type='html'>Amnesty International's &lt;a href="http://www.eyesondarfur.com"&gt;Eyes On Darfur&lt;/a&gt; project just went live. It uses satellite imagery to get a neighborhood watch going over 12 vulnerable villages in Darfur. The idea being that with the eyes of the world on Darfur, the repressionist establishment and its cohorts there would not go about business as usual. &lt;br /&gt;&lt;br /&gt;The project claims to leverage &lt;em&gt;"the power of high-resolution satellite imagery to provide unimpeachable evidence of the atrocities being committed in Darfur - enabling action by private citizens, policy makers and international courts. Eyes On Darfur also breaks new ground in protecting human rights by allowing people around the world to literally "watch over" and protect twelve intact, but highly vulnerable, villages using commercially available satellite imagery." &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;There's much to be said about the low resolution images. But this is &lt;a href="http://savedarfur.org"&gt;a cause&lt;/a&gt; that is dear to Ashley and I, and we're happy to see Amnesty do this if only to increase awareness. There's another project that's been in the works for a while and I hope to talk about that soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-6842462531442846583?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/6842462531442846583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=6842462531442846583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6842462531442846583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6842462531442846583'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/06/eyes-on-darfur.html' title='Eyes On Darfur'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-4714873514808806755</id><published>2007-06-05T18:06:00.001-07:00</published><updated>2009-05-02T18:51:11.192-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Gears'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Google Gears and Silverlight</title><content type='html'>&lt;p&gt;Last week Google announced an early&amp;nbsp;beta of &lt;a href="http://gears.google.com/"&gt;Gears&lt;/a&gt;, a &lt;em&gt;"browser extension that enables web applications to provide offline functionality using following JavaScript APIs:&lt;/em&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;Store and serve application resources locally&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Store data locally in a fully-searchable relational database&lt;/em&gt;&lt;/li&gt; &lt;li&gt;&lt;em&gt;Run asynchronous Javascript to improve application responsiveness"&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I figured that meant it was an automatic fit within a &lt;a href="http://silverlight.net/"&gt;Silverlight&lt;/a&gt; application. So, as a proof of concept I decided to tweak the &lt;a href="http://code.google.com/apis/gears/samples/hello_world_database.html"&gt;Simple Database Demo&lt;/a&gt; and integrate Silverlight content into it. The results are &lt;a title="Silverlight and Google Gears example" href="http://www.nerddawg.members.winisp.net/SilverGears/"&gt;here for you to see&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Thanks to how Google and Microsoft architected their respective products, that was 5 minutes of effort at most. You can choose your browsers View Source option on that example and see how script interacts with the Gears APIs and tweaks XAML in Silverlight. &lt;/p&gt; &lt;p&gt;If you play with Gears and Silverlight some more and create something cool, drop me a comment.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update 1&lt;/strong&gt;: &lt;a href="http://en.wikipedia.org/wiki/Danny_Thorpe"&gt;Danny Thorpe&lt;/a&gt; &lt;a href="http://blogs.msdn.com/dthorpe/archive/2007/05/31/quot-undisclosed-browser-technology-quot.aspx"&gt;talks about&lt;/a&gt; his founding work on Gears whilst at Google.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update 2&lt;/strong&gt;: Fixed broken link to SilverGears sample.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update 3&lt;/strong&gt;: Fixed links again. Due to some issues with the hosting service for the "SilverGears" sample, I've moved it to a new host. I really appreciate Mike and Chris for hosting it on simplegeek.com thus far.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update 4&lt;/strong&gt; (May 02, 2009): Those of you searching for information on local persistence store in Silverlight may want to see &lt;a title="local persistence store in Silverlight" href="http://nerddawg.blogspot.com/2009/04/silverlight-out-of-browser-apps-local.html"&gt;this post&lt;/a&gt; which also looks at offline/out-of-browser support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-4714873514808806755?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/4714873514808806755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=4714873514808806755' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4714873514808806755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4714873514808806755'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/06/google-gears-and-silverlight.html' title='Google Gears and Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-2702331878618998635</id><published>2007-06-05T13:02:00.000-07:00</published><updated>2007-06-05T13:13:02.011-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Branding'/><category scheme='http://www.blogger.com/atom/ns#' term='Olympics'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='London'/><title type='text'>Everybody Hates The London Olympics Logo</title><content type='html'>&lt;a href="http://www.london2012.com"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_vO3QC5qlK78/RmXBx1C-W8I/AAAAAAAAABU/QtvP6GQBom0/s400/OlympicsLondon2012logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5072673617100037058" /&gt;&lt;/a&gt;&lt;br /&gt;Not me though. If you've built a brand that &lt;a href="http://www.bbc.co.uk/london/content/articles/2007/06/04/2012_new_logo_feature.shtml"&gt;everybody's suddenly talking about&lt;/a&gt;, can it be a bad thing? [Tip: look at the size of the thumb on your vertical scrollbar after you jump through that hyperlink.] &lt;br /&gt;&lt;br /&gt;Although the use of a tangram-like style evokes images of broken glass or even an athlete doubled over in pain, it seems to spell out "2012", the year of the Olympics in question.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-2702331878618998635?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/2702331878618998635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=2702331878618998635' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2702331878618998635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2702331878618998635'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/06/everybody-hates-london-olympics-logo.html' title='Everybody Hates The London Olympics Logo'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vO3QC5qlK78/RmXBx1C-W8I/AAAAAAAAABU/QtvP6GQBom0/s72-c/OlympicsLondon2012logo.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-3394686165346916211</id><published>2007-06-01T13:25:00.000-07:00</published><updated>2007-06-01T13:34:21.026-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Surface'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Surface As Inspiration</title><content type='html'>&lt;a href="http://blogs.msdn.com/delay/default.aspx"&gt;David Anson&lt;/a&gt; outdoes himself yet again. Check out his &lt;a href="http://blogs.msdn.com/delay/archive/2007/06/01/silverlight-surface-demonstration-silverlight-implementation-of-surface-s-photo-table-ui.aspx"&gt;Silverlight Surface demo&lt;/a&gt;. Source code included.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-3394686165346916211?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/3394686165346916211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=3394686165346916211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3394686165346916211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3394686165346916211'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/06/surface-as-inspiration.html' title='Surface As Inspiration'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-4181058243151758017</id><published>2007-05-30T09:55:00.000-07:00</published><updated>2007-05-30T10:39:41.721-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Surface'/><category scheme='http://www.blogger.com/atom/ns#' term='PlayTable'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft Surface: What WPF Can Do For You</title><content type='html'>&lt;a href="http://www.microsoft.com/surface"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_vO3QC5qlK78/Rl22ev4YYSI/AAAAAAAAABM/IEdglNxhRpE/s400/MicrosoftSurface.png" border="0" alt="Microsoft Surface" id="BLOGGER_PHOTO_ID_5070409394854322466" /&gt;&lt;/a&gt;&lt;br /&gt;Today &lt;a href="http://www.microsoft.com/presspass/press/2007/may07/05-29MSSurfacePR.mspx"&gt;Microsoft announced&lt;/a&gt; the &lt;a href="http://www.microsoft.com/surface"&gt;Surface&lt;/a&gt;, a new line of consumer products that turn &lt;em&gt;"an ordinary tabletop into a vibrant, dynamic surface that provides effortless interaction with all forms of digital content through natural gestures, touch and physical objects. Beginning at the end of this year, consumers will be able to interact with Surface in hotels, retail establishments, restaurants and public entertainment venues." &lt;/em&gt;If the videos on the &lt;a href="http://www.microsoft.com/surface/"&gt;Surface &lt;/a&gt;website seem impressive, you haven't even scratched the surface yet. Using the real product is way cooler!&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;The Surface team has thus far been operating under the radar. I'm proud to say that the device runs a variant of Windows Vista and uses Windows Presentation Foundation (WPF) for its user experience. It shows how WPF can be a game changer when you exploit its power. It is understandable that the first generation of the product - shipping in the second half of 2007 - is out of reach of the average consumer, and is focused on businesses. I expect that in a couple iterations, component prices, usage scenarios and its economic network will work their way to the mainstream. We've seen that story &lt;a href="http://en.wikipedia.org/wiki/History_of_computer"&gt;before&lt;/a&gt;. These are good tidings for designers and developers; &lt;a href="http://rrelyea.spaces.live.com/Blog/cns!167AD7A5AB58D5FE!1994.entry"&gt;as Rob points out&lt;/a&gt;, this is a &lt;em&gt;"nice device to leverage some of your WPF programming skills on!".&lt;/em&gt; This is a great time to pick up and hone those WPF, Silverlight and Expression tools skills.&lt;br /&gt;&lt;br /&gt;Congratulations to our friends in the Surface team on the public unveiling of a fantastic product.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-4181058243151758017?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/4181058243151758017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=4181058243151758017' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4181058243151758017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4181058243151758017'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/05/microsoft-surface-what-wpf-can-do-for.html' title='Microsoft Surface: What WPF Can Do For You'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vO3QC5qlK78/Rl22ev4YYSI/AAAAAAAAABM/IEdglNxhRpE/s72-c/MicrosoftSurface.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-1558771216274880875</id><published>2007-05-19T17:51:00.001-07:00</published><updated>2007-05-19T17:57:25.120-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Beginner'/><category scheme='http://www.blogger.com/atom/ns#' term='Learning'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='reflector'/><title type='text'>View Source - Giving It Back with Silverlight</title><content type='html'>&lt;p&gt;Much of&amp;nbsp;my HTML, Javascript and CSS learning came by way of the View Source context menu option in Netscape Navigator and Internet Explorer with some tinkering on (the old) Geocities. My experience in that domain is hardly unique. And I had the opportunity to learn from the best; to sit on the shoulder of giants, as it were. I'd posit that the acceptance, popularity and ubiquity of the universal web is in large part due to &lt;em&gt;that&lt;/em&gt; "openness" and the ethic of sharing. By keeping XAML in &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt; a mere step away from your piqued curiosity, we're actively trying to make it easier to learn from the best.&lt;/p&gt; &lt;p&gt;Ernie Booth takes away what little remnants of pain existed on the newbie programmer's path to Silverlight nirvana with his excellent plug-in for Lutz Roeder's Reflector. Check out Ernie's post entitled &lt;a href="http://blogs.msdn.com/ebooth/archive/2007/05/19/view-source-reflector-tool-for-net-silverlight-sites.aspx"&gt;View Source Reflector tool for .NET Silverlight sites&lt;/a&gt;. A must-have tool for the Silverlight developer.&lt;/p&gt; &lt;p&gt;Needless to say, should you care about protecting your IP, the tool doesn't circumvent any existing safeguards you have in place.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1558771216274880875?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1558771216274880875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1558771216274880875' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1558771216274880875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1558771216274880875'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/05/view-source-giving-it-back-with.html' title='View Source - Giving It Back with Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-1155795950696600301</id><published>2007-05-18T11:29:00.000-07:00</published><updated>2007-05-18T11:45:52.449-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Popfly'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Mashup'/><title type='text'>We Popfly High, No Lie, You Know It</title><content type='html'>With what it states as "another piece in [Microsoft's] company-wide outreach in helping non-professional developers build everything from Xbox games to Robotics to custom Web applications using Windows Home Server", Microsoft today announced a new service called &lt;a href="http://www.popfly.com"&gt;Popfly&lt;/a&gt;.&lt;a href="http://www.popfly.com"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_vO3QC5qlK78/Rk30A_4YYRI/AAAAAAAAABE/23NvOsqFaLk/s400/MicrosoftPopfly_logo.jpg" border="0" alt="Microsoft Popfly" id="BLOGGER_PHOTO_ID_5065973453846765842" /&gt;&lt;/a&gt;It comprises a set of online visual tools so non-programmers can create web experiences, and a social aspect involving a community watering hole where people and view, share, remix and rate content. And did I mention Popfly was built using &lt;a href="http://silverlight.net"&gt;Silverlight&lt;/a&gt;? Popfly is currently accepting limited participants for its private alpha.&lt;br /&gt;&lt;br /&gt;Personally speaking, &lt;a href="http://www.eweek.com/article2/0,1895,1912032,00.asp"&gt;Soma's and John Montgomery's talk&lt;/a&gt; about extending tools like Visual Studio to the &lt;a href="http://dev.live.com/"&gt;Live world&lt;/a&gt;, is starting to make sense. Of course, this is just a step in that direction. John was kind enough to give us on the Silverlight team a sneak peek at Popfly at a Friday Beer Bash some weeks ago. As a fan of &lt;a href="http://en.wikipedia.org/wiki/Pipeline_%28Unix%29"&gt;UNIX Pipes programming paradigm&lt;/a&gt;, I was immediately fascinated by some aspects of the Popfly Creator. We'd have loved to have shown this off circa Mix 07, but John and team rightly were looking at &lt;a href="http://makerfaire.com/"&gt;Maker Faire&lt;/a&gt; as the correct avenue to showcase this. &lt;br /&gt;&lt;br /&gt;See one such Popfly creation in action &lt;a href="http://blogs.msdn.com/johnmont/archive/2007/05/18/welcome-to-popfly.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1155795950696600301?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1155795950696600301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1155795950696600301' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1155795950696600301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1155795950696600301'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/05/we-popfly-high-no-lie-you-know-it.html' title='We Popfly High, No Lie, You Know It'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vO3QC5qlK78/Rk30A_4YYRI/AAAAAAAAABE/23NvOsqFaLk/s72-c/MicrosoftPopfly_logo.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-8063395535882723439</id><published>2007-05-17T16:15:00.001-07:00</published><updated>2007-05-17T21:59:24.858-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parser'/><category scheme='http://www.blogger.com/atom/ns#' term='name scope'/><category scheme='http://www.blogger.com/atom/ns#' term='Namescope'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><title type='text'>Namescopes in Silverlight</title><content type='html'>When you start naming things, you quickly realize that you need a method to disambiguate or resolve conflicts between names. When your sister cried out "Mom! Pete flushed the goldfish down the toilet!", your mom knew the "Pete" your sis was referring to was you, not the kid down the street. That's because she used an implicit name scope to infer.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What is a name scope?&lt;/strong&gt;&lt;br /&gt;Nick Kramer &lt;a href="http://blogs.msdn.com/nickkramer/archive/2006/06/06/618514.aspx"&gt;describes a name scope&lt;/a&gt; or namescope thusly:&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;"In almost all programming languages, names are not globally unique, they are unique only relative to other names in the same name scope. In C++ and C#, a name scope is roughly what goes between curly braces -- { }. And in C++ and C#, namescopes nest -- if the compiler can't find the name in the nearest namescope { }, it will look in the containing namescope.&lt;br /&gt;&lt;br /&gt;Xaml names have many of the same issues. In &amp;lt;Button Name="foo"&amp;gt;, foo is not unique to the whole program, there could be other xaml files with the same name. And you can instantiate that xaml file multiple times (e.g., multiple windows). "&lt;br /&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Nick goes on to explain the role namescopes play in WPF. They kinda play a similar role in Silverlight.&lt;br /&gt;&lt;br /&gt;Okay so we now know that a namescope is a logical grouping of named elements. Further, the "root" or ownership of a namescope is tied to a specific element and all of its named children fall into that namescope unless a child defines another namescope. This element is considered having the ownership of the namescope.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;When do I care?&lt;/strong&gt;&lt;br /&gt;A namescope is typically created when the root visual is set. Well, in Silverlight there's a couple ways you, the app developer, can create elements in a separate namescope. One way is through a createFromXaml call in Javascript where you set the last parameter to true. The other is when you instantiate a Silverlight 1.1 Alpha control (see &lt;a href="http://go.microsoft.com/fwlink/?LinkID=89145&amp;clcid=0x409"&gt;the SDK&lt;/a&gt;). In the latter case, the ControlBase class constructor makes a call to InitializeFromXaml in System.Windows.Controls.Control - which in a way is the managed equivalent of making a createFromXaml(xaml, createNamescope) call. You can use that approach for your custom controls.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;: And oh, you also care when you do a FindName(). That method only walks the tree in the namescope of the element on which FindName was called. For instance, of you do rootCanvas.FindName("someElementName") you're searching for "someElementName" in the namescope of the rootCanvas element. Another element with the same name but different namescope is invisible at this time.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What types of namescopes exist?&lt;/strong&gt;&lt;br /&gt;&lt;p style="MARGIN-LEFT: 1pt"&gt;The namescope created with the root visual is called the default namescope. When you call createFromXaml and tell it to create a namescope this is called a private namescope. If you call createFromXaml and do not create a namescope a temporary namescope is created&lt;br /&gt;&lt;br /&gt;All elements content created in the visual tree will reside inside the namescope. Names defined in the namescope will not conflict with other names outside of the namescope.&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_vO3QC5qlK78/Rkzj1f4YYQI/AAAAAAAAAA8/6hUxXFtFLAA/s1600-h/Namescopes.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5065674189115515138" style="DISPLAY: block; MARGIN: 0px auto 10px; CURSOR: hand; TEXT-ALIGN: center" alt="Silverlight Namescopes" src="http://4.bp.blogspot.com/_vO3QC5qlK78/Rkzj1f4YYQI/AAAAAAAAAA8/6hUxXFtFLAA/s400/Namescopes.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;Default namescope &lt;/strong&gt;&lt;br /&gt;A default namescope is automatically created when the root visual is created. The default namescope can be replaced by resetting the main visual tree.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Private namescope &lt;/strong&gt;&lt;br /&gt;A private namescope is the permanent name scoping that is created. A private namescope has the restrictions mentioned earlier in that it cannot be dissolved – it is always associated with the element that owns the private namescope. Named/un-named elements can be added/remove from the private namescope though.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Temporary Namescope &lt;/strong&gt;&lt;br /&gt;A temporary namescope is created any time you call createFromXaml and have an element tree fragment not associated with the main tree. A temporary namescope is different from a private namescope in that when you add the element tree fragment to another tree the temporary namescope is dissolved. This "addition" can be by using a collection's Add method or by setting a property such as a Rectangle's Fill.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-8063395535882723439?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/8063395535882723439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=8063395535882723439' title='43 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8063395535882723439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8063395535882723439'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/05/namescopes-in-silverlight.html' title='Namescopes in Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_vO3QC5qlK78/Rkzj1f4YYQI/AAAAAAAAAA8/6hUxXFtFLAA/s72-c/Namescopes.png' height='72' width='72'/><thr:total>43</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-4823158264987740602</id><published>2007-05-17T11:34:00.000-07:00</published><updated>2007-05-17T11:39:41.918-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><category scheme='http://www.blogger.com/atom/ns#' term='Layout'/><title type='text'>A Layout System and Containers for Silverlight 1.1 Alpha</title><content type='html'>Dave Relyea's first blog post showcases some work he'd been recently doing to build a layout system, several layout containers and some layout-aware controls -- all in user code. Ooh, but that's not all. Dave cranked up a pretty cool TextBox control as well. See &lt;a href="http://blogs.msdn.com/devdave/archive/2007/05/17/silverlight-1-1-alpha-layout-system-and-controls-framework.aspx"&gt;Silverlight 1.1 Alpha Layout System and Controls Framework&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can use this until the Silverlight 1.1 platform natively supports layout and editing (which is... soon).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-4823158264987740602?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/4823158264987740602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=4823158264987740602' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4823158264987740602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4823158264987740602'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/05/layout-system-and-containers-for.html' title='A Layout System and Containers for Silverlight 1.1 Alpha'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-3597306067320077957</id><published>2007-05-15T10:26:00.000-07:00</published><updated>2007-05-15T10:38:35.129-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Beginner'/><category scheme='http://www.blogger.com/atom/ns#' term='Learning'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>New To Programming?</title><content type='html'>&lt;a href="http://msdn.microsoft.com/vstudio/express/beginner/"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_vO3QC5qlK78/RkntcAcFBJI/AAAAAAAAAA0/AwR6jVFEwZI/s400/BeginnerDeveloperLearningCenter.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5064840321364722834" /&gt;&lt;/a&gt;&lt;br /&gt;Microsoft's &lt;a href="http://msdn.microsoft.com/vstudio/express/beginner/"&gt;Beginner Developer learning center&lt;/a&gt; has great resources for beginner programmers intending to learn web and desktop programming basics. There's also a &lt;a href="http://msdn.microsoft.com/vstudio/express/beginner/" title="Programming resources for kids"&gt;Kids Corner&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-3597306067320077957?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/3597306067320077957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=3597306067320077957' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3597306067320077957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3597306067320077957'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/05/new-to-programming.html' title='New To Programming?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vO3QC5qlK78/RkntcAcFBJI/AAAAAAAAAA0/AwR6jVFEwZI/s72-c/BeginnerDeveloperLearningCenter.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-8760082475070951381</id><published>2007-05-03T14:59:00.001-07:00</published><updated>2009-04-01T20:29:40.073-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Controls'/><title type='text'>Silverlight UI Controls</title><content type='html'>&lt;p&gt;&lt;strong&gt;Update [Apr 2009]:&lt;/strong&gt; The post below is now obsolete. There is now a great ecosystem of UI controls for Silverlight. You can start with the &lt;a href="http://www.codeplex.com/Silverlight"&gt;Silverlight Toolkit&lt;/a&gt;, a Microsoft provided collection of Silverlight controls, components and utilities made available for your development with a permissive license (MSPL). Besides, there are excellent controls from ComponentOne, Telerik, Infragistics etc. There's also some good &lt;a href="http://msdn.microsoft.com/en-us/library/cc189048(vs.95).aspx"&gt;documentation on Silverlight Controls on MSDN&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;-----&lt;/p&gt;&lt;p&gt;If you've played with &lt;a title="Get Silverlight" href="http://silverlight.net/GetStarted/"&gt;Microsoft Silverlight 1.0 Beta or 1.1 Alpha&lt;/a&gt; bits, you've no doubt noticed that while there's Canvas, TextBlock and other such controls, there is no Button or ListBox or even layout elements like StackPanel or Grid. Rest assured, your UI development needs are always on our mind. &lt;/p&gt;&lt;p&gt;If you download the &lt;a href="http://go.microsoft.com/fwlink/?LinkID=89145&amp;amp;clcid=0x409"&gt;Silverlight 1.1 Alpha SDK&lt;/a&gt;, you'll see a UI controls package in there. You didn't think we'd leave you in the lurch, did you? Although it is very easy to whip up a Button control with XAML and some code in Silverlight, that detracts from your app building. To address this, we've released a modest set of controls in the Silverlight UI Controls package. These include:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Button&lt;/li&gt;&lt;li&gt;ScrollBar&lt;/li&gt;&lt;li&gt;ScrollViewer&lt;/li&gt;&lt;li&gt;Slider&lt;/li&gt;&lt;li&gt;ListBox&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Also included are a couple primitives like RepeatButton, Thumb and GripThumb.&lt;/p&gt;&lt;p&gt;All of the controls in that package are managed code controls i.e. they rely on Silverlight 1.1 Alpha and the CLR and Silverlight framework in it.&lt;/p&gt;&lt;p&gt;These controls currently sport the Silverlight "Dawn" look and feel. We're releasing source code for these controls so you can modify and customize them as appropriate. There is a readme file with additional information and the code is peppered with comments, all which the agile diehards are free to ignore, 'cause the code &lt;em&gt;is&lt;/em&gt; the documentation. The control behavior is in C# code-behind files, while the control templates, i.e. the visual aspects governing look and feel, are in XAML markup files. Another example of separating UI from behavior, as architecture astronauts have been telling us since the dawn of time.&lt;/p&gt;&lt;a href="http://1.bp.blogspot.com/_vO3QC5qlK78/RjpfBwcFBII/AAAAAAAAAAs/EFSwheARGNw/s1600-h/Silverlightv1.1Alpha_UIControls.png"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; DISPLAY: block; CURSOR: hand" id="BLOGGER_PHOTO_ID_5060461615091352706" border="0" alt="Silverlight 1.1 Alpha SDK - UI Controls" src="http://1.bp.blogspot.com/_vO3QC5qlK78/RjpfBwcFBII/AAAAAAAAAAs/EFSwheARGNw/s320/Silverlightv1.1Alpha_UIControls.png" /&gt;&lt;/a&gt; &lt;p&gt;Controls such as ScrollBar, ScrollViewer, ListBox and Slider are composed of other controls. We picked this mix because it accentuates the diversity of the control set and allows you - the designer or developer - to look at the source code and understand the Silverlight framework, the inter-dependencies between controls, and not to mention, the quirks in the control set arising from some features being absent in the 1.1 Alpha.&lt;/p&gt;&lt;p&gt;Please use these controls in your applications targeting Silverlight 1.1 Alpha. In fact, it should be pretty simple to take the XAML pieces, tie in some JavaScript and have all of this run on 1.0 Beta. But I'll leave that to the community.&lt;/p&gt;&lt;p&gt;As always, direct comments and bug reports on the UI controls to the &lt;a href="http://silverlight.net/forums"&gt;Silverlight Forums&lt;/a&gt;. If you have questions about the control roadmap or other considerations made while developing this set, drop me a line here.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-8760082475070951381?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/8760082475070951381/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=8760082475070951381' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8760082475070951381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8760082475070951381'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/05/silverlight-ui-controls.html' title='Silverlight UI Controls'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vO3QC5qlK78/RjpfBwcFBII/AAAAAAAAAAs/EFSwheARGNw/s72-c/Silverlightv1.1Alpha_UIControls.png' height='72' width='72'/><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-985135237814763434</id><published>2007-04-30T08:42:00.000-07:00</published><updated>2007-04-30T10:24:16.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='Mix07'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Meet Silverlight</title><content type='html'>Today at the Mix 07 conference, Microsoft is announcing a couple preview releases of &lt;a href="http://www.microsoft.com/silverlight"&gt;Silverlight&lt;/a&gt;. Silverlight v1.0 Beta is the next in series to the two community technology previews (CTPs) released with the codename "WPF/E".&lt;br /&gt;&lt;br /&gt;Silverlight v1.1 Alpha is a sneak peek at some future functionality. &lt;br /&gt;&lt;br /&gt;While it is unusual to have two separate pre-release trains for a product, we believe that there's nothing like real code and real samples to demonstrate our feature set, roadmap and intent. The team has been aggressively cranking out code, delivering key features with tight deadlines. Please download the builds, play with them, build apps and tell us what you think.&lt;br /&gt;&lt;br /&gt;Here's an incomplete list of new features or enhancements in Silverlight 1.0 Beta:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;VideoBrush  - Used to paint shapes and text with video content.&lt;/li&gt;&lt;li&gt;WMS streaming support&lt;/li&gt;&lt;li&gt;Media markers / script command support&lt;/li&gt;&lt;li&gt;Playlist support (ASX subset)&lt;/li&gt;&lt;li&gt;Improved video playback smoothness&lt;/li&gt;&lt;li&gt;Cleaned-up animation model&lt;ul&gt;&lt;li&gt;Animations now go in a Canvas.Resources block&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Support for downloading and unpacking .zip files&lt;/li&gt;&lt;li&gt;Support for cross-domain downloads&lt;/li&gt;&lt;li&gt;Improved text rendering&lt;/li&gt;&lt;li&gt;Ink support&lt;/li&gt;&lt;li&gt;Improved javascript programming&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Enum support&lt;/li&gt;&lt;li&gt;Better error handling&lt;/li&gt;&lt;li&gt;Support for delegates as event handlers&lt;/li&gt;&lt;li&gt;Sandboxed javascript mode&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Namescope support&lt;/li&gt;&lt;li&gt;New properties for UI manipulation:&lt;ul&gt;&lt;li&gt;Z-Index&lt;/li&gt;&lt;li&gt;Visibility&lt;/li&gt;&lt;li&gt;IsHitTestVisible&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Downloading fonts for TextBlock&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Silverlight v1.1 Alpha contains a flavor of .NET, with support for languages such as C# and VB and dynamic languages such as Python, Ruby, VBx etc. The v1.1 Alpha build is a superset that includes the functionality delivered in v1.0 Beta. Unlike v1.0 Beta, the v1.1 Alpha does not give you a Go Live license. We expect that you'll evaluate and explore it and give us feedback on what you don't like and what you'd like to see more of. &lt;a href="http://silverlight.net/"&gt;Get involved&lt;/a&gt;. &lt;a href="http://silverlight.net/forums/"&gt;We're listening&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/silverlight/downloads.aspx"&gt;Get Silverlight now!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-985135237814763434?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/985135237814763434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=985135237814763434' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/985135237814763434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/985135237814763434'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/04/meet-silverlight.html' title='Meet Silverlight'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5336219122765729701</id><published>2007-04-19T22:32:00.001-07:00</published><updated>2007-04-19T22:45:16.168-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='RIA'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Names'/><title type='text'>What does Silverlight mean to you?</title><content type='html'>&lt;p&gt;&lt;a href="http://blogs.msdn.com/mharsh/default.aspx"&gt;Mike Harsh&lt;/a&gt;, fellow program manager on the team and all-round great guy, was manning the Silverlight booth at the NAB Show, doing demos and talking to customers. &lt;a title="Mike Harsh on Silverlight at NAB" href="http://blogs.msdn.com/mharsh/archive/2007/04/19/silverlight-booth-at-nab.aspx"&gt;He says&lt;/a&gt;: &lt;em&gt;"I have never been involved with any technology that has this level of excitement and interest, and I’ve never given demos to so many people who’ve walked away with a smile on their faces. After seeing the demos it sinks in very quickly that Silverlight will let them do incredible things with their existing Windows Media assets using all their existing delivery infrastructure." &lt;/em&gt;Read that last statement carefully. It touches on what we think is the essence of Silverlight today.&lt;/p&gt;&lt;p&gt;&lt;a title="Dave Wolf from Cynergy on Silverlight" href="http://www.cynergysystems.com/blogs/page/davewolf?entry=wake_up_and_see_the"&gt;Dave Wolf from Cynergy says&lt;/a&gt;&lt;em&gt; "[The] entire RIA market just became real and it is about to explode, and it is thanks in large part to Microsoft and Silverlight... Microsoft just justified and legitimized RIA. That is HUGE."&lt;/em&gt; I think Dave makes a great point. With a player like Microsoft advocating the agenda, you will see the company's traditional audience of developers and decision makers in enterprises, take RIAs more seriously than they have. This adds to the momentum Adobe (and previously Macromedia) have already garnered. I think with companies like Adobe and Microsoft at the helm, we're at the beginnings of the RIA renaissance.&lt;/p&gt;&lt;p&gt;In that post, Dave also talks about the Microsoft penchant for project code names, but as an insider, I do not see that these names mean that much. Sure they're placeholders on specs, slide decks, share points and distribution list aliases. But that's about it. We laugh when the press and blogosphere influentials weave sinister stories out of these. What matters is action, not name. For clarity, "Sparkle" was never the code name for Silverlight (as some have suggested): it was "Jolt" to the development team and "WPF/E" to everybody else. "Sparkle" was the code name for Expression Blend, the design surface for WPF. I've lost count of the number of times I've chuckled when the tech trade press called Sparkle the Flash-killer. Yeah, like Picasa is the Photoshop killer. &lt;a href="http://nerddawg.blogspot.com/2006/03/enough-with-assaults-and-killings.html"&gt;Can we please stop with all the killer references?&lt;/a&gt;&lt;/p&gt;&lt;p&gt;All of this finally brings me to the core point I'm trying to make in this post. That is: &lt;strong&gt;don't believe the hype and the FUD&lt;/strong&gt;. We're going to announce more details on Silverlight features at the &lt;a href="http://www.visitmix.com"&gt;Mix 07&lt;/a&gt; conference. Pick up our next build (coming soon to &lt;a href="http://www.microsoft.com/silverlight"&gt;microsoft.com/silverlight&lt;/a&gt;), read the docs, play with the bits and the tools, ask questions on the &lt;a href="http://forums.microsoft.com/MSDN/default.aspx?ForumGroupID=318&amp;SiteID=1"&gt;Silverlight forums&lt;/a&gt;, engage with &lt;a href="http://silverlight.net"&gt;the community&lt;/a&gt; and &lt;strong&gt;make up your own mind&lt;/strong&gt;. And do let us know what you think. I'll trade a million articles in tech rags for one post on the forums or your blog where you candidly tell me and the team what we're doing wrong and where you'd like to see us go. Our plans are not set in stone. Silverlight is still pre-release software and there's much we can add and change in this and future versions. My team and I are not looking for toothy grins and thumbs-up signs. We're looking for honest critiques and feature requests. Got any?&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;PS: I cannot be at Mix 07 this year. I'll be taking it easy that week, but &lt;/span&gt;&lt;a title="Joe Stegman" href="http://blogs.msdn.com/jstegman/default.aspx"&gt;&lt;span style="font-size:85%;"&gt;Joe&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;, Vivek, &lt;/span&gt;&lt;a title="Nick Kramer" href="http://blogs.msdn.com/nickkramer"&gt;&lt;span style="font-size:85%;"&gt;Nick&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:85%;"&gt;, Mike and others from the team will be on hand to answer questions. &lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5336219122765729701?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5336219122765729701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5336219122765729701' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5336219122765729701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5336219122765729701'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/04/what-does-silverlight-mean-to-you.html' title='What does Silverlight mean to you?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5356191165991231948</id><published>2007-04-17T21:28:00.001-07:00</published><updated>2007-04-18T06:03:47.760-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Free Markets'/><category scheme='http://www.blogger.com/atom/ns#' term='Hybrid Cars'/><category scheme='http://www.blogger.com/atom/ns#' term='Benefits'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><category scheme='http://www.blogger.com/atom/ns#' term='Commute'/><title type='text'>The Hassle Free Commute as a Benefit</title><content type='html'>&lt;p&gt;California state no longer issues the decals that allows hybrid cars on carpool lanes even with low occupancy, but the decals are still good. The folks at &lt;a href="http://www.kbb.com"&gt;Kelley Blue Book&lt;/a&gt; [as heard on &lt;a href="http://www.npr.org/templates/story/story.php?storyId=9626745"&gt;NPR's All Things Considered&lt;/a&gt;] have discovered that people in the state are paying a premium of $4000 for hybrid cars with the now out-of-supply, tamper-resistant decals. Hmm, the free market is willing to pay four &lt;a title="Image of $1000 bill" href="http://en.wikipedia.org/wiki/Image:1000-2f.jpg"&gt;Grover Clevelands&lt;/a&gt; for the luxury of a hassle free commute. I've believed Google's bus service for its employees in the Bay Area was a great fringe benefit helping hire and retain good talent. We now have statistics to back the logical conclusion that people actually desire such a perk.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5356191165991231948?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5356191165991231948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5356191165991231948' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5356191165991231948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5356191165991231948'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/04/hassle-free-commute-as-benefit.html' title='The Hassle Free Commute as a Benefit'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-111728432111886888</id><published>2007-04-16T07:24:00.000-07:00</published><updated>2007-04-16T07:30:25.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Silverlight Trivia</title><content type='html'>&lt;p&gt;&lt;strong&gt;The name&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;We've been dropping little hints about the name for months now - the MIME type for the browser plug-in in the Feb CTP was &lt;code&gt;application/ag-plugin&lt;/code&gt; and the script instantiation used a &lt;code&gt;new agHost(...)&lt;/code&gt; call. &lt;strong&gt;Ag&lt;/strong&gt;&amp;nbsp; (short for Argentum) is the&amp;nbsp;symbol for &lt;a href="http://en.wikipedia.org/wiki/Silver"&gt;Silver&lt;/a&gt; in &lt;a href="http://en.wikipedia.org/wiki/Periodic_table"&gt;Mendeleev's Periodic Table of Chemical Elements&lt;/a&gt;.&lt;/p&gt; &lt;br /&gt;&lt;table cellspacing="0" cellpadding="2" width="100" border="5" unselectable="on"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="100" bgcolor="silver" &gt; &lt;p align="center"&gt;Silver&lt;br&gt;47&lt;br&gt;&lt;font size="5"&gt;Ag&lt;/font&gt;&lt;br&gt;107.8682&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The .NET connection&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Yes, Silverlight extends the reach of the CLR and .NET Framework to other platforms like the Mac! Details &lt;a href="http://www.visitmix.com"&gt;coming soon&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-111728432111886888?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/111728432111886888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=111728432111886888' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/111728432111886888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/111728432111886888'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/04/silverlight-trivia.html' title='Silverlight Trivia'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-538710487217675529</id><published>2007-04-16T07:15:00.000-07:00</published><updated>2007-04-16T07:24:22.950-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Whatever happened to "WPF/E"?</title><content type='html'>You can stop calling it "WPF/E" now. This morning, Microsoft announces&amp;nbsp;&lt;a href="http://www.microsoft.com/silverlight/"&gt;Microsoft Silverlight&lt;/a&gt;, a&amp;nbsp;new cross-browser, cross-platform technology for interactive media and rich applications. This is the technology formerly codenamed "WPF/E".&lt;br /&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_vO3QC5qlK78/RiOGn7FyNyI/AAAAAAAAAAk/SYqCLKKD9gw/s320/MicrosoftSilverlight_logo.gif" border="0" alt="Microsoft Silverlight logo" id="BLOGGER_PHOTO_ID_5054031227274802978" /&gt;&lt;br /&gt;I've been working on &lt;a href="http://www.microsoft.com/silverlight/"&gt;Silverlight&lt;/a&gt; features for&amp;nbsp;a few&amp;nbsp;months now and am excited about today's public announcement at the &lt;a href="http://www.nabshow.com/"&gt;NAB Conference&lt;/a&gt; in Las Vegas, NV. At the conference, Microsoft will reveal it's&amp;nbsp;brand and announce partner support for Silverlight. Then at the &lt;a href="http://www.visitmix.com/"&gt;Mix 07&lt;/a&gt; conference on April 30th,&amp;nbsp;the company&amp;nbsp;will unveil and discuss the breadth of the Silverlight developer and designer ecosystem. &lt;br /&gt;&lt;br /&gt;We live in interesting times.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-538710487217675529?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/538710487217675529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=538710487217675529' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/538710487217675529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/538710487217675529'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/04/whatever-happened-to.html' title='Whatever happened to &amp;quot;WPF/E&amp;quot;?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_vO3QC5qlK78/RiOGn7FyNyI/AAAAAAAAAAk/SYqCLKKD9gw/s72-c/MicrosoftSilverlight_logo.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-333228089155973096</id><published>2007-04-14T09:20:00.001-07:00</published><updated>2007-04-14T09:26:08.066-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ClickOnce'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Community College'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Courses'/><title type='text'>WPF College Courses</title><content type='html'>&lt;p&gt;I was happy to learn [via &lt;a href="http://thewpfblog.com/?p=100"&gt;Lee&lt;/a&gt;] that the &lt;a href="http://www.foothill.edu/"&gt;FootHill College of Los Altos, CA&lt;/a&gt; is offering introductory courses on Windows Presentation Foundation and other .NET technologies. The courses include one on .NET Deployment that I'm guessing (I couldn't find a&amp;nbsp;syllabus for that) includes ClickOnce, &lt;em&gt;the most superior application deployment technology&lt;/em&gt; out there for rich client apps. &lt;/p&gt; &lt;p&gt;This is a great opportunity for anyone in the Bay Area wanting to pick up on Microsoft's next generation presentation sub-system and framework APIs.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.wpflearningexperience.com/"&gt;Cal Schrotenboer&lt;/a&gt;, the instructor for these courses, says the cost for California residents is $100 for a class. And since these classes are also offered in an online format, you can enroll from anywhere. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-333228089155973096?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/333228089155973096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=333228089155973096' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/333228089155973096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/333228089155973096'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/04/wpf-college-courses.html' title='WPF College Courses'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-4536831278398026942</id><published>2007-03-17T08:00:00.000-07:00</published><updated>2007-03-17T10:38:17.044-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Branding'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='UX'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Software Branding</title><content type='html'>I was pleased to see the updated Windows Vista User Experience Guidelines introduce a section on &lt;a href="http://msdn2.microsoft.com/en-us/library/aa511284.aspx" title="Windows Vista UX Guidelines: Software Branding"&gt;Software Branding&lt;/a&gt;. I firmly believe the secret sauce behind every successful software application is the emotional chord it strikes in the end user. Too often we, the sausage makers, focus too much on the technical aspects and too little on the emotional aspect of the software we build.&lt;br /&gt;&lt;br /&gt;For something that is frequently overlooked or gotten wrong, this article on software branding is chock full of common sense. Although the examples use Windows artifacts, the guidelines apply very broadly to software we all create. &lt;br /&gt;&lt;br /&gt;On another note, I am happy to see this idea dawn on folks across Microsoft. Now if we can strike the right balance between the whole technical v/s visceral v/s behavioral v/s reflective aspects, it'll portend good things to come. The innovations in the Shell in &lt;a href="http://windowsvista.com"&gt;Windows Vista&lt;/a&gt;, and platforms such as &lt;a href="http://wpf.netfx3.com"&gt;WPF&lt;/a&gt; and &lt;a href="http://www.microsoft.com/wpfe"&gt;WPF/E&lt;/a&gt; will surely help.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-4536831278398026942?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/4536831278398026942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=4536831278398026942' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4536831278398026942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4536831278398026942'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/03/software-branding.html' title='Software Branding'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-8235101581742214411</id><published>2007-03-17T07:34:00.000-07:00</published><updated>2007-03-17T07:53:15.323-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Expression Blend'/><title type='text'>Expression Blend is Release Candidate</title><content type='html'>The &lt;a href="http://blogs.msdn.com/expression/"&gt;Expression Blend team&lt;/a&gt; quietly announced their excellent designer surface for Windows Presentation Foundation went to Release Candidate status. The new build has a bunch of fixes but no new features (that I'm aware of) over the most recent CTP. It does however introduce some spectacular starter samples built using Blend. If you have a creative bone in you, I really recommend &lt;a href="http://www.microsoft.com/products/expression/en/Expression-Blend/try.mspx"&gt;downloading Blend RC&lt;/a&gt; and taking it for a spin. Either way, check out the ClickOnce powered &lt;a href="http://blogs.msdn.com/karstenj/archive/2007/03/15/expression-blend-release-candidate-1-six-new-samples.aspx" title="Blend RC Samples"&gt;online samples&lt;/a&gt; that the ever resourceful Karsten has posted. I know &lt;a href="http://notstatic.com/archives/66"&gt;Robbie&lt;/a&gt; and &lt;a href="http://designerslove.net/?p=42"&gt;Nathan&lt;/a&gt; are impressed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-8235101581742214411?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/8235101581742214411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=8235101581742214411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8235101581742214411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8235101581742214411'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/03/expression-blend-is-release-candidate.html' title='Expression Blend is Release Candidate'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-5053972750625321175</id><published>2007-03-17T07:14:00.000-07:00</published><updated>2007-03-17T07:34:11.115-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='New York Times'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Times Reader'/><title type='text'>Times Reader Goes Subscription</title><content type='html'>The New York Times &lt;a href="http://firstlook.nytimes.com/?p=34"&gt;announced&lt;/a&gt; that the Times Reader application's Beta period ends soon and it will be be converted to a $14.95 / month subscription service that will include Times Select and Premium Crosswords, which were previously paid content anyway. Also apparently home delivery customers of the paper will now get the Times Reader for free. Rob gives &lt;a href="http://rrelyea.spaces.live.com/blog/cns!167AD7A5AB58D5FE!1777.entry"&gt;his perspective&lt;/a&gt; on the pricing. I suspect the Times is just testing the waters here. Of course they're in the subscription business to stay, but I wouldn't be surprised if they factor in usage data and tweak the model to accommodate the potentially diverse user base. Let me tell you, there's more method than madness behind &lt;a href="http://www.microsoft.com/windows/products/windowsvista/editions/default.mspx"&gt;SKU differentiation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-5053972750625321175?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/5053972750625321175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=5053972750625321175' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5053972750625321175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/5053972750625321175'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/03/times-reader-goes-subscription.html' title='Times Reader Goes Subscription'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-902349502013151985</id><published>2007-03-08T19:04:00.000-08:00</published><updated>2007-03-08T19:32:28.276-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Online shopping'/><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>Shopaholic</title><content type='html'>You know your significant other is &lt;em&gt;really&lt;/em&gt; into this whole online shopping thing when you come home to this:&lt;br /&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer;" src="http://1.bp.blogspot.com/_vO3QC5qlK78/RfDTA4hfJxI/AAAAAAAAAAY/TR1jta0xvEw/s320/UPS+InfoCard+and+FedEx+Door+Tag.jpg" border="0" alt="UPS InfoCard and FedEx Door Tag" id="BLOGGER_PHOTO_ID_5039759995153884946" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-902349502013151985?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/902349502013151985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=902349502013151985' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/902349502013151985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/902349502013151985'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/03/is-there-such-thing-as-too-much.html' title='Shopaholic'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_vO3QC5qlK78/RfDTA4hfJxI/AAAAAAAAAAY/TR1jta0xvEw/s72-c/UPS+InfoCard+and+FedEx+Door+Tag.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-2804793817968948150</id><published>2007-03-06T21:04:00.001-08:00</published><updated>2007-03-06T21:32:12.673-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Maps'/><category scheme='http://www.blogger.com/atom/ns#' term='Live Search'/><category scheme='http://www.blogger.com/atom/ns#' term='Sidebar'/><category scheme='http://www.blogger.com/atom/ns#' term='Gadget'/><title type='text'>Live Traffic Gadget</title><content type='html'>&lt;p&gt;I'm a minimalist when it comes to the gadgets on my Vista Sidebar but as a &lt;a href="http://search.live.com/images/results.aspx?q=seattle%20traffic&amp;FORM=BIRE" title="Seattle traffic"&gt;Seattle area resident&lt;/a&gt;, this I couldn't resist. The Traffic gadget by Live Search Maps is now available and it supports over 20 U.S. cities. &lt;/p&gt; &lt;p&gt;The blurb for this gadget says:&lt;/p&gt; &lt;blockquote&gt;&lt;em&gt;Don’t get stuck in gridlock or be late to your next appointment. Traffic by Live Search Maps is a quick and simple way to see real-time traffic conditions in your area. Shortcuts to driving directions, local search or full-screen traffic view on maps.live.com are also easily available from the gadget. All information within this gadget can also be found at &lt;a href="http://maps.live.com"&gt;maps.live.com&lt;/a&gt;&lt;/em&gt;&lt;/blockquote&gt;You can &lt;a title="Live Search Traffic Gadget" href="http://gallery.live.com/liveItemDetail.aspx?li=d5ad423c-05bd-4de4-8803-b05ecc339397&amp;amp;l=1"&gt;get it here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-2804793817968948150?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/2804793817968948150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=2804793817968948150' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2804793817968948150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2804793817968948150'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/03/live-traffic-gadget.html' title='Live Traffic Gadget'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-7474133642492323859</id><published>2007-03-05T07:08:00.000-08:00</published><updated>2007-03-05T07:09:48.687-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XBAP'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Communication Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='WCF'/><title type='text'>Using WCF In An XBAP</title><content type='html'>&lt;p&gt;&lt;a href="http://hyperthink.net/blog/"&gt;Steve Maine&lt;/a&gt; confirmed to &lt;a href="http://rrelyea.spaces.live.com/Blog/cns!167AD7A5AB58D5FE!1684.entry"&gt;Rob&lt;/a&gt; and me that &lt;a href="http://wcf.netfx3.com/"&gt;Windows Communication Foundation&lt;/a&gt; (WCF, codename "Indigo") will work in partial trust in upcoming .NET Framework v3.5. This means you can now use HTTP binding in WCF from within a XAML Browser Application (XBAP). &lt;/p&gt; &lt;p&gt; What does this mean? Well, using WCF you will now get parity for things for which you have been using ASMX within your XBAP. Secure communication is possible via transport layer security only. &lt;/p&gt; &lt;p&gt;Not all WCF features are available from within an XBAP though. This means you cannot currently host services, have duplex communications, use non-HTTP transports, or use WS-* protocols. Please use the &lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=118"&gt;WCF Forum&lt;/a&gt; or the &lt;a href="http://forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=119&amp;SiteID=1"&gt;WPF Forum&lt;/a&gt; to tells us what you think. We'd love to hear your feedback on this feature. &lt;/p&gt; &lt;p&gt;For the differences between ASMX 2.0 and WCF, see &lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/01/ServiceStation/default.aspx"&gt;this article&lt;/a&gt;. If you already have ASMX services for which you were using an ASMX client, here's &lt;a href="http://kennyw.com/indigo/86"&gt;how to migrate ASMX to WCF&lt;/a&gt;. I should add, you are already able to &lt;a href="http://msdn2.microsoft.com/en-us/library/ms751433.aspx"&gt;access a WCF service using an ASMX client&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-7474133642492323859?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/7474133642492323859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=7474133642492323859' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7474133642492323859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7474133642492323859'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/03/using-wcf-in-xbap.html' title='Using WCF In An XBAP'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-4948767604915747388</id><published>2007-03-02T20:15:00.000-08:00</published><updated>2007-03-02T20:18:04.440-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Predicting'/><category scheme='http://www.blogger.com/atom/ns#' term='Markets'/><category scheme='http://www.blogger.com/atom/ns#' term='IEM'/><category scheme='http://www.blogger.com/atom/ns#' term='Merc'/><category scheme='http://www.blogger.com/atom/ns#' term='Futures'/><title type='text'>Using Economics to Predict a Flu Pandemic</title><content type='html'>&lt;p&gt;Markets have proven their effectiveness in predicting future prices and economic conditions. This is the bedrock on which our stock and futures&amp;nbsp;trading institutions rest on. The &lt;a href="http://www.cme.com/"&gt;Chicago Mercantile Exchange&lt;/a&gt; has a weather futures that allows traders to wager on weather conditions using measurements like heating day degrees (HDDs) and cooling day degrees (CDDs). Farmers have long relied on the Merc's ability to predict prices from items like Lean Hogs to Dry Whey.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.biz.uiowa.edu/iem/"&gt;Iowa Electronic Markets&lt;/a&gt; is a futures market operated by the business school at the Univ. of Iowa for research and educational purposes. For a dozen years, they've accurately predicted election results, and have roundly beaten opinion polls at that. In fact today, March 2, 2007, trading began in the markets based on the 2008 U.S. Political Conventions of the Democratic and Republican parties.&lt;/p&gt; &lt;p&gt;Now the IEM takes on the flu pandemic. No, seriously. They have a program&amp;nbsp;where health professionals can participate in a &lt;a href="http://fluprediction.uiowa.edu/fluhome/index.html"&gt;pandemic futures market&lt;/a&gt;. However, unlike some of their other prediction markets, this market does not use real money in line with legal constraints and medical ethics. It remains to be seen if &lt;em&gt;real money&lt;/em&gt; is the secret sauce behind the wisdom of crowds in the predictions markets. My (Ayn Rand infused capitalist pig) gut says money, the fear of losses and the prospect of gains all have an important role in influencing human behavior. These sentiments either directly influence or at the very least catalyze your decision to buy or sell or hold. When one or more of these aren't involved, the results might be skewed. By how much, it remains to be seen. You can bet I'll be tuned in.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-4948767604915747388?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/4948767604915747388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=4948767604915747388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4948767604915747388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/4948767604915747388'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/03/using-economics-to-predict-flu-pandemic.html' title='Using Economics to Predict a Flu Pandemic'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-3876539348456991032</id><published>2007-03-02T20:00:00.001-08:00</published><updated>2007-03-02T20:06:34.624-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Freem'/><category scheme='http://www.blogger.com/atom/ns#' term='The Colbert Report'/><category scheme='http://www.blogger.com/atom/ns#' term='Stephen Colbert'/><category scheme='http://www.blogger.com/atom/ns#' term='Eneagled'/><title type='text'>Eneagled</title><content type='html'>Noticed on &lt;a href="http://www.colbertnation.com/"&gt;The Colbert Report&lt;/a&gt; opening sequence, the word ENEAGLED. My subconscious was expecting to see FREEM but a quick rewind and pause on the Tivo showed me otherwise.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_vO3QC5qlK78/RejzX9fMt0I/AAAAAAAAAAM/VLY8x04P84E/s1600-h/bear+and+colbert.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px; float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_vO3QC5qlK78/RejzX9fMt0I/AAAAAAAAAAM/VLY8x04P84E/s320/bear+and+colbert.jpg" border="0" alt="Bear and Colbert" id="BLOGGER_PHOTO_ID_5037543776181860162" /&gt;&lt;/a&gt;&lt;br /&gt;This replaces the just-as-made-up FREEM which I expect meant "Freedom without the DO". Is this possibly a blend of "engulfed" and "eagle" or perhaps "enabled" and "eagle"? With Stephen Colbert being a renowned eagle fancier, at least one substrate is easily established.&lt;br /&gt;&lt;br /&gt;What do &lt;em&gt;you&lt;/em&gt; think "eneagled" means?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-3876539348456991032?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/3876539348456991032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=3876539348456991032' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3876539348456991032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/3876539348456991032'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/03/eneagled.html' title='Eneagled'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_vO3QC5qlK78/RejzX9fMt0I/AAAAAAAAAAM/VLY8x04P84E/s72-c/bear+and+colbert.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-1630817820430364639</id><published>2007-02-27T20:54:00.001-08:00</published><updated>2007-02-28T06:51:26.864-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Performance'/><title type='text'>WPF/E vs DHTML vs Flash vs WPF performance test</title><content type='html'>&lt;p&gt;&lt;a href="http://rrelyea.spaces.live.com/Blog"&gt;Rob&lt;/a&gt;&amp;nbsp;sent a link to&amp;nbsp;&lt;a title="WPF/e vs DHTML vs Flash vs WPF performance test" href="http://metalinkltd.com/?p=93"&gt;this post by Alexey Gavrilov&lt;/a&gt; who did some benchmarking on a variety of client technologies: DHTML, Flash, WPF/E and WPF. Alexey summarizes the test results thus:  &lt;blockquote&gt;Here are results I got testing with 16 [&lt;em&gt;animated bouncing&lt;/em&gt;] balls on my Pentium M 1.7 laptop:  &lt;p&gt;&lt;/p&gt; &lt;table class="layoutTable" cellpadding="5"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td class="layoutTable"&gt;Browser&lt;/td&gt; &lt;td class="layoutTable"&gt;DHTML&lt;/td&gt; &lt;td class="layoutTable"&gt;Flex&lt;/td&gt; &lt;td class="layoutTable"&gt;WPF/e&lt;/td&gt; &lt;td class="layoutTable"&gt;WPF&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="layoutTable"&gt;IE 6.0&lt;/td&gt; &lt;td class="layoutTable"&gt;56&lt;/td&gt; &lt;td class="layoutTable"&gt;61&lt;/td&gt; &lt;td class="layoutTable"&gt;84&lt;/td&gt; &lt;td class="layoutTable"&gt;99&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="layoutTable"&gt;Firefox 2.0.0.1&lt;/td&gt; &lt;td class="layoutTable"&gt;55&lt;/td&gt; &lt;td class="layoutTable"&gt;52&lt;/td&gt; &lt;td class="layoutTable"&gt;58&lt;/td&gt; &lt;td class="layoutTable"&gt;-&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td class="layoutTable"&gt;Opera 9.01&lt;/td&gt; &lt;td class="layoutTable"&gt;94&lt;/td&gt; &lt;td class="layoutTable"&gt;50&lt;/td&gt; &lt;td class="layoutTable"&gt;-&lt;/td&gt; &lt;td class="layoutTable"&gt;-&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;[...] WPF/e is much faster in IE than in Firefox, which seems equally slow for all three tests. The expected result is that WPF runs faster than anything else. The unexpected is that WPF/e is faster than Flash despite the fact that it’s been in the market for years.&lt;/blockquote&gt; &lt;p&gt;Since the tests focus on a narrow animation sample, one would be cautious to put too much into the results. Regardless, the findings are very interesting. Alexey has posted sources for the tests so you can run them on your own machine. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-1630817820430364639?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/1630817820430364639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=1630817820430364639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1630817820430364639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/1630817820430364639'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/02/wpfe-vs-dhtml-vs-flash-vs-wpf.html' title='WPF/E vs DHTML vs Flash vs WPF performance test'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-6089973409317005729</id><published>2007-02-20T19:12:00.001-08:00</published><updated>2007-02-20T19:18:44.391-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='light bulbs'/><category scheme='http://www.blogger.com/atom/ns#' term='Australia'/><title type='text'>Banning the light bulb</title><content type='html'>&lt;p&gt;&lt;a href="http://news.bbc.co.uk/2/hi/asia-pacific/6378161.stm"&gt;Australia pulls the plug on old bulbs&lt;/a&gt;&amp;nbsp;reports the BBC, referring to the proposed plan to completely phase out the incandescent light bulb by 2010 and replace them with fluorescent bulbs. A similar proposal is being considered by California. I understand the energy savings and reduced greenhouse gas emissions resulting from this switch&amp;nbsp;but don't fluorescent bulbs contain &lt;strong&gt;mercury&lt;/strong&gt;? Is there a&amp;nbsp;plan&amp;nbsp;to accommodate tons of fluorescent bulbs in recycling centers? It'd be a tragedy to have millions of these bulbs in our landfills with the potential of seeping into the ground water. I'm curious if Australian citizens are asking this question.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-6089973409317005729?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/6089973409317005729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=6089973409317005729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6089973409317005729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/6089973409317005729'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/02/banning-light-bulb.html' title='Banning the light bulb'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-8298667967387557887</id><published>2007-02-08T21:33:00.000-08:00</published><updated>2007-02-08T22:02:13.441-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Yahoo Pipes'/><category scheme='http://www.blogger.com/atom/ns#' term='Sun'/><category scheme='http://www.blogger.com/atom/ns#' term='JXTA'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>In search of the smokin' pipe</title><content type='html'>When I first heard of &lt;a href="http://pipes.yahoo.com"&gt;Yahoo! Pipes&lt;/a&gt; it evoked memories of the brilliant conception from Sun Microsystems of &lt;a href="http://jxta.org"&gt;JXTA&lt;/a&gt; - pronounced Juxtapose - from a few years ago. I remember being really excited about an idea whose time had come: JXTA was &lt;a href="http://en.wikipedia.org/w/index.php?title=Pipeline_%28Unix%29&amp;oldid=106254767"&gt;UNIX Pipes&lt;/a&gt; on steriods. Of course, there's many a slip 'twixt the cup and the lip. The fact that almost no one has heard of JXTA six or so years since, is really telling. I do think Y! Pipes is a cool idea though. I have had trouble accessing that site until a few minutes ago. Even now, not all "popular" sample pipes seemed to function. Yahoo is working on increasing capacity after site had a period of downtime ostensibly due high demand on the servers. &lt;br /&gt;&lt;br /&gt;There's a lesson to be drawn here for all of us pundits who think web apps will just replace desktop apps this weekend while we aren't noticing. It's one thing to move an app to the web and totally another to make it scale. A Google executive was quoted in &lt;a href="http://news.yahoo.com/s/nm/20070207/wr_nm/cable_webtv_dc"&gt;this Reuters story&lt;/a&gt; as saying:&lt;blockquote&gt;&lt;em&gt;The Web infrastructure, and even Google's (infrastructure) doesn't scale. It's not going to offer the quality of service that consumers expect.&lt;/em&gt;&lt;/blockquote&gt;Companies everywhere are working on solving these tough problems in a variety of ways. Until we learn how to scale serious applications, they'll continue to be written for and executed on the desktop. Tip to those of us that work to further the cause of desktop apps: Don't let this lull you into complacence. Things could really change this weekend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-8298667967387557887?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/8298667967387557887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=8298667967387557887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8298667967387557887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/8298667967387557887'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/02/no-smokin-pipes-here.html' title='In search of the smokin&apos; pipe'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-2031136530539965125</id><published>2007-02-08T20:44:00.000-08:00</published><updated>2007-02-08T21:24:43.630-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OOXML'/><category scheme='http://www.blogger.com/atom/ns#' term='ODF'/><title type='text'>Open Standards, not Open Source</title><content type='html'>Miguel has a very &lt;a href="http://tirania.org/blog/archive/2007/Jan-30.html"&gt;insightful post&lt;/a&gt; on the &lt;a href="http://office.microsoft.com/en-us/products/HA102058151033.aspx"&gt;OOXML&lt;/a&gt; v/s ODF meme. He says: &lt;blockquote&gt;&lt;em&gt;Open standards and the need for public access to information was a strong message. This became a key component of promoting open office, and open source software. This posed two problems: &lt;br /&gt;&lt;br /&gt;First, those promoting open standards did not stress the importance of having a fully open source implementation of an office suite. &lt;br /&gt;&lt;br /&gt;Second, it assumed that Microsoft would stand still and would not react to this new change in the market. &lt;br /&gt;&lt;br /&gt;And that is where the strategy to promote the open source office suite is running into problems. Microsoft did not stand still. It reacted to this new requirement by creating a file format of its own, the OOXML.&lt;/em&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;It is amusing to see the reactions of people who shouted from rooftops that Microsoft wasn't open or wasn't transparent, now that Microsoft &lt;em&gt;is&lt;/em&gt; doing something to remedy that. The shrill voices that said "we do not have enough information on Microsoft's proprietary protocols to interoperate well" have now changed to "gee, at 6000 pages the spec is too large...too much information". There's also the dishonest comparison with the ODF spec that comes at 722 pages, conveniently ignoring the little fact that ODF references other specs like SVG. Miguel postscripts with this gem: &lt;blockquote&gt;&lt;em&gt;&lt;br /&gt;For example, many years ago, when I was working on Gnumeric, one of the issues that we ran into was that the actual descriptions for functions and formulas in Excel was not entirely accurate from the public books you could buy. &lt;br /&gt;&lt;br /&gt;OOXML devotes 324 pages of the standard to document the formulas and functions. &lt;br /&gt;&lt;br /&gt;The original submission to the ECMA TC45 working group did not have any of this information. Jody Goldberg and Michael Meeks that represented Novell at the TC45 requested the information and it eventually made it into the standards. I consider this a win, and I consider those 324 extra pages a win for everyone (almost half the size of the ODF standard). &lt;br /&gt;&lt;br /&gt;Depending on how you count, ODF has 4 to 10 pages devoted to it. &lt;strong&gt;There is no way you could build a spreadsheet software based on this specification. &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;To build a spreadsheet program based on ODF you would have to resort to an existing implementation source code (OpenOffice.org, Gnumeric) or you would have to resort to Microsoft's public documentation or ironically to the OOXML specification. &lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Christian Stefan wrote me to point out that the OOXML specification published by ECMA uses 1.5 line spacing, while OASIS uses single spacing.  I quote from his message:&lt;pre&gt;&lt;br /&gt;ODF             722 pages&lt;br /&gt;SVG             719&lt;br /&gt;MathML          665&lt;br /&gt;XForms          152     (converted from html using winword, ymmv)&lt;br /&gt;XLink            36     (converted from html using winword, ymmv)&lt;br /&gt;SMIL            537     (converted from html using winword, ymmv)&lt;br /&gt;OpenFormula     371&lt;br /&gt;                ----&lt;br /&gt;              3,202&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now I'm still missing some standards that would add severall hundred pages and changing line spacing to 1.5 will bring me near the 6000 pages mark I guess. This is not very surprising (at least for me) since both standards try to solve very similar problems with nearly equal complexity.&lt;br /&gt;&lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;That's a kick in the pants if there ever was one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-2031136530539965125?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/2031136530539965125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=2031136530539965125' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2031136530539965125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/2031136530539965125'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/02/open-standards-not-open-source.html' title='Open Standards, not Open Source'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-7244482485825219149</id><published>2007-02-04T07:55:00.000-08:00</published><updated>2007-02-04T08:41:07.803-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='YouTube'/><category scheme='http://www.blogger.com/atom/ns#' term='DMCA'/><category scheme='http://www.blogger.com/atom/ns#' term='Viacom'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>...It is a duck</title><content type='html'>I noticed a very peculiar line in the article "&lt;a href="http://www.nytimes.com/2007/02/03/technology/03tube.html?_r=1&amp;oref=slogin"&gt;Viacom Tells YouTube: Hands Off&lt;/a&gt;" in the New York Times: &lt;blockquote&gt;Whether YouTube is stealing content by serving up clips of copyrighted programs is very much up for debate.&lt;/blockquote&gt;&lt;br /&gt;I wonder if the Times would take as measured and conciliatory a stand if its own Times Select content were served up on another site and read by thousands of visitors, accruing brand value for that site and ad revenue to boot, but with no tangible returns to the Times itself.&lt;br /&gt;&lt;br /&gt;I think it is easy to take sides in most such issues because they seem to involve Joe Public on one side versus big companies, record labels and other Hollywood entities that haven't exactly been upstanding citizens, on the other. In this case, it’s a tussle between Viacom and Google: both big boys who are potty-trained and can take care of themselves. Either way, people lose sight of the content creator - who sometimes is an average guy without an army of lawyers at his disposal - and is the rightful owner of his creations. The content creator gets to choose how his content can be distributed or copied and enjoys the profits that arise from that creation. This is how capitalism works. If we love its benefits, we must be prepared to pay the price it asks.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-7244482485825219149?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/7244482485825219149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=7244482485825219149' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7244482485825219149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7244482485825219149'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/02/it-is-duck.html' title='...It is a duck'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-7983888498070158802</id><published>2007-02-02T05:29:00.000-08:00</published><updated>2007-02-23T09:43:34.771-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Windows Vista in a browser using WPF/E</title><content type='html'>From the Microsoft Slovenia team with assistance from local agency &lt;a href="http://www.renderspace.si/"&gt;Renderspace&lt;/a&gt;, here's a &lt;a href="http://www.vista.si"&gt;Windows Vista demo using WPF/E&lt;/a&gt;. Very cool! Requires &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E63992D3-CCF5-40B9-B98A-D16BCA57467C&amp;amp;displaylang=en"&gt;Feb 2007 CTP of WPF/E&lt;/a&gt; which went live yesterday.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-7983888498070158802?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/7983888498070158802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=7983888498070158802' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7983888498070158802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/7983888498070158802'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/02/windows-vista-in-browser-using-wpfe.html' title='Windows Vista in a browser using WPF/E'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-117034907691176061</id><published>2007-02-01T08:57:00.000-08:00</published><updated>2007-02-23T09:51:51.168-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='ClickOnce'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Great apps powered by ClickOnce</title><content type='html'>&lt;p&gt;I've posted previously about XBAPs, but here are a couple links to standalone &lt;a href="http://wpf.netfx3.com"&gt;Windows Presentation Foundation&lt;/a&gt; (WPF) applications that use the &lt;a title="ClickOnce" href="http://msdn2.microsoft.com/en-us/library/t71a733d(VS.80).aspx"&gt;ClickOnce&lt;/a&gt; deployment model.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ITN&lt;/strong&gt; has a cool new news -video application called &lt;a href="http://itn.co.uk/vista/itnplayer/ITNPlayer.application"&gt;ITN Hub Player&lt;/a&gt;, accompanied by a Windows Vista sidebar gadget. See &lt;a href="http://www.itn.co.uk/vista/"&gt;http://www.itn.co.uk/vista/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;OTTO&lt;/strong&gt;, the 2nd largest online retailer in the world, just went live with a very impressive ClickOnce-deployed WPF application which completely changes the online store as you know it. See &lt;a href="http://www.otto.de/vista"&gt;http://www.otto.de/vista&lt;/a&gt;&lt;/p&gt;&lt;p&gt;This app also uses Windows CardSpace and Windows Communication Foundation (WCF), both .NET Framework 3.0 components and part of Windows Vista.&lt;/p&gt;&lt;p&gt;I love seeing ClickOnce being used in mainstream consumer oriented applications, and will be posting about these more often. And that's not just 'cause my team owns WPF Deployment and works closely with the ClickOnce team. Having had my share of munging around with MSIs, I think ClickOnce is by far &lt;em&gt;the most superior application deployment technology&lt;/em&gt; out there for rich client apps on Windows. It provides a sophistocated update mechanism for your apps, taking the pain out of that process. If you haven't heard of it before, or aren't using it in your .NET apps, I think the apps above will make you reconsider.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-117034907691176061?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/117034907691176061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=117034907691176061' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/117034907691176061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/117034907691176061'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/02/great-apps-powered-by-clickonce.html' title='Great apps powered by ClickOnce'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-117017160806606405</id><published>2007-01-30T07:32:00.000-08:00</published><updated>2007-02-23T09:45:42.802-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Windows Vista: Now In A Store Near You</title><content type='html'>After "the biggest product launch in Microsoft's history", &lt;a href="http://www.microsoft.com/windowsvista"&gt;Windows Vista&lt;/a&gt; is now available in a store near you and via fine merchants online. This is a culmination of years of work done by my teams and countless others in Microsoft, hardware &amp; software &lt;a href="http://www.microsoft.com/windows/shop/partners/default.mspx"&gt;partners&lt;/a&gt; and OEMs. In the WPF team, as elsewhere, we've fervently believed: "if you build it, they will come". So although I don't claim to speak for Microsoft on this blog, above all, a big shout out to all of the developers and creative professionals who patiently evaluated our CTPs, Betas and the like and gave us great feedback; and to the people who continue to bet their businesses on our platforms, frameworks and APIs. Thank you for your support. Please keep telling us what we're doing wrong, and what we're getting right. Here's to building applications we've dreamed of!&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt;Tags: &lt;a id="tag" href="http://technorati.com/tag/Windows+Vista" rel="tag"&gt;Windows Vista&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/WPF" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NetFX3&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/microsoft" rel="tag"&gt;Microsoft&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://wpf.netfx3.com/"&gt;&lt;em&gt;Windows Presentation Foundation&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, is the next generation presentation sub-system and managed code framework for Windows. It is a &lt;/em&gt;&lt;a href="http://www.netfx3.com/"&gt;&lt;em&gt;.NET Framework 3.0&lt;/em&gt;&lt;/a&gt;&lt;em&gt; component, present on Windows Vista and a free download for Windows XP SP2 and Windows Server 2003. &lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-117017160806606405?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/117017160806606405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=117017160806606405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/117017160806606405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/117017160806606405'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/01/windows-vista-now-in-store-near-you.html' title='Windows Vista: Now In A Store Near You'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116978323089132918</id><published>2007-01-25T19:29:00.000-08:00</published><updated>2007-02-23T09:52:47.739-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XBAP'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework'/><title type='text'>Xceed WPF DataGrid - For Free</title><content type='html'>For real. WPF didn't ship with a DataGrid control in .NET Framework 3.0. The fine folk at Xceed Software recognized that and have now released an enterprise strength WPF DataGrid control to the community. They have a beautiful demo XBAP called &lt;a href="http://download3.xceedsoft.com/demo/gridwpf/Xceed.Wpf.DataGrid.Samples.LiveExplorer.xbap"&gt;Xceed DataGrid for WPF LiveExplorer&lt;/a&gt; that lets you see the control in action and use it for yourself. &lt;br /&gt;&lt;br /&gt;Get the &lt;a href="http://xceed.com/Grid_WPF_Intro.html"&gt;Xceed DataGrid control&lt;/a&gt;. [Requires .NET Framework 3.0 or Windows Vista]&lt;br /&gt;&lt;br /&gt;Thanks to &lt;a href="http://blogs.msdn.com/mswanson/archive/2007/01/24/free-xceed-datagrid-control-for-wpf-released.aspx"&gt;Mike&lt;/a&gt; for the tip.&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NetFX3&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/WPF" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/DataGrid" rel="tag"&gt;DataGrid&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/Xceed" rel="tag"&gt;Xceed&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/xbap" rel="tag"&gt;XBAP&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116978323089132918?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116978323089132918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116978323089132918' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116978323089132918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116978323089132918'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/01/xceed-wpf-datagrid-for-free.html' title='Xceed WPF DataGrid - For Free'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116976728874486957</id><published>2007-01-25T15:12:00.000-08:00</published><updated>2007-02-23T09:53:18.802-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='XBAP'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Dominoken</title><content type='html'>&lt;a href="http://whereismymeat.blogspot.com"&gt;KF&lt;/a&gt; sent us a link to this beautiful XAML Browser Application (XBAP) created by &lt;a href="http://bascule.co.jp/"&gt;Bascule&lt;/a&gt; for the Windows Vista launch in Japan:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://labs.microsoft.com/japan/xbap/dominoken.xbap"&gt;DOMINOKEN&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Requires .NET Framework 3.0 or Windows Vista. I've seen it several times, changing the camera angle and zoom settings. Never gets old!&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NetFX3&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/wpf" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/xbap" rel="tag"&gt;XBAP&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/3D" rel="tag"&gt;3D&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/Windows+Vista" rel="tag"&gt;Windows Vista&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116976728874486957?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116976728874486957/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116976728874486957' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116976728874486957'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116976728874486957'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/01/dominoken.html' title='Dominoken'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116827875728749519</id><published>2007-01-08T09:41:00.000-08:00</published><updated>2007-02-23T09:54:33.622-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='WPF'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows Presentation Foundation'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='Yahoo'/><title type='text'>The new Yahoo! Messenger for Windows Vista</title><content type='html'>It has been tough to keep this one under wraps but I can finally talk now. &lt;a href="http://www.yahoo.com"&gt;Yahoo!&lt;/a&gt; is shifting the communication and instant messaging landscape. The new &lt;strong&gt;Yahoo! Messenger for Windows Vista&lt;/strong&gt; is one of those seminal applications that demonstrate what good user experience really is. &lt;a href="http://messenger.yahoo.com/windowsvista.php"&gt;See the video&lt;/a&gt; and decide for yourself. This application is built on &lt;a href="http://wpf.netfx3.com"&gt;Windows Presentation Foundation&lt;/a&gt; (a .NET Framework 3.0 component and part of Windows Vista). &lt;br /&gt;&lt;br /&gt;This isn’t just a re-skinned version of the existing messenger app... this was built by &lt;a href="http://eric.burke.name/dotnetmania/"&gt;Eric&lt;/a&gt; and his ace &lt;a href="http://blog.messenger.yahoo.com/blog"&gt;team&lt;/a&gt; from the ground up. A tip o’ the hat to &lt;a href="http://blogs.msdn.com/karstenj"&gt;Karsten&lt;/a&gt; for tirelessly making sure all of Yahoo!’s questions and concerns were responded to promptly; whether he was hunting us down via discussion lists or on the phone or even setting up face to face meetings, Karsten was a bull-dog you couldn't get away from. Props to the good folk from &lt;a href="http://www.frogdesign.com/"&gt;frog&lt;/a&gt; for the kickass design.&lt;br /&gt;&lt;br /&gt;This app is a powerful showcase for WPF and Windows Vista features and a testament to how designers and developers can work together on building great applications.&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt;Tags: &lt;a id="tag" href="http://technorati.com/tag/yahoo" rel="tag"&gt;Yahoo&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/yahoo+messenger" rel="tag"&gt;Yahoo Messenger&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/wpf" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/windows+vista" rel="tag"&gt;Windows Vista&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116827875728749519?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116827875728749519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116827875728749519' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116827875728749519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116827875728749519'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/01/new-yahoo-messenger-for-windows-vista.html' title='The new Yahoo! Messenger for Windows Vista'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116813229886028009</id><published>2007-01-06T17:08:00.000-08:00</published><updated>2007-01-06T17:11:39.100-08:00</updated><title type='text'>Link dump</title><content type='html'>&lt;a href="http://blogs.msdn.com/wpfsdk/archive/2007/01/05/msdn-wiki-for-the-windows-presentation-foundation-sdk.aspx"&gt;MSDN Wiki for the Windows Presentation Foundation SDK&lt;/a&gt;: If you find yourself stumbling into WPF esoterica that isn't adequately covered in the SDK, with the new MSDN Wiki features, you now have the ability to add your content to the SDK. Michael's post on the SDK blog has details.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/tims/archive/2007/01/05/comparing-wpf-on-windows-vista-v-windows-xp.aspx"&gt;Comparing WPF on Windows Vista v/s Windows XP&lt;/a&gt;: This question comes up often; in fact we had an interesting thread on the internal discussion list recently. Tim provides a great perspective on this topic. He also highlights the less known story about how WPF made its way to downlevel platforms like Windows XP and Windows Server 2003.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/brada/default.aspx"&gt;Building consensus&lt;/a&gt;: Brad Abrams has a multi-faceted post on building consensus in the workplace. Pick your favorite tips or post yours on the comments section.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.stopdigitalamnesia.com/"&gt;Stop Digital Amnesia&lt;/a&gt;: The Center for Digital Amnesia Awareness says they have a cure. Details tomorrow night.&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/wpf" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/wiki" rel="tag"&gt;wiki&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/management" rel="tag"&gt;management&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/CES" rel="tag"&gt;CES&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116813229886028009?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116813229886028009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116813229886028009' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116813229886028009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116813229886028009'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/01/link-dump.html' title='Link dump'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116768312935020015</id><published>2007-01-01T11:51:00.000-08:00</published><updated>2007-01-01T12:52:38.216-08:00</updated><title type='text'>The Rich Internet Application straw man</title><content type='html'>Via &lt;a href="http://weblogs.macromedia.com/mesh/archives/2006/12/mark_anders_on.html"&gt;Mike Chambers&lt;/a&gt; (Apollo product mgr at Adobe), comes this snapshot of a comment made by Mark Anders of Adobe:&lt;br /&gt;&lt;blockquote&gt;If you look at what Microsoft is doing with WPF, they say it's really about rich Internet applications but actually, I don't think it is, because I think rich Internet applications are not about Windows only. I think the Internet is about a multitude of machines and you do not always know what they are.&lt;/blockquote&gt;&lt;br /&gt;Mike then goes on to extoll the qualities of a true "rich internet application" and how &amp;lt;insert Adobe buzzword&amp;gt; is the shiznit. Naughty! Naughty! Macromedia/Adobe coined the term rich internet application (RIA) and can frame it to mean whatever the heck they want it to mean. Cross platform? &lt;em&gt;Sure!&lt;/em&gt; Compelling experience? &lt;em&gt;Yeah why not!&lt;/em&gt; Target a layer above the platform? &lt;em&gt;Well, duh!&lt;/em&gt; Makes the OS irrelevant? &lt;em&gt;Was it ever relevant to anybody outside Redmond anyway?&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Students of &lt;a href="http://www.fallacyfiles.org/"&gt;logical fallacies&lt;/a&gt; will recognize Mark and Mike's argument as a classic &lt;a href="http://en.wikipedia.org/wiki/Straw_man"&gt;Straw Man Argument&lt;/a&gt;. The modus operandi is thus:  &lt;em&gt;create a position that is easy to refute, then attribute that position to your opponent&lt;/em&gt;. Simple. But not straight.&lt;br /&gt;&lt;br /&gt;Windows Presentation Foundation (WPF) is part of &lt;a href="http://www.netfx3.com"&gt;.NET Framework 3.0&lt;/a&gt;, the new managed code programming model for Windows. As a member of the WPF team, and specifically as one of the co-owners of the XAML Browser Application (XBAP) story, I haven’t made the connection between WPF / XBAPs with the so-called rich internet applications.  I doubt anyone else on my team or others in Microsoft who swim in the WPF pool have ever positioned WPF/XBAPs as such.&lt;br /&gt;&lt;br /&gt;But there’s no reason to let facts get in the way of a good Microsoft bashing. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/WPF" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/RIA" rel="tag"&gt;RIA&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116768312935020015?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116768312935020015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116768312935020015' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116768312935020015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116768312935020015'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/01/rich-internet-application-straw-man.html' title='The Rich Internet Application straw man'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116767408518959963</id><published>2007-01-01T09:54:00.000-08:00</published><updated>2007-01-04T20:30:54.536-08:00</updated><title type='text'>Is Data Dead?</title><content type='html'>Some things never make it out of Beta. Recently, &lt;a href="http://radar.oreilly.com/archives/2006/12/google_depreciates_SOAP_API.html"&gt;Google deprecated their SOAP-based Search API (Beta)&lt;/a&gt; in favor of an AJAX Search API. With this sudden announcement, Google is no longer issuing keys and has even pulled their SOAP API SDK out.&lt;br /&gt;&lt;br /&gt;Want to integrate web search into your app? The SOAP APIs let you dispatch requests to the search servers and get responses (think ordered lists), that you could display however you choose to, or generally do whatever you wanted with them. Google’s new AJAX API replacement is much in the mold of AdSense and YouTube APIs: it occupies an “island” on your user interface real estate. Context and basic customization options aside, you have no control over what gets shown in that island. [&lt;strong&gt;Update&lt;/strong&gt;: I stand corrected on this last statement. Mark L clarifies that the AJAX API offers &lt;a href="http://code.google.com/apis/ajaxsearch/documentation/reference.html#_intro_GResult"&gt;other options&lt;/a&gt; giving you some control.] &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tea leaves&lt;/strong&gt;&lt;br /&gt;For a variety of reasons, &lt;a href="http://groups.google.com/group/google.public.web-apis/browse_thread/thread/60e1cf592a9c1410/a5c69859ccadff4d?lnk=raot"&gt;developers&lt;/a&gt; have found this to be a worrisome turn of events. Apparently, in addition to the loss of flexibility, there wasn’t any advance notification on this decision, nor a REST or GData replacement API. The AJAX APIs (currently) allow 8 results only, a departure from the flexibility of the old SOAP APIs. Google’s Terms Of Service forbid you from hacking on the AJAX API and screen scraping results or manipulating the server to give you the data and not the UI with it.&lt;br /&gt;&lt;br /&gt;From an API use perspective, this is a step forward for novice web developers and folks who could care less about aesthetics and user experience on their web sites. With that audience, it is difficult to argue against the idea of adding search to a website with just a couple lines of script and markup. By sheer numbers, I suspect that demographic makes up the 80% of Google’s audience for these APIs. Moreover, by supporting only the AJAX model instead of multiple alternates, Google seems to be marshaling the proverbial 20% of their resources to this effort. So the Pareto principle (80/20 rule) seems to be in full play here.&lt;br /&gt;&lt;br /&gt;Web developers of the world, all is not lost! &lt;a href="http://www.live.com"&gt;Live Search&lt;/a&gt; offers you a &lt;a href="http://msdn.microsoft.com/live/msnsearch/default.aspx"&gt;SOAP-based API&lt;/a&gt;. &lt;a href="http://search.yahoo.com"&gt;Yahoo! Search&lt;/a&gt; offers &lt;a href="http://developer.yahoo.com/search/"&gt;REST-based APIs&lt;/a&gt;. If you care about sanctity of APIs or just want complete control over results, you should consider moving over. Both these are excellent search services from very developer-focused companies.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Geeks need to take a chill pill&lt;/strong&gt;&lt;br /&gt;The blogosphere is rife with conspiracy theories and some folks make this out to be a technical battle between SOAP and REST or SOAP and AJAX or APIs and widgets. I do not think that is the case at all. Google’s decision seems to be based on business decisions, not technical. As a data and service provider, Google is looking for a way to monetize the service. This way, they can inject ads and cross-promotions into the results widget. If this snowballs into a trend, it portends an end to the days of building mashups by freeloading on data from the cloud. But again, Google has probably calculated that mashups account for almost nothing on their bottom line.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/search" rel="tag"&gt;Search&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/SOAP" rel="tag"&gt;SOAP&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116767408518959963?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116767408518959963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116767408518959963' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116767408518959963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116767408518959963'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2007/01/is-data-dead.html' title='Is Data Dead?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116490705757376114</id><published>2006-11-30T09:17:00.000-08:00</published><updated>2006-11-30T09:17:52.263-08:00</updated><title type='text'>It's time</title><content type='html'>This morning, Windows Vista, Office 2007 and Exchange Server 2007 were &lt;a href="http://msnewday.com/Default.aspx" title="Business launch website"&gt;released&lt;/a&gt; to businesses and volume license customers. This is a big milestone for Microsoft. Now to the consumer launch in another 60 days.&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/Windows+Vista" rel="tag"&gt;Windows Vista&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116490705757376114?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116490705757376114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116490705757376114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116490705757376114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116490705757376114'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/11/its-time.html' title='It&apos;s time'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116465374785329997</id><published>2006-11-27T10:51:00.000-08:00</published><updated>2006-11-27T11:11:21.140-08:00</updated><title type='text'>RE: What I Hate About XBAPs</title><content type='html'>In his post titled &lt;a href="http://www.charlespetzold.com/blog/2006/11/220634.html"&gt;What I hate about XBAPs&lt;/a&gt;, Charles Petzold rips me a new one. Among other things, my team owns the packaging and deployment mechanism for XBAPs. I think Charles is right on some counts but not all. In this post, I’m aiming to address his concerns as well as highlight some other factors that influenced our design and implementation. At the outset though, I must thank Charles for blogging about his concerns with XBAPs. My team and I appreciate the feedback and solicit this kind of feedback. If you "hate" anything in WPF, &lt;a href="http://msdn2.microsoft.com/en-us/library/ms745659.aspx"&gt;we’d like to know&lt;/a&gt; so we can look at rectifying the pain points.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Scenarios have their own pecking orders&lt;/strong&gt;&lt;br /&gt;Let me begin with the clichéd but true "we operate in a world with limited time and resources". Sending XBAPs via email and launching attachments wasn’t a Priority 0 scenario for the first-generation Windows Presentation Foundation offering. I would go as far as saying it wasn’t a priority 1 which sums up the nice-to-haves. And in this world too, natural selection is judge and jury.&lt;br /&gt;&lt;br /&gt;I look at XBAPs as &lt;em&gt;browser-hosted WPF applications that operate in a security sandbox&lt;/em&gt;. Apropos, then, the word "application": how many times a day do you get applications as attachments in your email? Not images or documents, mind you, but applications. In comparison, how many times do you navigate to content from within your browser, oblivious of the file extension or type being launched, but expecting it to launch in the browser. No, I’m not trying to present a (false) dichotomy. These are real considerations we have to weigh when we plan features.&lt;br /&gt;&lt;br /&gt;Feature prioritization factors in a number of things, most importantly, customer feedback on how critical the scenario is to their application/business goals and end-user experience. Consequently it is not fruitful to architect XBAPs around scenarios our customers do not care about. Consider a couple examples of several such scenarios that heavily influenced our current design:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Tuppy Glossop authors an XBAP and publishes it to a network share or web server. Consumers access the XBAP via the browser by clicking on a hyperlink. Each time someone launches the XBAP, they see the latest version of the application published by Tuppy.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Bingo Little is an ISV who authors XBAPs for corporations who in turn host it on their own servers with their branding. They do this by updating the non-executable contents of the app, (resigning the manifests) and propping the application files to their web servers.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;strong&gt;XBAPs do not exist in a vacuum&lt;/strong&gt;&lt;br /&gt;We’ve attempted to offer a broad set of options as far the application and content models in WPF go. It spans un-compiled XAML files to XPS documents to XBAPs to Standalone applications, with control flavors and inter-op sprinkled in between. The former two are best suited for being sent as email attachments. I try to resist the temptation of making XBAPs everything for everyone.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Launching EXEs is so 1990s!&lt;/strong&gt; &lt;br /&gt;As Charles correctly points out, email programs and corporate policies may prohibit launching EXE attachments. For this reason, .NET Framework deployment (specifically ClickOnce) provides the MapFileExtensions project property. When set to true, the built application’s executables and binaries have the extension ".deploy" appended to the actual file extension (.exe or .dll). This gives you another benefit of configuring only one blanket MIME content type mapping .deploy to application/octet-stream (which is the default on many web servers anyway). You can send people attachments that have a .xbap, a .exe.deploy and a .exe.manifest. In the same vein, you can deploy these files on a web server. When the .xbap is launched, the .NET Framework 3.0 deployment mechanism will recognize the other files.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Customer feedback influences future course&lt;/strong&gt;&lt;br /&gt;The WPF team does not understand &lt;em&gt;your business&lt;/em&gt; or &lt;em&gt;your customers&lt;/em&gt;. In fact &lt;em&gt;you&lt;/em&gt; understand those best. And we work hard to understand you and your needs. If you, our customers tell us you really do care about scenarios that involve sharing WPF content via email, we focus on delivering that solution in the best way and timeframe possible. &lt;br /&gt;&lt;br /&gt;However, I don’t believe the implementation matters so much. For instance, I can see this specific sharing scenario as being fulfilled by un-compiled XAML + code. That code can be inline or a referenced file. It can be script or C#/VB. This is all open to debate and the merits of any proposed implementation would dictate our approach. Right now, &lt;strong&gt;I’m taking Charles’s post as customer feedback on this scenario and am logging a work item in the product database to consider a solution&lt;/strong&gt;. Needless to say, this feature is prioritized against the numerous others that are currently on the team’s radar, and is subject to feedback from other customers and partners. But I am confident that we can work out a good solution in a future version.&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NETFX3&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/xbap" rel="tag"&gt;XBAP&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116465374785329997?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116465374785329997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116465374785329997' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116465374785329997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116465374785329997'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/11/re-what-i-hate-about-xbaps.html' title='RE: What I Hate About XBAPs'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116282362829268616</id><published>2006-11-06T06:33:00.000-08:00</published><updated>2006-11-06T06:33:49.126-08:00</updated><title type='text'>DevConnections at Las Vegas</title><content type='html'>I'll be at the &lt;a href="http://www.devconnections.com/shows/vsfall2006/default.asp?s=85"&gt;Visual Studio and .NET DevConnections&lt;/a&gt; conference at Las Vegas. If you are attending, be sure to stop by #704 (the Windows Vista section) and say hi. &lt;a href="http://blogs.msdn.com/arikc/" title="Arik Cohen"&gt;Arik&lt;/a&gt;, Paul David, Karen Franco or I would love to talk about Windows Presentation Foundation or .NET 3.0 or Windows Vista. &lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/dotnet" rel="tag"&gt;.NET&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NETFX3&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/Windows+Vista" rel="tag"&gt;Windows Vista&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/WPF" rel="tag"&gt;WPF&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116282362829268616?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116282362829268616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116282362829268616' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116282362829268616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116282362829268616'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/11/devconnections-at-las-vegas.html' title='DevConnections at Las Vegas'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116126758990765663</id><published>2006-10-19T07:07:00.000-07:00</published><updated>2006-10-19T07:21:56.723-07:00</updated><title type='text'>Internet Explorer 7</title><content type='html'>&lt;a href="http://www.microsoft.com/windows/ie/"&gt;Internet Explorer 7&lt;/a&gt; has now been released. I'm not going to tell you to Spread the word. Or to plug it on your sites and magazines; to go out and get buttons; to bash the competition on silly metrics; to sign petitions in support or think up propaganda campaigns. Internet Explorer 7 is just a browser. A damned good one too.&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/ie7" rel="tag"&gt;IE7&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/Internet+Explorer" rel="tag"&gt;Internet Explorer&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116126758990765663?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116126758990765663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116126758990765663' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116126758990765663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116126758990765663'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/10/internet-explorer-7.html' title='Internet Explorer 7'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116040384655702938</id><published>2006-10-09T06:33:00.000-07:00</published><updated>2006-10-09T08:43:09.086-07:00</updated><title type='text'>Notes from the Mozilla team's visit to Microsoft campus</title><content type='html'>Last week, the Mozilla team was on campus. I've been following their visit via the journal that Vladimir Vukićević has maintained on &lt;a href="http://blog.vlad1.com/"&gt;his blog&lt;/a&gt;.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.vlad1.com/archives/2006/10/01/120/"&gt;Redmond, Pt. 1&lt;/a&gt;: Says he hopes to figure out the 2D rendering in Vista and some Direct3D aspects.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.vlad1.com/archives/2006/10/02/121/"&gt;Redmond, Pt. 2&lt;/a&gt;: App compat, UAC, DPI awareness and the XBOX 360 room&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.vlad1.com/archives/2006/10/04/122/"&gt;Redmond, Pt. 3&lt;/a&gt;: By this time he's amused and slightly irked that just about everybody he meets is a Program Manager. Talks about CardSpace, Windows Installer and WiX, Watson, IE and running in Low Integrity Level, and closes with a SuperFetch rant&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.vlad1.com/archives/2006/10/04/123/"&gt;Redmond, Pt. 4&lt;/a&gt;: Clarification on SuperFetch and UAC. No he's not drinking the Microsoft kool-aid just yet. WPF/E, parental controls in Vista, IE again, and has some good advice for us on WhatWG.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.vlad1.com/archives/2006/10/05/124/"&gt;Missing pieces&lt;/a&gt;: He's excited about Low Integrity Mode with UAC and a project to integrate CLR languages with Firefox as first-class scripting language providers.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/Mozilla" rel="tag"&gt;Mozilla&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/Windows+Vista" rel="tag"&gt;Windows Vista&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/Microsoft" rel="tag"&gt;Microsoft&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116040384655702938?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116040384655702938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116040384655702938' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116040384655702938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116040384655702938'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/10/notes-from-mozilla-teams-visit-to.html' title='Notes from the Mozilla team&apos;s visit to Microsoft campus'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-116006276970212953</id><published>2006-10-05T07:39:00.000-07:00</published><updated>2006-10-05T08:51:30.696-07:00</updated><title type='text'>Desktop 2.0</title><content type='html'>&lt;p&gt;Kevin Gjerstad pointed us to&amp;nbsp;&lt;a title="Brian Romanko: Desktop 2.0" href="http://www.brianromanko.com/2006/10/desktop-20.html"&gt;this post&lt;/a&gt; by&amp;nbsp;Brian Romanko&amp;nbsp;who thinks we might be on the verge of Desktop 2.0. I hate buzzwords, and particularly despise the lazy little creations with version numbers. Yes, Web 2.0, you're on notice.&lt;/p&gt; &lt;p&gt;But&amp;nbsp;if you look beyond that facade, I think you'll see the truth in&amp;nbsp;Brian's statement. The past decade has seen the mercurial rise of applications on the Web. Most of the applications you use everyday have made their slow voyage to being online solutions. But &lt;strong&gt;Mac OS X and Windows Vista usher in an age of the resurgent&amp;nbsp;desktop application&lt;/strong&gt;. They help highlight the areas where the browser solution falls apart. I'm not for a minute suggesting that the web world cannot overcome some of the limiting factors (readability, offline applications, local storage etc.). But until a year or so ago, few would suggest that anything in the desktop world could stem the flow of applications into the web world.&lt;/p&gt; &lt;p&gt;With Windows Presentation Foundation (a .NET 3.0 component and part of Windows Vista), we've strived to blur the line between desktop applications and web applications. In many ways I see that as my charter and that of all my Application Model team mates. To developers, the same programming model used to develop a desktop app can be employed to develop a web app, or vice versa. To administrators, deploying the desktop app is about as simple as deploying a web app, taking the pain of installers away. To consumers, the richness and&amp;nbsp;user experience one expects from the desktop world is now possible within the browser. Our work has just started though and we haven't achieved nearly enough.&lt;/p&gt; &lt;p&gt;&lt;em&gt;Footnote&lt;/em&gt;: Miguel de Icaza, who has been known to be &lt;a href="http://tirania.org/blog/archive/2006/Aug-02.html"&gt;skeptical about WPF&lt;/a&gt;, now &lt;a href="http://tirania.org/blog/archive/2006/Oct-02-2.html"&gt;seems to be pleased&lt;/a&gt; with what we've done after he saw the New&amp;nbsp;York Times Reader.&amp;nbsp;Maybe we just do bad demos, and need to tone down the gratituitous use of animations, 3D and transforms. But the proof of the pudding is in the eating.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NetFX3&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/wpf" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/xbap" rel="tag"&gt;XBAP&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/mac+os+x" rel="tag"&gt;Mac OS X&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/desktop" rel="tag"&gt;Desktop&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-116006276970212953?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/116006276970212953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=116006276970212953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116006276970212953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/116006276970212953'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/10/desktop-20.html' title='Desktop 2.0'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115994092230800754</id><published>2006-10-03T22:28:00.000-07:00</published><updated>2006-10-03T22:53:42.823-07:00</updated><title type='text'>Web design patterns: Navigation</title><content type='html'>I was thinking of web design patterns that may be candidates for controls for use in Windows Presentation Foundation (WPF) apps, specifically the browser-hosted application flavors (XBAPs). I figure I should list the ones that I think are prevalent on the web first.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Bread crumb bars&lt;/strong&gt;&lt;br /&gt;This is what got me started. Hua and I were talking about this sample she started working on. Bread crumbs tell you where you are within a web application or site. &lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6755/387/1600/BreadCrumb.0.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6755/387/320/BreadCrumb.0.png" border="0" alt="Web design patterns: Bread crumb bar navigation" /&gt;&lt;/a&gt;&lt;br /&gt;Each label in this pattern is a hyperlink, making it easy to jump back to another level. This is especially suited for sites that have a structured hierarchy, usually 3 or more levels.&lt;br /&gt;&lt;br /&gt;Bread crumbs tell users exactly how they arrived at the current location but do not tell a user where they can go from here. &lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Directory-based navigation&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6755/387/1600/Directories.png"&gt;&lt;img style="float:right; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6755/387/320/Directories.png" border="0" alt="Web design patterns: Directory-based navigation" /&gt;&lt;/a&gt;If your site or application has categories and sub-categories, this is a good way to display them to users and facilitate navigation. This gives users a broad overview of functionality offered by the app, and the ability to switch between items in the same category. Directories are not suited for sites or apps that have deep hierarchies (i.e. &gt;2) or fragmented sub-categories.&lt;br /&gt; &lt;br /&gt;&lt;strong&gt;Doormat&lt;/strong&gt;&lt;br /&gt;The Doormat is another pattern used to direct users to the appropriate section of the site. This works well if you have a small number of categories, with each having small number of sub-categories. The typical use of this pattern is on a landing page or home page. &lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6755/387/1600/Doormat.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6755/387/320/Doormat.png" border="0" alt="Web design patterns: Doormat navigation" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Fly-out menus&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6755/387/1600/FlyOut.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6755/387/320/FlyOut.png" border="0" alt="Web design patterns: fly out menu navigation" /&gt;&lt;/a&gt;The Fly-out has an old standard at Microsoft.com. It conserves space well because menu items are generally hidden, and when exposed the fly-out menus overlay the page content. These were made popular on the web mainly with DHTML where the menu functionality could be made fast enough to not be an irritant. These fly-out menus can be horizontal or vertical.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Horizontal and Vertical navigation&lt;/strong&gt;&lt;br /&gt;This consists of a horizontal bar with hyperlinks laid side to side. Usually appears at the top of a page. Use this when you want the navigation item to be visible throughout your site or app. The current page is usually highlighted on the horizontal navigation bar. The position of this navigation bar at the top of the page can be a hindrance if your page content requires users to scroll down.&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6755/387/1600/HorizontalNav-1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6755/387/320/HorizontalNav-1.png" border="0" alt="Web design patterns: Horizontal navigation" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When sub-categories exist, it is not uncommon to employ the double horizontal navigation pattern. The law of diminishing returns applies with each added level.&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6755/387/1600/HorizontalNav-2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6755/387/320/HorizontalNav-2.png" border="0" alt="Web design patterns: Double Horizontal navigation" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6755/387/1600/VerticalNav.0.png"&gt;&lt;img style="float:left; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6755/387/400/VerticalNav.0.png" border="0" alt="Web design patterns: Vertical navigation" /&gt;&lt;/a&gt;Another variant is the Vertical Navigation menu. These menus suffer some of the same disadvantages as their Horizontal cousins. However, their main advantage is in their scalability. Scrolling vertically is seen as less of an irritant as scrolling horizontally.&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;strong&gt;Tabbed navigation&lt;/strong&gt;&lt;br /&gt;Tabs extend the horizontal navigation menu concept further. They allow categorizing content where top level items are fairly static. They also provide visual cues that suggest ownership over a page's content. The double tabular form has two levels where the top level is static and the bottom level changes based on top level selection.&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6755/387/1600/Tab-2.0.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6755/387/400/Tab-2.0.png" border="0" alt="Web design patterns: Tabbed navigation" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This post does not aim to be comprehensive. I hope it got you thinking about navigation paradigms. So in closing...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Questions to the WPF community:&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Would you consider it valuable if there were high-level, native support for these navigation patterns in WPF? If so, which ones?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Would you like to create one or more controls based on these patterns? If so, drop me a comment. I'll be happy to post them to the WPF community site.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Are there other important navigation paradigms that I missed? Any that you'd like to see WPF versions of?&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NetFX3&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/wpf" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/xbap" rel="tag"&gt;XBAP&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/ria" rel="tag"&gt;RIA&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/web+design+patterns" rel="tag"&gt;Web Design Patterns&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115994092230800754?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115994092230800754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115994092230800754' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115994092230800754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115994092230800754'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/10/web-design-patterns-navigation.html' title='Web design patterns: Navigation'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115980087404837629</id><published>2006-10-02T07:54:00.000-07:00</published><updated>2006-10-02T07:58:38.676-07:00</updated><title type='text'>How do I get the .NET Framework directory?</title><content type='html'>&lt;p&gt;Let's look at several ways to slice this one:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Hard code the path&lt;/strong&gt;&lt;br&gt;Use %WinDir%\Microsoft.NET\Framework\v2.0.50727&lt;br&gt;This method is fragile and involves knowing the several things not least the version of the Framework. If you were looking for simplicity, say in the WiX configuration file, you might go with this. Otherwise, there are much better options available.&lt;/p&gt; &lt;br /&gt;&lt;p&gt;&lt;strong&gt;HttpRuntime.ClrInstallDirectory&lt;/strong&gt;&lt;br&gt;If you're in ASP.NET or otherwise already have a reference to System.Web.dll, you may want to use the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.httpruntime.clrinstalldirectory.aspx"&gt;HttpRuntime.ClrInstallDirectory&lt;/a&gt; property. Otherwise, this may not be worth loading yet another assembly.&lt;/p&gt;  &lt;br /&gt;&lt;p&gt;&lt;strong&gt;GetCORSystemDirectory&lt;/strong&gt;&lt;br&gt;The &lt;a href="http://msdn2.microsoft.com/en-us/library/k0588yw5.aspx"&gt;GetCORSystemDirectory&lt;/a&gt;&amp;nbsp;method, in mscoree.dll, returns the fully qualified installation dir of .NET Framework loaded into the current process.&lt;/p&gt;&lt;code&gt;HRESULT GetCORSystemDirectory (&amp;nbsp; LPWSTR pbuffer, DWORD cchBuffer, DWORD* dwlength );&lt;/code&gt;  &lt;p&gt;&lt;code&gt;pbuffer&lt;/code&gt; - [out] Buffer in which the runtime returns a string containing the fully qualified name of the installation directory of the runtime&lt;/p&gt; &lt;p&gt;&lt;code&gt;cchBuffer&lt;/code&gt; - [in] the size in bytes of pbuffer&lt;/p&gt; &lt;p&gt;&lt;code&gt;dwlength&lt;/code&gt; - [out] The number of chars returned in pbuffer&lt;/p&gt; &lt;p&gt;Of course, if your managed code file needs this info, you'll need p/invoke.&lt;/p&gt; &lt;br /&gt;&lt;p&gt;&lt;strong&gt;RuntimeEnvironment.GetRuntimeDirectory&lt;/strong&gt;&lt;br&gt;My personal favorite. The RuntimeEnvironment class is in the System.Runtime.InteropServices namespace. I'd use&amp;nbsp;&lt;a href="http://windowssdk.msdn.microsoft.com/en-us/library/system.runtime.interopservices.runtimeenvironment.getruntimedirectory.aspx"&gt;RuntimeEnvironment.GetRuntimeDirectory()&lt;/a&gt; simply for elegant, readable and maintable code. Plus, it is in mscorlib.dll.&lt;/p&gt; &lt;br /&gt;&lt;p&gt;This post is by no means comprehensive. If you&amp;nbsp;know of&amp;nbsp;a better way to do this, please drop a comment.&lt;/p&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/netfx" rel="tag"&gt;NetFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/clr" rel="tag"&gt;CLR&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/how+to" rel="tag"&gt;How to&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115980087404837629?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115980087404837629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115980087404837629' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115980087404837629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115980087404837629'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/10/how-do-i-get-net-framework-directory.html' title='How do I get the .NET Framework directory?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115955376181454186</id><published>2006-09-29T07:16:00.000-07:00</published><updated>2006-09-29T11:23:56.600-07:00</updated><title type='text'>Letting your users do your bidding</title><content type='html'>&lt;p&gt;When all&amp;nbsp;you have is a hammer, everything looks like a nail. User-submitted content (user-generated content, to some) has its value, but is not the stuff that brands are made of.&lt;/p&gt; &lt;p&gt;NPR's&amp;nbsp;business news show Marketplace,&amp;nbsp;&lt;a href="http://marketplace.publicradio.org/shows/2006/09/27/PM200609278.html"&gt;reports&lt;/a&gt; on Frito-Lay's and Chevrolet's plans on involving amateurs - like you and me&amp;nbsp;- in the making of their Super Bowl commercials. Now this in itself isn't that remarkable; its been done before. But these companies hope to virally spread this ad campaign via YouTube, MySpace etc. Ostensibly this buys the commercials an extended shelf life online, which can be very expensive to achieve in traditional media.&lt;/p&gt; &lt;p&gt;But I think this is a recipe for disaster: you're driving the Chevy down&amp;nbsp;a cliff with a bag of chips.&amp;nbsp;A brand is built from an accumulation of experiences with a product or service. Advertising and&amp;nbsp;design&amp;nbsp;have great impact on the brand's image.&amp;nbsp;Merely the user experience isn't enough: advertisers have long sought to appeal to you at an emotional or psychological level. When done right, this increases the brand's perceived value in the user's mind. This is why you covet your favorite brand over the dozens like it in the same aisle at the grocery store.&lt;/p&gt; &lt;p&gt;If you forgo editorial control over the brand's image, you risk losing the brand's equity - the value built up over time.&amp;nbsp;For instance, what prevents someone from creating a parody of the product and posting it to YouTube as if to ride the competition wave. After all, you don't need to be Frito-Lay's official&amp;nbsp;nominee in order to get eyeballs on YouTube. Chevy seems to have learned from its folly from last year's contest, which created numerous ads that criticized its SUVs for being gas guzzlers and contributing to global warming. This year they're asking for written ideas only and their professional branding guys will make the ads. Not being able to see and vote on others' submissions, well, is not really user-submitted content. Aww,&amp;nbsp;does&amp;nbsp;that break your product's&amp;nbsp;&lt;em&gt;buzzword compliance&lt;/em&gt;?&lt;/p&gt; &lt;p&gt;Why not just take the boring route of&amp;nbsp;making good, entertaining ads that sell your message and then post them online with a &lt;a href="http://creativecommons.org/license/"&gt;liberal license&lt;/a&gt; on copying and reusing?&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/user+submitted+content" rel="tag"&gt;user submitted content&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/user+generated+content" rel="tag"&gt;user generated content&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/advertising" rel="tag"&gt;advertising&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/social+software" rel="tag"&gt;social software&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115955376181454186?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115955376181454186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115955376181454186' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115955376181454186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115955376181454186'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/09/letting-your-users-do-your-bidding.html' title='Letting your users do your bidding'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115852645646864498</id><published>2006-09-17T13:54:00.000-07:00</published><updated>2006-09-17T13:55:13.800-07:00</updated><title type='text'>What's in a name?</title><content type='html'>&lt;p&gt;This past week it was announced that "&lt;a href="http://atlas.asp.net/default.aspx?tabid=47"&gt;Atlas&lt;/a&gt;", the cross-browser, cross-platform,&amp;nbsp;web development technology&amp;nbsp;will be have a few new official names as part of it's release:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Microsoft AJAX Library: the client-side "Atlas" javascript library  &lt;li&gt;ASP.NET 2.0 AJAX Extensions: the server-side functionality  &lt;li&gt;ASP.NET AJAX Control Toolkit: formerly the "Atlas" Control Toolkit&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;When I first heard this, I almost cried out "Why? Why? Why?". I thought Atlas was a cool name. Easy to pronounce, memorize and recall,&amp;nbsp;and not offensive either. It was totally in the vein of "SmallTalk" and "Java". No, this was "Avalon" revisited!&lt;/p&gt; &lt;p&gt;Just as I sometimes jump headlong to conclusions, I am also capable of calm calculation. And I proceeded to do just that. I&amp;nbsp;may be&amp;nbsp;oversimplifying the problem, but I&amp;nbsp;will say that the mechanics behind choosing a good product name are different for consumer products than for platforms and frameworks. You are not going to sell a technology to astute developers and decision makers based merely on its name. "Atlas" by itself wasn't very informative.&amp;nbsp;&amp;nbsp;But the terms&amp;nbsp;"ASP.NET" and "AJAX" are more widely known,&amp;nbsp;and tagging them along gives the audience clarity on what "Atlas" actually is. Although, one could argue there's one too many buzzword in there (and herein my bias against the term "AJAX" rears it's ugly head again!). &lt;/p&gt; &lt;p&gt;A&amp;nbsp;name&amp;nbsp;may be used be to inform&amp;nbsp;the product's&amp;nbsp;audience about it's function. For example, the "No Child Left Behind Act". However, this isn't a necessary condition&amp;nbsp;for a name, and may sometimes even backfire on you as aforementioned piece of legislation allegedly has. On the other hand, using sterile, non sequitur names have proven to be very successful for some people. Take for example Toyota Camry. To a&amp;nbsp;potential customer, the name does not hold any special sway. It does not highlight the virtues of the car or even how Toyota engineering&amp;nbsp;places this car high among the most popular in the world. I doubt the car would be any less or more successful had it been given a different name.&amp;nbsp; [Ref: my post on &lt;a href="http://anumaana.blogspot.com/2006/09/bad-car-names.html"&gt;bad car names&lt;/a&gt;]&lt;/p&gt; &lt;p&gt;A cool name does not a cool product make.&amp;nbsp;Prefixing an&amp;nbsp;i to an everyday word does not automatically get you a fanatical following. You need to back it up with functionality and make it relevant to your audience. "Atlas" has seen over 250,000 downloads this year. That is a big deal for beta software. The number of people who downloaded this software mistaking it for content on Greek legends is likely statistically insignificant.&lt;/p&gt; &lt;p&gt;I won't lose sleep over developers running away in droves just because the new names are a tad, well, boring.&amp;nbsp;Developers and decision makers care about breadth and depth of functionality,&amp;nbsp;quality of&amp;nbsp;APIs, extensibility, ease of use, performance and&amp;nbsp;sundry other things. With Microsoft AJAX Library, ASP.NET AJAX Extensions and ASP.NET AJAX Control Toolkit, that remains unchanged despite the million more syllables added&amp;nbsp;to the name.&lt;/p&gt; &lt;p&gt;But there are downsides too. There can be no advantage in making a name a mouthful for people to utter.&amp;nbsp;The phrase&amp;nbsp;&lt;em&gt;spreading the word &lt;/em&gt;now no longer applies. People will soon seek acronyms and&amp;nbsp;abbreviated forms to refer to the name. Case in point: WPF. And that just&amp;nbsp;negates your branding efforts; plus&amp;nbsp;your argument of making the name meaningful no longer holds.&amp;nbsp;&lt;/p&gt; &lt;p&gt;I'm sitting on the fence on this one.&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115852645646864498?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115852645646864498/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115852645646864498' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115852645646864498'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115852645646864498'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/09/whats-in-name.html' title='What&apos;s in a name?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115643786805241932</id><published>2006-08-24T06:44:00.000-07:00</published><updated>2006-08-24T09:48:09.376-07:00</updated><title type='text'>Achievement unlocked</title><content type='html'>&lt;p&gt;It is the little things in life that matter much. Yesterday, I successfully argued for a bug fix in the Windows Shiproom. &lt;/p&gt; &lt;p&gt;This was my first time in that august place and at first I was a bit overwhelmed. At 3pm I entered this large conference room which was already packed to the rafters and the meeting had just begun. At the center of the room was a large table with what seemed like 18&amp;nbsp;people - an assortment of architects, project managers etc.&amp;nbsp;- seated around. No, Brian Valentine wasn't there although that'd have been the icing on the cake. I've never had the pleasure of arguing with him.&amp;nbsp;Around the fringes of the room were about 10-12&amp;nbsp;more chairs, all taken. There were people standing and&amp;nbsp;leaning against walls; others were&amp;nbsp;seated, with some&amp;nbsp;squatting, and still others like me with their feet stretched forward, getting in the way of people bustling into the room. If there was one common thread tying everybody in this room, it was that &lt;em&gt;everybody had an opinion and was willing to let you have it&lt;/em&gt;. Good, I like it when they're aggressive. It tells you they care about what goes in and what stays out.&lt;/p&gt; &lt;p&gt;One wall was lined with clocks showing the current time in places around the world. There was a large map of the world on one side. None of these implements were used in the&amp;nbsp;time I was there, but&amp;nbsp;like in a tasteful B-movie,&amp;nbsp;I thought they added to the ambience and elevated the importance of the place.&amp;nbsp;An adjacent&amp;nbsp;wall had a poster recording the "Longhorn build release counter" which listed the number of consecutive dates that a build has been released from the main Windows branch, compared to the all time record. The wall opposite the clocks was lined with several posters, each with a classic cop-out or explanation like "Oh, its only a one line change in the [manifest | XML file]" that the Shiproom has heard one too many times.&lt;/p&gt; &lt;p&gt;The Windows Shiproom is the final arena where your Windows bugs are approved or rejected. In the&amp;nbsp;typical development cycle, your bugs do not get escalated to this level. But when the product - in this case Windows Vista - goes to escrow, it is effectively under lockdown, and only high value changes are&amp;nbsp;considered by feature/component teams and brought up to the Windows Shiproom. Once these bugs are fixed and exhaustively tested, one goes to through the various Shiprooms for approval. In&amp;nbsp;the case&amp;nbsp;of this bug in question,&amp;nbsp;that journey involved the feature team triage,&amp;nbsp;dev changes and test work, the Avalon Shiproom, the .NET Framework (WinFX) Shiproom and culminated with the Windows Shiproom.&lt;/p&gt; &lt;p&gt;Aside from procedural questions and quality gates questions, one is asked for a problem description as an end-user scenario, the nature of the bug, the nature of the fix, the risk of the fix,&amp;nbsp;the risk of not&amp;nbsp;taking the fix, the amount and quality of testing that went in, etc.&amp;nbsp;Most times&amp;nbsp;at the local Shiproom, you are&amp;nbsp;asked what other such problems could/will occur and what&amp;nbsp;you're doing to&amp;nbsp;prevent them. Because the playing fields and system interactions&amp;nbsp;are so different between the feature level, the component level and the OS level, different sets of experts need to scrutinize the fix and give approval. This is especially important when the product is locked down and considered stable. Fixes that pose lowest risk to the product and highest value to customers are the ones that survive, while the others die by the wayside, at the feature team triage or local Shiproom levels. My bug came for consideration toward the end of the meeting and a couple minutes later the Shiproom gave its approval.&lt;/p&gt; &lt;p&gt;This couple hours was an important experience for me and taught me a great deal about shipping products. The motivations behind your decisions are different based on where you are in the product's development cycle.&amp;nbsp;You do&amp;nbsp;everything you can to make sure your customers have the best possibile experience. Only, it is manifested in different ways at different times. During active development, we go the extra mile to make sure a fix goes in. But when the product is stable and is ready to ship, one needs to take a measured look at what impact one's fix can have on all of the hard work that went in over the years. You're still being true to your customers. You're just showing it differently.&lt;/p&gt; &lt;p&gt;If life were an XBOX 360 game, I'd see the little notification message that says "nerddawg: Achievement unlocked".&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NetFX3&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/Windows" rel="tag"&gt;Windows&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/Vista" rel="tag"&gt;Vista&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/avalon" rel="tag"&gt;Avalon&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/wpf" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/projectmanagement" rel="tag"&gt;ProjectManagement&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115643786805241932?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115643786805241932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115643786805241932' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115643786805241932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115643786805241932'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/08/achievement-unlocked.html' title='Achievement unlocked'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115575748916762365</id><published>2006-08-16T12:44:00.000-07:00</published><updated>2006-08-16T12:57:22.586-07:00</updated><title type='text'>Debugging Windows Presentation Foundation applications</title><content type='html'>&lt;p&gt;Windows Presentation Foundation&amp;nbsp;(WPF)&amp;nbsp;apps, like other managed code applications, can be built on the command line as well as within an IDE like Visual Studio. The Visual Studio IDE environment with "Orcas"&amp;nbsp;tools&amp;nbsp;provides for sophisticated debugging features. Since there are some nuances to debugging, I figured it merited a post. I will try to keep this live, as things change.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;The F5 debugging&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;People familiar with managed code debugging will&amp;nbsp;see that&amp;nbsp;the process of debugging WPF apps, whether standalone or browser-hosted,&amp;nbsp;is pretty much the same.&amp;nbsp;Within VS, you hit F5 to start the app in&amp;nbsp;debug mode. &lt;/p&gt; &lt;p&gt;WPF browser-hosted apps (XBAPs), unlike their standalone counterparts, do not have a main method in the application executable. They are therefore launched by PresentationHost.exe, an out-of-process document object host, which is the registered Shell and MIME handler for .xbap files.&amp;nbsp;&amp;nbsp;The XBAP project file lists PresentationHost.exe as the program that needs to be launched when you debug XBAPs (via &lt;code&gt;StartProgram&lt;/code&gt; project property). The StartArguments property lists the command line parameters passed on to PresentationHost.exe. The notable item here is the -debug argument that tells PresentationHost.exe, &lt;em&gt;"You are&amp;nbsp;running in debug mode. Here's the XBAP you need to launch.&amp;nbsp;Be a darling and&amp;nbsp;don't induct it into the ClickOnce store".&lt;/em&gt;&lt;/p&gt; &lt;p&gt;There are some notable differences you need to understand:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;When you debug an XBAP, your app is not ClickOnce-deployed; meaning, the app is not inducted into the ClickOnce app store. This allows you to rev your application without revving the version numbers.  &lt;li&gt;Because of the above, the app will not return &lt;code&gt;ApplicationDeployment.IsNetworkDeployed&lt;/code&gt; as true.  &lt;li&gt;The app is launched from your&amp;nbsp;project's &lt;code&gt;OutputPath&lt;/code&gt; (&lt;code&gt;bin\Debug&lt;/code&gt; folder) and that location is treated as the "site of origin" for the app. Any remote resources need to be manually placed at that location. &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Debugging by attaching to&amp;nbsp;a running process&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;This is like attaching to any other running program in Visual Studio, except that you attach to PresentationHost.exe, not the XBAP or its executable. Assuming you've set breakpoints in the source files, the actual debugging steps are:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;From a command window run: &lt;code&gt;%WinDir%\system32\PresentationHost.exe -debug&lt;/code&gt;  &lt;li&gt;Within Visual Studio, click project &lt;strong&gt;Properties &lt;/strong&gt;-&amp;gt; &lt;strong&gt;Debug &lt;/strong&gt; &lt;li&gt;Check &lt;strong&gt;Enable unmanaged code debugging.&lt;/strong&gt; Save your changes.&amp;nbsp;  &lt;li&gt;Click &lt;strong&gt;Debug&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Attach to Process&lt;/strong&gt;  &lt;li&gt;Select PresentationHost.exe from the available processes list  &lt;li&gt;In the &lt;strong&gt;Attach To&lt;/strong&gt; section, hit &lt;strong&gt;Select &lt;/strong&gt;and check &lt;strong&gt;Managed Code &lt;/strong&gt;and &lt;strong&gt;Native Code&lt;/strong&gt;  &lt;li&gt;Click &lt;strong&gt;Attach&lt;/strong&gt;  &lt;li&gt;Double click on the XBAP from your project's &lt;code&gt;bin\Debug&lt;/code&gt; folder&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;The app will launch in your default browser. All your break points should get hit.&lt;/p&gt; &lt;p&gt;If you have multiple XBAPs running, make sure you attach to the right PresentationHost instance. It is easier if the XBAP being debugged is the only&amp;nbsp;XBAP running. Also, the next time you want to debug the same XBAP, make sure you've cleared the ClickOnce app store (using &lt;code&gt;mage -cc&lt;/code&gt;) or incremented the app's version.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Files at site of origin&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;If your app needs to access files or web services&amp;nbsp;residing at&amp;nbsp;it's site of origin, you can&amp;nbsp;still use the F5 debugging method. Only, you need to tell Visual Studio to debug the app as if it were deployed from that location.&amp;nbsp;Say, you have an app that is intended to&amp;nbsp;be deployed&amp;nbsp;from &lt;a href="http://www.yoursite.com/apps/"&gt;http://www.yoursite.com/apps/&lt;/a&gt;. Now, that location is deemed the application's site of origin.&amp;nbsp;Suppose you have&amp;nbsp;several&amp;nbsp;data files and a web service running at that location, that your WPF app needs to access. You need to:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Navigate to project &lt;strong&gt;Properties&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Security&lt;/strong&gt; tab -&amp;gt; &lt;strong&gt;Advanced&lt;/strong&gt; button  &lt;li&gt;Make sure the "&lt;strong&gt;Grant the application access to its site of origin&lt;/strong&gt;" option is checked  &lt;li&gt;Type in the location from where you want VS to believe the app is deployed. In our case, it will be &lt;a href="http://www.yoursite.com/apps/"&gt;http://www.yoursite.com/apps/&lt;/a&gt;  &lt;li&gt;Click &lt;strong&gt;OK&lt;/strong&gt;  &lt;li&gt;Hit Ctrl+Shift+S to save all files  &lt;li&gt;Close the solution (&lt;strong&gt;File&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Close solution&lt;/strong&gt;)  &lt;li&gt;Re-open solution  &lt;li&gt;Hit &lt;strong&gt;F5&lt;/strong&gt; to debug&amp;nbsp;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Steps 6 and 7 are required because currently these properties are applied only on project load. These actions modify the project's &lt;code&gt;StartArguments&lt;/code&gt; property. Please do not edit its value separately.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Debugging XBAPs&amp;nbsp;to be run within&amp;nbsp;Media Center&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Assuming you have the Media Center SDK and by extension the XBAP templates for Media Center installed on your development machine, here's how you debug an XBAP meant to run in MCE:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;From a command window run: &lt;code&gt;%WinDir%\system32\PresentationHost.exe -debug&lt;/code&gt;  &lt;li&gt;From within Visual Studio, hit &lt;strong&gt;F5&lt;/strong&gt; to debug your XBAP&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;A .MCL file is created and the MCE Shell (&lt;code&gt;ehshell.exe&lt;/code&gt;) is launched with this file name as parameter. You will see your XBAP load and all your breakpoints should trigger.&lt;/p&gt; &lt;p&gt;There are&amp;nbsp;one issue you need to be cognizant about: While running or debugging your XBAP (created with the MCE template), you will notice that changes you made to the app are not reflected when the app is run. This is because the app run outside of VS was somehow cached in the ClickOnce app store (unlike with conventional XBAPs). You can work around this issue by incrementing the version number of your application, or by using &lt;code&gt;mage -cc&lt;/code&gt; to clear your ClickOnce app store. Make sure the MCE shell is closed when you do this. Mage.exe ships with the .NET SDK or Windows SDK.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Happy debugging!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NetFX3&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/orcas" rel="tag"&gt;Orcas&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/wpf" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/avalon" rel="tag"&gt;Avalon&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/MediaCenter" rel="tag"&gt;MediaCenter&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/debugging" rel="tag"&gt;Debugging&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115575748916762365?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115575748916762365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115575748916762365' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115575748916762365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115575748916762365'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/08/debugging-windows-presentation_16.html' title='Debugging Windows Presentation Foundation applications'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115565918102230484</id><published>2006-08-15T09:26:00.000-07:00</published><updated>2006-08-15T09:29:15.016-07:00</updated><title type='text'>WPF deployment errors and what they mean</title><content type='html'>&lt;p&gt;&lt;strong&gt;Platform Requirements Not Met&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;During deployment, the pre-requisites and references listed in the WPF browser application's (XBAP's) manifests are matched against the libraries accompanying the application (reference assemblies) or those installed in the Global Assembly Cache (GAC). If one or more references in the application manifest cannot be located, the "Platform Requirements Not Met" error is shown.&lt;/p&gt; &lt;p&gt;If you build your WPF app using one version (or CTP) of .NET Framework 3.0 but have another version on the client machine, you will see this error. In addition, you will see a "Get .NET Framework" button so you can download and install the right version of the platform in order to view the app.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Trust Not Granted&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The "Trust Not Granted" error typically indicates the app is asking for more permissions than are available to it based on its deployment zone, or using features not supported safely in the sandbox. This is the sandbox refusing to run the app. As a workaround, I'd recommend running it from a different zone, say intranet or even Local Machine. If your app however does need to run in that specific zone (say, Internet zone), then you must re-factor the pieces of code that require elevated permissions or rely on features not enabled to run in the XBAP's partial trust sandbox.&lt;/p&gt; &lt;p&gt;Some time ago, there was a bug in the XBAP deployment mechanism of a .NET 3.0 CTP that resulted in the "Trust Not Granted" error showing up in place of "Platform Requirements Not Met", which shows up when your application requires one or more libraries not installed on the client machine. That has since been fixed but if you have older CTP bits of WPF on your client, you could be seeing the error because of this.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115565918102230484?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115565918102230484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115565918102230484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115565918102230484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115565918102230484'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/08/wpf-deployment-errors-and-what-they.html' title='WPF deployment errors and what they mean'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115276507528087379</id><published>2006-08-11T17:47:00.000-07:00</published><updated>2006-08-11T18:12:12.216-07:00</updated><title type='text'>New Mac TV Ads. Not!</title><content type='html'>&lt;a href="http://blogs.msdn.com/kamvedbrat"&gt;Kam&lt;/a&gt;, &lt;a href="http://www.notstatic.com/"&gt;Robbie&lt;/a&gt;, Jennifer and I were talking about the Mac ads, featuring John Hodgman and that other pretentious ass, getting heavy rotation on television. I love &lt;a href="http://www.youtube.com/watch?v=ot9Jp6-mB-8"&gt;those ads&lt;/a&gt;! They make me wanna run and buy a new PC. Maybe I just identify with John's character. Well, apparently a few guys from The Best Week Ever had too much time on their hands and the result is this spoof on the said Mac ads. &lt;a href="http://www.youtube.com/watch?v=UA3NyRr4Eng"&gt;Here it is&lt;/a&gt;. Worth a look. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=0Svfzr2FlJQ"&gt;Touché!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/mac" rel="tag"&gt;Mac&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/pc" rel="tag"&gt;PC&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/advertising" rel="tag"&gt;Advertising&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115276507528087379?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115276507528087379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115276507528087379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115276507528087379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115276507528087379'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/08/new-mac-tv-ads-not.html' title='New Mac TV Ads. Not!'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115497731158028485</id><published>2006-08-07T11:53:00.000-07:00</published><updated>2006-08-07T12:01:52.100-07:00</updated><title type='text'>The JSON RFC and JSONRequest</title><content type='html'>The &lt;a href="http://www.ietf.org/rfc/rfc4627.txt?number=4627"&gt;JSON RFC&lt;/a&gt; (4627) was recently submitted by json.org. They are also proposing a &lt;a href="http://www.json.org/JSONRequest.html"&gt;JSONRequest&lt;/a&gt; which will be similar to XmlHttpRequest but allow two-way XML data interchange with cross-domain access securely.&lt;br /&gt;&lt;br /&gt;I think the RFC speaks of good tidings, but I have mixed feelings about the JSONRequest particularly since the &lt;a href="http://nerddawg.blogspot.com/2006/04/proposal-for-cross-site-extensions-to.html"&gt;Web APIs WG recognizes the problem&lt;/a&gt; and intends to support cross-domain access. Besides, does this model of having FooRequest and BarRequest for every little detail really scale? &lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/JSON" rel="tag"&gt;JSON&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115497731158028485?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115497731158028485/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115497731158028485' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115497731158028485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115497731158028485'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/08/json-rfc-and-jsonrequest.html' title='The JSON RFC and JSONRequest'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115405260357966584</id><published>2006-07-27T19:06:00.000-07:00</published><updated>2006-07-27T19:10:04.486-07:00</updated><title type='text'>Want to test drive Office 2007?</title><content type='html'>If you want to test drive Office 2007 but don’t want to install it, try &lt;a href="http://www.runaware.com/microsoft/en-us/office2007/td" title="Test drive Office 2007 from within your browser"&gt;this&lt;/a&gt;. Requires Internet Explorer.&lt;br /&gt; &lt;br /&gt;Otherwise, get the Beta &lt;a href="http://www.microsoft.com/office/preview/beta/getthebeta.mspx" title="Office 2007 - Get the Beta"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/office" rel="tag"&gt;Office&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/office12" rel="tag"&gt;Office12&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/office2007" rel="tag"&gt;Office2007&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115405260357966584?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115405260357966584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115405260357966584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115405260357966584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115405260357966584'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/07/want-to-test-drive-office-2007.html' title='Want to test drive Office 2007?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115404433246724386</id><published>2006-07-27T16:34:00.000-07:00</published><updated>2006-07-27T16:52:13.156-07:00</updated><title type='text'>Sudoku</title><content type='html'>I just posted an entry on the WPF community site for a sample that uses .NET Framework 3.0 technology to create a &lt;a href="http://wpf.netfx3.com/files/folders/applications/entry4714.aspx"&gt;peer-to-peer version of Sudoku&lt;/a&gt;, the popular number logic game. This was originally posted by &lt;a href="http://blogs.msdn.com/shycohen/"&gt;Shy Cohen&lt;/a&gt; on the WCF community site. Thanks, Shy.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/6755/387/1600/Sudoku_xbap.0.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/6755/387/320/Sudoku_xbap.0.png" border="0" alt="Sudoku application in the browser, created using .NET Framework 3.0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It uses Windows Presentation Foundation (WPF) for its stunning graphics, Windows Communication Foundation (WCF) to enable P2P support and Windows Workflow Foundation (WF) powers the game generation logic. The package contains source code for both the standalone and browser-hosted (XBAP) flavors.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/winfx" rel="tag"&gt;WinFX&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/wpf" rel="tag"&gt;WPF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/wcf" rel="tag"&gt;WCF&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/workflow" rel="tag"&gt;Workflow&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/XAML" rel="tag"&gt;XAML&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netfx3" rel="tag"&gt;NetFX3&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115404433246724386?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115404433246724386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115404433246724386' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115404433246724386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115404433246724386'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/07/sudoku.html' title='Sudoku'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6810771.post-115397055703531217</id><published>2006-07-26T19:41:00.000-07:00</published><updated>2006-07-26T20:22:40.413-07:00</updated><title type='text'>Is this the beginning of a trend?</title><content type='html'>AOL's Netscape.com recently started offering to pay top contributors to major social news/bookmarking sites $1000 a month to contribute content at Netscape. As anybody who's participated in any community knows, a small percentage of members create content that is consumed by and benefits the vast majority of the community. This is aptly reflected in all things from content on Wikipedia and contributions to the Linux kernel. I think AOL made a smart business move for the newly redesigned Nescape.com; some would say predatory in its targetting of contributors to competitors like Digg and Reddit. In &lt;a href="http://www.calacanis.com/2006/07/18/everyones-gotta-eat-or-1-000-a-month-for-doing-what-youre/"&gt;Jason Calcanis&lt;/a&gt;'s words:&lt;blockquote&gt;Before launching the new Netscape I realized that Reddit, NewsVine, Delicious, and DIGG were all driven by a small number of highly-active users. I wrote a blog post about what drives these folks to do an hour to three hours a day of work for these sites which are not paying them for their time. In other words, they are volunteering their services. The response most of these folks gave back to me were that they enjoyed sharing the links they found and that they got satisfaction out of being an "expert" or "leader" in their communities.&lt;/blockquote&gt;&lt;br /&gt;A lot of Web 2.0 -type pundits have deplored this move saying that people contribute content without monetary motivations. But this doesn't make sense to me. I'm sure these same critics do not work for free. This isn't about charity at all. It's business.&lt;br /&gt;&lt;br /&gt;When you contribute content to one of these sites, they host ads and make money off of your content. Now if one of these sites offers to remunerate you for the time and effort, is it such a bad deal for you? Sure you love the props you get for flaming Micro$oft on Slashdot. But props with dollars to pay the bills are welcome too, right? Over the years, I've heard from many c0d3 hax0r colleagues, words along the lines of, "I can't believe they're paying me for doing something I love!". AOL's move will likely spread that cheer. I think this is a sign of things to come.&lt;br /&gt;&lt;br /&gt;&lt;span id="tag"&gt; Tags: &lt;a id="tag" href="http://technorati.com/tag/social-bookmarking" rel="tag"&gt;social-bookmarking&lt;/a&gt;, &lt;a id="tag" href="http://technorati.com/tag/netscape" rel="tag"&gt;Netscape&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6810771-115397055703531217?l=nerddawg.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://nerddawg.blogspot.com/feeds/115397055703531217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6810771&amp;postID=115397055703531217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115397055703531217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6810771/posts/default/115397055703531217'/><link rel='alternate' type='text/html' href='http://nerddawg.blogspot.com/2006/07/is-this-beginning-of-trend.html' title='Is this the beginning of a trend?'/><author><name>Ashish Shetty</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
