<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
   <channel>
      <title>dotnet mania</title>
      <link>http://eric.burke.name/dotnetmania/</link>
      <description></description>
      <language>en</language>
      <copyright>Copyright 2010</copyright>
      <lastBuildDate>Wed, 17 Mar 2010 12:51:31 -0500</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/?v=4.2-en</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 

      
      <item>
         <title>MIX10 Keynote, Day 2</title>
         <description><![CDATA[<p>Day 2 of the MIX keynote focused on the Web and a little bit of Visual Studio.</p>  <p>Dean Hachamovitch, who runs the IE team, spoke first.&#160; His main focus was an update on the progress of IE9.</p>  <ul>   <li>History</li>    <ul>     <li>In the last year: IE8 getting big, Windows 7 released, IE6 going away </li>      <li>Still supporting IE6 with security updates </li>      <li>Making a big effort to get people off IE6</li>   </ul>    <li>Performance</li>    <ul>     <li>new JS engine: “Chakra”</li>      <li>IE9 current SunSpider v0.9 score: 599 (IE8 &gt; 3000) </li>      <li>Compiled JS in background, on separate core if possible, to take full advantage of the hardware</li>   </ul>    <li>Standards – goal is to be totally standards compliant</li>    <ul>     <li>They did a study of 7000 sites, looking at what Web APIs they used.&#160;&#160; Some common ones include indexOf, CSS opacity change, getElementById, addEventListener</li>      <li>DEMO: same markup in IE9, Chrome, FF using event listeners and opacity on hovers </li>      <li>DEMO: CSS3 selectors test, IE9 passes 578/578 tests </li>      <li>DEMO: Border radius changes -- serious browser differences between IE9, Chrome, FF </li>      <li>ACID3: IE9 passes 55/100 </li>      <li>Working with standards committee and other browser vendors; contributing DOM, CSS3 Standards compliance tests to W3C (100+ tests)</li>   </ul>    <li>GPU powered HTML5</li>    <ul>     <li>DEMO: rotating logos in 3D:&#160; in IE9 very little CPU with 256+ logos and 60fps; Chrome 2fps with 32 images using both cores; FF a little better but still hitting CPU</li>   </ul>    <li>Platform Preview: download it today</li>    <ul>     <li>Lightweight frame around IE9 core </li>      <ul>       <li>no back button </li>        <li>no phishing protection </li>        <li>does have devtools          <ul>           <li>Network tab to capture traffic </li>            <li>Script tools </li>            <li>SVG support </li>            <li>Force IE5/7/8 document mode</li>         </ul>       </li>        <li>Goal: update every 8 weeks </li>        <li>More forums for community</li>     </ul>   </ul>    <li>HTML5 Video</li>    <ul>     <li>Not there today, coming in an update </li>      <li>DEMO: YouTube, not using flash </li>      <li>DEMO: chrome 720p = peg both cores, drop frames; IE9 running two HD streams, both cores about 40%, no frame drops </li>      <li>DEMO: Video carousel with opacity compositing on same surface</li>   </ul> </ul>  <p>Scott Guthrie was up next, talking some more about the tools.</p>  <ul>   <li>VS10 and .NET 4 will release in April</li>    <li>Code Editing improvements</li>    <ul>     <li>Full multimon support&#160; -- drag tool windows out to other monitors, etc.</li>      <li>Better intellisense</li>      <ul>       <li>faster for all JS libraries, including 2x on YUI and jQuery</li>        <li>substring matching and CamelCase matching (e.g., typing SCC will match SomeCoolClass) </li>     </ul>      <li>Better code navigation </li>      <li>Class visualizer </li>   </ul>    <li>Debugging improvements</li>    <ul>     <li>Historical debugging</li>      <li>Debug managed minidumps in VS without SOS</li>      <li>Threading visualization</li>      <li>Parallel task visualization</li>   </ul>    <li>ASP.NET improvements</li>    <ul>     <li>WebForms clean markup, no inline styles, better CSS support </li>      <li>Smaller ViewState (ASP.NET) </li>      <li>Clean Semantic URLs out of the box </li>      <li>Better controls </li>      <li>Support for MVC 2.0 built in </li>      <li>Multiple configs for web deployment </li>      <li>One-click publish: content, code, databas</li>   </ul>    <li>jQuery </li>    <ul>     <li>making code contributions </li>      <li>providing QA and testing support to the community</li>   </ul>    <li>OData </li>    <ul>     <li>iPhone support </li>      <li>SharePoint: lists exposed as OData </li>      <li>Excel: support for pivot, chart, etc. using OData sources </li>      <li>Support for jQUery, palm webOS, php, restlet </li>      <li>.NET OData client released under apache2 license</li>   </ul> </ul>  <p>Overall, Day 2 was interesting, but not as much as <a href="http://eric.burke.name/dotnetmania/2010/03/15/15.13.46" target="_blank">Day 1</a>.&#160; The tools are getting better all the time, which is good.&#160; Hard to say what will happen with IE9 – it demos well today, but who knows what will happen when it releases.&#160; I know for me, I don’t spend much time on the web other than looking for what I need, so browser startup time is the biggest thing for me.&#160; IE8 doesn’t have it, so I don’t use it.&#160; We shall see…</p>  <p>As always, you can see the <a href="http://www.microsoft.com/presspass/events/mix/videoGallery.aspx" target="_blank">keynotes and other videos here</a>.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2010/03/17/12.51.31</link>
         <guid>http://eric.burke.name/dotnetmania/2010/03/17/12.51.31</guid>
         <category></category>
         <pubDate>Wed, 17 Mar 2010 12:51:31 -0500</pubDate>
      </item>
      
      <item>
         <title>Windows Phone 7 Application Platform Overview</title>
         <description><![CDATA[<p>The basic story around development for Windows Phone is that it’s part of a larger application strategy.&#160; You have a couple base technologies (<a href="http://silverlight.net" target="_blank">Silverlight</a> and XNA) and 3 screens (WP7, Xbox LIVE, Windows 7).&#160; Various pieces parts are in play, including input, media, data, cloud, and phone access.&#160; The idea is that you can write your app to run in all 3 places with minimal tweaking.&#160; Of course, the meaning of “minimal” is all relative, and we know there’s always a lot of work surrounding those places where the apps differ, but it’s a good starting point for now.</p>  <h3>Features</h3>  <ul>   <li>.NET: superset of Silverlight 3 </li>    <li>WCF support for SOAP and REST </li>    <li>Media: capture and playback </li>    <li>Phone access: phone UI, sensors (accelerometer now, IP-based sensors later), picker for contacts and photos [NOTE: programmatic access to the camera will not be available in v1; however, a flow where you can have the user hit a button, take a picture, then kick you back to the app to bring up the photo picker will be there] </li>    <li>Data: Isolated storage, LINQ to objects/XML </li>    <li>Cloud: app deployment and updates, push notifications, location, Xbox LIVE [can use SL and not XNA and still write an Xbox LIVE game!] </li> </ul>  <h3>Application Model</h3>  <ul>   <li>App runtime: .NET CLR </li>    <li>Process model (OS): Windows CE with some abstractions </li>    <li>Deployment: service-based, deploy to marketplace, then to phone </li> </ul>  <h3>Development lifecycle</h3>  <ul>   <li>Emulator testing      <ul>       <li>Phone OS compiled for x86 running virtualized; it is NOT emulating the ARM processor </li>        <li>3D accelerated using Direct3D </li>        <li>Multitouch support so that you can test your touch interactions without debugging on the device! </li>     </ul>   </li>    <li>Device testing      <ul>       <li>Web-based service which allows you to unlock your phone for debugging purposes and use debug tools on the device </li>        <li>Dev tools can start debug on the device </li>     </ul>   </li>    <li>Packaging      <ul>       <li>Basic idea: dev/debug/test &gt; submit for review &gt; certification and signing &gt; Windows Phone app deployment service &gt; marketplace </li>        <li>Review process includes business policies, technical policies, and content policies.&#160; More detail tomorrow. </li>     </ul>   </li> </ul>  <h3>Marketplace</h3>  <ul>   <li>Similar to iTunes </li>    <li>Browse apps </li>    <li>Try before you buy!&#160; Apps can query the IsTrial() API and expose the proper set of features; to upgrade from trial to full, there is a built-in UI that is one API call </li>    <li>Payment flexibility </li>    <li>Automatic application updates (user must OK) </li> </ul>  <h3>Misc</h3>  <ul>   <li>All UI is accelerated through DirectX; preserve battery </li>    <li>Push notifications are all done through a single pipe; focus on efficiency and battery life </li>    <li>Deployment within an enterprise will be up to the enterprise in v1 – pure consumer focus right now </li>    <li>No demand-loading XAPs in v1 [this is common in Silverlight apps today], so you have to ship all your code in one package </li>    <li>No announcements yet on Silverlight for XBOX </li>    <li>No sharing data between applications – IsolatedStorage is sandboxed.&#160; To share data use a cloud service. </li>    <li>IPC only available for built-in apps, not for 3rd parties in v1 </li>    <li>No background apps, but common scenarios work, such as continuing to play music, phone call, etc.; also live tiles can update through the notifications service </li> </ul>  <p>All in all, it has a lot of promise.&#160; I’m going to play around with it and kick the tires. ;)&#160; If you want to get the devtools, go to <a title="http://developer.windowsphone.com/windows-phone-7-series/" href="http://developer.windowsphone.com/windows-phone-7-series/">http://developer.windowsphone.com/windows-phone-7-series/</a>.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2010/03/15/22.06.46</link>
         <guid>http://eric.burke.name/dotnetmania/2010/03/15/22.06.46</guid>
         <category></category>
         <pubDate>Mon, 15 Mar 2010 22:06:46 -0500</pubDate>
      </item>
      
      <item>
         <title>MIX10 Keynote, Day 1</title>
         <description><![CDATA[<p>MIX10 is all abuzz with <a href="http://silverlight.net" target="_blank">Silverlight</a> 4 and <a href="http://developer.windowsphone.com/windows-phone-7-series/" target="_blank">Windows Phone 7</a>.&#160; So let’s get right to the meat of it.</p>  <p>You know it’s going to be a demo-packed keynote when <a href="http://weblogs.asp.net/scottgu/" target="_blank">ScottGu</a> is the opening speaker.&#160; He’s known for talking a little, demo’ing a lot, and writing code onstage.&#160; Today was no different.&#160; Here’s how the keynote went down.</p>  <h3>Silverlight 4</h3>  <ul>   <li>Deployed &gt; 60% of desktops (was 45% at <a href="http://microsoftpdc.om/" target="_blank">PDC</a> in November) </li>    <li>Large enterprises starting to adopt </li>    <li>Consumer sites: <a href="http://www.mls.net/" target="_blank">MLS</a>, <a href="http://www.nbcolympics.com/" target="_blank">NBC Olympics</a>, <a href="http://nbcsports.msnbc.com/id/25907471/" target="_blank">Sunday Night Football</a>, <a href="http://www.netflix.com/" target="_blank">Netflix</a>, <a href="http://www.bing.com/maps/explore/" target="_blank">Bing Maps</a>, Victoria’s Secret, UFC, McDonalds, NCAA March Madness </li>    <li>Vancouver Olympics      <ul>       <li>12 million hours streamed, up to 76 minutes in a single stream, up to 720p </li>        <li>IIS Smooth Streaming </li>        <li>live ad injection </li>        <li>rough-cut editor written in SL for immediate highlight publishing </li>        <li>open source player and tools: <a href="http://smf.codeplex.com">http://smf.codeplex.com</a> </li>     </ul>   </li>    <li>New features in SL4 RC      <ul>       <li>Fullscreen on secondary monitor </li>        <li>Pivot control for large data set visualization </li>     </ul>   </li> </ul>  <h3>Windows Phone 7</h3>  <p>Windows Phone 7 is VERY similar to iPhone and Android (not surprisingly).&#160; It has a very Zune-y flavor, but a lot of the interactions are very similar.&#160; Basic facts:</p>  <ul>   <li>Every device is a Zune </li>    <li>Dev platform: Silverlight 3 + XNA </li>    <li>3 buttons on the bottom: start, search, back </li>    <li>UI Leverages the Pivot control </li>    <li>App bar – common place to find application buttons, sits at the bottom of the app’s UI – is expandable vertically as well as contextual so that you can offer different choices based on app state </li>    <li>Item delete – small checkboxes next to the item; check one and they all get bigger so you can check more </li>    <li>Start Menu      <ul>       <li>Main screen has tiles for each app; each tile is live and can animate its content, etc. </li>        <li>Press and hold to rearrange/delete apps like iPhone </li>     </ul>   </li>    <li>Hubs      <ul>       <li>A hub is a pivot with content/apps that are similar, e.g., Music, Photos, People, etc. </li>        <li>Panoramic UI – content wider than screen with columnar panning </li>        <li>Applications can plug into a hub – e.g., a photo editing app would sit in the Photos hub as opposed to living in a random list </li>     </ul>   </li>    <li>Monetization      <ul>       <li>Because it’s silverlight, you have rich ad content opportunities </li>     </ul>   </li>    <li>Full hardware acceleration for max performance </li> </ul>  <p>The development platform is one that is very familiar to Windows devs.</p>  <ul>   <li>Same programming model/code/tools as desktop SL3 apps </li>    <li>Visual Studio 10      <ul>       <li>Templates for blank app, list-based app with navigation, class library </li>        <li>Can test on emulator (which is FAST) or the device </li>        <li>Emulator supports MultiTouch on Windows 7 so you can test right there! </li>     </ul>   </li>    <li>Blend 4      <ul>       <li>Can build an app just like you would build a regular SL app </li>        <li>Can launch testing on emulator from within Blend </li>     </ul>   </li>    <li>Features      <ul>       <li>Media (DEMO: Netflix.&#160; Great fidelity for the media.) </li>        <li>Deep Zoom (DEMO: Graphic.ly) </li>        <li>3D (DEMO: XBox Live game) </li>        <li>Location/map (DEMO: foursquare) </li>        <li>Push Notifications (DEMO: MLS) </li>        <li>Microphone/Camera (DEMO: Shazam for microphone) </li>        <li>Accelerometer (DEMO: “Marionette” – funny) </li>        <li>Other demos          <ul>           <li>seesmic plugging in Bing maps </li>            <li>Coding4Fun Cannon – controlling a cannon that shoots T-Shirts using the accelerometer </li>            <li>XNA gaming </li>         </ul>       </li>     </ul>   </li> </ul>  <p>Overall, the technology seems exciting.&#160; The dev story is way better than on Android.&#160; I can’t speak for iPhone.&#160; But if Microsoft is able to deliver on the handsets and market them well, they should be able to get developers writing apps – god knows there are enough of us .NETters out there waiting to write apps. ;)</p>  <p>If you want to watch the keynote, go to <a href="http://live.visitmix.com/">http://live.visitmix.com/</a>.&#160; I haven’t seen it there yet, but it will be soon, I’m sure.</p>  <p>UPDATE: here’s the <a href="http://bit.ly/c6EGDz" target="_blank">on-demand video gallery</a>.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2010/03/15/15.13.46</link>
         <guid>http://eric.burke.name/dotnetmania/2010/03/15/15.13.46</guid>
         <category></category>
         <pubDate>Mon, 15 Mar 2010 15:13:46 -0500</pubDate>
      </item>
      
      <item>
         <title>PDC Keynote Roundup: Day 2</title>
         <description><![CDATA[<p>Day 2 (as usual) was focused on Windows and the new developer tools and SDKs.&#160; Some of the information here was alluded to in the keynote but didn’t come in detail until the sessions.</p>  <h3>Windows 7</h3>  <p>Steven Sinofsky, who runs the entire Windows division, led off talking about Windows 7.&#160; First, Steven went through the background on how they engineered Windows 7.&#160; Given all the problems that Vista had, it was important that they learn from everything and do it right.&#160; Here is the basic timeline and goals:</p>  <ul>   <li>Collect feedback from the community – the “Engineering 7” blogs were a great start </li>    <li>Do tons of research on what’s wanted, needed, etc. – user studies, surveys, … </li>    <li>Determine ecosystem readiness </li>    <li>Have a good rhythm of pre-beta, beta, RC, RTM </li>    <li>Collect a ton of telemetry.&#160; Here are some of the data collection mechanisms:      <ul>       <li>“Send Feedback” button </li>        <li>Hardware/Device Diagnostics </li>        <li>Reliability Analysis Component (RAC) </li>        <li>Software Quality Monitor (SQM) </li>        <li>Windows Error Reporting (WER) </li>        <li>Numbers associated with the telemetry collected during the Win7 process.&#160; It’s a ton of data.          <ul>           <li>1.7MM “send feedback” reports </li>            <li>91k unique hardware devices connected to the machines </li>            <li>14k unique printers (!) connected to the machines </li>            <li>883k unique applications installed </li>            <li>10.4MM aggregate WER reports </li>            <li>4700 code changes stemming from WER </li>            <li>6k SQM data points </li>            <li>900MM logon sessions logged </li>            <li>514MM start menu clicks </li>            <li>46MM uses of Aero Snap and Aero Shake </li>         </ul>       </li>     </ul>   </li> </ul>  <p>Overall, it was clear that they put a ton of work into making Windows 7 more stable and reliable than Vista.&#160; So far in my usage, it’s much much better – boots extremely fast even though I have a lot of junk installed, is responsive, and causes very few issues.</p>  <p>On the developer side, Windows 7 adds a ton of new features that applications can take advantage of, including:</p>  <ul>   <li>New taskbar (the “SuperBar”) </li>    <li>New Aero features – Snap, Shake, Peek </li>    <li>Multitouch </li>    <li>Location and Sensor APIs </li>    <li>DirectX 11.&#160; Great demos.      <ul>       <li>an app with 20,000 stars in a system interacting with one another.&#160; Using DX11 hardware along with the DirectCompute APIs (which use the GPU for computation) running at 702 GFlops, minimal CPU, 73 degree temperature; DX10 hardware was pegging 8 cores at 100 degrees and getting 17 GFlops. </li>        <li>First-person game showing the difference in ability to tesselate polygons by one or two orders of magnitude on DX11 </li>     </ul>   </li>    <li>Hardware support for media transcoding </li> </ul>  <p>Also, I attended the Windows 7 Dev Camp on Monday. Of particular interest was the Windows 7 Kernel Changes talk.&#160; It was put on by Mark Russinovich of SysInternals fame, as well as Arun Kishan and Landy Wang, both of whom are architects on the kernel team.&#160; What they discussed were all the changes and improvements made to the kernel in Windows 7.&#160; Highly fascinating.&#160; There are also two sessions from the conference on the same topic – watch them <a href="http://microsoftpdc.com/Sessions/P09-20" target="_blank">here</a> and <a href="http://microsoftpdc.com/Sessions/CL29" target="_blank">here</a>.</p>  <h3>IE Update</h3>  <p>They just started IE9 a few weeks ago.&#160; The goal is to improve standards compliance even more, support HTML5, improve JS performance (compiled?), and take advantage of hardware acceleration for graphics a text.</p>  <p>Steven ran a demo of IE9’s current build, and showed off some of the speed and rendering.&#160; So far it looks promising, but it will take a ton of work to make it the browser everyone really wants to use.</p>  <h3>Silverlight</h3>  <p>Scott Guthrie came on stage next to talk about developer tools, and SDKs.&#160; He led off with Silverlight.&#160; SL3 released in the summer, and currently has a 33% penetration (total SL penetration is at 45%, compared with 25% at MIX09 in March).&#160; So overall adoption is growing, thanks to big wins with Netflix, NBC (Olympics and Sunday Night Football), Major League Baseball, the Democratic National Convention, the White House, etc.</p>  <p>He then went on to talk about Silverlight 4, which is slated for release in the first half of 2010.&#160; SL is on a pretty aggressive release schedule – SL2 was October 2008, SL3 was July 2009, and now SL4 in H1’10.&#160; They are working hard to penetrate the market to better compete with Flash in the browser.&#160; But they are also trying to make Silverlight the cross-platform development platform of choice for desktop apps (competing with Adobe Air, primarily).</p>  <p>It seems like Microsoft’s strategy is multifaceted:</p>  <ul>   <li>In-browser: Silverlight competes with Flash. </li>    <li>Out-of-browser: Silverlight competes with <a href="http://labs.adobe.com/technologies/air2/" target="_blank">Adobe Air 2.0</a> (see a <a href="http://www.adobe.com/devnet/logged_in/rchristensen_air_2.html" target="_blank">link here</a> by an Adobe evangelist) and other cross-platform application shells like <a href="http://www.appcelerator.com/products/" target="_blank">Titanium</a> </li>    <li>Windows desktop application: Silverlight becomes a lighter-weight desktop platform than WPF with much of the goodness that WPF offers. </li>    <li>Windows desktop application: WPF offers an even richer application development platform. </li> </ul>  <p>[Aside: Many people are having the “Is WPF dead?” discussion these days.&#160; I don’t think it is.&#160; Silverlight is definitely the platform-of-choice in many instances, but WPF has legs – Visual Studio 2010 is being built on it, and other applications inside Microsoft are probably watching that project intently to see if WPF is something they can move to.&#160; The current <a href="http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx" target="_blank">Beta 2 of Visual Studio 2010</a> is very good so far.&#160; If you watch <a href="http://microsoftpdc.com/Sessions/CL09" target="_blank">Paul Harrington’s session on how they’ve built it</a>, it’s pretty impressive.&#160; We had to solve a lot of similar problems on our project and it was interesting to compare their solutions with ours.]</p>  <p>The features announced in Silverlight 4 are very ambitious, but also very needed.&#160; Following is a rundown.&#160; If you read the <a href="http://www.adobe.com/devnet/logged_in/rchristensen_air_2.html" target="_blank">Adobe link</a> I referenced above, you’ll see tons of overlap.&#160; I don’t think that’s a coincidence.</p>  <ul>   <li>Media Enhancements      <ul>       <li>webcam and microphone access (raw stream access, API to select devices) </li>        <li>multicast HD streaming </li>        <li>output protection (ie., no display on external monitors if you choose) </li>        <li>Offline DRM, MP4 DRM </li>        <li>Silverlight Media Framework (codeplex project for media) </li>        <li>IIS Smooth Streaming          <ul>           <li>exists in SL3 </li>            <li>SL4 adds iPhone support (other devices coming) – backed will re-encode on the fly from the same URL.&#160; Scott demo’d a video in browser and then on iPhone with the same URL. </li>         </ul>       </li>     </ul>   </li>    <li>Out of Browser (OOB) (introduced in SL3 but very rudimentary)      <ul>       <li>Sanboxed Mode          <ul>           <li>add Windowing APIs for positioning, min/max/normal, topmost, application activate </li>            <li>add toast APIs for rich toast notifications              <ul>               <li>arbitrary content </li>                <li>up to 400x100 and 30s </li>                <li>no opacity or rounded corners </li>                <li>no popup launching </li>                <li>fixed location per OS (lower-right on Windows, upper-right on Mac) </li>             </ul>           </li>            <li>HTML hosting support – introduced primarily to support ads              <ul>               <li>only works in OOB mode, not in-browser </li>                <li>can navigate to a URL or get/set content </li>                <li>Windowed hosting with interop (IE on Windows, WebKit on Mac) – by default not compositable </li>                <li>For compositing, there is an HtmlBrush (like the VisualBrush in WPF) where it renders the browser offscreen and composits the bitmap.&#160; This is live, so if your webpage is on YouTube playing a video, you see the moving video in the brush.&#160; The demo was a jigsaw puzzle that he scrambled. </li>                <li>Supports browser plugins </li>             </ul>           </li>            <li>Drop target support – drop a file from the filesystem onto the app and it can be opened </li>            <li>Add/Remove Programs integration </li>         </ul>       </li>        <li>Full Trust Mode (new in SL4)          <ul>           <li>Custom window chrome </li>            <li>Local file system access (My Documents) </li>            <li>Cross-site network access </li>            <li>Keyboard use in full screen mode </li>            <li>Access to hardware devices </li>            <li>Access to full path in Open/Save dialog </li>            <li>COM Automation – office, Windows 7 APIs, anything that’s IDispatch; uses the C# 4.0 “dynamic” </li>         </ul>       </li>        <li>OOB Demo: Facebook          <ul>           <li>add Facebook events directly to Outlook calendar using COM </li>            <li>take photo with webcam and upload as profile picture </li>            <li>inline video playing using H.264 support or hosted HTML page with video </li>            <li>drag/drop photos from desktop and upload to Facebook </li>            <li>pull in photos from external camera for upload </li>            <li>multitouch support </li>         </ul>       </li>     </ul>   </li>    <li>Application Development features      <ul>       <li>Printing support – custom view of any element; can print offscreen elements </li>        <li>Rich text support (like WPF) </li>        <li>Full system clipboard access </li>        <li>Right-click and mousewheel access </li>        <li>Implicit styling (don’t need a ResourceKey) </li>        <li>bi-directional text, RTL support (Hebrew and Arabic fonts) </li>        <li>commands and MVVM support </li>        <li>more controls </li>        <li>extended PNG support </li>        <li>CLR4 support </li>     </ul>   </li>    <li>Data and Networking      <ul>       <li>Share assemblies across SL and .NET 4 </li>        <li>binding improvements (IDataErrorInfo, async; StringFormat; etc.) </li>        <li>UDP multicast supports </li>        <li>REST enhancements (ADO.NET data services) </li>        <li>WCF improvements (TCP channel support) </li>        <li>WCF RIA Services </li>     </ul>   </li>    <li>VS10 Support      <ul>       <li>WYSIWYG SL design surface </li>        <li>XAML Intellisense++ </li>        <li>Binding, layout, styles </li>        <li>WCF RIA Services integration </li>     </ul>   </li>    <li>Performance      <ul>       <li>Full JIT support – 2x speedup </li>        <li>30% faster to start up (up to 80% in some cases) </li>        <li>NGEN the system assemblies to avoid JIT </li>        <li>ICorProfiler support for real perf tools </li>        <li>5MB download, 10s install </li>     </ul>   </li> </ul>  <p>If you want to watch some Silverlight sessions, <a href="http://microsoftpdc.com/Sessions#?term=silverlight" target="_blank">go here</a>.</p>  <p>Overall, the tools and SDKs talk was much meatier (for me, anyway) than the Azure stuff.&#160; There is a ton of great stuff coming down the pike.</p>  <p>Other links:</p>  <ul>   <li>See the <a href="http://eric.burke.name/dotnetmania/2009/11/20/15.31.48" target="_blank">Day 1 Keynote Roundup here</a>. </li>    <li>Watch the <a href="http://microsoftpdc.com/Sessions/KEY02" target="_blank">Day 2 Keynote here</a>. </li>    <li>Full session list (with videos) is <a href="http://microsoftpdc.com/Sessions" target="_blank">here</a>. </li> </ul>]]></description>
         <link>http://eric.burke.name/dotnetmania/2009/11/22/22.51.37</link>
         <guid>http://eric.burke.name/dotnetmania/2009/11/22/22.51.37</guid>
         <category></category>
         <pubDate>Sun, 22 Nov 2009 22:51:37 -0500</pubDate>
      </item>
      
      <item>
         <title>PDC 2009 Keynote Roundup: Day 1</title>
         <description><![CDATA[<p>This year’s <a href="http://microsoftpdc.om/" target="_blank">PDC</a> was only a year after the last one (as opposed to the typical 2 or even 3), so it was a little shorter and a little lighter on the new stuff.&#160; But there were definitely a few takeaways.&#160; Ray Ozzie led the Day 1 keynote covering overall strategy.&#160; NOTE: some of the information here was alluded to in the keynote but didn’t come in detail until the sessions.</p>  <h3>Day 1: Client Side</h3>  <p>A core tenet of the strategy is deploying to Three Screens – desktop/laptop, TV/big LCD, mobile.&#160; They want to have primarily web/cloud-centric experience with rich desktop/device integration.&#160; They want to make IE the best standards-based browser (IE9 is already in development as of 3 weeks ago), and use <a href="http://silverlight.net" target="_blank">Silverlight</a> to deliver rich in-browser experiences.&#160; This isn’t really new, and is completely expected.</p>  <h3>Day 1: Windows Azure, redux</h3>  <p>Azure is the set of cloud services that Microsoft announced last year, aimed squarely at competing with services offered by Amazon, Google, etc.&#160; Last year’s technology was based purely on the Microsoft stack – you would use Visual Studio, SQL Server, IIS, etc, and then deploy your app to the cloud using SQL data services and the like.&#160; From a developer’s perspective, this was great, because you had a fully integrated local solution to build and test, and (literally) with the push of a button, deploy to the cloud.&#160; There are control panels for configuring things like how many virtual machines you want, and it’s all based on a pay-for-play model (though they have not started charging anyone yet).</p>  <p>The problem with that scenario is that many companies don’t want to (or can’t) tie themselves to that stack.&#160; So this year, part 2 of the Azure strategy is to open up the platform for a more a la carte selection of features.&#160; For instance:</p>  <ul>   <li>You can now talk to Azure services if you’re running in a “AMP” stack </li>    <li>There are a number of services targeting developers and IT that will run under a service called PinPoint – you can pick whichever you want and use them </li>    <li>Project “Dallas” will offer all sorts of commercial and public data sets for consumption in your apps      <ul>       <li>open marketplace </li>        <li>uniform discovery and binding to data </li>        <li>working with the government to run <a href="http://data.gov" target="_blank">data.gov</a> for public sources </li>     </ul>   </li>    <li>REST-based service management </li>    <li>Multiple virtual machine sizes, so you can choose what’s best for you </li>    <li>XDrive – a storage blob, mountable as an NTFS virtual hard drive </li>    <li>database services – simple creation, replication, etc. </li>    <li>AppFabric – new application server; extends IIS to build scale-out services      <ul>       <li>includes caching, service bus workflow/hosting, monitoring, service hosting, access control </li>     </ul>   </li>    <li>Project “Sydney” – allows you to connect the systems in your existing data center (not necessarily Windows boxes) to Azure services </li> </ul>  <p>These solutions will ultimately help them get more apps running on different components of the Azure platform.&#160; There were the usual demos, including:</p>  <ul>   <li>WordPress.com – running the “AMP” part of LAMP but using Azure services </li>    <li>The Cheeseburger Network (of Lolcats fame)      <ul>       <li>40 blogs, 8MM page views, 10k submissions, 100k votes </li>        <li>Need to handle spikes, do it via config </li>        <li>Windows Azure storage plugin for WP </li>     </ul>   </li> </ul>  <p>Overall, the strategy that they laid out isn’t really anything different than expected.&#160; No major announcements on Day 1 aside from the next steps in the Azure world.</p>  <p>Other links:</p>  <p>Watch the <a href="http://microsoftpdc.com/Sessions/KEY01" target="_blank">Day 1 Keynote here</a>.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2009/11/20/15.31.48</link>
         <guid>http://eric.burke.name/dotnetmania/2009/11/20/15.31.48</guid>
         <category></category>
         <pubDate>Fri, 20 Nov 2009 15:31:48 -0500</pubDate>
      </item>
      
      <item>
         <title>Keeping the WPF Tab Control from destroying its children</title>
         <description><![CDATA[<p>Someone posted to the wpf-disciples group the other day asking if there’s a way to keep the TabControl from continually throwing away the “selected” visual every time the selection changes.&#160; The primary use case for this is if you have content whose visuals are very complex or heavyweight – the churn of visuals can become very nonperformant.</p>  <p>One solution I offered was one we did on Messenger where we used a combination of a TabControl and ListBox to achieve the desired behavior.</p>  <ul>   <li>TabControl retemplated to remove the ContentPresenter where it normally shows the selected content</li>    <li>ListBox with a Grid as the ItemsPanel</li>    <li>both controls bound to the same data source with IsSynchronizedWithCurrentItem=”True”</li> </ul>  <p>This solution works well, but it’s kind of klunky.&#160; So I dug through Reflector at the TabControl and found that it wouldn’t seem to take much to make a TabControl subclass which did what we needed.&#160; So I pressed on. ;)</p>  <p>The upshot to the solution is the following:</p>  <ul>   <li>subclass TabControl.</li>    <li>override OnApplyTemplate and find the template part which is the Panel (named “PART_ItemsHolder”, normally a Grid) that will house all the potential selected content items.</li>    <li>as the selection changes (or items are added), create a ContentPresenter to house the selected content.&#160; Add it to the PART_ItemsHolder.</li>    <li>as items in the control change (OnItemsChanged), remove any ContentPresenters from PART_ItemsHolder that correspond to removed tab items.</li>    <li>when an item is selected, the content is made Visible; when deselected, it’s Collapsed.</li> </ul>  <p>This solution seems to work pretty well, and it allows us to keep the ability to databind the ItemsSource or add TabItems directly.&#160; It also is non-greedy in that it doesn’t create child ContentPresenters unless an item actually becomes selected.</p>  <p>You can find a <a href="http://eric.burke.name/dotnetmania/code/TabControlTest.zip" target="_blank">sample project here</a>.&#160; When you run it, there are 3 panes: the left pane is the “old” solution with the TabControl+ListBox; the middle pane is the “new” solution with databound items; and the right pane is the “new” solution with TabItems added directly.</p>  <p>Comments appreciated!</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2009/04/26/22.09.28</link>
         <guid>http://eric.burke.name/dotnetmania/2009/04/26/22.09.28</guid>
         <category></category>
         <pubDate>Sun, 26 Apr 2009 22:09:28 -0500</pubDate>
      </item>
      
      <item>
         <title>MIX09 Day 2 Keynote</title>
         <description><![CDATA[<p><a href="http://eric.burke.name/dotnetmania/2009/03/19/12.12.34" target="_blank">Looking for the Day 1 recap</a>?</p>  <p>Today’s keynote was much shorter than yesterday’s but it had some good info.&#160; If you want to watch the video, check out <a href="http://live.visitmix.com/" target="_blank">the MIX site</a>.</p>  <h3>IE8 released to the wild -- Dean Hamatchovich, the GM of Internet Explorer</h3>  <p>Today marked the <a href="http://microsoft.com/ie8" target="_blank">IE8 release</a> to the wild.</p>  <ul>   <li>25 languages, Vista/XP/Windows Server, x86/x64</li>    <li>data driven design: tons of real-word data gathered from user sessions, home visits; 200+ data points in the product were measured</li>    <li>search box now has suggestions AND history; quick links to other providers’ suggestions</li>    <li>“New Tab” page now has more tab restore and accelerator options</li>    <li>tab groupings and colorings based on task (e.g, if I open 5 tabs from a page I’m on, they’ll all be colored the same and grouped in the bar)</li>    <li>tabs isolated for better crash recovery</li>    <li>load performance is on par with Firefox and Chrome</li>    <li>better online safety: XSS attack prevention; address bar domain highlighting; etc.</li> </ul>  <p>Overall, this isn’t much different than what has been around in the beta for a while.&#160; I’ve been using IE8 today, and it actually is pretty good.</p>  <h3>Changing Behavior Through Design – <a href="http://pressroom.target.com/pr/news/health-wellness/clearrx/bio.aspx" target="_blank">Deborah Adler</a></h3>  <p>I wasn’t sure what Deborah was going to talk about, and I have to say I was pretty impressed.&#160; As a developer, I’m not always plugged in to the decisions the designers are making – often things seem the same to me, but a designer would see them as completely different.&#160; Deborah’s keynote opened my eyes to the power of design in a very clear way.&#160; I highly recommend you watch the video.</p>  <p>For those who don’t want to watch the video, the short version is this: Deborah’s grandmother took the incorrect medication by mistake, which Deborah attributed to poor design of the classic prescription bottles.&#160; She decided to make her thesis focused on researching and developing a newer, safer method of prescription packaging.&#160; What results is the <a href="http://target.com/clearrx" target="_blank">Target ClearRx</a> program.&#160; Very cool</p>  <p>More posts to follow…</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2009/03/19/16.54.25</link>
         <guid>http://eric.burke.name/dotnetmania/2009/03/19/16.54.25</guid>
         <category></category>
         <pubDate>Thu, 19 Mar 2009 16:54:25 -0500</pubDate>
      </item>
      
      <item>
         <title>MIX09 Day 1 Keynote</title>
         <description><![CDATA[<p>Here’s an overview of the MIX09 Day 1 Keynote.&#160; If you want to watch the keynote or anything else, go to <a href="http://live.visitmix.com/" target="_blank">the MIX site</a>.</p>  <p>First up was Bill Buxton.&#160; Bill has been around for 30 years in the design world.&#160; And I have to say, he was a very passionate, engaging speaker.&#160; At close to 60, he’s got more energy than many people my age.&#160; He spoke about how EXPERIENCE is the end goal of design, not just design for design’s sake.&#160; He had some great historical examples from the first wave of industrial design in the late 1920’s.&#160; Good stuff.</p>  <p>Scott Guthrie was next.&#160; Scott’s keynote addresses are always free of fluff and full of stuff.&#160; In that vein, here’s my all-stuff-no-fluff bullet list of what’s coming up:</p>  <h3>Expression Web 3</h3>  <p>The big news about Expression Web 3 is <a href="http://www.webdesignerdepot.com/2009/03/microsoft-announces-superpreview-for-ie-browser-testing/" target="_blank">SuperPreview</a>.&#160; Read this page for a great description of it.&#160; Definitely a big step forward in the world of browser compatibility testing.</p>  <h3>VS 2010</h3>  <p>See my <a href="http://eric.burke.name/dotnetmania/2008/10/29/20.16.01" target="_blank">post regarding a lot of this stuff from PDC</a>.</p>  <p>Better tooling support for jQuery and JavaScript is also coming.</p>  <h3>Web Platform Installer V2</h3>  <p>This is an application which lets you pick and choose which tools you want installed in order to do web development.&#160; You can configure and update the tools from within the WPI as well.</p>  <h3>Azure Services Platform</h3>  <ul>   <li>Adding FastCGI/PHP support. </li>    <li>relational database in SQL Data Services </li>    <li>more web standards in .NET Services </li>    <li>commercial release in 2009 </li> </ul>  <h3>BizSpark</h3>  <p>This is a free program where, if you are a qualifying startup, you get free tools and support for 3 years to get up and running.</p>  <h3>Silverlight 3</h3>  <p>This is the big announcement.&#160; There is a ton of stuff they are releasing.&#160; You can look at more info at <a href="http://silverlight.net/getstarted/silverlight3/default.aspx" target="_blank">the official Silverlight site</a>, but here’s the rundown:</p>  <ul>   <li>&gt; 200 partners in 30 countries.&#160; Lots of big names – Netflix, NBC, Intuit, etc. </li>    <li>Media      <ul>       <li>GPU h/w accel </li>        <li>H.264, AAC, MPEG-4 </li>        <li>raw bitstream API (custom video format decoder plugins that you can write) </li>        <li>better logging for media analytics </li>     </ul>   </li>    <li>Graphics      <ul>       <li>perspective 3D </li>        <li>Bitmap and Pixel APIs </li>        <li>pixel shaders </li>        <li>Deep Zoom improvements </li>     </ul>   </li>    <li>App Development      <ul>       <li>Deep linking, better navigation, SEO </li>        <li>ClearType and other text improvements </li>        <li>MultiTouch support </li>        <li>100+ controls available </li>        <li>Library caching: reference an assembly and get it on demand (not in XAP) and cache it </li>     </ul>   </li>    <li>Data      <ul>       <li>ElementName binding </li>        <li>validation error templates </li>        <li>server data push improvements </li>        <li>binary XML networking support (transparent persistence of data?) </li>        <li>multi-tier REST data support </li>     </ul>   </li>    <li>Out-of-Browser      <ul>       <li>API call to Detach() the app – prompts the user to allow </li>        <li>app still sandboxed, uses same site of origin </li>        <li>can write offline-aware apps; gets events for network status changes </li>        <li>can integrate with underlying OS (e.g., Start Menu or Desktop) </li>        <li>autoupdate support a la ClickOnce </li>     </ul>   </li>    <li>Release Details      <ul>       <li>Download size: 40k less than SL2 because they give you the ability to break out libraries that get downloaded and cached on demand </li>        <li>Beta today, release later this year </li>     </ul>   </li> </ul>  <h3>Blend 3 [get the beta at the <a href="http://silverlight.net/getstarted/silverlight3/default.aspx" target="_blank">official Silverlight site</a>]</h3>  <ul>   <li>SketchFlow </li>    <li>PSD and Illustrator import with layer preservation and editing </li>    <li>Behaviors – like triggers on steroids </li>    <li>create, import, edit sample data to bind to </li>    <li>source code control </li>    <li>XAML, C#, VB intellisense </li>    <li>watch the demo in <a href="http://live.visitmix.com/" target="_blank">the keynote video</a>!!&#160;&#160; [It starts about 3/4 of the way into it – sorry I don’t have a time, but the player doesn’t have it! :(] </li> </ul>  <h3>IIS Media Services</h3>  <ul>   <li>smooth streaming </li>    <li>DVR-like support on a *live* stream </li>    <li>edge caching (Akamai) </li>    <li>web playlists </li>    <li>bit-rate throttling </li>    <li>advanced logging </li>    <li>instant seek drops the bitrate for a short time so that video is more instant; keeps constant bitrate for better UX, even if that's a little lower than impulse max </li>    <li>NBC Olympics in 2010 will use this      <ul>       <li>720p HD </li>        <li>DVR </li>        <li>super slow-mo and high-res frame capture </li>        <li>metadata overlays </li>        <li>live video alerts </li>        <li>real-time feeds </li>     </ul>   </li> </ul>  <p>Overall, some awesome stuff is on the way (or is it already here?).&#160; Tomorrow, we’ll see some IE8 previews.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2009/03/19/12.12.34</link>
         <guid>http://eric.burke.name/dotnetmania/2009/03/19/12.12.34</guid>
         <category></category>
         <pubDate>Thu, 19 Mar 2009 12:12:34 -0500</pubDate>
      </item>
      
      <item>
         <title>Why is focus in WPF so tricky? [managing and understanding Focus in a WPF application]</title>
         <description><![CDATA[<p>This post grew out of a discussion I was having with some folks regarding trying to select all the text in a TextBox when it gets focus.&#160; Seems like a pretty simple task; however, in the WPF world, it’s not nearly as simple as one would think (or as simple as it *should* be, IMO), because of the way WPF deals with focus, as well as some idiosyncrasies with how the TextBoxBase class (on which TextBox and RichTextBox are based) behaves.</p>  <h3></h3>  <h3>The Basic Idea</h3>  <p>Let’s digress first to the Win32 world.&#160; In these apps, it’s pretty trivial to do this: handle the <font face="Consolas">WM_GOTFOCUS</font> message, and call <font face="Consolas">::SendMessage(hWnd, EM_SETSEL, 0, -1).</font></p>  <p>In Windows Forms, it’s equally simple: handle the control’s <font face="Consolas">GotFocus</font> event and call <font face="Consolas">textBox.SelectAll().</font></p>  <p>In WPF, you would think you would just handle the <font face="Consolas">GotFocus</font> event and call <font face="Consolas">textBox.SelectAll()</font> as well and be done.&#160; This will sort of work, but it’s not acceptable.&#160; Run <a href="http://eric.burke.name/dotnetmania/SimpleFocusTest.exe" target="_blank">this simple app</a> (<a href="http://eric.burke.name/dotnetmania/FocusTests.zip" target="_blank">full source</a>) to see this solution in action.&#160; The app will open up and set focus to the first text box, causing it to <font face="Consolas">SelectAll()</font>.&#160; Tab back and forth between the text boxes, and you will see that the behavior is as expected.&#160; So far, so good.</p>  <h3>The issues begin…</h3>  <p>Now, hover the mouse over the text in the TextBox that doesn’t currently have focus so that the cursor is an I-Beam.&#160; Click and hold the mouse – you will see that all the text gets selected.&#160; Now release the mouse.&#160; Huh?&#160; Where’d the selection go?!?!</p>  <p>As it turns out, the TextBox captures the mouse and waits for the MouseUp to take action.&#160; When the TextBox gets the GotFocus event, the event handler gets called and we call TextBox.SelectAll(), which is fine; however, when the user releases the mouse, the TextBox’s OnMouseUp override gets called which somewhere down the line will cancel any extended selection and then set the cursor.</p>  <p><strike>To mitigate this, you might try using Dispatcher.BeginInvoke() to delay the call to TextBox.SelectAll().&#160; Run </strike><a href="http://eric.burke.name/dotnetmania/SimpleFocusTest.exe" target="_blank"><strike>the same simple app</strike></a><strike> (</strike><a href="http://eric.burke.name/dotnetmania/FocusTests.zip" target="_blank"><strike>full source</strike></a><strike>) to see that in action – just check the box to put the app into the Dispatching mode.&#160; [You should dispatch at ContextIdle priority so that it runs *after* any Input is received, so that you can get the MouseUp event before you call SelectAll().]&#160; This solution actually works OK; however, there are a couple glaring gotchas.&#160; First, if you click-and-release too fast, my guess is that some deferred operation in the MouseDown handler won’t run before MouseUp, so it kills your selection.&#160; Second, if you wait too long (the greater of SystemParameters.MenuShowDelay or 200ms, which isn’t that long!) to MouseUp, the ContextIdle priority items will run (including your SelectAll()), and then the MouseUp handler inside the TextBox will kill your selection.&#160; Not a good UX.</strike></p>  <p><strike>[Complicating things more is the fact that the TextBox will try to start a drag/drop operation if you move the mouse while it’s down, which results in another codepath which can mess with you.]</strike></p>  <p>UPDATE: thanks to Andrew for the great suggestion about calling TextBox.ReleaseMouseCapture() after you call TextBox.SelectAll().&#160; This does seem to mitigate the issue of the selection clearing on MouseUp pretty well.&#160; However, caution still applies because if the underlying implementation of TextBox changes drastically in the future (it likely won’t, but it could), this solution might break.&#160; I’ve updated my code that is linked off this article to reflect the change.&#160; Note that dispatching the SelectAll() call isn’t necessary, but I haven’t removed the checkbox.</p>  <p>For more complications, hover the mouse over the text in the TextBox that doesn’t currently have focus so that the cursor is an Arrow.&#160; Usually, you can do this by pointing to the bit of whitespace just below the text.&#160; Click and hold the mouse – as before, you’ll see that all the text is selected.&#160; Now release the mouse – lo and behold, it stays selected!&#160; This is because the drag/drop operation above didn’t begin, so the code executed correctly.</p>  <p>Finally, hover the mouse over the TextBox that doesn’t currently have focus so that the cursor is an I-Beam *and* the mouse is to the right of the text between the last character and the right side of the TextBox.&#160; Click and hold the mouse, and -- no text is selected.&#160; Sigh.</p>  <p>I know what you’re thinking: “Uh, OK, so how do I solve my Select-All issue?”&#160; Turns out, there’s not really a one-size-fits-all solution.&#160; To really understand how best your app should handle this, we need to dive into how the concept of focus works in WPF.</p>  <h3>Keyboard vs. Logical Focus</h3>  <p>In WPF, there are two different types of focus: Keyboard focus and Logical focus.</p>  <p>Keyboard focus means the <font face="Consolas">UIElement</font> which will receive any keyboard input.&#160; There can only be one <font face="Consolas">UIElement</font> in the entire application (and only one HWND in the Windows environment) which can have Keyboard focus.&#160; (If there were more than one, how would the system decide which one should get the input?)</p>  <p>In Logical focus, there is the notion of a “Focus Scope”, which is an application-defined boundary around a group of <font face="Consolas">UIElement</font>s.&#160; Each Focus Scope maintains its own “Focused Element” which can be different than the element that has Keyboard focus.&#160; For example, consider the following XAML:</p>  <p style="line-height: normal; margin-bottom: 0pt" class="MsoNormal"><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">&#160;&#160;&#160;&#160;&#160; </span></font><font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt">&lt;</span></font><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">StackPanel</span></font>     <br /><font size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; font-size: 10pt">&#160;&#160;&#160;&#160;&#160; <font color="#ff0000"><span style="color: red">&#160;&#160;&#160;&#160;&#160; FocusManager.IsFocusScope</span></font><font color="#0000ff"><span style="color: blue">=&quot;True&quot;&gt;</span></font></span></font>     <br /><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></font><font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt">&lt;</span></font><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">TextBox</span></font>     <br /><font size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; font-size: 10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#ff0000"><span style="color: red">&#160;&#160;&#160;&#160;&#160; x</span></font><font color="#0000ff"><span style="color: blue">:</span></font><font color="#ff0000"><span style="color: red">Name</span></font><font color="#0000ff"><span style="color: blue">=&quot;textBox1&quot;</span></font></span></font>     <br /><font size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; font-size: 10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#ff0000"><span style="color: red">&#160;&#160;&#160;&#160;&#160; Text</span></font><font color="#0000ff"><span style="color: blue">=&quot;Hello&quot; /&gt;</span></font></span></font>     <br /><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">&#160;&#160;&#160;&#160;&#160; </span></font><font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt">&lt;/</span></font><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">StackPanel</span></font><font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt">&gt;</span></font>     <br /><font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt">&#160;</span></font>     <br /><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">&#160;&#160;&#160;&#160;&#160; </span></font><font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt">&lt;</span></font><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">StackPanel</span></font>     <br /><font size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; font-size: 10pt">&#160;&#160;&#160;&#160;&#160; <font color="#ff0000"><span style="color: red">&#160;&#160;&#160;&#160;&#160; FocusManager.IsFocusScope</span></font><font color="#0000ff"><span style="color: blue">=&quot;True&quot;&gt;</span></font></span></font>     <br /><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; </span></font><font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt">&lt;</span></font><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">TextBox</span></font>     <br /><font size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; font-size: 10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#ff0000"><span style="color: red">&#160;&#160;&#160;&#160;&#160; x</span></font><font color="#0000ff"><span style="color: blue">:</span></font><font color="#ff0000"><span style="color: red">Name</span></font><font color="#0000ff"><span style="color: blue">=&quot;textBox2&quot;</span></font></span></font>     <br /><font size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; font-size: 10pt">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <font color="#ff0000"><span style="color: red">&#160;&#160;&#160;&#160;&#160; Text</span></font><font color="#0000ff"><span style="color: blue">=&quot;Goodbye&quot; /&gt;</span></font></span></font>     <br /><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">&#160;&#160;&#160;&#160;&#160; </span></font><font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt">&lt;/</span></font><font color="#a31515" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: #a31515; font-size: 10pt">StackPanel</span></font><font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt">&gt;</span></font></p> <font color="#0000ff" size="2" face="Courier New"><span style="font-family: &quot;Courier New&quot;; color: blue; font-size: 10pt"></span></font>  <p></p>  <p>In this snippet, both TextBoxes can have Logical focus at the same time since each is inside a separate focus scope. However, only one can have Keyboard focus at any given time (which implies that it also will have Logical focus in its Focus Scope).</p>  <p>Much of the reason for logical focus was to make Menus and Toolbars work properly.&#160; The canonical example is using a menu or toolbar to choose Edit &gt; Copy after selecting text inside a TextBox.&#160; Since Menus and Toolbars are Controls which can be focused, without the concept of Logical focus, the moment the user clicked on the menu, the selection inside the TextBox would disappear since it clears its selection rendering when it loses focus.&#160; By adding Logical focus, and by making Menus and Toolbars have FocusManager.IsFocusScope = “True” by default (the Window is a focus scope as well), the TextBox will never lose logical focus and thus not clear its selection rendering.</p>  <h3>Custom Focus Scopes</h3>  <p>So… let’s see what happens when we introduce some custom focus scopes to our app.&#160; Run <a href="http://eric.burke.name/dotnetmania/MoreComplexFocusTest.exe" target="_blank">this more complex app</a> (<a href="http://eric.burke.name/dotnetmania/FocusTests.zip" target="_blank">full source</a>) – you will see a more complex app with two TextBox on the left and two RichTextBox on the right, as well as a MenuBar at top.&#160; The TextBoxes are inside one UniformGrid, and the RichTextBoxes are in another.&#160; Each UniformGrid can be a Focus Scope, controlled by the CheckBox at the bottom. I also moved some of the “Select All” logic out to a class called TextBoxHelper which implements attached behaviors.</p>  <p>First, make sure the CheckBox is clear.&#160; Select some&#160; text in the first TextBox on the left.&#160; Now click the File menu.&#160; Note that the TextBox’s selection is still shown even though it doesn’t have Keyboard focus.&#160; Now dismiss the menu.&#160; The TextBox still has Logical focus.&#160; Now type something – notice the TextBox has Keyboard focus again!&#160; The reason for this is because once the control that did have Keyboard focus (the Menu) was Unloaded, the system set Logical focus to the parent Focus Scope (in this case, the Window).&#160; Once a Focus Scope becomes the active Focus Scope, it gives Keyboard focus to the element within it that has Logical focus (in this case, the TextBox).</p>  <p>Still with me?</p>  <h5>Issue #1 – Menus don’t behave</h5>  <p>Now check the first box, so that the TextBoxes are surrounded by a custom Focus Scope.&#160; Perform the same task as before.&#160; Notice that this time, the TextBox’s selection clears when you click the menu, and it doesn’t get Keyboard focus back after the menu is dismissed.&#160; This is because the TextBox is no longer inside the parent Focus Scope that the Menu is in (the Window) – it’s in a sibling Focus Scope now.&#160; All bets are off.&#160; This one is not mitigatable.</p>  <h5>Issue #2 – Logical focus doesn’t change</h5>  <p>Another issue that arises from having custom Focus Scopes is the retention of logical focus inside them.&#160; Before we added the custom Focus Scopes, all 4 TextBoxes were inside the same Focus Scope (the Window), so clicking inside any of them gave that one Logical focus and removed it from the other.&#160; However, once we added the custom Focus Scopes, the left and right sides were effectively isolated – it is now possible to have two different TextBoxes to have Logical focus.&#160; As a result, if you click the top-left TextBox, then the top-right, then the top-left again, the GotFocus event will not be raised because it already had logical focus!</p>  <p>The way you can mitigate this is to use the PreviewGotKeyboardFocus event instead of the GotFocus event when you want to SelectAll().&#160; Go ahead and check the box that says “Use PreviewGotKeyboardFocus instead of GotFocus”.&#160; Now, as you click back and forth between the top two TextBoxes, the SelectAll() happens properly.</p>  <p>However, if you use this technique WITHOUT custom Focus Scopes, you will introduce…</p>  <h5>Issue #3 – After dismissing the menu, the TextBox does a SelectAll() again</h5>  <p>When you don’t have custom Focus Scopes, and you use Keyboard Focus events, what will happen is this: when the user clicks the menu, it will get the Keyboard focus.&#160; When the menu is dismissed, the Window’s Focus Scope will get focus again, and give Keyboard focus back to the text box, which will use that Keyboard focus event to SelectAll().&#160; Again, not a great UX.</p>  <h3>Wrap Up</h3>  <p>So, it’s clear there’s no “right” solution, but we have some guidelines.</p>  <ul>   <li>If you have no custom focus scopes, use the Logical GotFocus event. </li>    <li>If you have custom focus scopes, but no Menus or Toolbars, use the Keyboard [Preview]GotKeyboardFocus event. </li>    <li>If you have custom focus scopes as well as Menus or Toolbars, you will likely have to deal with some pain. </li> </ul>  <p>Download the <a href="http://eric.burke.name/dotnetmania/FocusTests.zip" target="_blank">full source for the examples in this article</a>.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2009/03/17/19.30.27</link>
         <guid>http://eric.burke.name/dotnetmania/2009/03/17/19.30.27</guid>
         <category></category>
         <pubDate>Tue, 17 Mar 2009 19:30:27 -0500</pubDate>
      </item>
      
      <item>
         <title>What&apos;s Taking So Long???</title>
         <description><![CDATA[<p>Did you ever run your .NET application under cold start conditions and wonder, &quot;What the heck is taking it so long to start up?!?!?!&quot;</p>
<p>There can be a number of reasons for startup lag.  One major reason (especially on Vista) is disk I/O -- literally, the startup time is dependent on how many bytes you&rsquo;re loading off disk.</p>
<p>&quot;OK,&quot; you say, &quot;so how do I know how many bytes are being loaded?&quot;</p>
<p>The answer is pretty simple: ProcMon + a little data munging.  Here are the steps I&rsquo;ve used, and they seem to work pretty well.</p>
<p>First, download and install the <a href="http://technet.microsoft.com/en-us/sysinternals/0e18b180-9b7a-4c49-8120-c47c5a693683.aspx" target="_blank" >SysInternals Suite</a>.  (You can install just ProcMon, but there are a lot of good tools there.)</p>
<p>Next, make sure your machine is in a state where nothing is cached. Generally, this means you should <a href="http://www.tomshardware.com/forum/19542-45-turn-prefetch" target="_blank" >turn off Prefetch</a> and <a href="http://www.howtogeek.com/howto/windows-vista/how-to-disable-superfetch-on-windows-vista/" target="_blank" >Superfetch</a>.  You also should make sure that anything that might be loading any .NET assemblies is turned off at system startup time, or that might skew your results.</p>
<p>Once your machine is cold started, run procmon.exe.  You will be greeted with the Filters dialog (or you can hit Filter &gt; Filter...).  You&rsquo;ll want to set it up with your EXE name, a ReadFile operation, the Path NativeImages (which is the .NET Framework&rsquo;s NGEN&rsquo;d assemblies), and any paths where your assemblies might reside.  Once it&rsquo;s set, OK the dialog.</p>
<p align="center"><img src="http://static.flickr.com/3353/3252228640_7e46f687a8.jpg" align="center" border="0" alt="3252228640_7e46f687a8" /></p>

<p align="left">Next, run your application.  Soon you will be seeing the ProcMon window fill up with &quot;Events&quot;.  Once your app is to a point where you are ready to take a snapshot of the bytes loaded, go into ProcMon and choose File &gt; Save.  In the dialog, choose only the filtered events, and XML format with stack trace.  You can choose symbol resolution, but my tool might not work with that right at the moment.</p>
<p align="center"><img src="http://static.flickr.com/3080/3251416899_ea1dfac8a8.jpg" align="center" border="0" alt="3251416899_ea1dfac8a8" /></p>

<p align="left">After you have done that, you&rsquo;ll have a very large XML file.  Download <a href="http://eric.burke.name/dotnetmania/BytesLoaded.zip" target="_blank" >my tool from here</a> which will calculate the number of bytes loaded from each assembly.  Just run &quot;BytesLoaded.exe &lt;filename.xml&gt;&quot;.</p>
<p align="left">Here is the sample output from my tool run against Yahoo! Messenger for Vista (note that I did not reboot first):</p>
<p align="center"><img src="http://static.flickr.com/3315/3251455387_be5bc8b9da.jpg" align="center" border="0" alt="3251455387_be5bc8b9da" /></p>

<p align="left">So what does this information tell you?  It tells you exactly how much code is getting loaded by each assembly as your app runs.  What I normally look for first is assemblies I didn&rsquo;t expect to get loaded at all, and assemblies that I might be able to defer until later (e.g,. deferred startup of services, etc.).</p>
<p align="left">In the future, I hope to incorporate the stack trace and symbol information into the tool, which will help in finding which calls load the assemblies.  Until then, you can launch WinDbg on your EXE, and type &quot;sxe ld ModuleName.dll&quot;, and the debugger will break when that module is loaded.  You can then look at the stack trace to see what&rsquo;s happening.  [NOTE: for .NET assemblies, and any assemblies you might have NGEN&rsquo;d, you need to put &quot;.ni.dll&quot;, not just &quot;.dll&quot;, because that&rsquo;s the name of the module that gets loaded.]</p>
<p align="left">I also would like to automate the ProcMon part of things, but it&rsquo;s not very easy, especially on Vista.</p>
<p align="left">Comments are welcome.  Hope you find this useful!</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2009/02/03/21.31.00</link>
         <guid>http://eric.burke.name/dotnetmania/2009/02/03/21.31.00</guid>
         <category></category>
         <pubDate>Tue, 03 Feb 2009 21:31:00 -0500</pubDate>
      </item>
      
      <item>
         <title>PDC Day 2 Keynote, Part 3: Live Services and Office</title>
         <description><![CDATA[<p>[Looking for Part 1 of this post? <a href="http://eric.burke.name/dotnetmania/2008/10/29/12.02.01" target="_blank" >See it here.</a>]</p>
<p>[Looking for Part 2 of this post? <a href="http://eric.burke.name/dotnetmania/2008/10/29/20.16.01" target="_blank" >See it here.</a>]<a href="http://www.microsoftpdc.com/" target="_blank" ></p></a>
<p><a href="http://microsoftpdc.com/" target="_blank" >Watch the videos here.</a> [You will need <a href="http://silverlight.net/" target="_blank" >Silverlight</a> 2.0, which you can install directly from this page.] Click on Day 2, then &quot;Office Web Applications Extend Office to the Browser&quot; or &quot;Build Rich Social Applications with Live Services&quot;.</p>
<p><strong>Live Services</strong></p>
<p>Live Services is one prong of the Azure suite that was <a href="http://eric.burke.name/dotnetmania/2008/10/29/20.16.01" target="_blank" >announced on Monday</a>.  Basically Microsoft will be making all their Live Services available to applications via a rich set of APIs that you can use from web, PC, or phone applications.  The managed APIs fit right in with the .NET Framework in that they will expose a rich object model to the application, while doing a lot of the connectivity and data fetching behind the scenes.  Client applications will be able to simply create a LiveFramework object and then make API calls to it.  Where the data is persisted is largely immaterial to the application.  This will make a number of scenarios much much easier.</p>
<p>One interesting example was the ability to sync data between applications via the Live Framework.  They showed a photo sharing application with two users.  User 1 applied an effect to the photo they were viewing and that effect was applied on the other user&rsquo;s machine by using the Sync Framework.  Pretty interesting.</p>
<p><strong>Office 14</strong></p>
<p>Yes, they skipped 13.  Probably bad luck. <img src="http://picturelli.com/images/emo/smile_wink.gif" valign="absmiddle" alt=";-)" border="0" /></p>
<p>Office 14&rsquo;s big news is that they are making applications available via the browser, which is a huge shift.  These applications will be full-features and based on <a href="http://silverlight.net/">Silverlight</a> as well as DHTML.  There will be a number of interesting new features, such as:</p>
<ul>
<li>There will be full live synchronization between web, desktop, and mobile documents.  If I am viewing a document and someone else edits it, I can sync the changes automatically.</li>
<li>The apps will support concurrent editing of shared documents by using visual cues as to who is working on what portions of the document so that users can sync if they are about to conflict, or track where other users are editing so that conflicts don&rsquo;t occur.</li>
<li>There will be presence information during shared editing sessions.  If someone is making a change (or made a change) to a doc I&rsquo;m working on, the UI will reflect that and I can immediately IM, call, email, etc. with that person with one click.</li>
<li>Live Web Widgets using REST.  It will allow me to create a chart in excel, drop it into my blog, and whenever the page is refreshed, the widget will update itself based on new data.</li></ul>
<p>Overall the Office strategy is a really cool new approach -- definitely trying to quash some of the <a href="http://docs.google.com/" target="_blank" >Google Docs</a> advantages.  The big question, as with Azure, is what will be delivered, and when.</p>
<p>As always, questions and comments are always welcome. Day 3 coming soon -- Microsoft Research by <a href="http://www.microsoft.com/presspass/exec/rick/" target="_blank" >Rick Rashid</a>.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2008/10/30/14.28.17</link>
         <guid>http://eric.burke.name/dotnetmania/2008/10/30/14.28.17</guid>
         <category></category>
         <pubDate>Thu, 30 Oct 2008 14:28:17 -0500</pubDate>
      </item>
      
      <item>
         <title>PDC Day 2 Keynote, Part 2: Developers, developers, developers!</title>
         <description><![CDATA[<p>[Looking for Part 1 of this post? <a href="http://eric.burke.name/dotnetmania/2008/10/29/12.02.01" target="_blank" >See it here.</a><a href="http://www.microsoftpdc.com/" target="_blank" >]</p><a href="http://www.microsoftpdc.com/" target="_blank" >
<p>Watch the video here</a>. [You will need <a href="http://silverlight.net/" target="_blank" >Silverlight</a> 2.0, which you can install directly from this page.] Click on Day 2, then &quot;Watch Keynote on-demand&quot;. Start at 1:12:50 into it.</p>
<p></a><a href="http://weblogs.asp.net/scottgu" target="_blank" >Scott Guthrie</a> is the GM of the Developer Division at Microsoft. He&rsquo;s a well-known face the Windows developer world. As a GM, he is extremely busy, yet still finds time to get out there and code, as evidenced by his extremely detailed posts about technical goodies (which, I am told, he writes himself, including all the tutorials). In fact, I was talking to him in the hall yesterday about something and he said, &quot;Oh, I just got an email on that, hang on,&quot; at which time he proceeded to bust out his laptop and dig into his email to find the exact info. He&rsquo;s a developer&rsquo;s GM, that&rsquo;s for sure. ;)</p>
<p>Scott talked about a number of different topics.</p>
<p><a href="http://www.microsoft.com/net/" target="_blank" ><strong>.NET 3.5 SP1</strong></a></p>
<ul>
<li>Huge performance release.</li>
<li>Big leap in features (<a href="http://msdn.microsoft.com/en-us/library/bb308959.aspx" target="_blank" >LINQ</a>, <a href="http://www.codeplex.com/wpffx" target="_blank" >pixel shaders</a>, etc.).</li>
<li>If you are going to develop for .NET/WPF, .NET 3.5 SP1 is what you want.</li></ul>
<p><strong>Visual Studio 2010</strong></p>
<ul>
<li><strong>Total WPF UI! </strong>Let me say that again. <strong>TOTAL WPF UI.</strong> Scott showed the power of WPF in the UI by writing a small extension to the WPF Text Editor. The extension took the XML comment and instead of rendering the comment as XML, he rendered it as a richer WPF UI with active hyperlinks to bug numbers which, when clicked, would fetch the bug info from the database and render THAT as rich WPF UI. Under the covers it uses MEF (which will be part of .NET 4, see below) so that you get no-registration drop-in extensibility. <strong>AWESOME.</strong> As more of the UI moves to WPF, there will be more and more extensibility points that we can take advantage of to get serious productivity.<br />
<li>Support for Multicore/Parallelism (<a href="http://blogs.msdn.com/pfxteam/" target="_blank" >Task Parallel Library</a>, Concurrency Runtime)<br />
<li>Support for large C++ projects in terms of management and build speed<br />
<li>Many other extensibility points, including languages and compilers<br />
<li>Integrated <a href="http://silverlight.net/" target="_blank" >Silverlight</a> design surface</li></ul>
<p><strong>.NET 4.0</strong></p>
<p>There are a ton of new features being rolled into .NET 4.0. The release is tied to VS 2010, which I assume would be somewhere around late 2009 or early 2010.</p>
<ul>
<li>New CLR (v4)<br />
<li>Support for in-process side-by-side CLR v2 and CLR v4. This will allow you to load a v2 add-in into your v4 app without recompiling.<br />
<li>New WPF features 
<ul>
<li>DeepZoom support (currently in Silverlight 2.0) 
<li>Multitouch (Windows 7 feature) 
<li>VisualStateManager (currently in Silverlight 2.0 and shipping with the <a href="http://www.codeplex.com/wpf" target="_blank" >WPF Toolkit</a>) 
<li>Better text rendering (called DirectWrite) 
<li>More controls which are on par with what WinForms has (Chart, etc.) 
<li>Ribbon control (currently in a toolkit, will be in Windows 7 natively) 
<li>Common dialog support (yay!) 
<li>More effects and better animations<br /></li></ul>
<li>Better Native Code Interop support for COM, P/Invoke, DirectX, XNA, etc.<br />
<li>Dynamic Lanugage Runtime now integrated<br />
<li><a href="http://www.codeplex.com/MEF" target="_blank" >Managed Extensibility Framework</a> (MEF) integrated<br />
<li>Better XAML support 
<ul>
<li>Hooking XamlReader and XamlWriter 
<li>Support for XAML-only WF, WCF, JumpLists, etc. (no codebehind)</li></ul></li></ul>
<p><strong>Silverlight</strong></p>
<p>It seems like Silverlight and WPF are headed for true convergence where SL will be a true subset of WPF. What will likely happen is that for the next couple years, we&rsquo;ll see leapfrogging of features and changes between the platforms. Microsoft seems to be taking care to release Toolkits which augment the platform that does not have the feature(s) that the other does, in order to bridge you for the time being. For instance, currently they have a <a href="http://www.codeplex.com/wpf" target="_blank" >WPF Toolkit</a> which has things like DataGrid, DatePicker, and VisualStateManager so that you can write WPF apps like you write SL Apps. In 2009 we&rsquo;ll see a Silverlight Toolkit which will have features not yet in SL that exist in WPF.</p>
<ul>
<li>Just shipped SL 2.0, which is the first SL release to have .NET and CoreCLR support<br />
<li>Currently 1 in 4 computers have Silverlight<br />
<li>Upgrade being rolled out from 1.1 to 2.0<br />
<li>Current applications in Silverlight 
<ul>
<li><a href="http://nbcolympics.com/" target="_blank" >NBC Olympics Video Viewer</a><a href="http://dev.aol.com/mail_socialgadget" target="_blank" > 
<li>AOL Mail Gadget</a> (just released) 
<li><a href="http://www.k2.com/" target="_blank" >K2</a> 
<li><a href="http://blog.netflix.com/2008/10/upgrade-to-watch-instantly-on-your-pc.html" target="_blank" >Netflix &quot;Watch Instantly&quot;</a><br /></li></ul>
<li>Integrated Silverlight design surface in VS 2010<br />
<li>Silverlight 3 coming in 2009</li></ul>
<p>As always, questions and comments are always welcome. Part 3 coming soon -- the Windows Live and Office 14 stories from <a href="http://www.microsoft.com/presspass/exec/treadwell/default.aspx" target="_blank" >David Treadwell</a> and Takeshi Numoto.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2008/10/29/20.16.01</link>
         <guid>http://eric.burke.name/dotnetmania/2008/10/29/20.16.01</guid>
         <category></category>
         <pubDate>Wed, 29 Oct 2008 20:16:01 -0500</pubDate>
      </item>
      
      <item>
         <title>RIAs with Microsoft and Adobe</title>
         <description><![CDATA[<p><a href="http://www.joshholmes.com/" target="_blank" >Josh Holmes</a> is a friend of mine who works at Microsoft as an RIA Evangelist.  Basically, his job is to help people architect RIAs using various technologies, with <a href="http://silverlight.net/" target="_blank" >Silverlight</a> being at the core of that.  Recently Josh did a long trip to Europe, during which time he gave a talk with <a href="http://www.jamesward.com/" target="_blank" >James Ward of Adobe</a> on how to architect an RIA.</p>
<p>What&rsquo;s interesting about this is that Josh is an evangelist for Microsoft, and James is an evangelist for Adobe.  The two companies are battling for RIA dominance with <a href="http://silverlight.net/" target="_blank" >Silverlight</a> and <a href="http://www.adobe.com/products/flex" target="_blank" >Flex</a>, respectively.  If you talk to either Josh or James individually, they will definitely try to convince you that their technology is the one to use.  However, underlying that is that the both are passionate about helping developers architect their RIAs using best practices so that they provide the best experience possible.</p>
<p>You can <a href="http://www.joshholmes.com/2008/10/27/ArchitectureOfRIAFromJAOO.aspx" target="_blank" >see the post here</a>, including the slide deck and detailed write-up.  Highly recommended read.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2008/10/29/13.38.41</link>
         <guid>http://eric.burke.name/dotnetmania/2008/10/29/13.38.41</guid>
         <category></category>
         <pubDate>Wed, 29 Oct 2008 13:38:41 -0500</pubDate>
      </item>
      
      <item>
         <title>PDC Day 2 Keynote, Part 1: Windows 7</title>
         <description><![CDATA[<p>PDC Day 2 keynote focused on a lot of meaty stuff: Windows 7, Developer Stories, Office 14 (what happened to 13?!?!), and Live Services. It was so much better than yesterday that I have to break it into multiple posts. During each post I&rsquo;ll also link to the video online and tell you where to start watching if you want to see the actual keynote.</p>
<p><strong>PDC Day 2 Keynote, Part 1: Windows 7</strong></p>
<p><a href="http://www.microsoftpdc.com/" target="_blank" >Watch the video here</a>. [You will need Silverlight 2.0, which you can install directly from this page.] Click on Day 2, then &quot;Watch Keynote on-demand&quot;. Start at 17:00 into it.</p>
<p><a href="http://www.microsoft.com/presspass/exec/ssinofsky/default.aspx" target="_blank" >Steven Sinofsky</a> opened the drill-down portion of the keynote with an overview of Windows 7. He did a demo with another VP inside Microsoft, showing off a number of new features in Windows 7. The bottom line for me is that it&rsquo;s clear that Windows 7 will not me any quantum leap from where Vista is; rather, they are trying to fix a number of pain points in Vista as well as add some interface love that either didn&rsquo;t make it into Vista, or that they came up with since Vista launched. I&rsquo;ll go through a number of the things they touched on here.</p>
<p><strong>Window Management</strong></p>
<p>The taskbar has undergone a Dockification (tm). The Quick Launch area is gone, and the taskbar window area has transformed to be both the Quick Launch and the Running Applications area, just like the MacOS Dock. You can put application shortcuts there for quick launching. If the application associated with a taskbar item is running, hovering over the icon will give you a thumbnail preview of each window for that app. For instance, if you have 3 Explorer windows open, you&rsquo;ll see a thumbnail of each, with the ability to close any instance via a &quot;close&quot; button in the thumbnail. For IE, they even preview each *tab* in a separate thumbnail, so that you can more easily switch to the tab you want.</p>
<p>Another taskbar change is to the window icons themselves. Each icon now has its own &quot;Jump List&quot; which includes some standard items and custom items the application registers. For instance, the jump list could include the Most Recently Used Documents list, which lets the user quickly open an MRU document instead of having to launch the app and then try to find the MRU list. Since this is a first-class OS API, applications will have full reign over what appears in the list.</p>
<p>They have also reworked the System Tray. Any application can still register its own icon to be hosted in the tray; however, at first any icon goes into a hidden &quot;bucket&quot; which is accessible by a single icon in the System Tray. The user then has control over if/when that icon shows up in the actual System Tray, and what notification(s) the user would like to hear about from each icon. This should go a long way in preserving valuable real estate in the taskbar, as well as reduce the number of annoying info bubbles the user has to deal with.</p>
<p>Another window management feature they have built is snapping windows to a screen edge. A feature like this has been necessary with the advent of the high-res monitors, where you have the screen space to show multiple windows large enough that you have the workspace you need, without having to manually resize the window. The way it works is as you drag a window, it cues you to snap to an edge. Once it&rsquo;s snapped it automatically resizes to take up half the screen. This way, you can quickly get multiple windows side-by-side with maximum size without all the manual work.</p>
<p><strong>Windows Explorer and the Home Network</strong></p>
<p>Windows explorer hasn&rsquo;t undergone too many changes yet. The first thing that&rsquo;s been added are what they call Libraries, which are essentially virtual collections of files on any number of drives. For instance, I could have a &quot;Documents&quot; library which points to both &quot;My Documents&quot; as well as a &quot;Shared Documents&quot; folder somewhere on my network. This allows me to look at all my documents at once, rather than looking in each directory trying to find what I need. Desktop search results can be federated to over Libraries so that I don&rsquo;t have to specify multiple directories when searching -- I can just specify the Library to look in. Custom libraries can be created for any number of folders.</p>
<p>They&rsquo;ve tried to simplify the networking stuff, especially for home users. When you join your home network, Windows 7 will seek out other machines and automatically modify your machine&rsquo;s Printers, etc. to reflect what you have access to. It can also maintain default settings on a per-network basis, so if you have a computer you use at home and work, it will always reflect the state you want depending on the network.</p>
<p>Overall, they are trying to simplify the use case where your home network has N machines, each with its own set of media and devices that you might want access to. They want you to be able to find anything you want and play it immediately. For instance, you search your &quot;Music&quot; library and find a file on another machine, and you can play it immediately locally or send it to a networked media device without a lot of acrobatics.</p>
<p><strong>Media Support</strong></p>
<p>Windows 7 contains a lightweight media player so that you can quickly play a media file without bootstrapping all of WMP. You still have quick access to the full library via WMP, but if you don&rsquo;t want it, you don&rsquo;t have to launch it.</p>
<p><strong>Device Management</strong></p>
<p>Windows 7 offers better device management. When you plug in your device, if Windows recognizes it, it will give you the ability to pull media off the device, configure it, etc. I would assume they will have support for many devices on the market the day it launches, with the ability to easily find new drivers/support for new devices as the manufacturer makes them available. The idea here is that now the home novice user who wants to pull her photos off her camera phone won&rsquo;t have to try to do it all through a folder interface in Windows Explorer. I wonder if they&rsquo;ll be able to sync the phone&rsquo;s address book as well?</p>
<p><strong>Sidebar and Gadgets</strong></p>
<p>Gadgets can now live on the desktop as well as on the sidebar, in the same form. I&rsquo;m not sure what that means to how the gadgets will work -- currently there is a &quot;I&rsquo;m in the sidebar&quot; form and the &quot;I&rsquo;m on the desktop&quot; form. Maybe that type of control will still be there. Also not sure what that means for the flyouts. Clearly the sidebar was not working too well for users. </p>
<p>UPDATE: what i mean is that you can run the gadgets on the desktop without the sidebar taking up desktop space. <img src="http://picturelli.com/images/emo/smile_wink.gif" valign="absmiddle" alt=";-)" border="0" /></p>
<p><strong>Touch and Multitouch Interfaces</strong></p>
<p>Windows 7 will have native support for Multitouch input. The APIs and events will be available in all the SDKs, from Win32 to WPF. This will allow developers to create applications that support Multitouch out of the box. The APIs are similar to the Ink APIs that have been around for a number of years now. There were a few interesting demos in the keynote using the touch interface.</p>
<p><strong>Developer Goodies</strong></p>
<p>What would a PDC be without some new fun developer goodies? Along with the new APIs for Jump Lists, Libraries and Multitouch, there are a number of new common controls (Office Ribbon control, WPF DataGrid/DatePicker/etc.) as well as a bunch of new DirectX APIs and better XNA support (which makes the usually difficult DirectX programming a little easier). As one breakout presenter put it, &quot;DirectX is the new GDI&quot;. They really want people taking advantage of the hardware in regular applications.</p>
<p><strong>Virtual Machines</strong></p>
<p>Windows 7 will offer native VHD support via the Disk Manager. You can create and manage any number of VHDs without using Virtual PC. You will even be able to boot a VHD *natively* using the Boot Manager (BootCamp-ish), which is pretty cool -- gone are the days of using Ghost and a floppy (who has a floppy drive anymore, anyway?) to natively boot the OS you want. The one question mark is whether they will have Virtual PC built into the OS. Doesn&rsquo;t seem like it&rsquo;s a big stretch at that point.</p>
<p><strong>UAC</strong></p>
<p>The dreaded UAC is back and hasn&rsquo;t changed a lot. The basic ideas are still the same. The changes (additions, really) are that the user now has more granular control -- instead of on/off, there will be 4 levels of UAC inside a much better (and more discoverable) UAC UI. The question mark for me as a developer is whether or not this means the code which handles elevation needs to be more complicated, or if that doesn&rsquo;t change.</p>
<p>What doesn&rsquo;t change is that it&rsquo;s very important for applications to invoke best practices for running as the Standard User so that you don&rsquo;t have to deal with a bunch of issues.</p>
<p><strong>Other Goodies</strong></p>
<ul>
<li>Ever have trouble getting your desktop replicated on the projector when you plug it in? Yeah, you and everyone else. Windows 7 adds a Windows-P keyboard shortcut which gives you the options you need to quickly switch the display configuration when you have an external display attached (e.g., Replicate my display on both, Extend my desktop, etc.). This should make it much quicker and easier to get your presentation up and running. ;)</li>
<li>If you are a developer, surely you&rsquo;ve used Remote Desktop. Ever try to remote into your dev machine which has extended desktop running on 3 monitors? Not a great experience. In Windows 7 they&rsquo;ve added multimonitor support to RDC. So if you remote into your multimon desktop from a multimon machine, your RDC session will span. I&rsquo;m not sure what the plan is if you remote into a multimon machine from a laptop -- will you have access to all the screens?</li></ul>
<p>Anyhow, questions and comments are always welcome. Part 2 coming soon -- the developer story from <a href="http://weblogs.asp.net/scottgu/" target="_blank" >Scott Guthrie</a>.</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2008/10/29/12.02.01</link>
         <guid>http://eric.burke.name/dotnetmania/2008/10/29/12.02.01</guid>
         <category></category>
         <pubDate>Wed, 29 Oct 2008 12:02:01 -0500</pubDate>
      </item>
      
      <item>
         <title>PDC, Day 1: Keynote</title>
         <description><![CDATA[<p>Just got out of the keynote here at PDC, Day 1.  Ray Ozzie kicked it off and announced a new product called <a href="http://azure.com/" target="_blank" >Windows Azure</a>.  The overall idea is to provide an entire end-to-end solution for deploying an application to &quot;the cloud&quot;.  They are making a CTP available today for PDC folks, and in a few weeks for the general public.</p>
<p>The overall vision for Azure contains a number of pieces, which are best described on <a href="http://www.microsoft.com/azure/whatisazure.mspx" target="_blank" >this page</a>.  They want to offload the developer of any cloud-based service headaches, including high availability, failover, scalability, etc.  It&rsquo;s likely that this will appeal most to small- and medium-sized businesses.  It&rsquo;s also likely this will appeal most to people running enterprise or LOB applications, although consumer applications can also benefit.</p>
<p>From a .NET developer&rsquo;s perspective, nothing really changes.  You write your application locally and test it against your local development server, using the same tools and languages you&rsquo;ve been using for client or ASP.NET apps.  You then use configuration files and a web interface to actually deploy it to the Azure service cloud.</p>
<p>The speaker who presented the guts of what Azure is also alluded to the plans for interop with other technologies such as PHP, but he did not go into detail on what that would entail.  However, he did say that since they are using standard stuff such as REST and XML, it would be possible to do this.</p>
<p>One demo in particular was that from <a href="http://bluehoo.com/" target="_blank" >BlueHoo</a>.  They are a location-based social networking type site that uses Bluetooth to find people near you that you can connect to.  They demo&rsquo;d using Azure as their cloud that allowed Windows Mobile devices to update profiles, and a Silverlight desktop app for viewing participants, management of the servers, etc.  It&rsquo;s a simple app but they were able to get it running quickly using VS, C#, .NET, and Azure.</p>
<p>The big question marks for me are: how far along is the technology today?  What features are implemented?  How long will it take for them to achieve their vision?  And finally, how much will it cost to use?</p>
<p>Azure is something that is not really a surprise.  It really is the culmination of where Microsoft has been headed with all their cloud-based services, including Live Services, Silverlight Streaming, etc.  The fact that they have a seamless workflow and stories for developers is typical of Microsoft.  Hopefully they will roll out more and more functionality under the Azure hood so that people can build something real with it!</p>]]></description>
         <link>http://eric.burke.name/dotnetmania/2008/10/27/14.28.51</link>
         <guid>http://eric.burke.name/dotnetmania/2008/10/27/14.28.51</guid>
         <category></category>
         <pubDate>Mon, 27 Oct 2008 14:28:51 -0500</pubDate>
      </item>
      
   </channel>
</rss>
