<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5176856</id><updated>2025-08-19T15:54:46.860+02:00</updated><category term="fun"/><category term="banana"/><category term="Google"/><category term="TopContent"/><category term="Microsoft"/><category term="Microsoft Silverlight"/><category term="cleansed"/><category term="web"/><category term="Microsoft Visual Studio"/><category term="ASP.NET"/><category term="Firefox"/><category term="Programming"/><category term="Team Foundation Server"/><category term="smile"/><category term="victory"/><category term="Document Object Model"/><category term="Google Maps"/><category term="hockey"/><category term="semantic web design"/><category term="web 2.0"/><category term=".NET Framework"/><category term="Apple"/><category term="Clean Semantics"/><category term="Google Chrome"/><category term="JQuery"/><category term="JavaScript"/><category term="Web page"/><category term="Web service"/><category term="design"/><category term="google docs"/><category term="idiot"/><category term="run"/><category term=".NET"/><category term="AJAX"/><category term="Adobe Systems"/><category term="CapGemini"/><category term="FUD"/><category term="HTML5"/><category term="Microsoft SQL Server"/><category term="Nike"/><category term="Project management"/><category term="Safari"/><category term="Scott Guthrie"/><category term="Telerik"/><category term="US terrorist"/><category term="Web Application"/><category term="Web design"/><category term="World Wide Web"/><category term="ambition"/><category term="busy"/><category term="certification"/><category term="certified"/><category term="class"/><category term="confused"/><category term="crisis"/><category term="developer"/><category term="disclaimer"/><category term="div soup"/><category term="hoodtocoast"/><category term="iPhone"/><category term="internet"/><category term="jeffrey zeldman"/><category term="mashup"/><category term="molly"/><category term="philosophy"/><category term="quiet"/><category term="resolution"/><category term="survey"/><category term="traffic"/><category term="truth"/><category term="web design survey 2007"/><category term="web standards"/><category term="windows"/><category term="xhtml"/><category term=".NET assembly"/><category term="ASP.NET MVC Framework"/><category term="Adobe"/><category term="Adobe Flash"/><category term="Advertising network"/><category term="Amazon S3"/><category term="Android"/><category term="Apple pie"/><category term="Athletic shoe"/><category term="Barefoot running"/><category term="Best practice"/><category term="Blog"/><category term="Bloomington  Indiana"/><category term="Brain"/><category term="Bretagne"/><category term="CIA"/><category term="Cache"/><category term="Carribean"/><category term="ContractFilter mismatch EndpointDispatcher"/><category term="Crime and Justice"/><category term="Debugging"/><category term="Extensible Application Markup Language"/><category term="Face"/><category term="FeedBurner"/><category term="Flash"/><category term="Flickr"/><category term="Forehead"/><category term="Fruit"/><category term="Fruit and Vegetable"/><category term="Getronics"/><category term="Google AdSense"/><category term="Google Analytics"/><category term="Google Earth"/><category term="Google I/O"/><category term="Google I/O conference"/><category term="Google Operating System"/><category term="Google Sitemap"/><category term="Google Storage"/><category term="Google Streetview"/><category term="Google TV"/><category term="Google search"/><category term="GriDBuilder"/><category term="HTML"/><category term="HTML5 Silverlight"/><category term="Half Marathon"/><category term="IE8"/><category term="IPad"/><category term="Indiana"/><category term="Integrated development environment"/><category term="Kaatsheuvel"/><category term="List Apart"/><category term="MVC3"/><category term="Mario Kart"/><category term="Michael Phelps"/><category term="Microsoft Developer Network"/><category term="Microsoft SharePoint"/><category term="Microsoft Visual SourceSafe"/><category term="Model–view–controller"/><category term="Mozilla Firefox"/><category term="Multimedia"/><category term="NET"/><category term="Netherlands"/><category term="Nike Free"/><category term="Online Communities"/><category term="Panoramio"/><category term="Paris Hilton"/><category term="Picasa"/><category term="Pippi Longstocking"/><category term="Post"/><category term="Project manager"/><category term="Punishment"/><category term="QR Code"/><category term="RSS"/><category term="Screen Resolution"/><category term="ScribeFire"/><category term="Search engine optimization"/><category term="Second Life"/><category term="Seth Godin"/><category term="Silicon Valley"/><category term="Silverlight"/><category term="Social Networking"/><category term="Source code"/><category term="South Africa"/><category term="Sports"/><category term="Sports and Hobbies"/><category term="Standard"/><category term="Sweden"/><category term="Television"/><category term="Tools"/><category term="Twitter"/><category term="Typekit"/><category term="United States"/><category term="User interface"/><category term="VS2005 VS2008 TFS2010 Forward compatiblity update"/><category term="Vibram Five Fingers"/><category term="Villain"/><category term="Vista"/><category term="WCF"/><category term="Wall Street Journal"/><category term="Web Fonts"/><category term="Web crawler"/><category term="Web feed"/><category term="Web search engine"/><category term="WebKit"/><category term="Weblogs"/><category term="Work"/><category term="Wrinkle"/><category term="X-UA-Compatible meta tag"/><category term="Yahoo Pipes"/><category term="america"/><category term="battle"/><category term="blogging"/><category term="browser bug"/><category term="bubble"/><category term="bush"/><category term="cleans"/><category term="client"/><category term="coach"/><category term="coding practices"/><category term="consultants"/><category term="content"/><category term="crackers"/><category term="crop"/><category term="css"/><category term="digg"/><category term="discussion"/><category term="eric meyer"/><category term="extension"/><category term="female"/><category term="fly"/><category term="fuss"/><category term="garden"/><category term="gmail"/><category term="google streetview holes europe world"/><category term="h2c"/><category term="hackers"/><category term="hobby"/><category term="horror"/><category term="images"/><category term="jht"/><category term="jobs"/><category term="knowledge"/><category term="lift"/><category term="linkedin"/><category term="longstocking"/><category term="look"/><category term="male"/><category term="markup"/><category term="meetings cleansed"/><category term="microformats"/><category term="milestone"/><category term="motivation"/><category term="move"/><category term="multiple events"/><category term="online"/><category term="oregon"/><category term="parking"/><category term="peace"/><category term="pippi"/><category term="pirates"/><category term="progressive enhancement"/><category term="projects"/><category term="respect"/><category term="rich"/><category term="sIFR"/><category term="satelite Internet"/><category term="scope creep"/><category term="security"/><category term="semantic"/><category term="seo"/><category term="separation"/><category term="service"/><category term="silence"/><category term="social"/><category term="split brain"/><category term="spock"/><category term="stay hungry"/><category term="tag soup"/><category term="test"/><category term="time"/><category term="trainer"/><category term="usage"/><category term="video"/><category term="web design survey 2008"/><category term="website optimization"/><category term="world"/><category term="zen"/><title type='text'>Roho&#39;s Diary</title><subtitle type='html'>What&#39;s happening to my (former) colleagues and &lt;em&gt;bananas&lt;/em&gt;? Or maybe it&#39;s just another useless opinion. Who cares, anyway.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/-/TopContent'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/search/label/TopContent'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5176856.post-9100601179186106465</id><published>2010-03-18T22:12:00.003+01:00</published><updated>2010-04-07T15:27:32.046+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="HTML5 Silverlight"/><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><title type='text'>Writing this HTML5 vs Silverlight post</title><content type='html'>&lt;h4&gt;... vice versa could be easy&lt;/h4&gt;
&lt;div xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;p&gt;I think that the writer is on a wrong track here as he is comparing two completely different things.&lt;/p&gt;
&lt;p&gt;A new and fast rising standard for HTML and a browser plugin. The first being implemented across multiple platforms in rapid pace. The second being upgraded every 9 months and available on not all platforms.&lt;/p&gt;
&lt;p&gt;Mind you I think both of these have huge possibilities and can do things that the others may not yet can do. I think they both have their unique use cases, but in most cases they have much overlap in possibilities.&lt;/p&gt;
&lt;p&gt;Which one to choose depends on the situation and the market one is aiming for.&lt;/p&gt;
&lt;p&gt;The article could have been a lot more subtle and a lot more realistic.&lt;/p&gt;
&lt;p&gt;Refers to: &lt;a href=&quot;http://www.silverlighthack.com/post/2010/02/08/Top-Reasons-why-HTML-5-is-not-ready-to-replace-Silverlight.aspx&quot;&gt;&lt;/a&gt;&lt;a href=&quot;http://www.silverlighthack.com/post/2010/02/08/Top-Reasons-why-HTML-5-is-not-ready-to-replace-Silverlight.aspx&quot;&gt;http://www.silverlighthack.com/post/2010/02/08/Top-Reasons-why-HTML-5-is-not-ready-to-replace-Silverlight.aspx&lt;/a&gt; (&lt;a href=&quot;http://www.google.com/sidewiki/entry/rob.hofker/id/RSEWwA3pmEObZHlp-kM8M1OcVBc&quot;&gt;through Google Sidewiki&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;zemanta-pixie&quot;&gt;&lt;a class=&quot;zemanta-pixie-a&quot; href=&quot;http://reblog.zemanta.com/zemified/86c80f6f-6285-45e7-849b-f2b1139275f8/&quot; title=&quot;Reblog this post [with Zemanta]&quot;&gt;&lt;img class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/reblog_e.png?x-id=86c80f6f-6285-45e7-849b-f2b1139275f8&quot; alt=&quot;Reblog this post [with Zemanta]&quot; /&gt;&lt;/a&gt;&lt;span class=&quot;zem-script more-related pretty-attribution&quot;&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.zemanta.com/readside/loader.js&quot; defer=&quot;defer&quot;&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/9100601179186106465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2010/03/writing-this-html5-vs-silverlight-post.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/9100601179186106465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/9100601179186106465'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2010/03/writing-this-html5-vs-silverlight-post.html' title='Writing this HTML5 vs Silverlight post'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5176856.post-570515791359754513</id><published>2010-01-22T10:49:00.011+01:00</published><updated>2010-04-07T15:27:32.054+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET Framework"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Silverlight"/><category scheme="http://www.blogger.com/atom/ns#" term="Model–view–controller"/><category scheme="http://www.blogger.com/atom/ns#" term="Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><title type='text'>Porting a framework to Silverlight</title><content type='html'>&lt;h4&gt;.. a journey getting to the contents&lt;/h4&gt;

