<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0"><channel><title>Markus on Development and Publishing</title><link>http://www.MarkusEgger.com</link><description>This is Markus Egger's&amp;nbsp;professional blog, which covers topics such as development, publishing, and business in general. As the publisher of CoDe and CoDe Focus magazines, and as the President and Chief Software Architect of EPS Software Corp., Markus shares his insights and opinions on this blog.</description><language>en-us</language><copyright>Markus Egger / EPS Software Corp. 2009 - All rights reserved.</copyright><managingEditor>megger@eps-software.com</managingEditor><generator>Milos Solution Platform - www.MilosSolutionPlatform.com</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/MarkusEgger/Blog/Development" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>State of .NET and User Group Presentations in Denver</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=53ba5748-ea38-4430-81ca-f2dcb4025eda</link><author>markus@code-magazine.com</author><pubDate>Fri, 30 Oct 2009 21:24:41 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com53ba5748-ea38-4430-81ca-f2dcb4025eda</guid><description>&lt;h1&gt;State of .NET and User Group Presentations in Denver&lt;/h1&gt;&lt;p&gt;I just got back from doing a State of .NET Event in Denver as well as a user group presentation there. It was fun. Thanks for the warm welcome “Denverers” (what do you call people from Denver?).&amp;nbsp; &lt;p&gt;For those of you who attended one of the presentations, don't forget to sign up for a CODE Magazine subscription using one of the special URLs provided. For those of you who weren't there, you can still &lt;a href="https://www.code-magazine.com/Subscription.aspx?ref=news"&gt;get a great CODE Magazine offer here&lt;/a&gt;. Also, don't forget to subscribe to the free &lt;a href="http://www.codemag.com/codecast"&gt;CodeCast podcast&lt;/a&gt;.&amp;nbsp; &lt;p&gt;Here is the slide deck for these talks: 
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.markusegger.com/downloads/sodndenver.zip"&gt;State of .NET Denver - Slide Decks&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://www.markusegger.com/downloads/ReusableSilverlightComponentsEnglish.zip"&gt;Building Reusable Silverlight Components – Slide Deck&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Also, I promised additional examples to download, so here they are: 
&lt;ul&gt;
&lt;li&gt;My TechEd Examples (which I used during the afternoon presentation): &lt;a href="http://www.markusegger.com/downloads/SilverlightHockeyExample.zip"&gt;Silverlight&lt;/a&gt; and &lt;a href="http://www.markusegger.com/downloads/BlendWpfHockeyExample.zip"&gt;WPF&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://www.markusegger.com/downloads/ASPNET_MVC_Session.zip"&gt;ASP.NET MVC&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://www.markusegger.com/downloads/BlendWpfHockeyExample.zip"&gt;WPF Expression Blend Example&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Also, for more information on Silverlight and related Expression products, see &lt;a href="http://www.silverlight.net/GetStarted"&gt;www.Silverlight.net/GetStarted&lt;/a&gt; 
&lt;p&gt;For more information on our Tower48 escrow company, check out &lt;a href="http://www.markusegger.com/Blog/Development.aspx?messageid=a596d7d9-6b48-4445-896e-afeb45a2df46"&gt;this post&lt;/a&gt;, or go to &lt;a href="http://www.tower48.com/"&gt;www.Tower48.com&lt;/a&gt;. Also, here is a video on the Tower48 stuff: &lt;/p&gt;
&lt;p&gt;&lt;iframe style="width: 500px; height: 375px" src="http://silverlight.services.live.com/invoke/99252/Tower%2048%20-%20Software%20Escrow%20Services%20Overview/iframe.html" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;And here is a video of the Silverlight hockey app:&lt;/p&gt;
&lt;p&gt;&lt;embed height=344 type=application/x-shockwave-flash width=425 src=http://www.youtube.com/v/BD8OPqtHYdg&amp;amp;hl=en&amp;amp;fs=1 allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;p&gt;The external download link for the video is this:&lt;br&gt;&lt;a href="http://www.youtube.com/watch?v=BD8OPqtHYdg"&gt;http://www.youtube.com/watch?v=BD8OPqtHYdg&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 4:24 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=53ba5748-ea38-4430-81ca-f2dcb4025eda</comments></item><item><title>Cross-Site Access Policy for Self-Hosted WCF Services</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=99f2b8b5-bbd0-4ca4-988a-cc2701d719c3</link><author>markus@code-magazine.com</author><pubDate>Tue, 6 Oct 2009 12:10:14 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com99f2b8b5-bbd0-4ca4-988a-cc2701d719c3</guid><description>&lt;h1&gt;Cross-Site Access Policy for Self-Hosted WCF Services&lt;/h1&gt;&lt;p&gt;When you build WCF Services you basically have to options in making the 
service available: 1) host in IIS, and 2) self-host in something like a Windows 
Service or similar application. In general, it is easier to let IIS host the 
service, because it offers features such as service-health-monitoring. Plus, it 
is easier to just put a service into an ASP.NET based application as a .svc 
endpoint. I use this ability myself, for both HTTP and TCP/IP based 
services.&lt;/p&gt;
&lt;p&gt;However, there are also scenarios where I prefer the self-hosting route. This 
is especially true for my more important and more powerful services, because 
those are typically the services I expose in a number of different formats and 
over a number of different protocols. In self-hosted scenarios, you generally 
have more options to expose the same service. For instance, I may want to expose 
a service over TCP/IP, HTTP (SOAP and REST), and MSMQ all at the same time. And 
yes, they are not all the same exact services (queued ones for instance, aren’t 
going to return a result, while SOAP services do, as do REST services, but they 
are still separate classes). Even so, they often are wrappers around the same 
business logic and generally go together. So self-hosting may be of interest 
there.&lt;/p&gt;
&lt;p&gt;Using WCF, exposing services (SOAP and REST) using the HTTP(s) protocol in a 
self-hosted scenario is not very difficult. You simply create a host app, add 
the appropriate WCF ABCs (well, Address and Binding, mainly… the Contract will 
be the same exact thing regardless of how you host the service), and you are 
pretty much ready to go. (There actually is a bit of a gotcha when you compete 
with IIS for a URL, but I will blog about that separately). &lt;/p&gt;
&lt;p&gt;The one thing that people often ask me when it comes to this stuff is “how do 
I call this from Silverlight”. Silverlight by default does not allow 
cross-domain calls. This means that a Silverlight component that is part of &lt;a href="http://codemag.com/"&gt;http://codemag.com&lt;/a&gt; cannot automatically access a 
service on &lt;a href="http://www.epsservices.net/"&gt;http://www.epsservices.net&lt;/a&gt;. 
To do this, the domain that hosts the service (&lt;a href="http://www.epsservices.net/"&gt;www.epsservices.net&lt;/a&gt; in this example) needs 
to define a cross-site access policy. It explicitly needs to opt in to allow 
services on that domain to be called from another domain. &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note that in these types of self-hosted scenarios you almost always have 
a cross domain call. Even if you only have a single site that calls the service, 
it is unlikely that the self-hosted service grabs the same domain as the actual 
web site hosting the Silverlight component. It can be done, but just from an 
architectural and maintenance point of view, it tends to get very 
confusing.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Anyway: What you need is a ClientAccessPolicy.xml file in the 
&lt;strong&gt;root&lt;/strong&gt; of the domain that &lt;strong&gt;hosts&lt;/strong&gt; the service. The 
XML file content is fairly simple. Here is an example that allows for unlimited 
cross-site access:&lt;/p&gt;&lt;pre&gt;&lt;font face="Consolas" size="2"&gt;&lt;font color="#0000ff"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;access-policy&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;  &amp;lt;&lt;/font&gt;cross-domain-access&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;    &amp;lt;&lt;/font&gt;policy&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;      &amp;lt;&lt;/font&gt;allow-from http-request-headers&lt;font color="#0000ff"&gt;="&lt;font color="#000000"&gt;*&lt;/font&gt;"&amp;gt;&lt;br&gt;        &amp;lt;&lt;/font&gt;domain uri&lt;font color="#0000ff"&gt;="&lt;font color="#000000"&gt;*&lt;/font&gt;"/&amp;gt;&lt;br&gt;      &amp;lt;/&lt;/font&gt;allow-from&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;      &amp;lt;&lt;/font&gt;grant-to&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;        &amp;lt;&lt;/font&gt;resource path&lt;font color="#0000ff"&gt;="&lt;font color="#000000"&gt;/&lt;/font&gt;"&lt;/font&gt; include-subpaths&lt;font color="#0000ff"&gt;="&lt;font color="#000000"&gt;true&lt;/font&gt;"/&amp;gt;&lt;br&gt;      &amp;lt;/&lt;/font&gt;grant-to&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;    &lt;/font&gt;&lt;/font&gt;&lt;font color="#800000" face="Consolas" size="2"&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;policy&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;  &amp;lt;/&lt;/font&gt;cross-domain-access&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;&amp;lt;/&lt;/font&gt;access-policy&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;Note that this leaves the server wide open. In the wild, it is better to 
limit callers to the exact set you actually need. Typically, that might mean 
limiting access to SOAP headers from 2 or 3 caller domains, or something like 
that.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;On a side note, it is also possible to use a CrossDomain.xml file 
instead. However, this is an Adobe format which Microsoft supports. This is not 
a file specifically created for Silverlight and it doesn’t support the same 
options and Microsoft won’t be able to add anything to that file format if 
needed. You should only use a CrossDomain.xml file if you have a real reason and 
understand the implications. Otherwise, stick with the ClientAccessPolicy.xml 
file. Also, contrary to common misconception, it is &lt;strong&gt;not 
&lt;/strong&gt;necessary to have both files. Just a ClientAccessPolicy.xml file is all 
you typically want/need.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Anyway: If your server is running IIS, you can simply put the 
ClientAccessPolicy.xml file into the root folder of the domain. Silverlight will 
then access the file to figure out what the server opts in for. &lt;/p&gt;
&lt;p&gt;One scenario you may run into is that the WCF server does not run IIS at all. 
After all, if you have a server dedicated to running these services in a 
self-hosted fashion, then why even run IIS? Just to serve up one XML file? That 
is probably overkill, especially considering that this opens the server up 
security-wise, and you also might run into trouble with IIS competing for URLs 
and such. Not to mention that every service running consumes resources. So if 
all you need is serve up this XML file, then don’t run IIS. Instead. have your 
WCF service host serve up the policy file as well. Here’s how:&lt;/p&gt;
&lt;p&gt;First, create a service contract that can serve up XML content:&lt;/p&gt;
&lt;p&gt;&lt;font face="Consolas" size="2"&gt;[&lt;font color="#008080"&gt;ServiceContract&lt;/font&gt;]&lt;br&gt;&lt;font color="#0000ff"&gt;public 
interface&lt;/font&gt; IClientAccessPolicy&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;OperationContract&lt;/font&gt;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [&lt;font color="#008080"&gt;WebGet&lt;/font&gt;(UriTemplate = "&lt;font color="#800000"&gt;/clientaccesspolicy.xml"&lt;/font&gt;)]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;XElement&lt;/font&gt; GetClientAccessPolicy();&lt;br&gt;}&lt;/font&gt;
&lt;/p&gt;&lt;p&gt;There are some interesting aspects here. Fundamentally, this is a pretty 
simple WCF contract that happens to return an XElement. The interesting part is 
that this services&amp;nbsp;– just like the REST service WCF&amp;nbsp;can now host&amp;nbsp;– supports 
simple web-get access, which means it can be accessed as a plain URL. The URL 
specified in this case is specified in the URI Template, and for this type of 
operation it is always the same (ClientAccessPolicy.xml in the root folder). So 
now, whenever someone goes to that file name in the root URL, this service can 
kick in and return a result.&lt;/p&gt;
&lt;p&gt;As you can imagine, the actual implementation of this service is trivial, as 
all that’s needed is a single method that returns the desired XML as an 
XElement. A good, simple, and flexible way to do this is using LINQ to XML for 
this. But you can implement this any way you want. (In fact, you can probably 
use other return types that represent XML).&lt;/p&gt;
&lt;p&gt;So now, all that’s left to do in your host application is to fire up this 
service using the WebHttpBehavior. Something like this will do fine:&lt;/p&gt;
&lt;p&gt;&lt;font face="Consolas" size="2"&gt;&lt;font color="#008080"&gt;Uri&lt;/font&gt;[] addresses = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;Uri&lt;/font&gt;[] {&amp;nbsp;"&lt;font color="#800000"&gt;www.mydomain.com&lt;/font&gt;" };&lt;br&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt; host 
= &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;ServiceHost&lt;/font&gt;(&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;(&lt;font color="#008080"&gt;ClientAccessPolicy&lt;/font&gt;), 
addresses); &lt;br&gt;&lt;/font&gt;&lt;font face="Consolas" size="2"&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt; 
endpoint = &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; host.AddServiceEndpoint(&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;(&lt;font color="#008080"&gt;IClientAccessPolicy&lt;/font&gt;), 
&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;new &lt;/font&gt;&lt;font color="#008080"&gt;WebHttpBinding&lt;/font&gt;(), &lt;font color="#0000ff"&gt;string&lt;/font&gt;.Empty);&lt;br&gt;endpoint.Behaviors.Add(&lt;font color="#0000ff"&gt;new&lt;/font&gt; WebHttpBehavior());&lt;br&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt; 
smb = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;ServiceMetadataBehavior&lt;/font&gt;();&lt;br&gt;smb.HttpGetEnabled = &lt;font color="#0000ff"&gt;true&lt;/font&gt;;&lt;br&gt;host.Description.Behaviors.Add(smb); &lt;/font&gt;
&lt;/p&gt;&lt;p&gt;There you have it! Now your self-hosted WCF service can host the client 
access policy “file”. No IIS needed or even desired. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 7:10 AM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=99f2b8b5-bbd0-4ca4-988a-cc2701d719c3</comments></item><item><title>Dynamically Loading Resource Dictionaries in Silverlight 3</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=6dcea387-c4a8-4e69-a83b-06ab1b2c13c3</link><author>markus@code-magazine.com</author><pubDate>Mon, 5 Oct 2009 17:14:4 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com6dcea387-c4a8-4e69-a83b-06ab1b2c13c3</guid><description>&lt;h1&gt;Dynamically Loading Resource Dictionaries in Silverlight 3&lt;/h1&gt;&lt;p&gt;At this fall’s BASTA conference in Mainz, I presented a session on “Reusable 
Silverlight Components”. One of the things I showed in that session was how to 
create Silverlight components that can be hosted in different sites and also be 
completely re-styled and rebranded by means of dynamically loaded Resource 
Dictionaries.&lt;/p&gt;
&lt;p&gt;Silverlight v3 is the first version of Silverlight that supports resource 
dictionaries. This makes it much easier to maintain resources generically in 
separate XAML files, and even switch between different sets of resources. One of 
the possibilities that often goes overlooked however, is that resource 
dictionaries can be loaded completely dynamically from any URL. I often use this 
in scenarios where I pass parameters to a Silverlight control, where one of the 
parameters is the URL of such a resource dictionary. I then load that dictionary 
dynamically, so everything in that application references that dictionary. The 
basic idea is the dynamic load process from a URL. This can be done like so:&lt;/p&gt;
&lt;p&gt;&lt;font face="Consolas" size="2"&gt;&lt;font color="#008080"&gt;WebClient&lt;/font&gt; request = 
&lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;WebClient&lt;/font&gt;();&lt;br&gt;request.DownloadStringCompleted += &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;DownloadStringCompletedEventHandler&lt;/font&gt;(request_DownloadStringCompleted);&lt;br&gt;request.DownloadStringAsync(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;Uri&lt;/font&gt;(&lt;font color="#800000"&gt;"http://domain.com/mydictionary.xaml"&lt;/font&gt;, &lt;font color="#008080"&gt;UriKind&lt;/font&gt;.Absolute));&lt;/font&gt; 
&lt;/p&gt;&lt;p&gt;This triggers an asynchronous string download from the specified URL. The 
associated event handler fires when the download is complete and assigns the 
loaded resource dictionary:
&lt;/p&gt;&lt;p&gt;&lt;font face="Consolas" size="2"&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt; 
request_DownloadStringCompleted(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#008080"&gt;DownloadStringCompletedEventArgs&lt;/font&gt; e)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string 
resourceXaml = e.Result;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;ResourceDictionary&lt;/font&gt; 
dictionary = &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;Application&lt;/font&gt;.Current.Resources &lt;font color="#0000ff"&gt;as&lt;/font&gt; &lt;font color="#008080"&gt;ResourceDictionary&lt;/font&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
dictionary.MergedDictionaries.Add( &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;font color="#008080"&gt;ResourceDictionary&lt;/font&gt;)&lt;font color="#008080"&gt;XamlReader&lt;/font&gt;.Load(resourceXaml));&lt;br&gt;}&lt;/font&gt;
&lt;/p&gt;&lt;p&gt;This accesses the current application resources (which should be a resource 
dictionary, although some error handling may be appropriate here) and then uses 
a XamlReader to load the retrieved XAML string, casts it to a resource 
dictionary (which it may not be, so more error handling is in order here) and 
then simply adds it to the collection of available resource dictionaries.
&lt;/p&gt;&lt;p&gt;There are a few more things of interest here that are worth pointing out:
&lt;/p&gt;&lt;p&gt;First of all, Silverlight 3 still doesn’t support dynamic resources. Static 
resources get assigned as soon as an interface loads and can’t be changed later. 
This means that the new resource dictionaries should be added before any real&amp;nbsp;UI 
loading is done. I generally like to allow for a “resourcedictionaries” 
parameter passed to the Silverlight control, but I make the parameter optional. 
For this reason, I generally have this kind of code in my Startup event handler 
in App.xaml.cs:
&lt;/p&gt;&lt;p&gt;&lt;font face="Consolas" size="2"&gt;&lt;font color="#0000ff"&gt;private void&lt;/font&gt; 
Application_Startup(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#008080"&gt;StartupEventArgs&lt;/font&gt; e)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;if&lt;/font&gt; (e.InitParams.ContainsKey(&lt;font color="#800000"&gt;"resourcedictionary"&lt;/font&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;var&lt;/font&gt; content = &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;Grid&lt;/font&gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;this&lt;/font&gt;.RootVisual = content;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
content.Children.Add(&lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;LoadingAnimation&lt;/font&gt;());&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;font face="Consolas" size="2"&gt;&lt;font color="#008080"&gt;WebClient&lt;/font&gt; request = &lt;font color="#0000ff"&gt;new&lt;/font&gt; WebClient();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; request.DownloadStringCompleted 
+= &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;DownloadStringCompletedEventHandler&lt;/font&gt;(request_DownloadStringCompleted);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
request.DownloadStringAsync(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;Uri&lt;/font&gt;(e.InitParams["resourcedictionary"], &lt;font color="#008080"&gt;UriKind&lt;/font&gt;.Absolute));&lt;/font&gt;&amp;nbsp;&lt;br&gt;&lt;font face="Consolas" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;font color="#0000ff"&gt;var&lt;/font&gt; root =&amp;nbsp;&lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;Page1&lt;/font&gt;();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;This code checks for the parameter. If it isn’t present, the root UI 
(Page1.xaml in this case) is loaded right away. Otherwise, I create a Grid() as 
a root container (the RootVisual setting can only be assigned once, so I am 
using the Grid object as a container which I can then use to load other UI into) 
and I then load a temporary loading screen while resource dictionaries are 
downloaded (you never know how long that might take). Then, when the dictionary 
is downloaded, I merge it into the resources and then I load the real UI into 
the Grid:&lt;/p&gt;
&lt;p&gt;&lt;font face="Consolas" size="2"&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt; 
request_DownloadStringCompleted(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#008080"&gt;DownloadStringCompletedEventArgs&lt;/font&gt; e)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;string&lt;/font&gt; resourceXaml = e.Result;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#008080"&gt;ResourceDictionary&lt;/font&gt; dictionary = &lt;font color="#008080"&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Application&lt;/font&gt;.Current.Resources &lt;font color="#0000ff"&gt;as&lt;/font&gt; 
&lt;font color="#008080"&gt;ResourceDictionary&lt;/font&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
dictionary.MergedDictionaries.Add(&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;font color="#008080"&gt;ResourceDictionary&lt;/font&gt;)&lt;font color="#008080"&gt;XamlReader&lt;/font&gt;.Load(resourceXaml));&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;var&lt;/font&gt; grid = &lt;font color="#0000ff"&gt;this&lt;/font&gt;.VisualRoot as 
&lt;font color="#008080"&gt;Grid&lt;/font&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.Children.Clear();&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
grid.Children.Add(&lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#008080"&gt;Page1&lt;/font&gt;());&lt;br&gt;}&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;Using this approach, the main UI (Page1) gets loaded after the custom 
dictionaries are downloaded and thus all static resources pick up the new 
styles.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: If you use the Implicit Style Manager, some of this is not as 
critical, since the ISM manually applies styles whenever it is invoked. However, 
since you are likely to still use named styles (which are always static), you 
probably still have the same problem.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Another interesting thing to note here is that I am simply adding the new 
dictionaries to the collection of merged dictionaries. The way Silverlight looks 
up resources, the resources added last are found first. So if my application 
already has a dictionary with a style called “StandardButtonStyle” and&amp;nbsp;a 
dictionary that is added later also has a style of the same name, the one loaded 
last is found and used. This means that dynamically loaded resource dictionaries 
can define a few new styles as needed. Since the standard resource dictionaries 
remain in place, Silverlight will find all the default styles there, but the new 
dictionaries can override only specific ones. If you completely replace all of 
the application’s resources, then the newly loaded dictionaries would have to 
define every single resource or else the control would show an error and 
probably fail to load. So adding resource dictionaries in addition is generally 
a nifty technique that works very well in the real world.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 12:14 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=6dcea387-c4a8-4e69-a83b-06ab1b2c13c3</comments></item><item><title>BASTA Session Materials</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=c166d60a-9d7f-4b6f-af81-b3b2ed9e61ae</link><author>markus@code-magazine.com</author><pubDate>Mon, 5 Oct 2009 16:33:26 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.comc166d60a-9d7f-4b6f-af81-b3b2ed9e61ae</guid><description>&lt;h1&gt;BASTA Session Materials&lt;/h1&gt;&lt;p&gt;OK, this took a bit longer than expected, but here are my session materials 
from the German BASTA Conference in Mainz. The download includes all 4 sessions 
(C# 4.0 Dynamic, WPF &amp;amp; Silverlight Styles, Silverlight Reuse, and iPhone 
Development for .NET Developers).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.markusegger.com/downloads/basta2009.zip"&gt;Click here to 
download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enjoy! &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;br&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 11:33 AM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=c166d60a-9d7f-4b6f-af81-b3b2ed9e61ae</comments></item><item><title>Horizontal Scroll Bars and Favorites Folders in Outlook</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=79441314-e726-4dce-aa52-ae31db7e6d4a</link><author>markus@code-magazine.com</author><pubDate>Wed, 9 Sep 2009 5:14:57 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com79441314-e726-4dce-aa52-ae31db7e6d4a</guid><description>&lt;h1&gt;Horizontal Scroll Bars and Favorites Folders in Outlook&lt;/h1&gt;&lt;p&gt;Yesterday, I learned about a little detail in Outlook that I wasn't previously aware of. You may be familiar with this already, but I thought I'd share it anyway:&lt;/p&gt;
&lt;p&gt;There are 2 things I do not like all that much about recent versions of Outlook (up to 2010): 1) the tree of mail items does not have a horizontal scroll bar for some reason, and 2) I never use the favorites, but can't get rid of them.&lt;/p&gt;
&lt;p&gt;As it turns out, there is a workaround for both issues, and by some odd coincidence, they are the same workaround. If you switch to the "Folder List" view (which shows everything and not just the mail items), you get your horizontal scroll bar (no idea why it is there in one view but not the other, but this seems to have been consistent for the last few versions) and the Favorites node is not there taking up space if you don't use it.&lt;/p&gt;
&lt;p&gt;So that's cool. Not quite as nice as having actual options to turn these things on and off (and what's up with the horizontal scroll bar anyway?!?) but it still gets me where I want to be.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 12:14 AM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=79441314-e726-4dce-aa52-ae31db7e6d4a</comments></item><item><title>Developer/Contractor Work and Training Opportunity at EPS/CODE</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=9beeec5b-b779-44e9-9208-48727b30515b</link><author>markus@code-magazine.com</author><pubDate>Mon, 7 Sep 2009 19:43:6 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com9beeec5b-b779-44e9-9208-48727b30515b</guid><description>&lt;h1&gt;Developer/Contractor Work and Training Opportunity at EPS/CODE&lt;/h1&gt;&lt;p&gt;We have another interesting opportunity for developers at EPS Software and CODE Magazine/ CODE Consulting/ CODE Staffing: Basically, we offer the opportunity to become part of EPS/CODE as either contractors or possibly (later?) employees and pick up some (or a lot of?)&amp;nbsp;work during the current tough economic climate. We are offering the opportunity to align yourself with EPS/CODE and get a lot of benefits for free out of this.&amp;nbsp;If you are interested, you get some free training and mentoring, regardless of whether you actually end up doing work for us. So right there might be an interesting benefit for everyone.&lt;/p&gt;
&lt;h3&gt;CODE Consulting and CODE Staffing&lt;/h3&gt;
&lt;p&gt;You may have heard of this by now: We are in the process of re-booting our consulting division at EPS. The core of EPS has always been our consulting division (with custom software, mentoring, staffing, and all that…), and we have always tried to be at the forefront of modern software development, both in the technologies as well as the process we are using. To remain at the leading edge, one has to re-think one’s approach every so often, and that is what we are in the process of right now. We are doing some hard thinking about “how should software be built today”, and “what technologies should we use”, and “what is our software development paradigm”. (And yes, these are things we are always thinking about, but right now, we are making a very active push for this). &lt;/p&gt;
&lt;p&gt;In a lot of ways, we are making a software developer’s dream environment.&lt;/p&gt;
&lt;h3&gt;The Unique Opportunity&lt;/h3&gt;
&lt;p&gt;At the same time, we are gearing up for what we expect to be “better times” and we thus believe we will need more developers, whether they are internal or external developers. We are doing some of that by hiring employees (if you are interested in that, send me an email to &lt;a href="mailto:megger@eps-software.com"&gt;&lt;font color=#0066a7&gt;megger@eps-software.com&lt;/font&gt;&lt;/a&gt;). However, the opportunity I am currently talking about is not the employment one. At least not directly. This is about the opportunity to align yourself with EPS/CODE and become part of the organization at an informal level, and thus get a lot of the benefits our staff gets, and also have the opportunity to pick up some work.&lt;/p&gt;
&lt;p&gt;Our goal with this is to grow our network of people we can draw from for the projects we are working on, so we can bring these people in as contractors when the opportunity arises. Of course we are interested in making sure that group of people is well trained and we have a good idea of the exact skills each individual has. So we simply want to offer the opportunity to be part of all our internal training (such as actual training sessions, brown bag meetings, paired-programming, “tag-along programs”, technical discussions, being able to ask internal questions and draw from our resources/expertise,&amp;nbsp;and all the other stuff we are doing…) as well as our normal CODE Training classes. If you are part of this program (which we informally call the “CODE Network”), you of course get all of that free of charge. &lt;/p&gt;
&lt;p&gt;Heck, we consider all members of the “CODE Network” to be “&lt;em&gt;one of us&lt;/em&gt;”, so you are free to come to all the cool stuff we are doing, such as team BBQs and all that. Frankly (without wanting to sound like a conceded jerk), it has never hurt to be associated with us and have “I worked with EPS/CODE Magazine” on a resume. Plus, you get to use all our resources and connections. For instance, if you are interested to write for magazines or break into user groups or conferences as speakers, or anything along those lines, we can probably greatly help you in that.&lt;/p&gt;
&lt;p&gt;Also, one interesting angle is that this opens the door for people who run into larger business opportunities and projects than they can normally handle, to use EPS/CODE to handle these projects and get referral fees in addition to their normal income.&lt;/p&gt;
&lt;h3&gt;What We Want in Return&lt;/h3&gt;
&lt;p&gt;Our main goal is to grow our network and have well-known resources available (which went through EPS/CODE training) whenever we need them. So that is exactly what we expect in return: We want people that become part of this program to be generally available as contractors for a price we agree upon ahead of time (hourly rate). We do not have a set hourly rate in mind. That is something we would negotiate based on your skills, and it will also change over time as people who are going through our training become more capable. (Of course we expect the increase to be within reason, since the know-how comes from us). We are also generally assuming contractors are available to work either on-site at EPS or a customer’s location. (Some projects may also support off-site scenarios, but one can never count on it…)&lt;/p&gt;
&lt;p&gt;Of course we do not expect that you sit around doing nothing until we call. It all has to be within reason. So we do not expect that you would drop working with another customer. But we do expect you to fundamentally be in the market of picking up contracting work. If you are a full-time employee with some other company and have no interest in changing that, then this opportunity is probably not for you… ;-)&lt;/p&gt;
&lt;p&gt;We haven’t decided all the details yet (and some of it is different for each person), but we like to sign a very short “letter of understanding” that says “&lt;em&gt;yes, I am available for contracting and charge $X per hour&lt;/em&gt;”.&lt;/p&gt;
&lt;h3&gt;Who Qualifies?&lt;/h3&gt;
&lt;p&gt;We are looking for independent contractors or small consulting firms. Obviously, we do not want to train competitors for free. If you own a consulting company together with your brother (for instance), and it’s just the 2 of you, then this might be for you. If you are the manager of a larger consulting organization that competes with us and you are looking to send a bunch of people for free training, then expect to be turned down :-).&lt;/p&gt;
&lt;p&gt;In short: You have to be really in the market to pick up some work like this. &lt;/p&gt;
&lt;p&gt;Obviously, we are not interested in training competitors. Of course there always is the possibility that you will end up getting hired by a competitor. Such is the real world, and we obviously don’t like it, but we can live with it. There are some scenarios we obviously want to protect ourselves from. All common sense stuff.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;So that’s it. I think this is a really cool opportunity for people who are looking to further their career and get the opportunity to pick up extra work and income. Of course all the people who are part of this program are generally the first in line to get work from EPS, even if that is just working on our internal projects (which we have several of). &lt;/p&gt;
&lt;p&gt;If you are interested, send me an email at &lt;a href="mailto:megger@eps-software.com"&gt;&lt;font color=#0066a7&gt;megger@eps-software.com&lt;/font&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Posted @ 2:43 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=9beeec5b-b779-44e9-9208-48727b30515b</comments></item><item><title>My Email/Office Problems on the Mac</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=aa72c9c1-5c3d-43c5-91df-ea104bb91677</link><author>markus@code-magazine.com</author><pubDate>Mon, 17 Aug 2009 9:46:19 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.comaa72c9c1-5c3d-43c5-91df-ea104bb91677</guid><description>&lt;h1&gt;My Email/Office Problems on the Mac&lt;/h1&gt;&lt;p&gt;As some of you may have heard, I bought myself a Mac a little while back. I mainly did this because I wanted to do some iPhone development&amp;nbsp;(and still do). Secondly, I did it because I am a UI guy, and as such I thought I’d probably get a lot of good ideas from the Mac. I expected an awesome UI experience that “just works”. That did not work out that way, and to be perfectly honest, some of the UI things on the Mac are just so plain dumb and bad, it is outrageous. But that shall be the topic of a different post. Today, I want to tell you about my Office and email problems and what the exact details are behind them, so you may be able to avoid them yourself.&lt;/p&gt;
&lt;p&gt;The basic setup is that I bought Microsoft Office for the Mac. The main reason for this is that I wanted to have a real Exchange client. I know that there are other email applications, but it is important to me that I simply access Exchange natively from whatever email app I use on the Mac, just like I do on Windows, the Web, or on Mobile Devices (including the iPhone). It would not be acceptable to me to have an email client that did a POP download into a local store so I would then have a copy of that email. I wouldn’t want to mark an email as read on the Mac and then go back to Outlook on Windows and still see the message as unread. I also wouldn’t want to file a message into a folder on the Mac and then not have that reflected in Exchange. Similarly, I would not want to send a message from the Mac and then not have that show up in my Sent Items in Windows.&lt;/p&gt;
&lt;p&gt;Note that I am the first to admit that I am not a Mac specialist. There are tons of things I do not know about the Mac. I have asked several people for other Mac email options and they all say “I use xxx…” or “I use yyy…” and people claim to access Exchange with those tools. But when we start looking at the details, it always turned out that they are not using Exchange in the typical Exchange way, thus not fulfilling the criteria listed above, which makes the solution unacceptable to me. Perhaps there are ways to get around this and none of the people I know understand those ways (and if you have an idea how to do this, please post a comment here, as I would be really eager to learn it), but I simply have not been able to find a way. (And please don’t post anything that says “switch away from Exchange” as I have no interest in that and Exchange has served us very well otherwise…).&lt;/p&gt;
&lt;p&gt;So here is what happened with my Email store: The other day, I open up Entourage (or more accurately, I am bringing my Mac out of sleep mode with Entourage already running). After a few moments, I am shown an error message that says something along the lines of “your Office database is corrupt and needs to be rebuilt”. OK, so far so good. I wasn’t overly concerned and clicked “OK”. Now, the Mac went into 15+ hours of rebuilding its database, at the end of which, it all seemed to be OK. It took a long time, but no errors occurred or anything like that. However, as it turned out, during this process, the Mac eliminated a bunch of folders from my mail store. Apparently, the corruption must have been such that the local offline cache lost those folders. That in itself should not be a big problem, one would think. After all, those folders still exist in Exchange and it should be straightforward to simply sync them back down. But alas, that assumption is wrong! Instead, Entourage apparently decided to remove those folders from the Exchange store completely. (This btw also happened for a few messages, such as my inbox items for the last 2 weeks I still had to reply to, and not just entire folders). Those messages and folders are not in deleted items, and I cannot find them with any of the other message restore tricks I am aware of. They are simply gone without a trace! (Note: This has now happened twice to me… but the first time I wasn’t quite sure why it had happened).&lt;/p&gt;
&lt;p&gt;Frankly, this is unacceptable. When was the last time you lost data in that fashion on any other platform? Even cell phones and other mobile devices do not fail at such a pathetic level. This is 2009 for crying out loud! Data loss like this just simply cannot happen anymore. And what makes all of this worse is that it is random stuff that has been removed. I have no way of restoring things from a backup, because there is newer stuff mixed in, and I do not even know all the things I lost in the first place. This is worse than losing my entire mailbox. It totally sucks!&lt;/p&gt;
&lt;p&gt;And this is not the only way I have lost data on my Mac.&amp;nbsp;Just 2 days ago, Word for the Mac crashed 3 times in a single day (!!!) and not just did the app crash, but it corrupted my document on every occasion. (We did I even give it a chance to do it 2 more times after it crashed once? Because I only had the Mac with me and needed to get work done). I lost several hours of work just that afternoon alone.&lt;/p&gt;
&lt;p&gt;Now before any zealots give me a hard time about this “being no surprise since this was crappy Microsoft software”: The same crap happens with other apps on the Mac too. I had Finder crash on me. I had Xcode crash on me and lose changes. I had Skype crash on me as well. And none of this is acceptable. When was the last time your Windows PC crashed? I have never seen a blue screen of death on Windows 7 and I am not even sure I have ever seen one on Vista. I don’t even remember the last time Word crashed on me. It certainly hasn’t happened in the last 5 years. And I sure have not had any file corruptions from an Office app crashing this millennium. And when you really think about it: Why would you?!? Just because an app comes to a screeching halt (“crashes”), why would it corrupt the file at hand? Losing unchanged work, that I understand. But corrupting previously saved stuff?&lt;/p&gt;
&lt;p&gt;Needless to say, I am very disappointed with all this. I am now using my Mac only to browse the web and to use TweetDeck for Twitter. I guess at the end of the day, that is what many consumers do, so maybe that is an explanation of why they seem to like their Macs… :-(&lt;/p&gt;
&lt;p&gt;In any event: If your Mac ever wants to rebuild an Office database: Stop it! Pull the plug or do whatever it takes so it can’t. Delete your files and start over. Even if you have a few unsent messages or something. That will be much preferable over what happened to me.&lt;/p&gt;
&lt;p&gt;Update: Here is a link with some more information and potential solutions:  &lt;a href="http://www.macwindows.com/Handling-Entourage-2008-database-corruption.html"&gt;http://www.macwindows.com/Handling-Entourage-2008-database-corruption.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Posted @ 4:46 AM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=aa72c9c1-5c3d-43c5-91df-ea104bb91677</comments></item><item><title>NY User Group Tour (State of .NET) - Slides and Examples</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=f4075c7c-c8ef-41e6-b845-4b124d0c8f25</link><author>markus@code-magazine.com</author><pubDate>Sun, 19 Jul 2009 18:15:17 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.comf4075c7c-c8ef-41e6-b845-4b124d0c8f25</guid><description>&lt;h1&gt;NY User Group Tour (State of .NET) - Slides and Examples&lt;/h1&gt;&lt;p&gt;Last week I wrapped up my user group tour through upstate New York (Buffalo, Rochester, Syracuse, and Albany). This was a "mini State of .NET tour", looking at various .NET technologies and why and in which scenarios they are important.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;For those of you who attended one of the presentations, don't forget to sign up for a CODE Magazine subscription using one of the special URLs provided. For those of you who weren't there, you can still &lt;a href="https://www.code-magazine.com/Subscription.aspx?ref=news"&gt;get a&amp;nbsp;great CODE Magazine offer here&lt;/a&gt;. Also, don't forget to subscribe to the free &lt;a href="http://www.codemag.com/codecast"&gt;CodeCast podcast&lt;/a&gt;.&amp;nbsp;
&lt;p&gt;&lt;/p&gt;Here is the slide deck for these talks: 
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.markusegger.com/downloads/sodnny.zip"&gt;State of .NET NY - Slide Decks&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Also, I promised additional examples to download, so here they are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;My TechEd Examples: &lt;a href="http://www.markusegger.com/downloads/SilverlightHockeyExample.zip"&gt;Silverlight&lt;/a&gt; and &lt;a href="http://www.markusegger.com/downloads/BlendWpfHockeyExample.zip"&gt;WPF&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markusegger.com/downloads/ASPNET_MVC_Session.zip"&gt;ASP.NET MVC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.markusegger.com/downloads/BlendWpfHockeyExample.zip"&gt;WPF Expression Blend Example&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Also, for more information on Silverlight and related Expression products, see &lt;a href="http://www.silverlight.net/GetStarted"&gt;www.Silverlight.net/GetStarted&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;For more information on our Tower48 escrow company, check out &lt;a href="http://www.markusegger.com/Blog/Development.aspx?messageid=a596d7d9-6b48-4445-896e-afeb45a2df46"&gt;this post&lt;/a&gt;, or go to &lt;a href="http://www.tower48.com/"&gt;www.Tower48.com&lt;/a&gt;. Also, here is a video on the Tower48 stuff:&lt;/p&gt;&lt;iframe style="WIDTH: 500px; HEIGHT: 375px" src="http://silverlight.services.live.com/invoke/99252/Tower%2048%20-%20Software%20Escrow%20Services%20Overview/iframe.html" frameBorder=0 scrolling=no&gt;&lt;/iframe&gt;
&lt;p&gt;And here is a video of the Silverlight hockey app:&lt;/p&gt;
&lt;p&gt;&lt;embed height=344 type=application/x-shockwave-flash width=425 src=http://www.youtube.com/v/BD8OPqtHYdg&amp;amp;hl=en&amp;amp;fs=1 allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;p&gt;The external download link for the video is this:&lt;br&gt;&lt;a href="http://www.youtube.com/watch?v=BD8OPqtHYdg"&gt;http://www.youtube.com/watch?v=BD8OPqtHYdg&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 1:15 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=f4075c7c-c8ef-41e6-b845-4b124d0c8f25</comments></item><item><title>Unique Office Sub-Lease Opportunity at EPS/ CODE Magazine</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=821b0d54-22e1-42aa-9785-90eb053f4714</link><author>markus@code-magazine.com</author><pubDate>Sat, 30 May 2009 18:8:44 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com821b0d54-22e1-42aa-9785-90eb053f4714</guid><description>&lt;h1&gt;Unique Office Sub-Lease Opportunity at EPS/ CODE Magazine&lt;/h1&gt;&lt;p&gt;We recently re-signed our office space deal at EPS (Houston). In anticipation of future needs, we signed for a space that is larger than we currently need, which opens up a sub-leasing opportunity that might have some very cool advantages for those with matching needs!&lt;/p&gt;
&lt;p&gt;The basic deal is this: We have 2-3 individual office rooms available for sub-lease. They are all different sizes, One fitting 1 person, another fitting 2 people, and the largest probably offering enough room for 4 or more. As all our offices, they are window offices, one even a corner office. Our office space is pretty cool and we are always happy taking people to our offices as I think the setup is professional and cool and modern at the same time.&lt;/p&gt;
&lt;p&gt;So far, so good, but what is so cool and unique about this deal? Well, for one, the way the office is set up, we have other facilities you can use as they are available, without having to pay for them. We have 2 sizable conference rooms that can be used when they are available. (To be clear here: We are not going to interrupt a training class when you need the conference room for 30 minutes, but when the room is available, you can have it… it is mostly a scheduling matter). Also, as long as we have capacity (and I don’t see us run out any time soon), you can use our Internet connection and other infrastructure. As long as we have capacity and your needs are reasonable, you can probably even put your web site up at our data center right in our office. So there is lots of little stuff like that that otherwise, you would have to arrange and pay for yourself, that is simply available. Anything from restrooms to power.&lt;/p&gt;
&lt;p&gt;Furthermore, this is an opportunity to associate yourself with EPS Software Corp., CODE Magazine, and all the other stuff we do at EPS. You are more than welcome to attend our internal training sessions and our brown-bag meetings and all the like. If you want, you can even try to kick our butt on our xbox 360 ;-). What might be even more interesting is that whoever is most accessible to us is first in line to pick up contract work from EPS (and people that have their offices inside of our offices are pretty accessible). No promises of course, but it just makes sense.&lt;/p&gt;
&lt;p&gt;I envision that there might be a range of people who might be interested in this. It is probably not ideal if you are looking to start a 20 person company, but if you have smaller needs, this may be great. In particular, if you do any programming (especially .NET) or graphics design type of work, or maybe even sales stuff, this may be an excellent opportunity for you. &lt;/p&gt;
&lt;p&gt;If you are interested in this, ping &lt;a href="mailto:Ellen@eps-software.com"&gt;&lt;font color=#0066a7&gt;Ellen@eps-software.com&lt;/font&gt;&lt;/a&gt; over email. The actual rate is to be arranged on a case by case basis, as is the length of the lease, which we are very flexible with. (Note: We are not looking to make a profit of this. We are simply looking to reduce our own expense until we need the space ourselves).&lt;/p&gt;
&lt;p&gt;There you have it. I think it is a cool deal for the right people with some very unusual benefits that don’t come along just any day.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Posted @ 1:08 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=821b0d54-22e1-42aa-9785-90eb053f4714</comments></item><item><title>Tower 48 - Our New Software Escrow Company</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=a596d7d9-6b48-4445-896e-afeb45a2df46</link><author>markus@code-magazine.com</author><pubDate>Mon, 11 May 2009 17:23:48 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.coma596d7d9-6b48-4445-896e-afeb45a2df46</guid><description>&lt;h1&gt;Tower 48 - Our New Software Escrow Company&lt;/h1&gt;&lt;p&gt;Some of you – especially those of you who are either on Facebook or Twitter – may have already seen this: We are launching a new company at TechEd 2009 called “Tower 48”. I would like to give you a quick overview of what we are doing and why I think it is cool and why I am so excited about it :-).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;So basically, what we are doing with Tower 48 is Software Escrow. This may sound like boring legal stuff, but read on! It actually gets pretty cool. If you never had to deal with escrow, here is the quick explanation: Has a customer ever asked you “&lt;i&gt;what happens if you get run over by a bus?&lt;/i&gt;”. The answer to this is “&lt;i&gt;we put all our stuff into escrow, so if something happens, you get it all&lt;/i&gt;”. The customer is protected, and you don’t have to give anything up you don’t want to give up. The trouble with escrow in general is that it is an expensive legal hassle. We are changing that. And not just that, but we are actually turning it into something that can turn into a profit center for you!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;For one, we are making things less expensive and going through the whole process takes just a few minutes. While with most escrow companies, you will spend thousands of $ a year and you are charged every time you update&amp;nbsp;the stuff you have in escrow, and so forth. With us,&amp;nbsp;the default deal is that for about 30 bucks a month, you can put up to 5 products into escrow for 5 people, as long as you don’t use up more than 5GB of storage (which is a lot of source code or other digital assets... you can put anything into our escrow system that is a file). Secondly, it is all high tech, and SOA based. No more of this “&lt;em&gt;put a box into a secret underground vault&lt;/em&gt;” nonsense. Use our web site, or use our services to integrate into the build process or your ecommerce web site. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;But here is the real kicker: &lt;/b&gt;With Tower 48, you can add escrow automatically to your sales process and actually make a profit of it! For instance, if you are selling a $199 product, you could add a little checkbox to your web site that says “for an extra $X, we will put the source code into escrow”. Make X whatever it needs to be to sell. 99 bucks? No problem. $9.95? Sure! $5,000? No problem either. We will work out a deal with you where you can charge an appropriate and reasonable amount, regardless of whether you are selling a $1.99 iPhone app, or a product with a $500,000 license fee. (And keep in mind that there are other things that can be put into escrow. Whether that's additional documentation and information, or whether it is DRM free versions of digital content you sell, and so forth...). We want you to keep most of that fee as pure profit, and we are taking a cut of it to perform the service. Doing it is very simple, and in times like these, it sure doesn’t hurt to add a potential profit stream with no cost associated if nobody ever buys it, does it?&lt;/p&gt;
&lt;p&gt;You can check it out at &lt;a href="http://www.tower48.com/"&gt;www.Tower48.com&lt;/a&gt;. We also have a video that explains the system on that site at &lt;a href="http://www.tower48.com/videos.aspx"&gt;www.Tower48.com/videos.aspx&lt;/a&gt;. For those of you who can get videos in their RSS feeds are are reading this online, here it is:&lt;/p&gt;&lt;iframe style="WIDTH: 500px; HEIGHT: 375px" src="http://silverlight.services.live.com/invoke/99252/Tower%2048%20-%20Software%20Escrow%20Services%20Overview/iframe.html" frameBorder=0 scrolling=no&gt;&lt;/iframe&gt;
&lt;p&gt;Anyway: If you are at TechEd, stop by one of our booths. I will be either at the CODE (isle 100) or Tower 48 (isle 600) booths a good amount of time.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 12:23 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=a596d7d9-6b48-4445-896e-afeb45a2df46</comments></item><item><title>A Preview of my TechEd 2009 Samples</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=22be2e47-27d4-4753-8cde-6e9364880f5f</link><author>markus@code-magazine.com</author><pubDate>Sun, 3 May 2009 3:12:16 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com22be2e47-27d4-4753-8cde-6e9364880f5f</guid><description>&lt;h1&gt;A Preview of my TechEd 2009 Samples&lt;/h1&gt;&lt;p&gt;&lt;img style="DISPLAY: inline; MARGIN-LEFT: 0px; MARGIN-RIGHT: 0px" align=right src="http://www.markusegger.com/Blog/Images/TechEd2009SeeMe.gif"&gt; I will be presenting a session about Expression Blend for Developers at TechEd 2009. You can now download a preview version of 2 different sample apps (one for Silverlight and one for WPF) that I will be using at the conference. Here are the download links:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.markusegger.com/downloads/SilverlightHockeyExample.zip"&gt;Silverlight&lt;/a&gt; 
&lt;li&gt;&lt;a href="http://www.markusegger.com/downloads/BlendWpfHockeyExample.zip"&gt;WPF&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Both examples show a real world middle tier accessed from both WPF and Silverlight clients. The example presented here however has a fake middle tier, so it can easily be used without the need to set up the whole systems (not to mention the licenses needed).&lt;/p&gt;
&lt;p&gt;Also, I recently uploaded a video of the result of something very similar to the Silverlight example I will be using. &lt;/p&gt;
&lt;p&gt;I recently blogged about it, but here it is again, just in case:&lt;/p&gt;
&lt;p&gt;&lt;embed height=344 type=application/x-shockwave-flash width=425 src=http://www.youtube.com/v/BD8OPqtHYdg&amp;amp;hl=en&amp;amp;fs=1 allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt;&lt;/p&gt;
&lt;p&gt;The external download link for the video is this:&lt;br&gt;&lt;a href="http://www.youtube.com/watch?v=BD8OPqtHYdg"&gt;http://www.youtube.com/watch?v=BD8OPqtHYdg&lt;/a&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 10:12 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=22be2e47-27d4-4753-8cde-6e9364880f5f</comments></item><item><title>Downloading Files from a Silverlight Application</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=4f13df72-ee59-4a36-aa08-c582d9cad56d</link><author>markus@code-magazine.com</author><pubDate>Sun, 3 May 2009 3:3:46 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com4f13df72-ee59-4a36-aa08-c582d9cad56d</guid><description>&lt;h1&gt;Downloading Files from a Silverlight Application&lt;/h1&gt;&lt;p&gt;It seems that recently, I have been doing a lot of Silverlight development that includes uploading and downloading files of some sorts. File uploading of course is always a touchy subject in web applications (and I may blog about how we do that separately), but it may come as a bit of a surprise that even file downloading has it's problems in Silverlight. 
&lt;p&gt;Normally, when you offer a file download on a web site, you simply upload the file to its location, and then provide a link to it. When the user clicks that link, the browser starts a navigation away from the current page and to the linked URL, but then it realizes that the new address is a file download and not an HTML page, and it thus stops navigation (the current page remains visible) and a file-save dialog is displayed, usually allowing the user to either save or open the file. 
&lt;p&gt;In Silverlight, things are fundamentally similar. The main difference is that in Silverlight applications, one usually doesn’t navigate around in the browser as much. Instead, Silverlight code runs on the client, and instead of clicking on a link, Silverlight may offer up a button-click that initiates the download. The trick here is to programmatically initiate browser navigation from within that click event. 
&lt;p&gt;The following is a hypothetical click handler that initiates a file download: 
&lt;p&gt;&lt;font face=Consolas&gt;&lt;font color=#008080&gt;HtmlPage&lt;/font&gt;.Window.Navigate(&lt;font color=#0000ff&gt;new&lt;/font&gt; &lt;font color=#008080&gt;Uri&lt;/font&gt;(&lt;font color=#800080&gt;“http://…”&lt;/font&gt;));&lt;/font&gt; 
&lt;p&gt;Note: Very often you may want to download from a location relative to where the current Silverlight application is launched from. For instance, if the app is on &lt;a href="http://www.markusegger.com/"&gt;&lt;font color=#0066a7&gt;www.MarkusEgger.com&lt;/font&gt;&lt;/a&gt;, you may want to download from &lt;a href="http://www.markusegger.com/Downloads/File.zip"&gt;&lt;font color=#0066a7&gt;www.MarkusEgger.com/Downloads/File.zip&lt;/font&gt;&lt;/a&gt;. You can relatively easily find out a relative path to that file like so: 
&lt;p&gt;&lt;font face=Consolas&gt;&lt;font color=#0000ff&gt;var&lt;/font&gt; uri = &lt;font color=#0000ff&gt;new&lt;/font&gt; &lt;font color=#008080&gt;Uri&lt;/font&gt;(&lt;font color=#008080&gt;Application&lt;/font&gt;.Current.Host.Source, &lt;font color=#800080&gt;"../Downloads/File.zip”&lt;/font&gt;);&lt;/font&gt; 
&lt;p&gt;&lt;em&gt;Note: The root of the app is usually one folder up, since the Silverlight control is deployed to the /ClientBin folder.&lt;/em&gt; 
&lt;p&gt;Now, while this fundamentally works fine, there is a problem here. If the browser that runs the Silverlight application is Internet Explorer, one has the additional issue that Internet Explorer may intercept the download and show a special security message. The user can then dismiss this message, but that can cause IE to re-load the current page. Theoretically, the download can then be re-initiated. This works kind of OK, in HTML pages where the same page is simply loaded again. It can be a problem with AJAX-heavy pages that may have drastically changed the page state since navigation. And it is a real problem with Silverlight, since that means that the page hosting the Silverlight control is re-loaded and put into its initial state. 
&lt;p&gt;This is unacceptable for Silverlight apps, because it is the equivalent of re-launching a windows app, and it may put the user at a completely different place from where they were before. Worse, it may even cause loss of application state and associated data. A nightmare! 
&lt;p&gt;The only solution I can offer to this problem is to open a new window programmatically when IE is the host, and perform the navigation within that window. IE will notice that the URL of the new window is a file and it will then close the window and instead show the save-file dialog. It all looks slightly odd, but it isn’t too bad, and it avoids the data loss issue. Here is a code example: 
&lt;p&gt;&lt;font face=Consolas&gt;&lt;font color=#0000ff&gt;if&lt;/font&gt; (&lt;font color=#008080&gt;HtmlPage&lt;/font&gt;.BrowserInformation.Name == &lt;font color=#800080&gt;"Microsoft Internet Explorer"&lt;/font&gt;)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#008080&gt;HtmlPage&lt;/font&gt;.Window.Navigate(uri, &lt;font color=#800080&gt;"BlaBla"&lt;/font&gt;);&lt;br&gt;}&lt;br&gt;&lt;font color=#0000ff&gt;else&lt;/font&gt;&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color=#008080&gt;HtmlPage&lt;/font&gt;.Window.Navigate(uri);&lt;br&gt;}&lt;/font&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;This still isn't the entire story though. In many instances, IE will still block this, so what we resorted to is first navigating to another ASPX page instead of the actual file URL, and then redirecting to the real file URL.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;There you go. Not the most elegant thing I have ever done, but it solves the fundamental problem… &lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Posted @ 10:03 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=4f13df72-ee59-4a36-aa08-c582d9cad56d</comments></item><item><title>My Silverlight and WPF Examples from DevConnections</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=e749b5a9-168a-45ff-bed0-a1e4accd6466</link><author>markus@code-magazine.com</author><pubDate>Tue, 21 Apr 2009 3:56:1 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.come749b5a9-168a-45ff-bed0-a1e4accd6466</guid><description>&lt;h1&gt;My Silverlight and WPF Examples from DevConnections&lt;/h1&gt;&lt;p&gt;At this spring's DevConnections conference in Orlando, I did 3 different sessions that were all UI related:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;General UI design&lt;/li&gt;
&lt;li&gt;Silverlight Business Applications&lt;/li&gt;
&lt;li&gt;Expression Blend for developers&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;You can now download the sample code for these. &lt;a href="http://www.markusegger.com/downloads/BlendWpfHockeyExample.zip"&gt;WPF is here&lt;/a&gt;. &lt;a href="http://www.markusegger.com/downloads/SilverlightHockeyExample.zip"&gt;Silverlight is here&lt;/a&gt;. (The UI design session didn't have any code).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;I also recorded a short video showing the Silverlight demo app, which was kinda cool. Here it is (view in HD for the best experience): 
&lt;p&gt;&lt;/p&gt;&lt;embed height=344 type=application/x-shockwave-flash width=425 src=http://www.youtube.com/v/BD8OPqtHYdg&amp;amp;hl=en&amp;amp;fs=1 allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt; 
&lt;p&gt;The external download link for the video is this:&lt;br&gt;&lt;a href="http://www.youtube.com/watch?v=BD8OPqtHYdg"&gt;http://www.youtube.com/watch?v=BD8OPqtHYdg&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Posted @ 10:56 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=e749b5a9-168a-45ff-bed0-a1e4accd6466</comments></item><item><title>Thinking about Advertising</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=60a81417-0690-418a-b14c-9d2971f5c327</link><author>markus@code-magazine.com</author><pubDate>Sun, 19 Apr 2009 23:2:45 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com60a81417-0690-418a-b14c-9d2971f5c327</guid><description>&lt;h1&gt;Thinking about Advertising&lt;/h1&gt;&lt;p&gt;I am thinking a lot about advertising. This is due to a number of factors. For one, I own a magazine (and the associated online components), but for the other, I also run a software company (&lt;a href="http://www.eps-software.com/"&gt;EPS&lt;/a&gt;) and a few related properties such as &lt;a href="http://www.tower48.com/"&gt;Tower 48&lt;/a&gt; and &lt;a href="http://www.xiine.com/"&gt;Xiine&lt;/a&gt;. Oh, and I have&amp;nbsp;a substantial family history&amp;nbsp;around marketing and ad agencies, and I have a little bit of a personal history in that department.&amp;nbsp;So I am in a position to be both, a seller and a buyer of advertisement. And as such, I am thinking about a lot of things such as print vs. online ads, or direct mailing vs. viral marketing. (And it also makes me a party that is partial to all this. I am trying to present an accurate "brain dump" of my thoughts here, but I thought I might point that out ;-))&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;So the question is &lt;strong&gt;&lt;em&gt;what advertising works best?&lt;/em&gt;&lt;/strong&gt; 
&lt;p&gt;Now that literally is the million $ question, and there is no clear answer to this. Generally, about 50% of all ad and marketing budgets are wasted. It's just that nobody really knows ahead of time, which 50%&amp;nbsp;that is.&amp;nbsp;However, there are a few things that are known to work better than others across the board.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;In general, people absorb ads better when they are bored. If you are standing in a mall, waiting for your friend (or wife? ;-)) to come out of a store and meet up with you, your mind and eyes are likely to wander around, absorbing just about anything there is to absorb. Store signs, ads, people. That's what the bored mind does. It looks for something to entertain itself, or keep itself busy. On the other hand, it is difficult to get the attention of someone who is focusing on something else. Race car drivers probably don't spend a lot of time thinking about billboards they speed past for instance. 
&lt;p&gt;In terms of software or service sales, this roughly translates to the following: When I lay in my hammock in my back yard on a Sunday afternoon reading a magazine for fun&amp;nbsp;(as I just did a few minutes ago) or when I sit in a plane reading a magazine before take-off to kill some time, I am in a mode where I &lt;strong&gt;&lt;em&gt;*want*&lt;/em&gt;&lt;/strong&gt; to absorb everything the magazine has to offer me. I read mostly the articles, but if an ad catches my interest, I read it all the same. That's because I am explicitly in a mode where I try to give myself (or my brain) something to do and absorb. A very similar thing happens when one stands at a bus-stop or a subway station waiting for the bus, with little ability to do anything else. Receptiveness to marketing messages (and all other kinds of messages) is very high at that point. (Not quite that much in an airport, btw, as the interested target audience for the software field tends to bring out a laptop... this would be much harder to do at a bus-stop, but then the % of developers using public transportation is somewhat lower than say students). So poster ads at these "waiting points" are usually pretty good value as well.&lt;/p&gt;
&lt;p&gt;Then there is online advertising on the other hand. Imagine this scenario: You sit down in front of Visual Studio and try to get a new program to work that uses this new technology you just started discovering. However, something doesn't seem to be working, so you set out with a web search to find an answer to your problem, so you can wrap things up and go home. You find a few articles about the subject matter and click to the site, use the browser's find feature to find a few specific points, and there is your solution! Oh, and btw, there also is a banner ad in the right hand column. How likely do you think you are clicking on it, or even noticing it? Yeah, probably not much. I'd think you are more likely to click it by accident than deliberately. Usually, especially for technical things, people tend to be in a mode where they are highly focussed on a specific task, and getting them sidetracked with a product or service offering is a pretty long shot (unless your product fixes the very problem at hand... but even then, chances the user will see it are slim). Now admittedly, the online problem doesn't apply to all sites equally. If you are routinely reading a few blogs for instance, you are probably in a different frame of mind than&amp;nbsp;when you are looking for a solution to a problem that plagued you. Or when you browse your favorite news site every morning, you are probably also more in a receptive mood.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;Another option is email marketing. This one is a mixed bag. If you can deliver something of interest (such as an actual article), people may end up keeping the email and read it when they have more time (at that point they are in a more receptive state of mind, which is good). A very large percentage of email messages however goes unread, because the typical state of mind people are in when they go through their inbox these days is "&lt;em&gt;I got to get rid of as many of these messages as possible, because I already can't handle them all anymore...&lt;/em&gt;". And that's if you get through the spam filter. (And if people perceive your email as spam, you are fighting a losing battle anyway... you need to offer value!). Maybe you can piggyback with a provider of email articles (such as CODE Magazine &amp;lt;cough&amp;gt;... :-)). 
&lt;p&gt;&lt;/p&gt;There are a lot of things one can&amp;nbsp;do to advertise, and the online approach has seemed pretty appealing over the last few years. (And many of the potential advertisers for our magazines tend to go&amp;nbsp;with a lot of online advertising). However, I have to admit that the click-through rates are pretty pathetic.&amp;nbsp;We are advertising some of our own stuff on various sites (including Facebook and Google), and it takes an ungodly amount of "impressions" (displays of a banner) to get just a few clicks. And I guess that isn't a surprise. On the other hand, many online models charge only&amp;nbsp;when clicks happen, so at least there is&amp;nbsp;a protection mechanism built in for the ad buyer. 
&lt;p&gt;&lt;/p&gt;Then there is viral advertising. Microsoft's "I Love Bees" campaign comes to mind, which they used to advertise Halo. However, while those campaigns work great, it takes considerable clout to get them off the ground, and they only work well because they are so unusual. In other words: Extremely difficult to pull off, and only a few of those really ever work well. 
&lt;p&gt;&lt;/p&gt;Let's take one example scenario I am currently thinking about a lot: We are about to launch a new company called &lt;a href="http://www.tower48.com/"&gt;Tower 48&lt;/a&gt;.&amp;nbsp;Tower 48 is a software escrow company which we will launch&amp;nbsp;within&amp;nbsp;the next few months.&amp;nbsp;Do you have a software company or offer software services? Has your customer ever said "that's all great, but what do I do if you&amp;nbsp;get run over by a truck?". Well, that is exactly what software escrow solves for you. You can put your code into escrow and if something happens&amp;nbsp;(such as you close down your shop, or you get run over by a truck), the software is released to your customers. This way, they are protected without you having to give&amp;nbsp;up the crown jewels. Tower 48 makes all this affordable and high tech. You can automatically escrow your software as part of the&amp;nbsp;Visual Studio build process for instance. 
&lt;p&gt;&lt;/p&gt;Anyway:&amp;nbsp;Question is how to get the word out about Tower 48?&amp;nbsp;We certainly want to do some online banners and such.&amp;nbsp;However, we are very seriously considering magazine ads, since they will reach a lot of people and people will&amp;nbsp;consider us a much more serious undertaking. ("Everyone can run an online banner, but only&amp;nbsp;serious companies run print ads..." people think).&amp;nbsp;The web is a great place for a small guy to look large, but what happens mostly is that it makes the large or serious guys looks small. Looking for a real good way to look professional? Run a print ad! (It's not nearly as expensive as you think, and with the current economy, you can probably get some good deals!). Print ads also tend to give you longer exposures. Especially technical publications tend to not be thrown away. A lot of people keep them or at least come back the PDF versions (or Xiine versions in our case). With CODE Magazine for instance, people automatically get 2 months of exposure at the very least, but I would argue that the average is much longer as we know that a lot of readers collect all the articles. We also take multiple issues of the magazine to trade shows. And CODE Focus magazines often are given or mailed out for more than a year. And how many print magazines do you think there are compared to web sites? Especially with the recent "thinning out" of the market for developer publications, you can advertise in one or all of the remaining ones and have a large part of the market (or the whole market) covered. That is a pretty good deal! Not many outlets provide such wide coverage at this point. 
&lt;p&gt;&lt;/p&gt;The one downside of print ads is that it is harder to measure results though, so make sure you provide a unique offer in your ad that is linked to a specific URL, so you can run statistics as to how much the ad produced! 
&lt;p&gt;&lt;/p&gt;So we will def. do that, but we are even thinking&amp;nbsp;about direct mail again. This was something we didn't do&amp;nbsp;at all in the past few years, but with email being&amp;nbsp;just about useless for&amp;nbsp;marketing these days, snail mail is starting to look a whole lot better again. It is expensive (especially with recent rate hikes), but hey,&amp;nbsp;I&amp;nbsp;would rather&amp;nbsp;&amp;nbsp;have something that is a little more expensive if it produces results, than having something cheap that doesn't work! 
&lt;p&gt;&lt;/p&gt;One of the other things we are thinking about is something new we are starting with CODE Magazine: We have in the past published CODE Focus magazines, which had a ton of great content about specific Microsoft technologies. They are free, and people love them. It is some of the highest rated content we&amp;nbsp;produce.&amp;nbsp;So why not do the same for other people's products? In this specific case, we could do a special issue around Escrow. It would be clearly sponsored (paid for) by Tower 48, but it would have content produced by regular editorial staff, with CODE Magazine having full editorial control. It would talk about escrow in general, but it would also talk about the Tower 48 offerings, such as how to use the Tower 48 web services to integrate with the escrow solution. It would be of great value for the interested reader, and it would be a great way for Tower 48 to get the word out. It would certainly be something people wouldn't just throw away if they had at least a remote interest in the topic. I think it is a great deal for anyone involved! So that will be a big part of the Tower 48 campaign and from a CODE Magazine point of view, we will make the same thing available to other vendors and products. 
&lt;p&gt;&lt;/p&gt;What else?&amp;nbsp;I have heard some people considering fax campaigns a good idea again. I am not so sure about that. Fax campaigns produce cost and considerable hassle (more so than snail mail and email) on the receiver end, and thus produce a large amount of ill-will. Personally, I hate it when I need to change the paper in the fax just because some company I do not care about sends me a lengthy fax ad. Plus, legal hassles around fax campaigns tend to make it more trouble than it's worth. 
&lt;p&gt;&lt;/p&gt;Another option is tele marketing. I am no fan of tele marketing. It never produced great results for us, and it is a massive annoyance for the recipients. And after all, you do not intend to annoy anyone. You want to get the word out, but if someone has no interest, you can safely remove them from your list. All these people do is add to your expense and they will never buy anything from you. And from their point of view, you are just one of those annoying sales jerks. Better for both sides to not touch base again. 
&lt;p&gt;&lt;/p&gt;So there you have it! It is my personal view of the ad world today (April&amp;nbsp;2009) and I am sure it is somewhat biased to what we do. (Personally I like to think it is the other way around: We do things, like producing a print publication, because we think it works well).&amp;nbsp;I hope it provides some valuable ideas. 
&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Posted @ 6:02 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=60a81417-0690-418a-b14c-9d2971f5c327</comments></item><item><title>MS Publishes Case Study on EPS</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=106482c9-b6de-41e0-b44f-d4ec878c09b3</link><author>markus@code-magazine.com</author><pubDate>Thu, 16 Apr 2009 13:45:2 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com106482c9-b6de-41e0-b44f-d4ec878c09b3</guid><description>&lt;h1&gt;MS Publishes Case Study on EPS&lt;/h1&gt;&lt;p&gt;Microsoft has published the case study they did&amp;nbsp; on EPS and our efforts around WPF, Silverlight, Surface, and Azure. Check it out here:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=4000003997"&gt;http://www.microsoft.com/casestudies/casestudy.aspx?casestudyid=4000003997&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 8:45 AM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=106482c9-b6de-41e0-b44f-d4ec878c09b3</comments></item><item><title>Houston Channel 39 Video on EPS and Surface</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=33b10460-0285-4fee-9f2c-2dbed6efe726</link><author>markus@code-magazine.com</author><pubDate>Thu, 16 Apr 2009 3:2:14 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com33b10460-0285-4fee-9f2c-2dbed6efe726</guid><description>&lt;h1&gt;Houston Channel 39 Video on EPS and Surface&lt;/h1&gt;&lt;p&gt;A little while back, Channel 39 here in Houston did a news clip on EPS and our use of Surface. Check it out:&lt;/p&gt;&lt;iframe style="WIDTH: 500px; HEIGHT: 375px" src="http://silverlight.services.live.com/invoke/97373/Channel%2029%20Video%20on%20EPS%20and%20Surface/iframe.html" frameBorder=0 scrolling=no&gt;&lt;/iframe&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 10:02 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=33b10460-0285-4fee-9f2c-2dbed6efe726</comments></item><item><title>WPF and Silverlight Designs Must Also “Work”</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=0561a03f-4c31-4bd2-a0b5-c66fd1b29ed7</link><author>markus@code-magazine.com</author><pubDate>Mon, 13 Apr 2009 4:2:5 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com0561a03f-4c31-4bd2-a0b5-c66fd1b29ed7</guid><description>&lt;h1&gt;WPF and Silverlight Designs Must Also “Work”&lt;/h1&gt;&lt;p&gt;Over the last few years (and especially the recent past), I have spent a huge amount of time creating “skins”, “styles”, and “themes” for WPF and Silverlight applications (especially business applications). This task requires a combination of development and graphical design skills. Personally, I am not a designer, but I consider myself a “design savvy developer”, and due to my work in the publishing and marketing spaces, not to mention web development, I have had a great deal of exposure to the “visual arts”. &lt;/p&gt;
&lt;p&gt;Armed with that information (and hopefully a good dose of common sense), it was somewhat clear to me that there would be challenges in getting the two camps to work together. There are technical challenges (most of which turn out to be addressed very well by WPF and (to a lesser extent) Silverlight. There are also cultural challenges as developer and designer minds tend to think in completely incompatible ways. I expected all those. However, there is one very specific challenge I didn’t initially expect: &lt;strong&gt;The need to create visual designs that work in a technical, almost mechanical sense.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;What does that mean exactly? It is probably best to explain this by comparing WPF and Silverlight applications (especially business applications) with other applications we did in the past that required developer and designer cooperation. The simplest example for that are web pages.&lt;/p&gt;
&lt;p&gt;In web pages, designers create elements such as header bars or navigation menus among other things. So for the sake of argument, let’s say we have a web page with a header going across the top containing a logo and a navigation bar. Similar examples can be seen on many pages such as &lt;a href="http://www.mcirosoft.com/"&gt;&lt;font color=#0066a7&gt;www.mcirosoft.com&lt;/font&gt;&lt;/a&gt; or &lt;a href="http://www.google.com/"&gt;&lt;font color=#0066a7&gt;www.google.com&lt;/font&gt;&lt;/a&gt;, and chances are, if you type a random URL into your address bar and see a similar setup. So how would a developer and designer work together on this? Well, at first, one would agree on certain features the element needs to support, and then the designer sits down and creates a mockup, either in HTML or in a graphics program such as PhotoShop. Then, after a few iterations and everyone is happy with the design, the developer may end up taking the imagery and break it apart into actual image files (probably a background image and a few smaller images, and so forth) and create a master page or a control that can then be reused across the site.&lt;/p&gt;
&lt;p&gt;One of the characteristics of almost all such setups is that the technical requirements for such a title bar are simple. Generally, such title bars have very limited resize logic, if any. They generally have a certain width and are either left-aligned as a whole, or centered as a whole. At most, the navigation bar buttons (the individual items in the “menu”) may resize proportionally, which is a behavior that in HTML is achieved almost by accident. The complexity of such activities are relatively low and designers can easily account for needed “functional” elements such as mouse-over effects on navigation buttons.&lt;/p&gt;
&lt;p&gt;Flash web sites are somewhat similar, although more complex in their graphical capabilities. Therefore, designers probably have to do a bit more work than they would on a similar HTML based app. They have to worry about animations and media, and generally, the bar is higher than for HTML. However, in terms of developer/designer interaction, I find that things are often similar to the HTML scenario. Once the designer comes up with the navigation elements of the Flash app for instance, they tend to exhibit similar behaviors to the previous HTML application. By and large, Flash sites exhibit similar resize behavior to the site above. Granted, things might be a little more complex than in the HTML example, but not by orders of magnitude.&lt;/p&gt;
&lt;h3&gt;Enter: The WPF/Silverlight Business Application&lt;/h3&gt;
&lt;p&gt;The WPF and/or Silverlight Business Application is an entirely different beast altogether. For one these applications tend to be vastly larger in scope. A typical example of a Flash driven web site might be the booking page for a large hotel for instance. Go online and book a room in Vegas directly with a hotel, and you are likely to be lead through a Flash experience. Now I don’t want to take anything away from the developers and designers building these sites. They are often very elaborate, but at the same time, they are tiny in size compared to the entire back end system the same hotel uses to run its operations. And in WPF (and potentially in Silverlight as well), we are talking about building these types of enterprise systems. &lt;/p&gt;
&lt;p&gt;In short: &lt;strong&gt;For the first time in history of software development, we have brought professional design and polish to large systems.&lt;/strong&gt; &lt;/p&gt;
&lt;p&gt;And this changes everything. All of a sudden, the things the designer created have huge hurdles to jump through. It is not enough to design a beautiful navigation bar with a menu anymore, but that design must &lt;em&gt;work &lt;/em&gt;throughout the entire application! Let me give you an example: In one of my recent projects, we designed a header bar with a windows-style menu as well as a “circular menu button” similar to the “Office Menu” button in Office 2007 and the Ribbon. We also designed collapsible sidebars on the left and right side of the windows. This allowed developers to add navigation trees and research panes in the sidebars, while a familiar menu runs across the top, and “other items” can be added to the “circular menu button”.&lt;/p&gt;
&lt;p&gt;The design we came up with for this is something I grew very attached to. Copyright and confidentiality reasons keep me from presenting it here, but all 3 elements were curved and very pleasing to the eye and “next-gen” looking while remaining a very professional appearance. The circular menu overlapped the header bar a little bit, with the bottom few pixels of the curve overlapping the left sidebar slightly with a very subtle drop-shadow effect. The curved sidebar areas meant that when those panels were collapsed, they used up very little screen real estate and still kept the expand/collapse controls visible. In short: A thing of functional and professional beauty well suited for a business application.&lt;/p&gt;
&lt;p&gt;But there were issues that were not apparent during the design phase. Let me give you a few examples: For one, things worked very well when we had sidebars on both sides, but not all forms throughout the application needed sidebars. Some only needed them on the left side, others didn’t need them at all. So while our design was beautiful, it had to be adjusted to work with all those variations throughout the several hundred forms the application has. &lt;/p&gt;
&lt;p&gt;Furthermore, collapsing the left sidebar caused the circular menu to “hang into the main content area” since we designed it to create that overlap, which was what really allowed the visuals to break out from the old-fashioned angular look. This was not a problem in windows that sported a left sidebar (in either expanded or collapsed state), but when there was no sidebar at all, the control often overlapped the label or control positioned in the top/left corner of the window’s content area. Not exactly what we had in mind!&lt;/p&gt;
&lt;p&gt;Another problem area was the menu. What looked pretty good in our draft designs for a handful of windows looked horrible in windows that had a large number of menu items. It also looked bad when we only had a few menu items. What made the problem worse is that we designed a quick-search feature we envisioned every form to have. This was a search textbox and drop down in the top/right corner similar to the search boxes in many browsers. Once we started using that in hundreds of forms, it became apparent that we needed a much more flexible approach. Sometimes we wanted a more sophisticated query approach, while in other scenarios, a search feature made no sense. Either way, the look became very lopsided and looked really bad. Not the professional appearance we had originally designed.&lt;/p&gt;
&lt;p&gt;And at this point, we haven’t even discussed resizing the windows, or putting the same design into very small data entry forms or very large list windows. In web pages, designers never had to think much about what was going to happen when the user resized the web browser to be only 200 pixels wide. In a business application, you have to worry about such things. What if the sidebars start overlapping, because the windows is too narrow? What if the search or the menu items don’t fit anymore? Oh, and that fancy class effect highlight that went across the background that was barely noticeable before and just looked good, all of a sudden ended up twice the intended width, which means that the drawing brushed used for it now stretched the perfectly circular arcs into oddly distorted white smears that stick out like a soar thumb, not just because they just don’t look like a glass effect anymore, but also because they are now overlapping elements that it was never designed for. Things can go south very quickly in these scenarios. Graphics effects often work when they are just right and are noticed only subconsciously, but once they start standing out in odd ways, they look awful!&lt;/p&gt;
&lt;p&gt;And those are just a few examples from the navigation area! Another example would concern the data grids used in the application. As many business application, this app was very data heavy, and we really wanted to distinguish the app by visualizing the data as efficient as possible. Of course we also wanted to do so in a consistent way across the application. We ended up designing a grid that had the ability to expand a detail area so people could easily get at more information concerning the record. It all was beautiful. However, business applications have hundreds of grids and every single one is different. Designing a fundamental grid style for a WPF or Silverlight business application that works in all these cases is very difficult and enormously time consuming. Compare that with the lists of data shown by a Flash application, where the number of lists is generally limited to a few throughout the app, each of which you can probably design individually, while in a WPF app, one needs to create a style that can then be flexibly applied by a small army of developers who are not likely to have any graphics skills whatsoever.&lt;/p&gt;
&lt;p&gt;Oh, and then there is performance to worry about. That drop shadow I mentioned above? That is implemented through a WPF effect that supports hardware accelerated rendering. (Stay away from Bitmap Effects, which are the older version of WPF Effects and perform very poorly!). We ended up using various effects throughout this application, and in many cases, what was simple to create for designers in PhotoShop or Expression Design (where performance really doesn’t matter), it was rather difficult to create the same thing in a running app without having drastic performance impact. At one point, we used an outer glow effect on selected controls that completely broke other elements of the application, such as expanding and collapsing detail areas in grids or sidebars. How many designers do you know that have an understanding of such cross-dependencies and consequences? … Yeah, I don’t know many either ;-). So we ended up writing some pixel shaders on our own to enhance the performance of some effects. How many .NET business application developers do you know who can write pixel shaders? … Yeah, me neither. I personally have done DirectX development before and therefore, have somewhat of an understanding of shader development, but that was mostly a lucky coincidence due to my enthusiasm for all things graphical.&lt;/p&gt;
&lt;p&gt;So that’s my story. Thought I’d share. It really is just a small glimpse into the subject at hand, because this is a problem that arises out of the complexity of the issue, and thus it is really difficult to explain in a few paragraphs. There are hundreds of examples like the header bar or the data grids, where something that used to be fairly similar in previous graphics design for user interface scenarios that have now grown several orders of magnitude in complexity.&lt;/p&gt;
&lt;p&gt;Personally, I enjoy this type of thing tremendously. Doing Silverlight and WPF visual development represents the most fun I have had in development in years. Unfortunately, it has been extremely difficult to find people with this combination of skills, which is why we have put such effort into teaching our staff at EPS (the parent company of CODE Magazine) these skills. And of course, we are always looking for people with an interest in these areas.&lt;/p&gt;
&lt;p&gt;Let me know what your experiences are with this type of work.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Posted @ 11:02 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=0561a03f-4c31-4bd2-a0b5-c66fd1b29ed7</comments></item><item><title>CODE Magazine Redesign</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=3c93b051-37d3-41f8-8c9f-15adf648cd19</link><author>markus@code-magazine.com</author><pubDate>Wed, 8 Apr 2009 16:43:27 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com3c93b051-37d3-41f8-8c9f-15adf648cd19</guid><description>&lt;h1&gt;CODE Magazine Redesign&lt;/h1&gt;&lt;p&gt;As readers of CODE Magazine know, we recently applied a facelift to our logo, layout, and overall graphical direction. This includes various things such as the new logo itself, the cover design, Surface tags on the cover, and a new text layout that allows for more content on each page, and at the same time provide better readability.&lt;/p&gt;
&lt;p&gt;I have recorded an internal video about some of the changes. I have now made this video available on YouTube:&lt;/p&gt;&lt;embed height=344 type=application/x-shockwave-flash width=425 src=http://www.youtube.com/v/LcKWqZiX7-M&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0 allowscriptaccess="always" allowfullscreen="true"&gt;&lt;/embed&gt; 
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Here is an external link to get to the video:&lt;br&gt;&lt;a href="http://www.youtube.com/watch?v=LcKWqZiX7-M"&gt;http://www.youtube.com/watch?v=LcKWqZiX7-M&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;I am looking forward to your comments. Enjoy!&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Posted @ 11:43 AM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=3c93b051-37d3-41f8-8c9f-15adf648cd19</comments></item><item><title>Another VFP to .NET Training Event in the US announced</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=64a9f102-adb3-4394-b494-3e68fcc91dfe</link><author>markus@code-magazine.com</author><pubDate>Sun, 1 Feb 2009 22:49:50 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com64a9f102-adb3-4394-b494-3e68fcc91dfe</guid><description>&lt;h1&gt;Another VFP to .NET Training Event in the US announced&lt;/h1&gt;&lt;p&gt;We recently announced another VFP to .NET training event. Here are some more details on this event:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;-----&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Two Extensive Training Classes for VFP Developers - .NET Training for VFP Developers and Converting VFP Applications to .NET&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;i&gt;Where:&lt;/i&gt;&lt;/b&gt; Onsite at EPS Software Offices (6605 Cypresswood Dr. Suite 300, Spring, TX 77379) or remotely via GoToMeeting&lt;br&gt;&lt;b&gt;&lt;i&gt;When:&lt;/i&gt;&lt;/b&gt; &lt;b&gt;.NET Training for VFP Developers &lt;/b&gt;- March 16-18, 2009 (Monday – Wednesday) - Leverage your VFP knowledge to learn .NET&lt;br&gt;&lt;b&gt;Converting VFP Applications to .NET &lt;/b&gt;- March 19 &amp;amp; 20, 2009 (Thursday &amp;amp; Friday) - Converting your VFP Applications to .NET&lt;br&gt;&lt;br&gt;EPS Software will be holding two comprehensive classes,&lt;b&gt; specifically for Visual FoxPro developers&lt;/b&gt; who wish to utilize the latest Microsoft .NET technologies. The training class will be held at our offices in Houston, Texas as well as online via GoToMeeting. The first class (Monday - Wednesday) will be &lt;b&gt;.NET Training for VFP Developers&lt;/b&gt;. The second class (Thursday &amp;amp; Friday) will be &lt;b&gt;Converting VFP Applications to .NET&lt;/b&gt;.&lt;br&gt;&lt;br&gt;These two events will be taught by industry renowned expert, author, speaker, and MVP &lt;b&gt;Claudio Lassala,&lt;/b&gt; as well as senior developer and creator of much of the VFP2NET toolset, &lt;b&gt;Mike Yeager.&lt;/b&gt; &lt;br&gt;&lt;br&gt;In the first class, attendees will learn an overview of Visual Studio and the .NET Platform from a VFP perspective, C# and VB.NET, WPF &amp;amp; Silverlight, Windows and Web applications, and much, much more.. The second class will discuss overall strategies, planning, architecting and real world techniques for converting existing VFP applications to .NET. (The full agenda is below.) Attendees will also get the opportunity to discuss their projects and have their questions personally answered by both Claudio Lassala and Mike Yeager. &lt;br&gt;&lt;br&gt;Costs are the same for either on-site or remote access:&lt;br&gt;Only &lt;b&gt;$749&lt;/b&gt; for the 3-day &lt;b&gt;.NET Training for VFP Developers class&lt;/b&gt; - March 16 - 18. To register for the 3-day class only, &lt;a href="http://www.vfpconversion.com/Eventsignup.aspx?id=cb1c5c47-501c-4cff-bb53-557576233321"&gt;click here&lt;/a&gt;&lt;br&gt;Only &lt;b&gt;$599&lt;/b&gt; for the 2-day &lt;b&gt;Converting VFP Applications to .NET class&lt;/b&gt; - March 19 &amp;amp; 20. To register for the 2-day class only, &lt;a href="http://www.vfpconversion.com/Eventsignup.aspx?id=c7920a28-b76c-4976-b248-876b179a7145"&gt;click here&lt;/a&gt;&lt;br&gt;&lt;b&gt;Or attend BOTH classes for a discounted price of only $1,199!&lt;/b&gt; To register for both classes, &lt;a href="http://www.vfpconversion.com/Eventsignup.aspx?id=2b145065-3067-401f-8822-8fa28e9b2f1a"&gt;click here&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;Registration is extremely limited.&lt;/b&gt; For more information please e-mail &lt;a href="mailto:info@eps-software.com"&gt;info@eps-software.com&lt;/a&gt; or call Patrick at 832-717-4445 x 32.&lt;br&gt;&lt;i&gt;Discounts are available for companies who have previously attended our classes. Call Patrick for details.&lt;/i&gt;&lt;i&gt;&lt;br&gt;&lt;/i&gt;&lt;br&gt;For more information, visit &lt;a href="http://www.VFPConversion.com"&gt;www.VFPConversion.com&lt;/a&gt; or go directly to the event site &lt;a href="http://www.vfpconversion.com/Event.aspx?id=2b145065-3067-401f-8822-8fa28e9b2f1a"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Posted @ 4:49 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=64a9f102-adb3-4394-b494-3e68fcc91dfe</comments></item><item><title>International Xbox 360 Stuff...</title><link>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=7ed6b575-5aa8-4150-ac3a-c81c44ba74c2</link><author>markus@code-magazine.com</author><pubDate>Sun, 11 Jan 2009 18:44:59 GMT</pubDate><guid isPermaLink="false">http://www.MarkusEgger.com7ed6b575-5aa8-4150-ac3a-c81c44ba74c2</guid><description>&lt;h1&gt;International Xbox 360 Stuff...&lt;/h1&gt;&lt;p&gt;A little while back I did some research (including some questions in the public forums on &lt;a href="http://www.xbox.com/"&gt;www.xbox.com&lt;/a&gt;) around the Xbox and international scenarios. As readers of my &lt;a href="http://www.markusegger.com/Blog/Travel.aspx"&gt;International Living Blog&lt;/a&gt; know, I live both in the US (Houston) as well as in Austria. In the past, I have always had an Xbox in Houston and a PlayStation 2 as well as a Wii in Austria. I am really more of a PC gamer, but I do get a fair amount of use out of my Xbox (360). Especially the media capabilities are of interest to me, in addition to the games. In the past, I played my PlayStation 2 on occasion (the Wii gets next to no use at all) and I somehow always assumed that I would eventually buy a PlayStation 3 in Austria, but I somehow could never work up any excitement for it. I pretty much get all the interesting games for the Xbox too (Metal Gear, Little Big Planet, and Fat Princess just don't count for enough in my book) and Xbox Live is a big draw. Streaming media from the PC is great on the Xbox too (especially in combination with a Windows Home Server). So long story short: I started to think more and more about buying a second Xbox 360 in Austria.&lt;/p&gt;
&lt;p&gt;The big unknown for me however was whether I could reuse any of my existing Xbox 360 investment in Austria. I have tons of games that I bought in the US and I do not want to re-buy them in Europe. (And I found myself in the somewhat unique situation that we - if I do not buy a game then Ellen does - already owned every Xbox 360 game that either appealed to us or rated well, so I really had no interest in buying new ones in Europe). Also, I of course wanted to make sure that my gamer account (gamer tag and achievements) work in Europe too.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;Interestingly enough, it was quite difficult to come by any information around this stuff. Neither online nor in stores or any of the community outlets I was aware of, did anyone have any facts. So-called "experts" babbled incoherent wild guesses that conflicted wildly. In the end, I decided to take the plunge and buy another box, especially since the price for the Arcade SKU had dropped to Euro 175,-- before Christmas 2008, so I figured the damage was relatively small and worth the benefit I'd at least get out of media streaming. 
&lt;p&gt;&lt;/p&gt;As it turns out, the investment was worthwhile, since the vast majority of the games works fine on both US and European systems. Here is more detail on individual aspects: 
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;
&lt;p&gt;Xbox 360 on a Standard Definition TV (PAL vs. NTSC)&lt;/p&gt;&lt;/h3&gt;
&lt;p&gt;Initially, I ran my new 360 on an old standard definition television, and everything worked fine, much to my surprise. In the past, the PAL vs. NTSC differences were a problem for many gaming systems (in the old days, even for home computer systems such as the Commodore Amiga). In fact, when you buy an Xbox game in the US today, it has an "NTSC" logo on it, identifying the game as the NTSC version, while European games have a "PAL" logo. So I had assumed that with standard definition TVs, US games would only work on US systems, while European versions would only work in Europe, and vice versa. However, most of the games worked just fine (see below). So that was a very nice and positive surprise.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;Note: "PAL" refers to a video encoding standard for standard (low) resolution TV. Europe as well as much of the world has been using this standard for a long time. PAL is basically 576i resolution (more info on &lt;a href="http://en.wikipedia.org/wiki/PAL"&gt;PAL can be found on the Wikipedia&lt;/a&gt;). The US traditionally used the lower resolution NTSC system, which is 480i (&lt;a href="http://en.wikipedia.org/wiki/NTSC"&gt;NTSC on Wikipedia&lt;/a&gt;). 
&lt;h3&gt;
&lt;p&gt;Xbox 360 on an HDTV (1080p)&lt;/p&gt;&lt;/h3&gt;
&lt;p&gt;Shortly after I purchased the Xbox, we also upgraded our television to a new HDTV with full 1080p (a 40" Samsung model I am thrilled with, but that is a different story). I had always assumed that since there is no difference in resolution between US and European HDTV, games would work. That assumption turned out to be correct. The games worked just fine. (I guess after the low-res stuff worked - which was a surprise to me - it was no surprise that HD worked as well).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;
&lt;p&gt;Login and Gamer Tag&lt;/p&gt;&lt;/h3&gt;
&lt;p&gt;Probably the least surprising aspect was that my regular login (with gamer tag, gamer score, games I own, and so forth...) worked just fine.&amp;nbsp;I have&amp;nbsp;to do a "transfer gamer tag" when I log in in Europe/the US the first time, which is a bit of a surprise each time and takes longer than you'd want it to, but that is just a minor nuisance.&lt;/p&gt;
&lt;h3&gt;Games&lt;/h3&gt;
&lt;p&gt;&lt;/p&gt;One of the most important aspects to me was whether or not games I bought in the US would work on my European systems, because if&amp;nbsp;that was the case, I could simply carry a few discs back and forth. Luckily, it turns out that most of the games work fine. Apparently, there is no real technical difference between PAL and NTSC games, as all NTSC games worked just fine on the PAL system. And as I expected, they worked OK on the HD television too. However, some games (not many) do have regional encoding, which keeps you from playing them outside the region they are encoded for. It seems that those limitations may have to do with licensing (my copy of EA's NHL 2009 does not work in Europe for instance) or legal issues (my GTA4 for instance does not work in Europe, which I assume to be due to the European versions featuring less violence... at least that is my guess). 
&lt;p&gt;A complete list of games and whether or not they have regional encoding, and if so, which, can be found &lt;a href="http://forum.xbox-sky.com/xbox360_regional_compatibility_guide/"&gt;here&lt;/a&gt;,&amp;nbsp;&lt;a href="http://gaming.wikia.com/wiki/Region_Free_Xbox_360_Games"&gt;here&lt;/a&gt;&amp;nbsp;and &lt;a href="http://www.play-asia.com/paOS-00-3-xbox360_compatibility_guide-49-en-84-a.html#list"&gt;here&lt;/a&gt; (and you can probably google more lists).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;
&lt;p&gt;Netflix Streaming&lt;/p&gt;&lt;/h3&gt;
&lt;p&gt;One of the most popular features of the New Xbox Experience (NXE) is the included Netflix service, which includes streaming much of Netflix' movie library straight to your television. When I installed my new Xbox, it immediately downloads the NXE update, which includes Netflix. As it turns out however, the Netflix service is not available in Europe. (One can go through the whole activation procedure on the Xbox until one&amp;nbsp;reaches a step that has to be completed on a computer, at which point one is told that the&amp;nbsp;Netflix service is only available in the US).&amp;nbsp;Why the update includes the Netflix feature in Europe then is beyond me. However, the otherwise useless feature (in Europe) turned out to work well for me. It turns out that if one already has an account activated, one can link the Xbox to it through a US-based computer (which one could - hypothetically ;-) - have access to over Terminal Server). At that point, all the videos that one has queued through a US computer - hypothetically of course - become available on a European Xbox for watching. And thanks to the great bandwidth I enjoy in Austria, video quality - hypothetically - is great :-).&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;h3&gt;
&lt;p&gt;Hardware&lt;/p&gt;&lt;/h3&gt;
&lt;p&gt;None of the Xbox 360 hardware (as far as I can tell) is regionally encoded, meaning that hardware bought in the US can be used in Europe, and vice versa. When we originally bought our Xbox 360 in the US it came with a 20GB harddrive, which is not much considering all the stuff one downloads these days. Buy a lot of Arcade games or Rock Band songs, and the harddrive fills up in no time. Add the NXE "copy to disk" feature, and 20GB is nothing. So I have long wanted to buy a bigger drive in the US. Instead, we have now taken our 20GB drive to Europe while here, we spend Euro 199,-- to buy an Xbox 360 with a 60GB harddrive, which we will now take back to the US. All that seems to work without a problem.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Posted @ 12:44 PM by Egger, Markus (&lt;a href="mailto:markus@code-magazine.com"&gt;markus@code-magazine.com&lt;/a&gt;)</description><comments>http://www.MarkusEgger.com/Blog/Blog.aspx?blogid=6a0addce-851e-4579-9306-0297254a1473&amp;messageid=7ed6b575-5aa8-4150-ac3a-c81c44ba74c2</comments></item></channel></rss>