&lt;p&gt;The last time I have been getting familiar with &lt;a class=&quot;zem_slink&quot; href=&quot;http://www.microsoft.com/SILVERLIGHT&quot; title=&quot;Microsoft Silverlight&quot; rel=&quot;homepage&quot;&gt;Silverlight&lt;/a&gt;. As a .NET developer with a big focus on the web I am interested in the possibilities of this plugin. (Eventhough, I also keep a close eye on the interesting stuff around &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/HTML5&quot; title=&quot;HTML5&quot; rel=&quot;wikipedia&quot;&gt;HTML5&lt;/a&gt;.)&lt;/p&gt;
&lt;p class=&quot;zemanta-img&quot; style=&quot;margin: .5em 0 .5em .5em; float: right; display: block; width: 310px; &quot;&gt;&lt;a href=&quot;http://commons.wikipedia.org/wiki/Image:Microsoft_Silverlight_stack.svg&quot;&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/e/ee/Microsoft_Silverlight_stack.svg/300px-Microsoft_Silverlight_stack.svg.png&quot; alt=&quot;The Microsoft Silverlight stack, vectorization...&quot; style=&quot;border:none;display:block&quot; width=&quot;300&quot; height=&quot;395&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zemanta-img-attribution&quot;&gt;Image via &lt;a href=&quot;http://commons.wikipedia.org/wiki/Image:Microsoft_Silverlight_stack.svg&quot;&gt;Wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I always wanted to add a little more to web applications and sites that are maybe possible using clever Javascript, but are probably easier to achieve using a plugin like Flash. Being quite fluent in .NET and C# and reasonably agile in Javascript I didn&#39;t want to learn yet another language and different IDE. So, when Silverlight came on stage I was immediatelly interested. I could be using the familiar &lt;a class=&quot;zem_slink&quot; href=&quot;http://msdn.microsoft.com/vstudio/&quot; title=&quot;Microsoft Visual Studio&quot; rel=&quot;homepage&quot;&gt;Visual Studio&lt;/a&gt;, familiar C#, familiar (though slightly limited implementation of) .NET framework to do some exciting new stuff. &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Extensible_Application_Markup_Language&quot; title=&quot;Extensible Application Markup Language&quot; rel=&quot;wikipedia&quot;&gt;XAML&lt;/a&gt; came in as a new aspect, but that was already part of the &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Windows_Presentation_Foundation&quot; title=&quot;Windows Presentation Foundation&quot; rel=&quot;wikipedia&quot;&gt;WPF&lt;/a&gt; stuff, so not completely new. &lt;a class=&quot;zem_slink&quot; href=&quot;http://www.microsoft.com/products/expression/en/expression-blend/&quot; title=&quot;Microsoft Expression Blend&quot; rel=&quot;homepage&quot;&gt;Expression Blend&lt;/a&gt; to create all sorts of horrible interfaces and well, the sky is not even the limit anymore.&lt;/p&gt;

&lt;p&gt;After some useless experimentation (extending &quot;Hello world!&quot;) I decided to stop right there and drop everything and make a good start right from the beginning. Fundamentals first.&lt;/p&gt;
&lt;h5&gt;A framework&lt;/h5&gt;
&lt;p&gt;Within our company we use a clever framework that implements the &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&quot; title=&quot;Model–view–controller&quot; rel=&quot;wikipedia&quot;&gt;MVC pattern&lt;/a&gt;. We use the same framework for Windows Forms application and ASP.NET applications. By completely separating the View logic from the Model and Controller (as it &lt;strong&gt;should&lt;/strong&gt; be done) we can use the same Model and Controller logic in both types of applications.&lt;/p&gt;
&lt;p&gt;The framework has a Mediator and all functionality is handled through that using Commands. All View controls are registered with the Mediator and are signalled to update the view when &quot;things&quot; change in the Model. The controls then update themselves and show or hide bits of themselves.&lt;/p&gt;
&lt;p&gt;At first there was a bit of getting used to this way of programming, but now it strikes me again and again how little code is needed to implement logic.&lt;/p&gt;
&lt;p&gt;All logic is handled in commands. When a button is clicked the Mediator is called to execute a command with some optional parameters. These Commands are implemented in various classes and are decorated with a Command attribute and implement an ICommand interface. The ICommand interface makes that the methods that a Command needs are implemented. The Command also has access the Model through ApplicationData object. I made a SilverlightApplicationData type with some small changes to the WebApplicationData type. For instance in the WebApplicationData we grab the buildnumber from the Web.Config and there is no such thing in Silverlight, so it is dropped for this first implementation.&lt;/p&gt;
&lt;p&gt;Anyway, just add the attribute and we are good to go.&lt;/p&gt;
&lt;pre&gt;[Command(&quot;COMMANDNAME&quot;)]&lt;/pre&gt;

&lt;p&gt;The code the ICommand interface has among others a Do() method that can be called by the Mediator. A typical Button Click EventHandler is really simple.&lt;/p&gt;
&lt;pre&gt;Mediator.Execute(&quot;COMMANDNAME&quot;, &quot;string parameter&quot;);&lt;/pre&gt;
&lt;p&gt;Or .. &lt;/p&gt;
&lt;pre&gt;Mediator.Execute(&quot;COMMANDNAME&quot;, &quot;string parameter&quot;, intParameter, someOtherClassParameter);&lt;/pre&gt;
&lt;p&gt;Every parameter after the command name is passed to the actual Command as argument for its constructor.&lt;/p&gt;
&lt;p&gt;The Mediator then executes the Command. However, the framework doesn&#39;t know which Commands will be implemented. Neither do I. What is needed is a Dictionary with all available Commands.&lt;/p&gt;
&lt;pre&gt;Dictionary&amp;lt;string, Command&amp;gt; commands&lt;/pre&gt;
&lt;p&gt;How to can the framework know which commands there are? Do we need to maintain a list in a config file? A bit nasty really. But the backbone of &lt;a class=&quot;zem_slink&quot; href=&quot;http://msdn.microsoft.com/netframework/&quot; title=&quot;.NET Framework&quot; rel=&quot;homepage&quot;&gt;.NET Framework&lt;/a&gt; comes to the rescue: Relfection.&lt;/p&gt;
&lt;h5&gt;Reflection&lt;/h5&gt;
&lt;p&gt;Using reflection we can iterate all application assemblies and scan all types and make a Dictionary with all types that have the Command attribute. These can then be stored in the Dictionary.&lt;/p&gt;
&lt;p&gt;Sounds easy, but is it?&lt;/p&gt;
&lt;h5&gt;Windows and web is simple&lt;/h5&gt;
&lt;p&gt;For Windows and Web applications iterating the assemblies is quite simple. We just look at the content of the Bin folder and load all *.dll (and *.exe) files. Then using reflection we scan all Types for the Command attribute. When found we add them to the Dictionary.&lt;/p&gt;

&lt;pre&gt;            foreach (string file in Directory.GetFiles( path, searchPattern, SearchOption.AllDirectories ))
            {
                Assembly assembly = Assembly.LoadFrom( file );
                Type[] types = assembly.GetTypes();
                foreach (Type type in types)
                {
                    object[] attr = type.GetCustomAttributes(typeof(CommandAttribute), false);
                    if (attr.Length == 1)
                    {
                        CommandAttribute attribute = (CommandAttribute)attr[0];
                        Command command = (Command)assembly.CreateInstance( type.FullName );
                        commands.Add( attribute.CommandName, command );
                    }
                }
            }
&lt;/pre&gt;

&lt;p&gt;This is all done in a static CommandManager so we only need to scan the files once.&lt;/p&gt;

&lt;h5&gt;Silverlight is slightly different&lt;/h5&gt;

&lt;p&gt;With Silverlight the situation is a bit more complicated. There is no Bin folder that can be scanned. There is a ClientBin folder, but that&#39;s on the web server and even then the files are inside the Xap file!&lt;/p&gt;

&lt;p&gt;Inside that renamed Zip file we find the assemblies and AppManifest.xaml file in which these files are listed. Well how do we get there?&lt;/p&gt;
&lt;p&gt;Doing quite a bit of Googling I finally got on the right track. The above code sample needs quite a bit of rework. Whe need to do a number things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open the Xap file&lt;/li&gt;
&lt;li&gt;Read the AppManifest.xaml.&lt;/li&gt;
&lt;li&gt;Parse the names of the assemblies&lt;/li&gt;
&lt;li&gt;Load the assemblies from the Xap file&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Eventhough the Silverlight application is downloaded by the browser to the client computer we can not really get at the Xap file directly. That&#39;s the sandboxing security model working against us. So we need a clever workaround.&lt;/p&gt;
&lt;p&gt;Luckily there is a way to get there. We can download the file to Local Storage. Since we are on the web this happens asynchronously. Using the OpenReadCompletedEventHandler we can continue the process.&lt;/p&gt;
&lt;p&gt;Note that we also check for the existence of the Xap file in LocalStorage, just to prevent repeated downloads when you refresh the web page.&lt;/p&gt;
&lt;pre&gt;         Uri xapUri = Application.Current.Host.Source;
         string[] parts = xapUri.AbsolutePath.Split(&#39;/&#39;);
         xapFile = parts[parts.Length - 1];  // the filename is the last part of the path

         using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
         {
            // check if the file is available
            if (!store.FileExists(xapFile))
            {
               // when not available download it
               WebClient webClient = new WebClient();
               webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(WebClientOpenReadCompleted);
               webClient.OpenReadAsync(new Uri(xapFile, UriKind.Relative));
            }
            else
            {
               LoadAssembliesFromIsolatedStorage();
            }
         }
&lt;/pre&gt;
&lt;p&gt;When WebClient has completed download the stream is copied to IsolatedStorage&lt;/p&gt;
&lt;pre&gt;      private static void WebClientOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
      {
         using (IsolatedStorageFile storageFile = IsolatedStorageFile.GetUserStoreForApplication())
         {
            IsolatedStorageFileStream fileStream = storageFile.CreateFile(xapFile);
            WriteStream(e.Result, fileStream);
            fileStream.Close();
         }
         LoadAssembliesFromIsolatedStorage();
      }
&lt;/pre&gt;
&lt;p&gt;Now the assembly processing can begin.&lt;/p&gt;

&lt;pre&gt;      private static void LoadAssembliesFromIsolatedStorage()
      {
         using (IsolatedStorageFile storageFile = IsolatedStorageFile.GetUserStoreForApplication())
         {
            IsolatedStorageFileStream fileStream = storageFile.OpenFile(xapFile, FileMode.Open, FileAccess.Read);

            // parse the AppManifest.xaml file
            Stream manifestStream = Application.GetResourceStream(new StreamResourceInfo(fileStream, &quot;application/binary&quot;), new Uri(&quot;AppManifest.xaml&quot;, UriKind.Relative)).Stream;
            string appManifest = new StreamReader(manifestStream).ReadToEnd();

            XElement deploymentRoot = XDocument.Parse(appManifest).Root;
            List&lt;xelement&gt; deploymentParts = (from assemblyParts in deploymentRoot.Elements().Elements()
                                              select assemblyParts).ToList();

            // now load assemblies one by one
            foreach (XElement xElement in deploymentParts)
            {
               string source = xElement.Attribute(&quot;Source&quot;).Value;
               AssemblyPart asmPart = new AssemblyPart();
               fileStream = storageFile.OpenFile(xapFile, FileMode.Open, FileAccess.Read);
               StreamResourceInfo streamInfo = Application.GetResourceStream(new StreamResourceInfo(fileStream, &quot;application/binary&quot;), new Uri(source, UriKind.Relative));

               Assembly assembly = asmPart.Load(streamInfo.Stream);
               // from here the code is unchanged
               Type[] types = assembly.GetTypes();
               foreach (Type type in types)
               {
                  object[] attr = type.GetCustomAttributes(typeof(CommandAttribute), false);
                  if (attr.Length == 1)
                  {
                     CommandAttribute attribute = (CommandAttribute)attr[0];
                     Command command = (Command)assembly.CreateInstance(type.FullName);
                     commands.Add(attribute.CommandName, command);
                  }
               }
            }
         }
      }
&lt;/xelement&gt;&lt;/pre&gt;
&lt;p&gt;Well, it took quite some googling around and &lt;a href=&quot;http://dotnetbyexample.blogspot.com/2009/07/calling-service-relative-to-silverlight_18.html&quot; target=&quot;banana&quot; rel=&quot;friend&quot;&gt;advice from a friend&lt;/a&gt; to get this working, but in the end the steps are quite easy to understand.&lt;/p&gt;

&lt;h5&gt;Almost there ..&lt;/h5&gt;
&lt;p&gt;So now we have everything we need. Almost that is.&lt;/p&gt;
&lt;p&gt;As I mentioned earlier Silverlight has a slightly limited implementation of .NET framework in the sense that not all namespaces are completely implemented in the same way. And that threw up another hurdle to take.&lt;/p&gt;
&lt;p&gt;To create an instance of Command we use an overload of the CreateInstance method in which we can pass the parameters for the command in the args parameter.&lt;/p&gt;

&lt;pre&gt;ICommand command = (ICommand)assembly.CreateInstance( commandType.FullName, false, BindingFlags.Default, null, args, CultureInfo.InvariantCulture, null );&lt;/pre&gt;

&lt;p&gt;Unfortunately Silverlight does not have this overload. We cannot pass any parameters to the instance using CreateInstance. In effect only the default constructor is called. Why the overload is omitted in Silverlight strikes me as odd.&lt;/p&gt;
&lt;p&gt;Yet, more research was needed to solve this problem. More Reflection was needed to find the correct constructor for the type.&lt;/p&gt;
&lt;pre&gt;         Type[] parameterTypes = new Type[args.Length];
         // Initialize a ParameterModifier with the number of parameterTypes.
         ParameterModifier parameterModifiers = new ParameterModifier(args.Length);

         for (int i = 0; i &amp;lt; args.Length; i++)
         {
            parameterTypes[i] = args[i].GetType();
            parameterModifiers[i] = true;
         }

         // The ParameterModifier must be passed as the single element of an array.
         ParameterModifier[] paramMods = { parameterModifiers };

         // Get the constructor that takes an integer as a parameter.
         ConstructorInfo constructorInfo = commandType.GetConstructor(BindingFlags.Instance | BindingFlags.Public, 
                                       Type.DefaultBinder, parameterTypes, paramMods);
         ICommand command = (ICommand)constructorInfo.Invoke(args);
&lt;/pre&gt;
&lt;p&gt;This made it all work.&lt;/p&gt;
&lt;pre&gt;Mediator.Execute(&quot;COMMANDNAME&quot;, &quot;string parameter&quot;);&lt;/pre&gt;
&lt;p&gt;The Mediator can now make a deep copy of the Command referenced by the name &quot;COMMANDNAME&quot; (using the constructor that takes string parameter) and then call that Command&#39;s Do() method to actually execute it.&lt;/p&gt;
&lt;p&gt;A really interesting journey it was and now I can start to make something useful using this framework.&lt;/p&gt;

&lt;div class=&quot;zemanta-pixie&quot; style=&quot;margin-top:10px;height:15px&quot;&gt;&lt;a class=&quot;zemanta-pixie-a&quot; href=&quot;http://reblog.zemanta.com/zemified/0a8774d3-1fa4-419e-959c-74b8514526ae/&quot; title=&quot;Reblog this post [with Zemanta]&quot;&gt;&lt;img class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/reblog_e.png?x-id=0a8774d3-1fa4-419e-959c-74b8514526ae&quot; alt=&quot;Reblog this post [with Zemanta]&quot; style=&quot;border:none;float:right&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zem-script more-related pretty-attribution&quot;&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.zemanta.com/readside/loader.js&quot; defer=&quot;defer&quot;&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/570515791359754513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2010/01/porting-framework-to-silverlight.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/570515791359754513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/570515791359754513'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2010/01/porting-framework-to-silverlight.html' title='Porting a framework to Silverlight'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5176856.post-5025111063576165317</id><published>2009-12-04T08:21:00.005+01:00</published><updated>2010-04-07T15:27:32.061+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Best practice"/><category scheme="http://www.blogger.com/atom/ns#" term="Project management"/><category scheme="http://www.blogger.com/atom/ns#" term="Project manager"/><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><title type='text'>Top one reason projects fail</title><content type='html'>&lt;h4&gt;.. it&#39;s not about a person, but about the process&lt;/h4&gt;
&lt;p&gt;This morning I came across an article by &lt;a href=&quot;http://www.linkedin.com/pub/amit-sarkar/8/2a2/767&quot; target=&quot;linkedin&quot;&gt;Amit Sarkar&lt;/a&gt; &quot;&lt;a href=&quot;http://www.thepmsuccess.com/homes&quot; target=&quot;banana&quot;&gt;Top Ten Reasons Why A Project Fails And What You Can Do To Change&lt;/a&gt;&quot; and it triggered me to write a long comment to that. I don&#39;t know if anyone will ever read it as nothing appeared on the site. Might need moderation. Still I copied what I had typed into the box to reproduce it here. And the added some more text here and there.&lt;/p&gt;
&lt;p&gt;First I suggest to hop over read &lt;a href=&quot;http://www.thepmsuccess.com/homes&quot; target=&quot;banana&quot;&gt;the article&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;My comment&lt;/h5&gt;
&lt;p&gt;Having been involved in quite a number of projects myself I think that I can honestly say that you are clearly a &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Project_manager&quot; title=&quot;Project manager&quot; rel=&quot;wikipedia&quot;&gt;project manager&lt;/a&gt; that works according to the book. The problem is that the book is not correct. Or it might be the not the correct book. The &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Bible&quot; title=&quot;Bible&quot; rel=&quot;wikipedia&quot;&gt;Bible&lt;/a&gt; is not the best source of knowledge for project managers, nor is the &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Qur%27an&quot; title=&quot;Qur&#39;an&quot; rel=&quot;wikipedia&quot;&gt;Koran&lt;/a&gt;. Nor &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Harry_Potter&quot; title=&quot;Harry Potter&quot; rel=&quot;wikipedia&quot;&gt;Harry Potter&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;Genral objections&lt;/h5&gt;
&lt;p&gt;I will not break down all your 10 points.&lt;/p&gt;
&lt;p&gt;But the biggest mistake in managing IT projects is the misconception that everything can be known at the beginning of a project. Requirements are never completely clear and will change during the project because of changing insights and demands from other systems.&lt;/p&gt;
&lt;p&gt;Same goes for risks. Some can be identified ahead, but most risks are only becoming clear when the projects moves ahead and bumps into related systems that have limited possibilities.&lt;/p&gt;
&lt;h5&gt;It all sounds too familiar&lt;/h5&gt;
&lt;p class=&quot;zemanta-img&quot; style=&quot;margin: 1em; float: right; display: block; width: 310px;&quot;&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Image:Waterfall_model.svg&quot;&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/en/thumb/e/e2/Waterfall_model.svg/300px-Waterfall_model.svg.png&quot; alt=&quot;Waterfall Model&quot; style=&quot;border: medium none ; display: block;&quot; height=&quot;225&quot; width=&quot;300&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zemanta-img-attribution&quot;&gt;Image via &lt;a href=&quot;http://en.wikipedia.org/wiki/Image:Waterfall_model.svg&quot;&gt;Wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The solutions you propose are related to the &lt;em&gt;&#39;good old&#39; &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Waterfall_model&quot; title=&quot;Waterfall model&quot; rel=&quot;wikipedia&quot;&gt;waterfall model&lt;/a&gt;&lt;/em&gt; and that is no longer a best practice in IT world, if it ever was. Nowadays we would like to work in iterations taking small steps to make things work a bit and have close commitment from all team members and the project owner, the stakeholder or at least someone who can and will take decisions and who is a member of the project team as well. That way progress can be made in short cycles and the stakeholder is always involved and knows every step of the way.&lt;/p&gt;
&lt;p&gt;Typically in such a process it is not known what comes out at the end. You might think beforehand that you need a better mobile phone and end up with something like &lt;a class=&quot;zem_slink&quot; href=&quot;http://twitter.com/&quot; title=&quot;Twitter&quot; rel=&quot;homepage&quot;&gt;Twitter&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;Then ... what&lt;/h5&gt;
&lt;p&gt;IMHO a project manager is a facilitator for the project team. The project manager makes it possible for the team to do their work. At best he goes around serving &lt;a class=&quot;zem_slink&quot; href=&quot;http://en.wikipedia.org/wiki/Coffee&quot; title=&quot;Coffee&quot; rel=&quot;wikipedia&quot;&gt;coffee&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have seen project managers who spend a lot of time in endless meetings with all kinds of layers of management and keeping all kinds of lists, but were never around when you really needed them. I pity them for the time wasted and myself for the time waiting for them to come back from the trenches.&lt;/p&gt;
&lt;p&gt;I think that the points you mention are known problems, but the solutions you mention are not the way to go. In IT so many times the stakeholder has no real knowledge of IT in general and has no real idea about what it really is that he needs or wants.&lt;/p&gt;
&lt;p&gt;To me it is important that a project team together with the stakeholder iterate over the product that will be delivered. Not everything will be known at the start (and that&#39;s okay), but that also means that you can&#39;t really plan anything ahead. It&#39;s impossible to have all requirements and all risks assesed and have solutions for these as well.&lt;/p&gt;
&lt;h5&gt;A final great to Amit Sarkar:&lt;/h5&gt;
&lt;p&gt;Good luck.&lt;/p&gt;
&lt;p class=&quot;zemanta-img&quot; style=&quot;margin: 1em; float: right; display: block; width: 250px;&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/19451080@N00/3788117207&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3543/3788117207_e08fae2feb_m.jpg&quot; alt=&quot;I love it when a plan comes together&quot; style=&quot;border: medium none ; display: block;&quot; height=&quot;170&quot; width=&quot;240&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zemanta-img-attribution&quot;&gt;Image by &lt;a href=&quot;http://www.flickr.com/photos/19451080@N00/3788117207&quot;&gt;Phillie Casablanca&lt;/a&gt; via Flickr&lt;/span&gt;&lt;/p&gt;
&lt;h5&gt;Conclusion&lt;/h5&gt;
&lt;p&gt;I know, I know, I am all wrong. I am not a project manager. Happy for that in a way. But I have been involved in a lot of projects that failed not because of bad team members or project managers, but because of the process that was chosen to do the project. Not as much the project management methodology (Prince or Cadence or whatever) but the process that was used to get from the start (nothing) to the end (something that all involved people can live with).&lt;/p&gt;
&lt;p&gt;I think project management has come a long way (to the moon and back) and that in IT projects people need to understand that we do not know at the start of a project to which moon we are going and whether we are going any further than the coffee shop around the corner. Most of the time it is &lt;strong&gt;not&lt;/strong&gt; rocket science.&lt;/p&gt;
&lt;p&gt;So once again: Good luck.&lt;/p&gt;






&lt;div style=&quot;margin-top: 10px; height: 15px;&quot; class=&quot;zemanta-pixie&quot;&gt;&lt;a class=&quot;zemanta-pixie-a&quot; href=&quot;http://reblog.zemanta.com/zemified/8a73d2f1-b4e6-4d54-a011-b5ccdb265d99/&quot; title=&quot;Reblog this post [with Zemanta]&quot;&gt;&lt;img style=&quot;border: medium none ; float: right;&quot; class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/reblog_e.png?x-id=8a73d2f1-b4e6-4d54-a011-b5ccdb265d99&quot; alt=&quot;Reblog this post [with Zemanta]&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zem-script more-related pretty-attribution&quot;&gt;&lt;script type=&quot;text/javascript&quot; src=&quot;http://static.zemanta.com/readside/loader.js&quot; defer=&quot;defer&quot;&gt;&lt;/script&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/5025111063576165317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2009/12/top-one-reason-projects-fail.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/5025111063576165317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/5025111063576165317'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2009/12/top-one-reason-projects-fail.html' title='Top one reason projects fail'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm4.static.flickr.com/3543/3788117207_e08fae2feb_t.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5176856.post-8539862711366346373</id><published>2008-12-23T13:56:00.001+01:00</published><updated>2010-04-07T15:27:32.068+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Crime and Justice"/><category scheme="http://www.blogger.com/atom/ns#" term="Punishment"/><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><category scheme="http://www.blogger.com/atom/ns#" term="Villain"/><title type='text'>The Broken Nose principle</title><content type='html'>&lt;h4&gt;.. beware&lt;/h4&gt;
&lt;span style=&quot;border: 1px solid rgb(204, 204, 204); margin: 1em; padding: 2px; float: right; display: block;&quot;&gt;&lt;a href=&quot;http://commons.wikipedia.org/wiki/Image:BrokenNose.jpg&quot;&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/7/7e/BrokenNose.jpg/202px-BrokenNose.jpg&quot; alt=&quot;Fractured nose with haemorrhage.&quot; style=&quot;border: medium none ; display: block;&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zemanta-img-attribution&quot; style=&quot;margin: 1em 0pt 0pt; display: block;&quot;&gt;Image via &lt;a href=&quot;http://commons.wikipedia.org/wiki/Image:BrokenNose.jpg&quot;&gt;Wikipedia&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;h5&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Epistaxis&quot; title=&quot;Epistaxis&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;broken nose&lt;/a&gt; as punishment&lt;/h5&gt;
&lt;p&gt;Sometimes, it seems necessary to point someone out that what he did was not reallu correct. He stepped way out of line, made a bad remark or did some damage or &lt;em&gt;almost&lt;/em&gt; did some damage. To the company or the company&#39;s reputation. Maybe because he was just plain stupid or just did not know what he was doing or causing.&lt;/p&gt;
&lt;p&gt;A form of punishment or retribution seems to be in order here. But once that decision is made one need to establish if a simple converstation with a stern look will suffice. Or maybe some stronger method needs to be applied.&lt;/p&gt;

&lt;p&gt;Most often when damage could potentially have been done (note that nothing has happened) managers tend to completely overreact and forget to thoroughly investigate what really happened. They usually tend break the nose of the person closest to the &lt;a href=&quot;http://en.wikipedia.org/wiki/Cookie_jar&quot; title=&quot;Cookie jar&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;cookie jar&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;As a &lt;a href=&quot;http://en.wikipedia.org/wiki/Figure_of_speech&quot; title=&quot;Figure of speech&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;figure of speech&lt;/a&gt;.&lt;/p&gt;
&lt;span class=&quot;zemanta-img&quot; style=&quot;border: 1px solid rgb(204, 204, 204);margin: 1em; float: left; display: block;&quot;&gt;&lt;a href=&quot;http://www.flickr.com/photos/43927576@N00/126872576&quot;&gt;&lt;img src=&quot;http://farm1.static.flickr.com/1/126872576_fd8d1df978_m.jpg&quot; alt=&quot;karate kid meets flying mom - _MG_3046.JPG&quot; style=&quot;border: medium none ; display: block;&quot; height=&quot;240&quot; width=&quot;160&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zemanta-img-attribution&quot;&gt;Image by &lt;a href=&quot;http://www.flickr.com/photos/43927576@N00/126872576&quot;&gt;sean dreilinger&lt;/a&gt; via Flickr&lt;/span&gt;&lt;/span&gt;
&lt;h5&gt;It sends the wrong kind of signal&lt;/h5&gt;
&lt;p&gt;They forget everything they ever learned in management training and they start addressing the subject in full view of everyone, start shouting or plain striking away with bad reviews or firing the poor soul.&lt;/p&gt;
&lt;p&gt;Even though all these reactions have a time and place and also have just reasons. The problem is that the manager tends to forget to think first. And to investigate before that. First get your evidence complete and then draw your conclusions. &lt;strong&gt;Think before you act and investigate before you think.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The defendant usually ends up with a broken nose.&lt;/p&gt;
&lt;p&gt;Here&#39;s what wrong with this kind of reaction:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;even though punishment might be needed for the culprit, the reaction is just over the top, there&#39;s no connection between &lt;a href=&quot;http://en.wikipedia.org/wiki/Causality&quot; title=&quot;Causality&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;cause and effect&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;others will fail to understand, because they can not see the reason why you react so Big Time;&lt;/li&gt;
&lt;li&gt;others will dislike your action, because it is in no direct correlation with the error made;&lt;/li&gt;
&lt;li&gt;others will dislike you and stay away from you, because you seem schizofrenic at best;&lt;/li&gt;
&lt;li&gt;as a result they will sympatize with the bad guy;&lt;/li&gt;
&lt;li&gt;all it shows you have no respect or understanding for your people.&lt;/li&gt;
&lt;li&gt;it is just over reaction, even when it is a correct reaction, reacting too quickly and too loudly will give a bad first impression&lt;/li&gt;
&lt;li&gt;the event will only help to spread bad news about you and not about the bad guy: it backfires completely.&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;A broken nose is a bad punishment&lt;/h5&gt;
&lt;p&gt;A broken nose is not a very good way to punish someone. There are at least five reasons for that&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;A broken nose is &lt;em&gt;very painful&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;A broken nose &lt;em&gt;will keep coming back over the years&lt;/em&gt; through minor or major annoyances.&lt;/li&gt;
&lt;li&gt;That way a broken nose will keep the &lt;em&gt;grudge alive&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Also a broken nose will &lt;em&gt;make the grudge grow&lt;/em&gt; with years.&lt;/li&gt;
&lt;li&gt;A broken nose can &lt;em&gt;cause reaction later on&lt;/em&gt;: Hey Manager, always look behind you!&lt;/li&gt;
&lt;/ol&gt;
&lt;span class=&quot;zemanta-img&quot; style=&quot;margin: 1em; float: right; display: block;&quot;&gt;&lt;a href=&quot;http://www.daylife.com/image/00YR1lW0Xc9nm?utm_source=zemanta&amp;amp;utm_medium=p&amp;amp;utm_content=00YR1lW0Xc9nm&amp;amp;utm_campaign=z1&quot;&gt;&lt;img src=&quot;http://cache.daylife.com/imageserve/00YR1lW0Xc9nm/150x100.jpg&quot; alt=&quot;LAS VEGAS - SEPTEMBER 26:  O.J. Simpson, (R) a...&quot; style=&quot;border: medium none ; display: block;&quot; height=&quot;100&quot; width=&quot;150&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zemanta-img-attribution&quot;&gt;Image by &lt;a href=&quot;http://www.daylife.com/source/Getty_Images&quot;&gt;Getty Images&lt;/a&gt; via &lt;a href=&quot;http://www.daylife.com&quot;&gt;Daylife&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;

&lt;h5&gt;Better think twice before you act&lt;/h5&gt;
&lt;p&gt;before you strike out at anyone, think again and again and always, &lt;strong&gt;always&lt;/strong&gt; get the story from both sides. Simply because when you do
punish in any way, you&#39;ll never know their reaction.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;you may have them silent at first, but then what?&lt;/li&gt;
&lt;li&gt;they may just strike back directly in an unexpected way&lt;/li&gt;
&lt;li&gt;they may know karate and you may hit yourself&lt;/li&gt;
&lt;li&gt;maybe they&#39;re a Ninja or worse a lawyer or their bigger brother is one&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On top of that: it&#39;s almost Christmas!&lt;/p&gt;&lt;fieldset class=&quot;zemanta-related&quot;&gt;&lt;legend class=&quot;zemanta-related-title&quot;&gt;Related articles by Zemanta&lt;/legend&gt;&lt;ul class=&quot;zemanta-article-ul&quot;&gt;&lt;li class=&quot;zemanta-article-ul-li&quot;&gt;&lt;a href=&quot;http://phillyist.com/2008/12/05/asshole_of_the_week_18.php&quot;&gt;Asshole of the Week&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;zemanta-article-ul-li&quot;&gt;&lt;a href=&quot;http://www.yesbutnobutyes.com/archives/2008/11/the_penalty_of.html&quot;&gt;The Penalty of Leadership&lt;/a&gt;&lt;/li&gt;&lt;li class=&quot;zemanta-article-ul-li&quot;&gt;&lt;a href=&quot;http://christopherscottblog.typepad.com/blog/2008/10/we-can-always-l.html&quot;&gt;We Can Always Learn&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/fieldset&gt;

&lt;div style=&quot;margin-top: 10px; height: 15px;&quot; class=&quot;zemanta-pixie&quot;&gt;&lt;a class=&quot;zemanta-pixie-a&quot; href=&quot;http://reblog.zemanta.com/zemified/9ae3e48d-ad6b-496f-9341-3eed2294d303/&quot; title=&quot;Zemified by Zemanta&quot;&gt;&lt;img style=&quot;border: medium none ; float: right;&quot; class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/reblog_e.png?x-id=9ae3e48d-ad6b-496f-9341-3eed2294d303&quot; alt=&quot;Reblog this post [with Zemanta]&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/8539862711366346373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2008/10/broken-nose-principle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/8539862711366346373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/8539862711366346373'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2008/10/broken-nose-principle.html' title='The Broken Nose principle'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://farm1.static.flickr.com/1/126872576_fd8d1df978_t.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5176856.post-7222021860950188718</id><published>2008-09-23T10:06:00.001+02:00</published><updated>2010-04-07T15:27:32.075+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft"/><category scheme="http://www.blogger.com/atom/ns#" term="Microsoft Visual Studio"/><category scheme="http://www.blogger.com/atom/ns#" term="Source code"/><category scheme="http://www.blogger.com/atom/ns#" term="Team Foundation Server"/><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><category scheme="http://www.blogger.com/atom/ns#" term="Web Application"/><title type='text'>Converting a WebSite project to a Web Application project</title><content type='html'>&lt;h4&gt;.. an interesting journey&lt;/h4&gt;
&lt;p&gt;In the last few weeks we have been preparing a conversion from a WebSite project to a &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_application&quot; title=&quot;Web application&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;Web Application&lt;/a&gt; project in &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_Visual_Studio&quot; title=&quot;Microsoft Visual Studio&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;Visual Studio 2005&lt;/a&gt; solution. To complicate things a bit there is also &lt;a href=&quot;http://en.wikipedia.org/wiki/Microsoft_SharePoint&quot; title=&quot;Microsoft SharePoint&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;SharePoint&lt;/a&gt; in the equation.&lt;/p&gt;
&lt;p&gt;The reason to do the conversion was that we could not automate the build process in &lt;a href=&quot;http://en.wikipedia.org/wiki/Team_Foundation_Server&quot; title=&quot;Team Foundation Server&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;TFS&lt;/a&gt; and subsequently could not automate the deployment. Also the building of the solution itself within Visual Studio was handwork and took about forever.&lt;/p&gt;
&lt;h5&gt;What did we do?&lt;/h5&gt;
&lt;p&gt;Well, quite a lot was done to do the conversion. Along the process we were wishing louder and louder that someone had used his brain before picking the WebSite project. We had about 180 User Controls and about the same number of WebParts, that used these user controls. I know, what you want to say, probably not the best architectual design decision. But then again, when you do not take the time to think about the architectual design no one can put the blame on you for making the &lt;strong&gt;wrong architectual design &lt;/strong&gt;. Duh.&lt;/p&gt;
&lt;p&gt;We needed to do a two fold conversion: once for the User Controls and once for the WebParts.&lt;/p&gt;
&lt;span class=&quot;zemanta-img zemanta-action-click&quot; style=&quot;margin: 1em; float: right; display: block;&quot;&gt;&lt;a href=&quot;http://www.daylife.com/image/08u7gOV8os1fe&quot;&gt;&lt;img src=&quot;http://cache.daylife.com/imageserve/08u7gOV8os1fe/150x104.jpg&quot; alt=&quot;TOKYO - AUGUST 06:  Surveillance humanoid robo...&quot; style=&quot;border: medium none ; display: block;&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zemanta-img-attribution&quot; style=&quot;margin: 1em 0pt 0pt; display: block;&quot;&gt;Image by &lt;a href=&quot;http://www.daylife.com/source/Getty_Images&quot;&gt;Getty Images&lt;/a&gt; via &lt;a href=&quot;http://www.daylife.com&quot;&gt;Daylife&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;
&lt;h5&gt;Converting the User Controls&lt;/h5&gt;
&lt;p&gt;We created a new Web Application project, deleted the Default.aspx and the Web.Config files and then copied all user controls from the WebSite project. Then we did a Convert to Web Application action through the context menu in the Source Explorer. This adds a.o. the designer files.&lt;/p&gt;
&lt;p&gt;Using a specially written tool we processed all ascx and ascx.cs files to add namespaces, change and delete some of the attributes on the &amp;lt;%@ Control %&amp;gt; node. And we added a &amp;lt;%@ Assembly %&amp;gt; node.&lt;/p&gt;
&lt;h5&gt;Converting the WebParts&lt;/h5&gt;
&lt;p&gt;In the WebParts the UserControls were instatiated in the CreateChildPanel() method by calling the constructor. That needed to be replaced by a Page.LoadControl() command. Another tool was created to do that conversion.&lt;/p&gt;
&lt;h5&gt;Bumps in the road&lt;/h5&gt;
&lt;p&gt;We first figured the process out by creating a small and simple Proof Of Concept. That worked like a breeze. Then we started on a copy of the real code. Yep, that&#39;s when the manure hit the propellor. We came across multiple problems, mostly because of inconsistencies in the coding. Sometimes there were comments when did not expect them or a code file was not placed in the correct folder. So, some of our assumptions failed and we had some manual clean up after our conversion tools. But that was limited to roughly 20 files. Not too bad.&lt;/p&gt;
&lt;p&gt;But we also saw that our Proof Of Concept was many times less complicated than our real world code. That kept us busy with debugging for quite a few days. That and the fact that we were not experienced SharePoint deployers did nt help speed things up.&lt;/p&gt;
&lt;h5&gt;Ready to roll&lt;/h5&gt;
&lt;p&gt;Last friday we were ready to roll. We had figured everything out and had fixes for all the small problems that we encountered. So, the monday was set as the big conversion day. We mailed our offshore team in India to stop any work on the code around noon and made a branch in TFS.&lt;/p&gt;
&lt;h5&gt;The Big Bang conversion&lt;/h5&gt;
&lt;p&gt;With the script in hand we took the steps one at the time and started the conversion at half past one. Ticking off each step we were ready to try and compile about an hour later. More manure hitting the fan. Some caused by missing references and some by the new code that was created by our friends in India. They did coding while we were testing out the conversion so we were now working with a new code base. So afcing some new interesting bumps.&lt;/p&gt;
&lt;p&gt;We only had to do some things a second time, having forgotten to update one of our conversion tools. Gradually we saw the number of build errors go down from 300 and then up a bit again. And finally at half past seven we had a fully building situation we then checked in in TFS.&lt;/p&gt;
&lt;h5&gt;Today&lt;/h5&gt;
&lt;p&gt;Today, we hear some enthousiastic noise from fellow developers who find that the solution compiles a lot easier, without any manual building of separate projects and above all a lot faster than before.&lt;/p&gt;
&lt;p&gt;Also we are now starting testing the deployment and ironing out any last bugs that are in there.&lt;/p&gt;
&lt;h5&gt;Lessons learned&lt;/h5&gt;
&lt;p&gt;The most important lessons learned is that especially in bigger application development projects it is absolutely necessary to &lt;strong&gt;think before you do&lt;/strong&gt;, &lt;em&gt;design before you start building&lt;/em&gt; as that will save you loads of time and trouble later on.&lt;/p&gt;
&lt;p&gt;Further we have learned a lot about conversion and file manipulation through RegEx and changing files loaded into MemoryStreams which was an interesting excercise as well.&lt;/p&gt;

&lt;div style=&quot;margin-top: 10px; height: 15px;&quot; class=&quot;zemanta-pixie&quot;&gt;&lt;a class=&quot;zemanta-pixie-a&quot; href=&quot;http://reblog.zemanta.com/zemified/011be5c4-6265-4c35-aa6a-2a0af7d68fbc/&quot; title=&quot;Zemified by Zemanta&quot;&gt;&lt;img style=&quot;border: medium none ; float: right;&quot; class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/reblog_e.png?x-id=011be5c4-6265-4c35-aa6a-2a0af7d68fbc&quot; alt=&quot;Reblog this post [with Zemanta]&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/7222021860950188718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2008/09/converting-website-project-to-web.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/7222021860950188718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/7222021860950188718'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2008/09/converting-website-project-to-web.html' title='Converting a WebSite project to a Web Application project'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5176856.post-4825105268204197271</id><published>2008-02-12T12:55:00.000+01:00</published><updated>2010-04-07T15:27:32.083+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google"/><category scheme="http://www.blogger.com/atom/ns#" term="images"/><category scheme="http://www.blogger.com/atom/ns#" term="longstocking"/><category scheme="http://www.blogger.com/atom/ns#" term="pippi"/><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><category scheme="http://www.blogger.com/atom/ns#" term="traffic"/><title type='text'>Blog traffic by Pippi Longstocking</title><content type='html'>&lt;h4&gt;.. weird numbers&lt;/h4&gt;
&lt;p&gt;I haven&#39;t been too active on this blog in the last few months and am only picking things up a bit again. But I always kept some traffic. And I had a liitle more detailed look at that traffic and I just had to laugh.&lt;/p&gt;
&lt;p&gt;I noticed that a lot of people were coming to the blog from Images searches on Google. In particular I found that a photo that I linked to last year before I went on holiday to Sweden for the first time in my life. I had &lt;a href=&quot;http://roho2003.blogspot.com/2006/08/it-will-be-silent-for-bit.html&quot;&gt;posted&lt;/a&gt; a picture of &lt;strong&gt;Pippi Longstocking&lt;/strong&gt; and apparently that attracts people to my blog.&lt;/p&gt;
&lt;h5&gt;Pippi Longstocking, once again!&lt;/h5&gt;
&lt;a href=&quot;http://picasaweb.google.com/rob.hofker/Sweden2006/photo#4969898308044718098&quot;&gt;&lt;img src=&quot;http://lh4.google.com/rob.hofker/RPigLfTSABI/AAAAAAAAAA4/IMX65bHMCic/s400/IM007522.JPG&quot; title=&quot;Pippi Longstocking&quot; alt=&quot;Pippi Longstocking&quot; /&gt;&lt;/a&gt;
&lt;p&gt;So here she is once again: &lt;strong&gt;Pippi Longstocking&lt;/strong&gt;! This time a picture I made myself in the Astrid Lindgren park near Vimmerby. See if traffic picks up on this as well.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/4825105268204197271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2008/02/blog-traffic-by-pippi-longstocking.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/4825105268204197271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/4825105268204197271'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2008/02/blog-traffic-by-pippi-longstocking.html' title='Blog traffic by Pippi Longstocking'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5176856.post-115252745357623144</id><published>2006-07-11T12:48:00.000+02:00</published><updated>2010-04-07T15:27:32.090+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cleansed"/><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><title type='text'>Implementing a Google Mini</title><content type='html'>&lt;h4&gt;.. if only everything in life was this simple&lt;/h4&gt;
&lt;p class=&quot;update&quot;&gt;The Google Mini implementation together with a redesign &lt;em&gt;(or rather re-alignment)&lt;/em&gt; of our website will be put in production on the 24th October. It took longer than this post suggests because of other higher priority projects that were implemented in the past few weeks. But hey! It is coming at last.&lt;/p&gt;
&lt;p&gt;As briefly mentioned in &lt;a href=&quot;http://roho2003.blogspot.com/2006/07/been-busy-lately.html&quot;&gt;my previous post&lt;/a&gt; I am working on the incorporation of a Google Mini appliance in &lt;a href=&quot;http://www.unive.nl/&quot;&gt;the Univé website&lt;/a&gt;. I will go into this a little bit more detailed.&lt;/p&gt;
&lt;h5&gt;Side stepping&lt;/h5&gt;
&lt;p&gt;I am a sort of a DIY-person. I like to do things myself. That means most of the time that things take longer before it is finished, but when it is finished the feeling of pride and self esteem pays for that. Also along the way of any of these DIY projects I get to stages that I have to do something new with some new tools or materials. Most of these have words on the packages like &lt;strong&gt;&quot;can be assembled in 5 minutes&quot;&lt;/strong&gt; and over time I have learned that that is the moment to be aware, to be very aware of pit falls. Usually I have picked something to use it in a slightly different way or want to use it inside a small space so it is impossible to use a screw driver to fasten it.&lt;/p&gt;
&lt;p&gt;I think that these problems are directly related to my lack of skills, because usually (&lt;em&gt;after some tears and sweat from me and cursing the people who ever designed the stuff&lt;/em&gt;) I can use it for the purpose that I had intended. I think of myself as a reasonably well DIY person.&lt;/p&gt;
&lt;p&gt;The same applies in my IT skills. I sometimes wander about and pick the wrong route at first, but usually I get stuff working, again &lt;em&gt;after some tears and sweat from me and cursing the people who ever designed the stuff&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;But these marketing words: &lt;strong&gt;&quot;up and running in NO time&quot;&lt;/strong&gt; still put me in a special mode. When something can not fail I know it will.&lt;/p&gt;
&lt;h5&gt;Stepping back&lt;/h5&gt;
&lt;p&gt;So, when we had wheeled in the Google Mini appliance I was ready for weeks of administering and tweaking to finally get some search results on my screen that vaguely would like what we would want to see.&lt;/p&gt;
&lt;p&gt;I know I have been very enthusiastic about the stuff coming from Google in the past months, years and maybe it seems like I am a blind follower of the company at Mountain View, but I am not. But I am of the opinion that have created some very good stuff in recent years. And when they haven&#39;t created it themselves they give it a twist by presenting it for free, like Google Analytics.&lt;/p&gt;
&lt;h5&gt;Back to the topic&lt;/h5&gt;
&lt;p&gt;After these lengthy opening paragraphs I am now returning to the subject of this post: &lt;em&gt;implementing a Google Mini&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;During the build of our new website we had dropped search as one of the deliverables for Go-Live. It was postponed to the Point One Release. You can have a nice long discussion about that, but don&#39;t bother we did as well and management decided to drop it and so we did.&lt;/p&gt;
&lt;p&gt;We had acquired a Google Mini to facilitate the site search and had it hanging in a server rack for a couple of months gathering dust, but once we were ready for launch I was given time to explore its potential. I must admit, that I was a bit afraid to have a stab at it. To me it was a black box (although it&#39;s happily blue) and I did not see an opening. And misplacing the manuals was another hurdle we had to take and after some Googling on Google we found a way to download the stuff and have a go at it. Then a colleague opened his drawer and said that he had secured the manuals. Sigh!&lt;/p&gt;
&lt;h5&gt;Initial setup&lt;/h5&gt;
&lt;p&gt;The first things you have to do is some basic setup like giving a IP address and an administrator password. This was done very simple using a laptop connected directly to the box. Then using the web interface it was really easy to configure the crawling and after the first crawl see the first results through the familiar Googlish interface. Tweaking a bit of XSLT brought out the company colors and logo and I was ready to be enthusiastic again. This machine would provide an easy site search for our website. And so we moved on.&lt;/p&gt;
&lt;h5&gt;Integration into the site&lt;/h5&gt;
&lt;p&gt;Well, we did not want to give visitors direct access to the Google Mini, but we wanted to really integrate search into the site context. We have added a search box to our menu bar and created a new search container or template. Communication with the Google Mini is managed through a Web Service.&lt;/p&gt;
&lt;p&gt;Since, the Google Mini already came with an API it was relatively simple to set this all up. Cutting some corners we decided to stay with a plain search screen and leave out the advanced bits for the moment. This meant that we needed a simple Web Service method that would only take a string as the search query. Added to that we wanted have navigation from one page of search results to the other and we another method was needed for accepting the (more complex) query with page indication and the like. This second method was also used for the spelling suggestions and the keymatch results (aka Sponsored Links).&lt;/p&gt;
&lt;h5&gt;Communication with the Google Mini&lt;/h5&gt;
&lt;p&gt;The Google Mini API is very simple in nature. All one needs to do is build a long URL with query parameters and you are provided with XML string that holds the outcome of the search request.&lt;/p&gt;
&lt;p&gt;The XML string is then returned to the site and there it is loaded into an XmlDocument and then parsed using XPath queries and presented to the visitor in simple XHTML.&lt;/p&gt;
&lt;h5&gt;Presentation to the user&lt;/h5&gt;
&lt;p&gt;First of all, we did not want to reinvent yet another better wheel. We feel that Google does a great job of presenting search results. But being a web developer I also know that the code used to produces the list of results is not exactly what we call modern or semantic web design.&lt;/p&gt;
&lt;p&gt;So, we liked what it looks like on the &lt;em&gt;outside&lt;/em&gt; and decided to change the &lt;em&gt;inside&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Show in the screen shot is part of what the page will look like. The similarity with Google search result pages should be obvious. We even have space for AdSense ;-)&lt;/p&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;http://photos1.blogger.com/blogger/3766/160/1600/SiteSearch.png&quot;&gt;&lt;img style=&quot;margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;&quot; src=&quot;http://photos1.blogger.com/blogger/3766/160/320/SiteSearch.png&quot; alt=&quot;&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;
&lt;p&gt;The search results are presented in a &lt;strong&gt;&amp;lt;dl&amp;gt;&lt;/strong&gt;, with the linked title in a &lt;strong&gt;&amp;lt;dt&amp;gt;&lt;/strong&gt; and the snippet from the page in a &lt;strong&gt;&amp;lt;dd&amp;gt;&lt;/strong&gt;. This seems to me a reasonable microformat for this purpose. Keeping the pages lightweight was and is one of our primary goals.&lt;/p&gt;
&lt;h5&gt;Looking back&lt;/h5&gt;
&lt;p&gt;When I now look back at this project (just before it is moved into the final test cycle and put online) I think that we did a great job. And the Google Mini is a great way of providing site search. Implementation went smooth and the only challenges were again in getting the .NET Framework work as we want it to work.&lt;/p&gt;
&lt;p&gt;The Google Mini once configured does not need any real maintenance. If the machine should lose it&#39;s complete settings and database then setting it up fresh and let it crawl our site can be done within an hour. The Google Mini really lives up to its expectations. It was great fun to do.&lt;/p&gt;
&lt;h5&gt;Looking forward&lt;/h5&gt;
&lt;p&gt;After putting it in production we have a very strong tool for our content writers to see how a search engines sees our site and how Google presents the results. I plan to work with them to make the site even better than it is already.&lt;/p&gt;
&lt;p&gt;In that way the Google Mini will work as a benefit by providing search to the visitors, but also as a tool to improve the search engine performance of our site. Not bad for a little blue black box.&lt;/p&gt;

&lt;div class=&quot;tags&quot;&gt;
Tags:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/Google%20mini&quot; rel=&quot;tag&quot;&gt;Google mini&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/corporate%20seach&quot; rel=&quot;tag&quot;&gt;corporate seach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/site%20search&quot; rel=&quot;tag&quot;&gt;site search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/xhtml&quot; rel=&quot;tag&quot;&gt;xhtml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/xml&quot; rel=&quot;tag&quot;&gt;xml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/webservice&quot; rel=&quot;tag&quot;&gt;webservice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/microformat%20&quot; rel=&quot;tag&quot;&gt;microformat &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/115252745357623144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2006/07/implementing-google-mini.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/115252745357623144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/115252745357623144'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2006/07/implementing-google-mini.html' title='Implementing a Google Mini'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5176856.post-115019969051648873</id><published>2006-06-13T13:54:00.000+02:00</published><updated>2010-04-07T15:27:32.097+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cleansed"/><category scheme="http://www.blogger.com/atom/ns#" term="design"/><category scheme="http://www.blogger.com/atom/ns#" term="resolution"/><category scheme="http://www.blogger.com/atom/ns#" term="separation"/><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><category scheme="http://www.blogger.com/atom/ns#" term="web"/><title type='text'>A new Standard in screen resolution?</title><content type='html'>&lt;h4&gt;.. smaller or bigger?&lt;/h4&gt;
&lt;p class=&quot;update&quot;&gt;&lt;a href=&quot;http://roho2003.blogspot.com/2007/04/standard-screen-resolution.html&quot;&gt;A sequel to this article&lt;/a&gt; has been made. In that I discuss the current standard screen width you could design for. Based on data from the first months of 2007.&lt;/p&gt;
&lt;p&gt;In a post today Tony Patton over on &lt;a href=&quot;http://techrepublic.com.com/2001-1-0.html&quot;&gt;TechRepublic&lt;/a&gt; discusses &lt;a href=&quot;http://techrepublic.com.com/5100-3513-6081709.html&quot;&gt;Determining a standard screen resolution for your application&lt;/a&gt;. He has some point to keep in mind when designing a web site.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;There is a general trend towards bigger monitors with higher resolutions. Multiple screens are close to becoming a common household item as well.&lt;/li&gt;
&lt;li&gt;Never ever use your own screen resolution as the standard.&lt;/li&gt;
&lt;li&gt;Nor the monitors of your colleagues. Both will be probably more state of the art than the old CRT or cheapo flat screen from Joe Average.&lt;/li&gt;
&lt;li&gt;Screen resolution does not equal the viewable area or the browser window size. Most users will not have their browsers maximized on screen.&lt;/li&gt;
&lt;li&gt;It is good to look at visitor statistics, but be sure to sample the right audience. Taking the numbers from a site largely visited by developers will not do when the site you are designing is aiming at pensioners.&lt;/li&gt;
&lt;li&gt;Also keep accessibility issues in mind. The disabled users can use screen readers with or low  resolution monitors with odd metrics. You should test, test, test.&lt;/li&gt;
&lt;li&gt;You can use JavaScript to establish the viewport size and serve the client a fitting design.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All in all, a not all too shocking article, but a good summing up of things to keep in mind.&lt;/p&gt;
&lt;h5&gt;Monitors are becoming smaller, not larger!&lt;/h5&gt;
&lt;p&gt;In a comment TechRepublic member &lt;a href=&quot;http://techrepublic.com.com/5213-6257-0.html?id=4495573&amp;redirectTo=%2f1320-22-20.html&quot;&gt;Wombat Ron&lt;/a&gt; then adds the increasing use of handheld and smartphones that have much smaller screens. He predicts that the 640*480 resolution could be coming back into the charts. So, it is difficult to say whether we are moving towards bigger or smaller screens.&lt;/p&gt;
&lt;h5&gt;Separating content and styling&lt;/h5&gt;
&lt;p&gt;I think Ron is right, although I think these could be handled by using the mediatype&#39;handheld&#39; to serve special styling through a dedicated CSS file. This is where separation comes back in its full power. With a good design of the structure of your site (the html) you will keep that lean and you can then just as easily serve that to handhelds and adjust the styling so that it will fit on a small screen.&lt;/p&gt;
&lt;h5&gt;What is wrong in the article?&lt;/h5&gt;
&lt;p&gt;One thing struck me as quite odd in the article was the example code that was in the article. This code looks at the size of the window to determine what to present to the customer. See code.&lt;/p&gt;
&lt;blockquote&gt;
&lt;code&gt;
&amp;lt;SCRIPT language=&quot;JavaScript&quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ((screen.width &gt;= 1024) &amp;&amp; (screen.height &gt;= 768)) {&lt;br /&gt;
window.location=&quot;high_resolution_version.html&quot;;&lt;br /&gt;
} else {&lt;br /&gt;
window.location=&quot;low_resolution_version.html&quot;;&lt;br /&gt;
}&lt;br /&gt;
//--&amp;gt;&lt;br /&gt;
&amp;lt;/SCRIPT&amp;gt;
&lt;/code&gt;
&lt;/blockquote&gt;
&lt;p&gt;Here the principle of separation is missed completely. The users is redirected to another page and I think that it would be more then enough to serve another CSS file.&lt;/p&gt;
&lt;p&gt;Separation of structure and styling gives the versatile option of changing the style while still leaving the structure intact. At our new website we have a &#39;normal&#39; version and an &#39;impaired&#39; version. The only difference is that other stylesheets are delivered to the visitor. The html stays the same. (&lt;em&gt;Mind you: this does not make the site accessible, there are still plenty of issues that we will tackle soon.&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Right now, I am working on changing the layout of the site so that it strechted from an 800 pixel wide design to a 1024 pixel wide design. I this is all relatively painful as I only need to make changes to a couple of CSS files and stretch a few background images.&lt;/p&gt;
&lt;h5&gt;Afterburner&lt;/h5&gt;
&lt;p&gt;What is the most odd really in the &lt;strong&gt;&#39;resolution business&#39;&lt;/strong&gt; is that apparently designs are made for 1024*768 or 800*600. I hardly ever design the height of a web page. The width is a valid parameter but the height of the page is usually determined by the content and as a designer you have hardly any influence on that unless it is your own site.&lt;/p&gt;
&lt;p&gt;I usually design for a certain screen width. Also I have a preference for fluid or liquid designs.&lt;/p&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/115019969051648873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2006/06/new-standard-in-screen-resolution.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/115019969051648873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/115019969051648873'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2006/06/new-standard-in-screen-resolution.html' title='A new Standard in screen resolution?'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5176856.post-114959767286396713</id><published>2006-06-06T12:30:00.001+02:00</published><updated>2010-04-07T15:27:32.104+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cleansed"/><category scheme="http://www.blogger.com/atom/ns#" term="Google Sitemap"/><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><category scheme="http://www.blogger.com/atom/ns#" term="Web crawler"/><category scheme="http://www.blogger.com/atom/ns#" term="World Wide Web"/><title type='text'>Google Sitemaps: overview of benefits</title><content type='html'>&lt;h4&gt;.. looking back with pleasure&lt;/h4&gt;
&lt;p&gt;Sometime in September 2005 Google put out the &lt;a href=&quot;http://en.wikipedia.org/wiki/Sitemaps&quot; title=&quot;Sitemaps&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;Google Sitemaps&lt;/a&gt; product. To help website owners all over the world to inform Google of the pages of their websites. Being a website owner, designer and developer I immediately jumped on the wagon and tried it out. I started an experiment to try the effectiveness out and see if it did really do what I hoped it would do: make my new content appear in the Google index more quickly than before.&lt;/p&gt;
&lt;h5&gt;My experiment&lt;/h5&gt;
&lt;p&gt;
In a couple of posts (
&lt;a href=&quot;http://roho2003.blogspot.com/2005/09/google-sitemaps.html&quot;&gt;1&lt;/a&gt;,
&lt;a href=&quot;http://roho2003.blogspot.com/2005/09/google-sitemaps_14.html&quot;&gt;2&lt;/a&gt;
&amp;amp;
&lt;a href=&quot;http://roho2003.blogspot.com/2005/09/google-sitemaps_15.html&quot;&gt;3&lt;/a&gt;
) I outlined the experiment I did with
&lt;a href=&quot;http://www.google.com/webmasters/sitemaps/docs/en/about.html&quot;&gt;Google Sitemaps&lt;/a&gt;
on &lt;a href=&quot;http://www.roho-products.nl&quot;&gt;my site&lt;/a&gt;.&lt;/p&gt;
&lt;h5&gt;What was the setup?&lt;/h5&gt;
&lt;p&gt;I created a sitemap of &lt;a href=&quot;http://www.roho-products.nl/&quot;&gt;my website&lt;/a&gt;. In this XML file all the interlinked pages appear. I added two pages to my website:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;a page (A) that I added to my sitemap.xml but that was never linked from any the other pages on my website&lt;/li&gt;
&lt;li&gt;another page (B) that I did not add to my sitemap.xml, but it was linked to from page A.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Both pages had legitimate content and also link back to other pages of my website. Actually, both were to be part of my website but I merely have omitted putting links on the other pages pointing to these new pages. They are in essence orphans. But could also be seen as landing pages.&lt;/p&gt;
&lt;p&gt;The experiment was to see if the Google crawler would visit these two pages. The first directly from the sitemap.xml and the second through &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_crawler&quot; title=&quot;Web crawler&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;crawling&lt;/a&gt; the links on the first page.&lt;/p&gt;
&lt;h5&gt;So what happened?&lt;/h5&gt;
&lt;p&gt;After having submitted the sitemap.xml I was filled with joy when I discovered that Google scanned the file within 24 hours. Moreover it appeared to come by twice a day. That did not mean that the pages appeared in the Google search results immediately, but still it gave me hope that they would after the next crawl.&lt;/p&gt;
&lt;span class=&quot;zemanta-img&quot; style=&quot;margin: 1em; float: right; display: block;&quot;&gt;&lt;a href=&quot;http://commons.wikipedia.org/wiki/Image:PageRanks-Example.svg&quot;&gt;&lt;img src=&quot;http://upload.wikimedia.org/wikipedia/commons/thumb/f/fb/PageRanks-Example.svg/202px-PageRanks-Example.svg.png&quot; alt=&quot;Numeric examples of PageRanks in a small system.&quot; style=&quot;border: medium none ; display: block;&quot;&gt;&lt;/a&gt;&lt;span class=&quot;zemanta-img-attribution&quot; style=&quot;margin: 1em 0pt 0pt; display: block;&quot;&gt;Image via &lt;a href=&quot;http://commons.wikipedia.org/wiki/Image:PageRanks-Example.svg&quot;&gt;Wikipedia&lt;/a&gt; &lt;/span&gt;&lt;/span&gt;
&lt;p&gt;So, I kept checking my website logs to see if any of the &lt;em&gt;secret&lt;/em&gt; pages (A or B) would pop up in my requested pages list. And checked again and checked again.&lt;/p&gt;

&lt;p&gt;Now for the &lt;em&gt;real purpose of the Sitemaps&lt;/em&gt;: getting your pages crawled. The Crawl process can take some time before it happens. The
&lt;strong&gt;predominant belief&lt;/strong&gt; is that a fresh crawl of the Web is done every couple of weeks or once a month.&lt;/p&gt;
&lt;p&gt;So, after uploading my sitemap I expected it could take up to a month before my hidden pages were discovered. But after a couple of days the first secret page A was crawled. &lt;strong&gt;Bang!&lt;/strong&gt; The sitemap.xml really showed its purpose. The file was indeed used by the Google crawler to crawl pages.&lt;/p&gt;
&lt;p&gt;The second page did not show up immediately. So apparently, the links on the page were not yet crawled. They were probably queued to be crawled in a next crawl. Later they indeed did show up and so that part of the process worked as well.&lt;/p&gt;
&lt;p&gt;The experiment was successful and has convinced me that Google Sitemaps really add something to a website.&lt;/p&gt;
&lt;h5&gt;Added value&lt;/h5&gt;
&lt;p&gt;A bonus of the Google Sitemap system is that a website master also has the possibility to view reports on the last crawl results. This can be achieved by placing an html file with a name provided by Google to verify that you can manage the site. Google then provides you with a list of failed pages. Pages that no longer exist or have another error.&lt;/p&gt;
&lt;p&gt;These statistics have been extended over the last few months and now show also the most used search strings and also the search queries with the most clicks. There is more like a robot.txt checker and error reports. All very valuable for a web site owner. &lt;a href=&quot;http://sitemaps.blogspot.com/2005/08/mobile-pages-and-new-statistics.html&quot;&gt;Read more about these handy sitemap statistics.&lt;/a&gt;&lt;/p&gt;


&lt;h5&gt;Conclusion of the experiment&lt;/h5&gt;
&lt;p&gt;By adding a Google Sitemaps file to your website (and keeping it up to date!) you can ensure that new pages are crawled at the next scheduled crawl. If you have a popular CMS there is probably already a plugin available to create and maintain a sitemap. I can recommend it to any site owner. It is worth the effort. For me it is a little bit of work because I still use static html pages on my site.&lt;/p&gt;

&lt;h5&gt;More goodies&lt;/h5&gt;
&lt;p&gt;Some time ago after the experiment more goodies were added. What extras are hidden in the Google Sitemaps console?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Crawl statistics: Pages successfully crawled, pages blocked by robots.txt, pages that generated HTTP errors or were unreachable.&lt;/li&gt;
&lt;li&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/PageRank&quot; title=&quot;PageRank&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;PageRank&lt;/a&gt; distribution within your site.&lt;/li&gt;
&lt;li&gt;Various indexing stats (pages indexed, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you, for a completely obscure reason, do not wish to create a
Google Sitemap, you can rest assured. You do not need to have Google
Sitemap to be able to use this functionality. All you have to do is
create an empty &lt;a href=&quot;http://en.wikipedia.org/wiki/HTML&quot; title=&quot;HTML&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;HTML&lt;/a&gt; file and upload to your site to verify that you
own the site. And then you start leveraging the benefits. For free.&lt;/p&gt;
&lt;p&gt;Google Sitemaps turns itself into an &lt;strong&gt;absolutely awesome&lt;/strong&gt; troubleshooting tool
for all webmasters.&lt;/p&gt;


&lt;h5&gt;Experimentation is fun, but real life implementation is better&lt;/h5&gt;
&lt;p&gt;This interesting experiment shows that Google Sitemaps is doing what it is supposed to do: making pages noted by the Google crawlers.&lt;/p&gt;
&lt;p&gt;As said we launched our new website on Tuesday 30 May and implemented Google Sitemaps with it. I had registered the sitemap with Google a couple of days before the launch so it was trying to download the then still not existing sitemap. On launch day around 6 AM our time the sitemap was downloaded by Google. That was the first possible moment less than two hours after the site went live.&lt;/p&gt;
&lt;h5&gt;Success #1: new pages are already in the index&lt;/h5&gt;
&lt;p&gt;Two days later we see already many pages in the Google Index. When I did &lt;a href=&quot;../../search?as_q=&amp;amp;num=100&amp;amp;hl=nl&amp;amp;btnG=Google+zoeken&amp;amp;as_epq=&amp;amp;as_oq=&amp;amp;as_eq=&amp;amp;lr=&amp;amp;as_ft=i&amp;amp;as_filetype=&amp;amp;as_qdr=m3&amp;amp;as_occt=any&amp;amp;as_dt=i&amp;amp;as_sitesearch=www.unive.nl&amp;amp;as_rights=&amp;amp;safe=images&quot;&gt;
a search on the first 100 pages changed in the last three months&lt;/a&gt; on Google I found that of these only 12 are still pointing to our old site. My guess was that these are there only because we had some problems setting the rewrite rules for the old asp files. That was not entirely correct as a week later we still see old pages, but those are different ones.&lt;/p&gt;
&lt;p&gt;The Google index now already returns new pages only days after going live. Without the Google Sitemap this would taken much, much longer.&lt;/p&gt;
&lt;h5&gt;Success #2: we have a check on what goes wrong&lt;/h5&gt;
&lt;p&gt;Thanks to the statistics that we receive from Google we can now track the old, no longer existing pages that are being crawled. We can see errors popping up and if necessary we can further tweak our web application or &lt;a href=&quot;http://en.wikipedia.org/wiki/Web_server&quot; title=&quot;Web server&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;web server&lt;/a&gt; to gracefully handle these.&lt;/p&gt;
&lt;h5&gt;Conclusion&lt;/h5&gt;
&lt;p&gt;Implementing Google Sitemaps has given us already huge advantages in the first week of going live. By having the Google Sitemaps ready at go-live we have been able to have Google find our new pages and content.&lt;/p&gt;
&lt;p&gt;I would strongly recommend implementing Google Sitemaps with any web project so the pages will appear as quickly as possible in the index. Even though we had to implement the Google Sitemaps ourselves within our site framework it was not the greatest of challenges we had.&lt;/p&gt;
&lt;p&gt;Many of the (open source) &lt;a href=&quot;http://en.wikipedia.org/wiki/Content_management_system&quot; title=&quot;Content management system&quot; rel=&quot;wikipedia&quot; class=&quot;zem_slink&quot;&gt;content management systems&lt;/a&gt; nowadays provide Google Sitemaps out of the box or through a plugin. So, there is hardly any reason not to implement them.&lt;/p&gt;

&lt;h5 class=&quot;update&quot;&gt;Update (4th September 2008)&lt;/h5&gt;
&lt;p class=&quot;update&quot;&gt;The Google Sitemaps protocol has in the meantime been adopted by more search engines and is now als an integral part of the Robots.txt. So, it&#39;s nowadays even more important to use the protocol.&lt;/p&gt;
&lt;p class=&quot;update&quot;&gt;Better still: It&#39;s now an open standard.&lt;/p&gt;
&lt;div class=&quot;tags&quot;&gt;
Tags:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/google%20sitemaps&quot; rel=&quot;tag&quot;&gt;google sitemaps&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/google&quot; rel=&quot;tag&quot;&gt;google&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/sitemaps&quot; rel=&quot;tag&quot;&gt;sitemaps&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;fieldset class=&quot;zemanta-related&quot;&gt;&lt;legend class=&quot;zemanta-related-title&quot;&gt;Related articles by Zemanta&lt;/legend&gt;&lt;ul class=&quot;zemanta-article-ul&quot;&gt;&lt;li class=&quot;zemanta-article-ul-li&quot;&gt;&lt;a href=&quot;http://www.articlesbase.com/article.php?aid=521177&amp;amp;pid=6775764102&quot;&gt;Automated Google Sitemaps Generators&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/fieldset&gt;

&lt;div style=&quot;margin-top: 10px; height: 15px;&quot; class=&quot;zemanta-pixie&quot;&gt;&lt;a class=&quot;zemanta-pixie-a&quot; href=&quot;http://reblog.zemanta.com/zemified/81a27c80-674f-4754-a677-97c7f570440a/&quot; title=&quot;Zemified by Zemanta&quot;&gt;&lt;img style=&quot;border: medium none ; float: right;&quot; class=&quot;zemanta-pixie-img&quot; src=&quot;http://img.zemanta.com/reblog_e.png?x-id=81a27c80-674f-4754-a677-97c7f570440a&quot; alt=&quot;Reblog this post [with Zemanta]&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/114959767286396713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2006/06/google-sitemaps-overview-of-benefits.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/114959767286396713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/114959767286396713'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2006/06/google-sitemaps-overview-of-benefits.html' title='Google Sitemaps: overview of benefits'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5176856.post-114070151822403462</id><published>2006-03-03T14:05:00.001+01:00</published><updated>2010-04-07T15:27:32.112+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="TopContent"/><title type='text'>Ektron cms400.NET has an open back door</title><content type='html'>&lt;h4&gt;.. and most admins don&#39;t know&lt;/h4&gt;
&lt;p class=&quot;update&quot;&gt;Updated! See below.&lt;/p&gt;
&lt;p&gt;In my daytime job I am busy with some colleagues to put together a new website for the company we work for. An interesting job involving many exciting subjects like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;XHTML &amp;amp; CSS&lt;/li&gt;
&lt;li&gt;C#, ASP.NET and the .NET Framework&lt;/li&gt;
&lt;li&gt;lots of OO and Patterns&lt;/li&gt;
&lt;li&gt;and the &lt;em&gt;exciting&lt;/em&gt; &lt;a href=&quot;http://www.ektron.com/cms400.aspx&quot;&gt;Ektron cms400.NET&lt;/a&gt; content management system&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have had our share of struggles with this system. Getting it to work with our framework which involves talking to the web service side of the cms and finding that not all functionality from the server controls were available in the web service. On top of that we have found problems with the performance. In the mean time we have worked around these problems and are now in the finishing phases of the long running project.&lt;/p&gt;
&lt;h5&gt;Now what&#39;s with that back door?&lt;/h5&gt;
&lt;p&gt;Well, it sounds pretty harsh like accusing Ektron of some sort of crime, but that&#39;s not my point. The back door is mentioned in the manual (at page 27) and there is a warning for administrators there so any admin who reads his manuals thoroughly ..
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;(space left blank to count the entire two of them)&lt;/em&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
any admin who reads his manuals thoroughly can close that back door.&lt;/p&gt;
&lt;p&gt;A quick Google around the world by two of my colleagues showed quite a few instances of the &lt;em&gt;exciting&lt;/em&gt; &lt;a href=&quot;http://www.ektron.com/cms400.aspx&quot;&gt;Ektron cms400.NET&lt;/a&gt; with their login pages exposed.&lt;/p&gt;
&lt;p&gt;Then it was simply trying the admin account with a password I will not disclose &lt;em&gt;(you go and guess it)&lt;/em&gt; and they were in. That was simply too stupid. Every admin should at least have the brains to change the admin password.&lt;/p&gt;
&lt;p&gt;For most of these sites the admin password was changed, but the second built in user account &lt;em&gt;(you try to guess it again)&lt;/em&gt; was usually still wide open!&lt;/p&gt;
&lt;h5&gt;So, it&#39;s just stupid admins?&lt;/h5&gt;
&lt;p&gt;No, it&#39;s not stupid admins, they usually are not stupid. Those who didn&#39;t change the admin password can be rated stupid, but those who left the second user exposed are not. I blame Ektron for that.&lt;/p&gt;
&lt;p&gt;I think it is quite normal to have an admin user account in a system and maybe they should force changing the password the first time the admin logs in to the system. But I do not understand why there is a second user account that there that is completely hidden in the user list so most admins will not even know of the existence unless they have read page 27 of the manual.&lt;/p&gt;
&lt;p&gt;So, most of the companies and organizations that use the &lt;em&gt;exciting&lt;/em&gt; &lt;a href=&quot;http://www.ektron.com/cms400.aspx&quot;&gt;Ektron cms400.NET&lt;/a&gt; are completely unaware of the vulnerability of their web sites. After finding that we could login we immediately logged out. Less friendly people could cause a lot of harm.&lt;/p&gt;
&lt;h5&gt;And you?&lt;/h5&gt;
&lt;p&gt;We are completely safe with our website. We have simply left out all the admin stuff from our website. We manage the content from within our safe network.&lt;/p&gt;
&lt;h5&gt;Advise to Ektron&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;Inform your users and leave out this second user account in your future releases.&lt;/strong&gt;&lt;/p&gt;
&lt;h5 class=&quot;update&quot;&gt;Update [3 March 2006]&lt;/h5&gt;
&lt;p class=&quot;update&quot;&gt;Eventhough this article has been brought to the attention of Ektron and some site owners that had their website completely open to anyone clever enough to find the open door, no action has been taken by neither Ektron nor site owners.&lt;/p&gt;
&lt;p class=&quot;update&quot;&gt;The Internet is a jungle but they think it is OK to leave the door open with a welcome math in front of it.&lt;/p&gt;
&lt;h5 class=&quot;update&quot;&gt;Update [13 March 2006]&lt;/h5&gt;
&lt;p class=&quot;update&quot;&gt;&lt;strong&gt;Ektron has taken notice and is taking action, read &lt;a href=&quot;http://roho2003.blogspot.com/2006/03/ektron-i-have-moved-stone.html&quot;&gt;this&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;tags&quot;&gt;
Tags:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/ektron&quot; rel=&quot;tag&quot;&gt;ektron&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/back door&quot; rel=&quot;tag&quot;&gt;back door&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/vulnerability&quot; rel=&quot;tag&quot;&gt;vulnerability&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.technorati.com/tag/security&quot; rel=&quot;tag&quot;&gt;security&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;&lt;hr /&gt;
&lt;a href=&quot;http://blog.mahimba.com&quot;&gt;&lt;img border=&quot;0&quot;
src=&quot;http://bp3.blogger.com/_Asp8txadpj8/RpX20ZGPK0I/AAAAAAAAAgk/0qdVP5IrH_Y/s320/banaan.gif&quot;
alt=&quot;Mahimba Blog&quot; /&gt;&lt;/a&gt;
&lt;hr /&gt;
&lt;a href=&quot;mailto:rob.hofker@gmail.com&quot;&gt;Go ahead and spam me!&lt;/a&gt;
 or visit me at 
&lt;a href=&quot;http://www.roho-products.nl&quot;&gt;Roho Products - Web design - Steenwijk&lt;/a&gt;
&lt;!-- Oy you! Why are you looking at the source code of this feed? Not much to see here. Bye now! --&gt;
&lt;hr /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://roho2003.blogspot.com/feeds/114070151822403462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://roho2003.blogspot.com/2006/03/ektron-cms400net-has-open-back-door.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/114070151822403462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5176856/posts/default/114070151822403462'/><link rel='alternate' type='text/html' href='http://roho2003.blogspot.com/2006/03/ektron-cms400net-has-open-back-door.html' title='Ektron cms400.NET has an open back door'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/03880668956776986361</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>