<?xml version="1.0"?>
<rss version="2.0" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:yt="http://gdata.youtube.com/schemas/2007" xmlns:atom="http://www.w3.org/2005/Atom">
   <channel>
      <title>Combined Miracle employee Feed</title>
      <description>Pipes Output</description>
      <link>http://pipes.yahoo.com/pipes/pipe.info?_id=Wi_qdPQK3hGLDn6O0j6skA</link>
      <atom:link rel="next" href="http://pipes.yahoo.com/pipes/pipe.run?_id=Wi_qdPQK3hGLDn6O0j6skA&amp;_render=rss&amp;page=2"/>
      <pubDate>Thu, 01 Oct 2015 22:41:32 +0000</pubDate>
      <generator>http://pipes.yahoo.com/pipes/</generator>
      <item>
         <title>.NET compiler platform (Roslyn) analyzer packages</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/LDhLT9MC28Q/</link>
         <description>&lt;p&gt;The greatest new feature in Visual Studio 2015 is the .NET compiler platform previously known as Roslyn. The .NET Compiler Platform is an open source compiler for C# and VB with rich code analysis APIs. It enables developers to build code analysis tool like code analyzers, fixes and refactorings.&lt;/p&gt;
&lt;p&gt;The community has built a number of packages containing great analyzers, fixes and refactorings. These can be installed either as a Visual Studio 2015 Extension or at project level as NuGet packages.&lt;/p&gt;
&lt;h2&gt;Refactoring Essentials&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://vsrefactoringessentials.com/&quot;&gt;Refactoring Essentials&lt;/a&gt; contains approx. 200 code analyzers, fixes and refactorings&lt;br /&gt;
Simple defensive code analyzers like parameter checking.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_CheckDictionaryKeyValueCodeRefactoring.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1365&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_CheckDictionaryKeyValueCodeRefactoring.png&quot; alt=&quot;Roslyn_CheckDictionaryKeyValueCodeRefactoring&quot; width=&quot;493&quot; height=&quot;146&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Simplyfing code by converting conditional ternary to null coalescing.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_ConvertConditionalTernaryToNullCoalescingAnalyzer.png&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-1366&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_ConvertConditionalTernaryToNullCoalescingAnalyzer-550x174.png&quot; alt=&quot;Roslyn_ConvertConditionalTernaryToNullCoalescingAnalyzer&quot; width=&quot;550&quot; height=&quot;174&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;CSharp Essentials&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/DustinCampbell/CSharpEssentials&quot;&gt;CSharp Essentials&lt;/a&gt; focuses on the new features in C# 6 such as &lt;a rel=&quot;nofollow&quot;&gt;the nameof operator&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot;&gt;string interpolation&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot;&gt;auto-properties&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot;&gt;expression-bodied methods&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_StringInterpolation.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-1369&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_StringInterpolation-550x156.jpg&quot; alt=&quot;Roslyn_StringInterpolation&quot; width=&quot;550&quot; height=&quot;156&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Code Cracker&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://code-cracker.github.io/&quot;&gt;Code Cracker&lt;/a&gt; is a smaller package for C# and VB with analyzers e.g. for empty catch blocks and if a disposable object is disposed.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_Disposable.png&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-1367&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_Disposable-550x203.png&quot; alt=&quot;Roslyn_Disposable&quot; width=&quot;550&quot; height=&quot;203&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;SonarLint&lt;/h2&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://vs.sonarlint.org/&quot;&gt;SonarLint&lt;/a&gt; for C# has great analyzers too as Christiaan Rakowski points out in the comments. One of them warns about logical paths that will never be reached or simplified.&lt;/p&gt;
&lt;h2&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_conditionalstructure.png&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-1373&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_conditionalstructure-550x123.png&quot; alt=&quot;Roslyn_conditionalstructure&quot; width=&quot;550&quot; height=&quot;123&quot;/&gt;&lt;/a&gt;Platform Specific Analyzer&lt;/h2&gt;
&lt;p&gt;With Windows 10 and the new Universal Windows Platform you as the developer need to make sure that the Windows App does not use an API not supported on the platform you are targeting. This is exactly what the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://github.com/ljw1004/blog/tree/master/Analyzers/PlatformSpecificAnalyzer&quot;&gt;Platform Specific Analyzer&lt;/a&gt; package does for both C# and VB.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_PlatformSpecific.png&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-1368&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Roslyn_PlatformSpecific-550x129.png&quot; alt=&quot;Roslyn_PlatformSpecific&quot; width=&quot;550&quot; height=&quot;129&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you know any other great packages – let me know.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/LDhLT9MC28Q&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1362</guid>
         <pubDate>Wed, 05 Aug 2015 13:39:40 +0000</pubDate>
      </item>
      <item>
         <title>How-to start and stop Azure VMs at a schedule</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/Q-SQDkA2fkY/</link>
         <description>&lt;p&gt;I use Azure VMs for dev/test and I do not want them to run all night, as I have to pay for it. Therefore, I stop the VMs at night with a scheduler, as I do not always remember to stop the VMs after use.&lt;/p&gt;
&lt;p&gt;Azure Automation is the right tool for the job. Azure Automation automates Azure management tasks and orchestrates actions across external systems from within Azure. You need an Azure Automation Account, which is a container for all your runbooks, runbook executions (jobs), and the assets that your runbooks depend on.&lt;/p&gt;
&lt;p&gt;To execute runbooks, a set of user credentials needs to be stored as an asset. Create a new user as described in &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://azure.microsoft.com/blog/2014/08/27/azure-automation-authenticating-to-azure-using-azure-active-directory/&quot;&gt;Azure Automation: Authenticating to Azure using Azure Active Directory&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Below, see guide on how to create the Azure Automation account and the runbook.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/CreateRunbookStopVM.gif&quot;&gt;&lt;img class=&quot;aligncenter wp-image-1332 size-full&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/CreateRunbookStopVM.gif&quot; alt=&quot;CreateRunbookStopVM&quot; width=&quot;974&quot; height=&quot;781&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The new Azure Automation account &lt;em&gt;lybAutomation&lt;/em&gt; and the runbook &lt;em&gt;Stop Windows Azure Virtual Machines on a Schedule&lt;/em&gt; are created from the gallery. The content in the gallery comes from the Azure Script Center. The &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://azure.microsoft.com/en-us/documentation/scripts/&quot;&gt;Azure Script Center&lt;/a&gt; has many PowerShell scripts covering many scenarios, but not all can be used with Azure Automation, as some scripts use features not available in Azure Automation. You do get a warning if you select one that is not supported, but in my mind, it should not be available in the gallery at all.&lt;/p&gt;
&lt;p&gt;It burned me the first time I tried Azure Automation. I used the &lt;em&gt;Stop Windows Azure Virtual Machines on a Schedule&lt;/em&gt; from the gallery, but it uses an on-premise scheduler.&lt;/p&gt;
&lt;p&gt;You need to store the credentials in the runbook of the user created earlier. See below.&lt;br /&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/SetupRunBookCredentials.gif&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1333&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/SetupRunBookCredentials.gif&quot; alt=&quot;SetupRunBookCredentials&quot; width=&quot;974&quot; height=&quot;781&quot;/&gt;&lt;/a&gt;Then you need to configure the runbook script with the credentials and the Azure subscription where the virtual machines reside. See below.&lt;br /&gt;
&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/ConfigureRunbookVmStop.gif&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1334&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/ConfigureRunbookVmStop.gif&quot; alt=&quot;ConfigureRunbookVmStop&quot; width=&quot;974&quot; height=&quot;781&quot;/&gt;&lt;/a&gt;You find your subscription name in the top bar “Subscriptions” of the Azure portal.&lt;br /&gt;
Now you can test your runbook and all you need is to set up the schedule, so it runs every evening. See guide below.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/ConfigureRunbookSchedule.gif&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-1335&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/ConfigureRunbookSchedule.gif&quot; alt=&quot;ConfigureRunbookSchedule&quot; width=&quot;974&quot; height=&quot;781&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Be aware that the time is in UTC, so you have to correct the time according to your time zone. I expect the scheduler to get an overhaul, as it is too simple right now.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/Q-SQDkA2fkY&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1331</guid>
         <pubDate>Wed, 25 Feb 2015 13:03:51 +0000</pubDate>
      </item>
      <item>
         <title>Minimizing the cost of dev/test environments in Azure</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/4fJ_2ZhSWl8/</link>
         <description>&lt;p&gt;I use Windows Azure as my dev/test environment because it is fast and convenient to create new virtual machines or services. I use the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://azure.microsoft.com/en-us/pricing/member-offers/msdn-benefits-details/&quot;&gt;MSDN Subscription Azure Benefits&lt;/a&gt;, which includes free Azure Credits. The Azure Credits cover my dev/test needs even though I use more than a handful of VMs and services. I make smart use of the free Azure Credits by turning off VMs at night and during weekends, when I am not using them. Which means that I can use 3-4 times more VMs on Azure compared to just letting them run all the time. VMs are costly compared to the PaaS services such as Azure WebSites, SQL Azure and Cloud Services. So the PaaS services are not a cost issue.&lt;/p&gt;
&lt;p&gt;I manage the Azure VMs and almost everything with the Server Explorer in Visual Studio. It is a quick way to start VMs in the morning.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/StartStopAzureVmFromVs2013.gif&quot;&gt;&lt;img class=&quot; size-full wp-image-1341 aligncenter&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/StartStopAzureVmFromVs2013.gif&quot; alt=&quot;StartStopAzureVmFromVs2013&quot; width=&quot;469&quot; height=&quot;528&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If I have a list of VMs that I need to manage, then I use the Azure PowerShell cmdlets – see my &lt;a rel=&quot;nofollow&quot;&gt;How-to start and stop Azure VMs via PowerShell&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Finally, I use Azure Automation to ensure that I never have a running Azure VM all night, just because I forgot to shut it down &amp;#8211; see &lt;a rel=&quot;nofollow&quot;&gt;How-to start and stop Azure VMs at a schedule&lt;/a&gt;. It automatically shuts down any VM running in my MSDN Subscription at 6 p.m. If I work later, I can just start the required VMs again – it only take a couple of minutes.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/4fJ_2ZhSWl8&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1340</guid>
         <pubDate>Wed, 25 Feb 2015 06:04:58 +0000</pubDate>
      </item>
      <item>
         <title>How-to start and stop Azure VMs via PowerShell</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/VstnD6DEu6s/</link>
         <description>&lt;p&gt;With PowerShell it is fast and convenient to manage my development and test servers running on Windows Azure. It is just easier to use command line tools than logging into the Azure management portal shutting down each VM. To set up PowerShell:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Install the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://go.microsoft.com/fwlink/p/?linkid=320376&amp;amp;clcid=0x409&quot;&gt;Azure PowerShell cmdlets&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Start the Azure PowerShell (do not start the regular PowerShell as it is not preconfigured with the Azure PowerShell cmdlets)&lt;/li&gt;
&lt;li&gt;Authorize Azure PowerShell to access your Azure subscriptions by typing in the Azure PowerShell shell:
&lt;pre&gt;
Add-AzureAccount
&lt;/pre&gt;
&lt;p&gt;In the sign-in window, provide your Microsoft credentials for the Azure account.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you like me have multiple Azure subscriptions &amp;#8211; change the default subscription with:&lt;/p&gt;
&lt;pre&gt;
Select-AzureSubscription [-SubscriptionName]
&lt;/pre&gt;
&lt;p&gt;To start an Azure VM the syntax is:&lt;/p&gt;
&lt;pre&gt;
Start-AzureVM [–Name] [-ServiceName]
&lt;/pre&gt;
&lt;p&gt;To start a VM named &lt;em&gt;vs2015&lt;/em&gt; in the cloud service &lt;em&gt;lybCloudService&lt;/em&gt; requires as little as:&lt;/p&gt;
&lt;pre&gt;
Start-AzureVM vs2015 lybCloudService
&lt;/pre&gt;
&lt;p&gt;To stop the VM is just as easy&lt;/p&gt;
&lt;pre&gt;
Stop-AzureVM [-Name] [-ServiceName]
&lt;/pre&gt;
&lt;p&gt;If it is the last running VM in the cloud service, then you will be asked if you want to deallocate the cloud service or not, as the cloud service will release the public IP address. That is not a problem if you access your VM via DNS name – which most people do.&lt;br /&gt;
You can override the question by appending &lt;em&gt;–Force&lt;/em&gt; like this:&lt;/p&gt;
&lt;pre&gt;
Stop-AzureVM vs2015 lybCloudService –Force
&lt;/pre&gt;
&lt;p&gt;There are many useful Azure PowerShell cmdlets to use. To list all Azure PowerShell cmdlets:&lt;/p&gt;
&lt;pre&gt;
Help Azure
&lt;/pre&gt;
&lt;p&gt;Get details on Azure PowerShell cmdlet:&lt;/p&gt;
&lt;pre&gt;
Man &amp;lt;cmdlet name&amp;gt;
&lt;/pre&gt;
&lt;p&gt;List all VMs:&lt;/p&gt;
&lt;pre&gt;
Get-AzureVM
&lt;/pre&gt;
&lt;p&gt;Get details of a specific VM:&lt;/p&gt;
&lt;pre&gt;
Get-AzureVM [–Name] [-ServiceName]
&lt;/pre&gt;
&lt;p&gt;The PowerShell prompt is just like a normal command prompt, so you can use tab completion and F7 to show all executed commands.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/VstnD6DEu6s&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1323</guid>
         <pubDate>Mon, 23 Feb 2015 07:02:29 +0000</pubDate>
      </item>
      <item>
         <title>Initialize a Dictionary with index initializers</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/8UIeAKGT4oA/</link>
         <description>&lt;p&gt;The next release of C# 6 has some amazing new features. In a series of blog posts I will cover some of them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Chained null checks blog post by Anders Lybecker&quot;&gt;Chained null checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;The nameof operator blog post by Anders Lybecker&quot;&gt;The nameof operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Awesome string formatting blog post by Anders Lybecker&quot;&gt;Awesome string formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Expression-bodied methods blog post by Anders Lybecker&quot;&gt;Expression-bodied methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Auto-property initializers blog post by Anders Lybecker&quot;&gt;Auto-property initializers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Initialize a Dictionary with index initializers (this one)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A small but still significant feature in C# 6 is index initializers. Index initializers can be sued to initialize object members, but also dictionaries. Initializing a dictionary has always be cumbersome, but not anymore.&lt;/p&gt;
&lt;pre&gt;
var numbers = new Dictionary&amp;lt;int, string&amp;gt;
{
  [7] = &amp;quot;seven&amp;quot;,
  [9] = &amp;quot;nine&amp;quot;,
  [13] = &amp;quot;thirteen&amp;quot;
};
&lt;/pre&gt;
&lt;p&gt;There are other great new features in C# that I have not touched – have a look at the blog post &lt;a rel=&quot;nofollow&quot; title=&quot;New features in C# 6 on MSDN Blogs&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/b/csharpfaq/archive/2014/11/20/new-features-in-c-6.aspx&quot;&gt;New features in C# 6&lt;/a&gt; by Mads Torgersen, Principal Program Manager, VS Managed Languages.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/8UIeAKGT4oA&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1274</guid>
         <pubDate>Mon, 19 Jan 2015 08:15:04 +0000</pubDate>
      </item>
      <item>
         <title>Auto-property initializers</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/mQCFILlpYac/</link>
         <description>&lt;p&gt;The next release of C# 6 has some amazing new features. In a series of blog posts I will cover some of them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Chained null checks blog post by Anders Lybecker&quot;&gt;Chained null checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;The nameof operator blog post by Anders Lybecker&quot;&gt;The nameof operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Awesome string formatting blog post by Anders Lybecker&quot;&gt;Awesome string formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Expression-bodied methods blog post by Anders Lybecker&quot;&gt;Expression-bodied methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Auto-property initializers (this one)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Initialize a Dictionary with index initializers blog post by Anders Lybecker&quot;&gt;Initialize a Dictionary with index initializers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;At first auto-property initializers does not sound very interesting at all, but wait…&lt;/p&gt;
&lt;p&gt;Simple things as setting a default value for a property.&lt;/p&gt;
&lt;pre&gt;
public class Order
{
  public int OrderNo { get; set; } = 1;
}
&lt;/pre&gt;
&lt;p&gt;Or using the getter-only auto-property which are implicit declared &lt;code&gt;readonly&lt;/code&gt; and can therefore be set in the constructor.&lt;/p&gt;
&lt;pre&gt;
public class Order
{
  public Order(int orderNo)
  {
    OrderNo = orderNo;
  }
  
  public int OrderNo { get; }
}
&lt;/pre&gt;
&lt;p&gt;From my point of view the value of auto-properties comes to shine when used with list properties where the list has to be initialized.&lt;/p&gt;
&lt;pre&gt;
public class Order
{
  public IEnumerable&amp;lt;OrderLine&amp;gt; Lines { get; } = new List&amp;lt;OrderLine&amp;gt;();
}
&lt;/pre&gt;
&lt;p&gt;I often forget to initialize a list property in the constructor and therefor get a &lt;code&gt;NullReferenceException&lt;/code&gt; when accessing the list property. Now I might even be able to omit the constructor all together.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/mQCFILlpYac&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1270</guid>
         <pubDate>Thu, 15 Jan 2015 08:12:15 +0000</pubDate>
      </item>
      <item>
         <title>Expression-bodied methods</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/mTSUtjQnB48/</link>
         <description>&lt;p&gt;The next release of C# 6 has some amazing new features. In a series of blog posts I will cover some of them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Chained null checks blog post by Anders Lybecker&quot;&gt;Chained null checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;The nameof operator blog post by Anders Lybecker&quot;&gt;The nameof operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Awesome string formatting blog post by Anders Lybecker&quot;&gt;Awesome string formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Expression-bodied methods (this one)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Auto-property initializers blog post by Anders Lybecker&quot;&gt;Auto-property initializers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Initialize a Dictionary with index initializers blog post by Anders Lybecker&quot;&gt;Initialize a Dictionary with index initializers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Expression-bodied methods make it possible for methods and properties to be used as expressions instead of statement blocks, just like lambda functions.&lt;/p&gt;
&lt;p&gt;Let’s revisit the &lt;code&gt;Person.ToString&lt;/code&gt; method in the &lt;a rel=&quot;nofollow&quot; title=&quot;Awesome string formatting blog post by Anders Lybecker&quot;&gt;Awesome string formatting&lt;/a&gt; blog post.&lt;/p&gt;
&lt;pre&gt;
public class Person
{
  public string Name { get; set; }

  public Address HomeAddress { get; set; }

  public override string ToString()
  {
    return string.Format(&amp;quot;{Name} lives in {HomeAddress?.City ?? &amp;quot;City unknown&amp;quot;}.&amp;quot;);
  }
}
&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;ToString&lt;/code&gt; method can be written as a lambda function.&lt;/p&gt;
&lt;pre&gt;
public override string ToString() =&amp;gt; string.Format(&amp;quot;{Name} lives in {HomeAddress?.City ?? &amp;quot;City unknown&amp;quot;}.&amp;quot;);
&lt;/pre&gt;
&lt;p&gt;And simplified with String interpolation.&lt;/p&gt;
&lt;pre&gt;
public override string ToString() =&amp;gt; $&amp;quot;{Name} lives in {HomeAddress?.City ?? &amp;quot;City unknown&amp;quot;}.
&lt;/pre&gt;
&lt;p&gt;Use expression-bodied methods anywhere…&lt;/p&gt;
&lt;pre&gt;
public Point Move(int dx, int dy) =&amp;gt; new Point(x + dx, y + dy);
public static Complex operator +(Complex a, Complex b) =&amp;gt; a.Add(b);
public static implicit operator string (Person p) =&amp;gt; &amp;quot;&amp;#92;{p.First} &amp;#92;{p.Last}&amp;quot;;
&lt;/pre&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/mTSUtjQnB48&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1266</guid>
         <pubDate>Tue, 13 Jan 2015 07:54:27 +0000</pubDate>
      </item>
      <item>
         <title>Awesome string formatting</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/DOT92Z999Uc/</link>
         <description>&lt;p&gt;The next release of C# 6 has some amazing new features. In a series of blog posts I will cover some of them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Chained null checks blog post by Anders Lybecker&quot;&gt;Chained null checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;The nameof operator blog post by Anders Lybecker&quot;&gt;The nameof operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Awesome string formatting (this one)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Expression-bodied methods blog post by Anders Lybecker&quot;&gt;Expression-bodied methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Auto-property initializers blog post by Anders Lybecker&quot;&gt;Auto-property initializers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Initialize a Dictionary with index initializers blog post by Anders Lybecker&quot;&gt;Initialize a Dictionary with index initializers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Using the versatile &lt;code&gt;string.Format&lt;/code&gt; required a lot of typing and keeping the numbed placeholders in sync with the method parameters.&lt;/p&gt;
&lt;pre&gt;
var numerator = 1;
var denominator = 2;

Console.WriteLine(&amp;quot;Fraction {0}/{1}&amp;quot;, numerator, denominator);

// Output:
//   Fraction 1/2
&lt;/pre&gt;
&lt;p&gt;In C# 6 is it a lot easier with String interpolation:&lt;/p&gt;
&lt;pre&gt;
var numerator = 1;
var denominator = 2;

Console.WriteLine(&amp;quot;Fraction {numerator}/{denominator}&amp;quot;);

// Output:
//   Fraction 1/2
&lt;/pre&gt;
&lt;p&gt;Referencing the variable, property or field directly within the string. It is even possible to access properties or use expressions.&lt;/p&gt;
&lt;pre&gt;
public class Person
{
  public string Name { get; set; }
  public Address HomeAddress { get; set; }

  public override string ToString()
  {
    return string.Format(&amp;quot;{Name} lives in {HomeAddress.City}.&amp;quot;);
  }
}
&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;string.Format&lt;/code&gt; is not event needed, but use the shorthand notation $.&lt;/p&gt;
&lt;pre&gt;
return $(&amp;quot;{Name} lives in {HomeAddress.City}.&amp;quot;;
&lt;/pre&gt;
&lt;p&gt;This is easily combinable with an expression and the &lt;a rel=&quot;nofollow&quot; title=&quot;Chained null checks blog post by Anders Lybecker&quot;&gt;null-conditional operator&lt;/a&gt; (&lt;strong&gt;?.&lt;/strong&gt;) operator.&lt;/p&gt;
&lt;pre&gt;
return $&amp;quot;{Name} lives in {HomeAddress?.City ?? &amp;quot;City unknown&amp;quot;}.&amp;quot;;
&lt;/pre&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/DOT92Z999Uc&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1262</guid>
         <pubDate>Fri, 09 Jan 2015 07:00:26 +0000</pubDate>
      </item>
      <item>
         <title>The nameof operator</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/88aJl0UJnuA/</link>
         <description>&lt;p&gt;The next release of C# 6 has some amazing new features. In a series of blog posts I will cover some of them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Chained null checks blog post by Anders Lybecker&quot;&gt;Chained null checks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;The nameof operator (this one)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Awesome string formatting blog post by Anders Lybecker&quot;&gt;Awesome string formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Expression-bodied methods blog post by Anders Lybecker&quot;&gt;Expression-bodied methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Auto-property initializers blog post by Anders Lybecker&quot;&gt;Auto-property initializers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Initialize a Dictionary with index initializers blog post by Anders Lybecker&quot;&gt;Initialize a Dictionary with index initializers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code&gt;nameof&lt;/code&gt; operator takes a class, method, property, field or variable and returns the string literal.&lt;/p&gt;
&lt;pre&gt;
var p = new Person();

Console.WriteLine(nameof(Person));
Console.WriteLine(nameof(p));
Console.WriteLine(nameof(Person.Name));
Console.WriteLine(nameof(Person.HomeAddress));

// Output:
//   Person
//   p
//   Name
//   HomeAddress
&lt;/pre&gt;
&lt;p&gt;This is handy when doing input validation by keeping the method parameter and the parameter name of the &lt;code&gt;ArgumentNullException&lt;/code&gt; in sync.&lt;/p&gt;
&lt;pre&gt;
public Point AddPoint(Point point)
{
  if (point == null)
    throw new ArgumentNullException(nameof(point));
}
&lt;/pre&gt;
&lt;p&gt;The &lt;code&gt;nameof&lt;/code&gt; operator is useful when implementing the &lt;code&gt;INotifyPropertyChanged&lt;/code&gt; interface&lt;/p&gt;
&lt;pre&gt;
public string Name
{
  get
  {
    return _name;
  }
  set
  {
    _name = value;
    this.OnPropertyChanged(nameof(Name));
  }
}
&lt;/pre&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; title=&quot;Chained null checks blog post by Anders Lybecker&quot;&gt;Chained null checks&lt;/a&gt; blog post shows how to simplify triggering event in the OnPropertyChanged with the null-conditional operator.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/88aJl0UJnuA&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1258</guid>
         <pubDate>Thu, 08 Jan 2015 07:37:44 +0000</pubDate>
      </item>
      <item>
         <title>Chained null checks</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/-lI2yzHeGEM/</link>
         <description>&lt;p&gt;The next release of C# 6 has some amazing new features. In a series of blog posts I will cover some of them.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chained null checks (this one)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;The nameof operator blog post by Anders Lybecker&quot;&gt;The nameof operator&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Awesome string formatting blog post by Anders Lybecker&quot;&gt;Awesome string formatting&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Expression-bodied methods blog post by Anders Lybecker&quot;&gt;Expression-bodied methods&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Auto-property initializers blog post by Anders Lybecker&quot;&gt;Auto-property initializers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Initialize a Dictionary with index initializers blog post by Anders Lybecker&quot;&gt;Initialize a Dictionary with index initializers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Null-conditional operators is one of the features in C# 6 that will save the world from a lot of boilerplate code and a bunch of &lt;code&gt;NullReferenceExceptions&lt;/code&gt;. It works as chained null checks!&lt;/p&gt;
&lt;pre&gt;
Console.WriteLine(person?.HomeAddress?.City ?? &amp;quot;City unknown&amp;quot;);
&lt;/pre&gt;
&lt;p&gt;Note the null-conditional operator (&lt;strong&gt;?.&lt;/strong&gt;) after &lt;code&gt;person&lt;/code&gt; and &lt;code&gt;HomeAddress&lt;/code&gt;, it returns null and terminates the object reference chain, if one of the references are null.&lt;/p&gt;
&lt;p&gt;It is the same logic as the below code that you can use today.&lt;/p&gt;
&lt;pre&gt;
if (person != null)
    person.HomeAddress != null)
{
  Console.WriteLine(person.HomeAddress.City);
}
else
{
  Console.WriteLine(&amp;quot;City unknown&amp;quot;);
}
&lt;/pre&gt;
&lt;p&gt;The null-conditional operator will also make it easier to trigger events. Today it is required to reference the event, check if it is null before raising the event like so.&lt;/p&gt;
&lt;pre&gt;
protected void OnPropertyChanged(string name)
{
  PropertyChangedEventHandler handler = PropertyChanged;

  if (handler != null)
  {
    handler(this, new PropertyChangedEventArgs(name));
  }
}
&lt;/pre&gt;
&lt;p&gt;But the null-conditional operator provides a tread-safe way of checking for null before triggering the event.&lt;/p&gt;
&lt;pre&gt;
PropertyChanged?.Invoke(this, args);
&lt;/pre&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/-lI2yzHeGEM&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1254</guid>
         <pubDate>Tue, 06 Jan 2015 07:36:55 +0000</pubDate>
      </item>
      <item>
         <title>AJAX paging for ASP.NET MVC sites</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/m5QZxa1K7IY/</link>
         <description>&lt;p&gt;When working with lists of data paging is a necessity, but trivial to implement in an ASP.NET MVC. The article &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/sorting-filtering-and-paging-with-the-entity-framework-in-an-asp-net-mvc-application&quot; title=&quot;Article on asp.net website&quot;&gt;Sorting, Filtering, and Paging with the Entity Framework in an ASP.NET MVC Application&lt;/a&gt; on &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.asp.net/&quot;&gt;www.asp.net&lt;/a&gt; makes use of the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;https://www.nuget.org/packages/PagedList.Mvc/&quot; title=&quot;PagedList.Mvc NuGet&quot;&gt;PackedList.MVC&lt;/a&gt; NuGet package and each step is described in detail. The implementation requires full-page refresh and does not make use of AJAX capabilities.&lt;/p&gt;
&lt;p&gt;Let us extend the implementation and make full use of the AJAX capabilities.&lt;/p&gt;
&lt;p&gt;Wrap the entire table in a div-tag and give it an id of &lt;em&gt;content&lt;/em&gt; – it will enable us to replace the table without refreshing the entire webpage.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;
    &amp;lt;table&amp;gt;
        ... removed for brevity
    &amp;lt;/table&amp;gt;

    &amp;lt;div id=&amp;quot;contentPager&amp;quot;&amp;gt;
        @Html.PagedListPager(Model, page =&amp;gt; Url.Action(&amp;quot;Index&amp;quot;, new { page }))
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Also wrap the &lt;code&gt;@Html.PagedListPager&lt;/code&gt; in a div-tag and set the id to &lt;em&gt;contentPager&lt;/em&gt; – it will let us alter the behavior of the click-event.&lt;/p&gt;
&lt;p&gt;The below JQuery code attaches the anonymous function to every a-tag within the &lt;em&gt;contentPager&lt;/em&gt; element and the function replaces the html within the &lt;em&gt;content&lt;/em&gt; element with whatever is returned from the AJAX call.&lt;/p&gt;
&lt;pre&gt;
$(document).on(&amp;quot;click&amp;quot;, &amp;quot;#contentPager a&amp;quot;, function () {
    $.ajax({
        url: $(this).attr(&amp;quot;href&amp;quot;),
        type: 'GET',
        cache: false,
        success: function (result) {
            $('#content').html(result);
        }
    });
    return false;
});
&lt;/pre&gt;
&lt;p&gt;Move everything within the &lt;em&gt;content&lt;/em&gt; element to a new view – let us call the new view &lt;em&gt;List&lt;/em&gt;.&lt;/p&gt;
&lt;pre&gt;
@model PagedList.IPagedList&amp;lt;ContosoUniversity.Models.Student&amp;gt;
@using PagedList.Mvc;

&amp;lt;div id=&amp;quot;content&amp;quot;&amp;gt;
    &amp;lt;table class=&amp;quot;table&amp;quot;&amp;gt;
      ... removed for brevity
    &amp;lt;/table&amp;gt;

    &amp;lt;div id=&amp;quot;contentPager&amp;quot;&amp;gt;
        @Html.PagedListPager(Model, page =&amp;gt; Url.Action(&amp;quot;List&amp;quot;, new { page }))
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Notice in above highlighted code, that the Action URL is changed to &lt;em&gt;List&lt;/em&gt;, which is the name of the Action we need to add to the &lt;code&gt;StudentController&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;
public ActionResult List(int? page)
{
    var students = from s in db.Students
                    orderby s.LastName
                    select s;

    int pageSize = 3;
    int pageNumber = (page ?? 1);
    return View(students.ToPagedList(pageNumber, pageSize));
}
&lt;/pre&gt;
&lt;p&gt;The functionality of the new &lt;em&gt;List&lt;/em&gt; Action is the same as in the existing &lt;em&gt;Index&lt;/em&gt; Action. Just move all the code from the &lt;em&gt;Index&lt;/em&gt; Action, so it just returns the default view as below.&lt;/p&gt;
&lt;pre&gt;
public ViewResult Index()
{
    return View();
}
&lt;/pre&gt;
&lt;p&gt;To wrap it up, the &lt;em&gt;Index&lt;/em&gt; view needs to call the &lt;em&gt;List&lt;/em&gt; Action to render the table in the &lt;em&gt;Index&lt;/em&gt; view.&lt;/p&gt;
&lt;p&gt;So the &lt;em&gt;Index&lt;/em&gt; view ends up looking like this.&lt;/p&gt;
&lt;pre&gt;
&amp;lt;link href=&amp;quot;~/Content/PagedList.css&amp;quot; rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; /&amp;gt;
@{
    ViewBag.Title = &amp;quot;Students&amp;quot;;
}
&amp;lt;h2&amp;gt;Students&amp;lt;/h2&amp;gt;

@Html.Action(&amp;quot;List&amp;quot;)

@section scripts
{
    &amp;lt;script language=&amp;quot;javascript&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;
        $(document).ready(function () {
            $(document).on(&amp;quot;click&amp;quot;, &amp;quot;#contentPager a[href]&amp;quot;, function () {
                $.ajax({
                    url: $(this).attr(&amp;quot;href&amp;quot;),
                    type: 'GET',
                    cache: false,
                    success: function (result) {
                        $('#content').html(result);
                    }
                });
                return false;
            });
        });
    &amp;lt;/script&amp;gt;
}
&lt;/pre&gt;
&lt;p&gt;That is it.&lt;/p&gt;
&lt;p&gt;The solution is inspired by &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://stackoverflow.com/questions/18822352/using-paging-in-partial-view-asp-net-mvc&quot;&gt;this StackOverflow question&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;Download the complete solution&lt;/a&gt;, build and open the Student page.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/m5QZxa1K7IY&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1204</guid>
         <pubDate>Mon, 29 Sep 2014 10:33:12 +0000</pubDate>
      </item>
      <item>
         <title>Clean Domain Model via MongoDB Class Map</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/CZSUu6dxvoA/</link>
         <description>&lt;p&gt;You can get rid of the dependency from the domain model to MongoDB assemblies, by utilizing &lt;a rel=&quot;nofollow&quot; title=&quot;Class Map MongoDB Documentation&quot; target=&quot;_blank&quot; href=&quot;http://docs.mongodb.org/ecosystem/tutorial/serialize-documents-with-the-csharp-driver/#creating-a-class-map&quot;&gt;Class Map&lt;/a&gt; functionality of the &lt;a rel=&quot;nofollow&quot; title=&quot;The Official MongoDB C# Driver on NuGet&quot; target=&quot;_blank&quot; href=&quot;https://www.nuget.org/packages/mongocsharpdriver&quot;&gt;Official MongoDB C# Driver&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It is simple to use the property mapping, but you can also use AutoMap combined with one or more overriding mappings. That is often useful when using the MongoDB IdGenerators. However, how do you specify which to use without using attributes?&lt;/p&gt;
&lt;p&gt;Below is a simple class with no dependencies – only dependent on the .NET Base Class Library:&lt;/p&gt;
&lt;pre&gt;
public class Person
{
  public string Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}
&lt;/pre&gt;
&lt;p&gt;Notice that not event an ObjecId is present.&lt;br /&gt;
To instruct MongoDB to generate a unique identifier for the Id property:&lt;/p&gt;
&lt;pre&gt;
public class Person
{
  [BsonId]
  public string Id { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
}
&lt;/pre&gt;
&lt;p&gt;But now there is a dependency on the BSonId attribute. We can remove it via a Class Map:&lt;/p&gt;
&lt;pre&gt;
BsonClassMap.RegisterClassMap(cm =&amp;gt;
            {
                cm.AutoMap();
                cm.SetIdMember(cm.GetMemberMap(x =&amp;gt; x.Id)
                  .SetIdGenerator(StringObjectIdGenerator.Instance));
            });
&lt;/pre&gt;
&lt;p&gt;It is possible to use other data types as unique identifiers; just choose the correspond &lt;a rel=&quot;nofollow&quot; title=&quot;IdGenerators MongoDB Documentation&quot; target=&quot;_blank&quot; href=&quot;http://docs.mongodb.org/ecosystem/tutorial/serialize-documents-with-the-csharp-driver/#selecting-an-idgenerator-to-use-for-an-id-field-or-property&quot;&gt;IdGenerator&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/CZSUu6dxvoA&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1190</guid>
         <pubDate>Mon, 30 Jun 2014 00:00:24 +0000</pubDate>
      </item>
      <item>
         <title>MongoDB auto-increment or sequence</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/FwgweaQC-Vo/</link>
         <description>&lt;p&gt;MongoDB is a document database that does not have auto-increment or sequence functionality build-in, like e.g. SQL Server. Auto-increment or sequence numbers are often used to create a consecutive sequence of numbers used as order or invoice identifiers.&lt;/p&gt;
&lt;p&gt;This is simple to achieve with MongoDB via the atomic operation &lt;a rel=&quot;nofollow&quot; title=&quot;MongoDB $inc operation documentation&quot; target=&quot;_blank&quot; href=&quot;http://docs.mongodb.org/manual/reference/operator/update/inc/&quot;&gt;$inc&lt;/a&gt;. If you use the &lt;a rel=&quot;nofollow&quot; title=&quot;Official MongoDB C# Driver on NuGet&quot; target=&quot;_blank&quot; href=&quot;https://www.nuget.org/packages/mongocsharpdriver&quot;&gt;Official MongoDB C# Driver&lt;/a&gt; the operation is exposed via the Update class.&lt;/p&gt;
&lt;p&gt;To implement auto-increment or sequence functionality with MongoDB a document is required to keep the state of the sequence. The Id is the natural name of the sequence e.g. orderid and the value is the current counter value.&lt;/p&gt;
&lt;pre&gt;
class Counter
{
  public string Id { get; set; }
  public int Value { get; set; }
}
&lt;/pre&gt;
&lt;p&gt;Then getting the next ordered is done by executing the below statement:&lt;/p&gt;
&lt;pre&gt;
var client = new MongoClient(connectionString);
MongoServer server = client.GetServer();
MongoDatabase db = server.GetDatabase(&amp;quot;myDatabase&amp;quot;);
var counterCol = db.GetCollection(&amp;quot;counters&amp;quot;)

var result = counterCol.FindAndModify(new FindAndModifyArgs()
{
  Query = Query.EQ(d =&amp;gt; d.Id, &amp;quot;orderId&amp;quot;),
  Update = Update.Inc(d =&amp;gt; d.Value, 1),
  VersionReturned = FindAndModifyDocumentVersion.Modified,
  Upsert = true, //Create if the document does not exists
});
&lt;/pre&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/FwgweaQC-Vo&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1180</guid>
         <pubDate>Fri, 27 Jun 2014 15:17:58 +0000</pubDate>
      </item>
      <item>
         <title>I am an expert</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/_W5eurrh7ck/</link>
         <description>&lt;p&gt;&lt;br /&gt;
I have been in many meetings as the expert. Especially in pre-sales meetings this scenario is in play. The video is a bit long, but so true and funny &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/_W5eurrh7ck&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1173</guid>
         <pubDate>Wed, 02 Apr 2014 14:53:58 +0000</pubDate>
      </item>
      <item>
         <title>I am a Softie</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/kP_0tyKhvB4/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/microsoft-logo.jpg&quot;&gt;&lt;img class=&quot; wp-image-1147 alignright&quot; alt=&quot;Microsoft logo&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/microsoft-logo-150x150.jpg&quot; width=&quot;100&quot; height=&quot;100&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Softie is internal slang for Microsoft employee.&lt;/p&gt;
&lt;p&gt;For a couple of years I have had my own company &lt;a rel=&quot;nofollow&quot; title=&quot;Avior company website&quot; target=&quot;_blank&quot; href=&quot;http://avior.dk&quot;&gt;Avior&lt;/a&gt; together with my partner. We had fun times and difficult times, but we did what we loved – developed software. Late September I started talking with Microsoft Denmark about the position as technical evangelist. At first I was reluctant as I was afraid to lose my technical competence and leaving my own company, but I was intrigued. I finally agreed to leave Avior and join Microsoft after a couple of conversations with current and previously Microsoft employees – they all spoke fondly about Microsoft – if I could cope with the politics and ceremony.&lt;/p&gt;
&lt;h2&gt;What is the job of a technical evangelist?&lt;/h2&gt;
&lt;p&gt;An evangelist advocates the &lt;a rel=&quot;nofollow&quot; title=&quot;Evangelium description on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Evangelium&quot;&gt;evangelium&lt;/a&gt;, which means ‘good news’. All Latin, nothing religious – but in my case just technical &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;It is about connecting people who have problems with a product, technology and knowledge needed in order for them to succeed. In my mind, it is all about authentic content, communication, and community. I wish to spread knowledge and help other developers while keeping my integrity.&lt;/p&gt;
&lt;h2&gt;Current status&lt;/h2&gt;
&lt;p&gt;Now 3 months in, I find myself at home at Microsoft, but I still feel like a n00b. There are so many people and internal processes that I need to familiarize myself with that I sometimes feel dizzy and do not feel that I am contributing enough.&lt;/p&gt;
&lt;h2&gt;Challenges&lt;/h2&gt;
&lt;p&gt;I am catching up on the Windows 8, Windows Phone 8 and Azure – which is the new stuff at Microsoft. It is a lot of ground to cover, so I do no longer fear for my technical competencies as I am spending much time studying and helping customers with technical issues.&lt;/p&gt;
&lt;p&gt;I wish to engage the community more in the New Year, so I am busy planning talks and the Danish Developer Conference.&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;line-height:1.5em;&quot;&gt;One request for you – let me know how I am doing, please.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Merry Christmas and happy New Year.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/kP_0tyKhvB4&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1138</guid>
         <pubDate>Tue, 24 Dec 2013 16:00:57 +0000</pubDate>
      </item>
      <item>
         <title>Instrumentation presentation at Campus Days 2013</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/nDG1tj74zz0/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/ccdk13_Logo.png&quot;&gt;&lt;img class=&quot;alignright size-thumbnail wp-image-1122&quot; alt=&quot;Campus Days 2013 logo&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/ccdk13_Logo-150x150.png&quot; width=&quot;150&quot; height=&quot;150&quot;/&gt;&lt;/a&gt;I was fun to present today at &lt;a rel=&quot;nofollow&quot; title=&quot;Campus Days web site&quot; target=&quot;_blank&quot; href=&quot;http://www.campusdays.dk&quot;&gt;Campus Days 2013&lt;/a&gt; in Copenhagen, Denmark. The talk was about how to instrument software by using frameworks like &lt;a rel=&quot;nofollow&quot; title=&quot;TraceSource documentation on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.diagnostics.tracesource.aspx&quot;&gt;TraceSource&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; title=&quot;EventSource documentation on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.diagnostics.tracing.eventsource.aspx&quot;&gt;EventSource&lt;/a&gt;, Event Tracing for Windows and how to perform post-mortem debugging via Visual Studio and &lt;a rel=&quot;nofollow&quot; title=&quot;Download PerView&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/en-us/download/details.aspx?id=28567&quot;&gt;PerfView&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Instrumentation slides&quot; target=&quot;_blank&quot; href=&quot;http://www.slideshare.net/Lybecker/campus-days-2013-instrumentering&quot;&gt;Slides&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/CCDK13_Instrumentation_SourceDoe.zip&quot;&gt;CCDK13 Instrumentation Source Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Instrumentation session recording at Campus Days 2013 in Danish&quot; target=&quot;_blank&quot; href=&quot;http://channel9.msdn.com/Events/Microsoft-Campus-Days/Microsoft-Campus-Days-2013/Logging-tracing-instrumentering-debugging-og-fejlfinding&quot;&gt;Recorded Session&lt;/a&gt; (in Danish)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here is a great resource for &lt;a rel=&quot;nofollow&quot; title=&quot;Enabling Diagnostics in Windows Azure&quot; target=&quot;_blank&quot; href=&quot;https://www.windowsazure.com/en-us/develop/net/common-tasks/diagnostics/&quot;&gt;enabling diagnostics in Azure&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/nDG1tj74zz0&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1121</guid>
         <pubDate>Thu, 10 Oct 2013 15:38:22 +0000</pubDate>
      </item>
      <item>
         <title>Automatic Retry and Circuit Breaker made easy</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/Ib7Jvcpc648/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Polly.png&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-1101&quot; alt=&quot;Polly library logo&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Polly.png&quot;/&gt;&lt;/a&gt;If you do not know &lt;a rel=&quot;nofollow&quot; title=&quot;Polly source repository and documentation&quot; target=&quot;_blank&quot; href=&quot;https://github.com/michael-wolfenden/Polly&quot;&gt;Polly&lt;/a&gt;, you are missing out! I did not know about it until a couple of days ago and you properly never heard about it either, as this wonderful little library only has 63 downloads on &lt;a rel=&quot;nofollow&quot; title=&quot;Polly at NuGet.org&quot; target=&quot;_blank&quot; href=&quot;https://www.nuget.org/packages/Polly/&quot;&gt;NuGet&lt;/a&gt; at the time of writing.&lt;/p&gt;
&lt;p&gt;Polly is an easy to use retry and &lt;a rel=&quot;nofollow&quot; title=&quot;Circuit breaker design pattern on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Circuit_breaker_design_pattern&quot;&gt;circuit breaker pattern&lt;/a&gt; implementation for .Net – let me show you.&lt;br /&gt;
Start by specifying the policy – what should happen when an exception thrown:&lt;/p&gt;
&lt;pre&gt;
  var policy = Policy
    .Handle&amp;lt;SqlException(e =&amp;gt; e.Number == 1205) // Handling deadlock victim
    .Or&amp;lt;OtherException&amp;gt;()
    .Retry(3, (exception, retyCount, context) =&amp;gt;
    {
      // Log...
    });
&lt;/pre&gt;
&lt;p&gt;The above policy specifies a SqlExeption with number 1205 or OtherException should be retried three times – if it still fails log and bobble the original exception up the call stack.&lt;/p&gt;
&lt;pre&gt;
  var result = policy.Execute(() =&amp;gt; FetchData(p1, p2));
&lt;/pre&gt;
&lt;p&gt;It is also possible to specify the time between retries – e.g. exponential back off:&lt;/p&gt;
&lt;pre&gt;
  var policy = Policy
    .Handle&amp;lt;MyException&amp;gt;()
    .WaitAndRetry(5, retryAttempt =&amp;gt;
      TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)
    );
&lt;/pre&gt;
&lt;p&gt;Or the circuit breaker safeguarding against the same error occurs again and again if an external system is temporarily unavailable:&lt;/p&gt;
&lt;pre&gt;
  var policy = Policy
    .Handle&amp;lt;TimeoutException&amp;gt;()
    .CircuitBreaker(2, TimeSpan.FromMinutes(1));
&lt;/pre&gt;
&lt;p&gt;Go get it – I’m already using it &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/Ib7Jvcpc648&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1100</guid>
         <pubDate>Wed, 07 Aug 2013 19:54:09 +0000</pubDate>
      </item>
      <item>
         <title>Accessing HTTP Request from ASP.NET Web API</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/J7PwYTUKenE/</link>
         <description>&lt;p&gt;Do you need access to the bare HTTP request in ASP.NET Web API to access custom header etc.? Then add the HttpRequestMessage:&lt;/p&gt;
&lt;pre&gt;
public class CalculatorController : ApiController
{
  public int Add(HttpRequestMessage requestMessage, int x, int y)
  {
    var accessToken = requestMessage.Headers.Authorization.Parameter;
    // use the HTTP header

    return x + y;
  }
}
&lt;/pre&gt;
&lt;p&gt;The HttpRequestMessage is automatically bound to the controller action, so you can still execute the action like http://localhost/calculator/add?x=3&amp;amp;y=2&lt;/p&gt;
&lt;p&gt;Simple and easy.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/J7PwYTUKenE&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1093</guid>
         <pubDate>Wed, 26 Jun 2013 15:33:33 +0000</pubDate>
      </item>
      <item>
         <title>GOTO Aarhus 2012 – Tuesday</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/usTlJq0863w/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/typescript-preview.png&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-1077&quot; title=&quot;typescript-preview&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/typescript-preview.png&quot; alt=&quot;&quot; width=&quot;275&quot; height=&quot;100&quot;/&gt;&lt;/a&gt;The morning keynote by &lt;a rel=&quot;nofollow&quot;&gt;Scott Hanselman&lt;/a&gt; was about the true power of JavaScript. He argued that JavaScript in the browser is a full operating system running as a virtual machine within the browser – so we should treat it so. Don’t use Java Applets, Flash, Flex or Silverlight as it just another (slow) abstraction upon an already powerfull engine – the browser. It was a great talk leading up to the pre-release of &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I followed a couple of sessions the continuous delivery by &lt;a rel=&quot;nofollow&quot;&gt;Sam Newman&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot;&gt;Michael T. Nygard&lt;/a&gt; (author of Release It) and &lt;a rel=&quot;nofollow&quot;&gt;Jez Humble&lt;/a&gt; (author of Continuous Delivery).&lt;br /&gt;
Continuous Integration is a prerequisite of Continuous Delivery, but many still don’t use apply Continuous Integration to their solution, with daily incremental check-ins, automated build and unit tests.&lt;/p&gt;
&lt;p&gt;To simplify Continuous Delivery, everything must be automated. To ease the task of automation, things must be simplified. To simplify, start by decomposing the system into manageable pieces, so each can be deployed separately. How?&lt;br /&gt;
Decompose the system into disconnected services makes it easier to deploy a subset of the system. This limits the impact of a deployment. It even makes it possible to mitigate the risk further by making small incremental changes by only deploying one subsystem at the time.&lt;/p&gt;
&lt;p&gt;These services have to be structured as application silos and share nothing, not even the database schema.&lt;/p&gt;
&lt;p&gt;By automating and decomposing your system into disconnected application silo services you too can do Continuous Delivery.&lt;br /&gt;
After the conference the GOTO Aarhus guys had joint up with the local community and user groups to hos open sessions. I attended the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.anug.dk/&quot;&gt;ANUG&lt;/a&gt; (Aarhus .NET User Group) session with Anders Hejlsberg. He presented the brand new &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.typescriptlang.org/&quot;&gt;TypeScript&lt;/a&gt; – a superset of JavaScript that compiles into plain JavaScript and runs in any browser (similar concept as &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://coffeescript.org/&quot;&gt;CoffeeScript&lt;/a&gt;). It has great tooling support in Visual Studio with intelliSense and static verification.&lt;/p&gt;
&lt;p&gt;I’m looking forward to the last day of the conference tomorrow.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/usTlJq0863w&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1074</guid>
         <pubDate>Tue, 02 Oct 2012 19:02:46 +0000</pubDate>
      </item>
      <item>
         <title>GOTO Aarhus 2012 – Monday</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/r8v1PVRskSU/</link>
         <description>&lt;p&gt;The day started with a keynote from &lt;a rel=&quot;nofollow&quot; title=&quot;Falkvinge Twitter profile&quot; target=&quot;_blank&quot; href=&quot;http://twitter.com/Falkvinge&quot;&gt;@Falkvinge &lt;/a&gt;from the &lt;a rel=&quot;nofollow&quot; title=&quot;The Pirate Party website&quot; target=&quot;_blank&quot; href=&quot;http://www.piratpartiet.se/international/english&quot;&gt;Pirate Party&lt;/a&gt;. I wasn’t expecting much from this keynote, but I was pleasantly surprised. First of all, I assumed that I knew quite a bit about the Pirate Party – I was wrong! Facts: the Pirate Party is present in 150 countries and has 2 European Union parliament members. These guys are serious and not just a protest party wanting to legalize sharing copyrighted material. They are fighting the problems with limiting access to knowledge and ideas. They are emphasizing that exclusive right like patents, copyright and subsidizing are counterproductive. That’s so true! @Falkvinge disrupted my brain – that’s great, because that is why I’m here!&lt;/p&gt;
&lt;p&gt;Next up was great presentation of graph databases by Jim Webber &amp;#8211; fast speaking provocative British architect from &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://neo4j.org/&quot;&gt;Neo4J&lt;/a&gt;. He (re)spiked my interest in ‘other’ databases and stressed that each type of database like relational, object, key-value stores, document,  graph etc. databases each fit their problem domain. So you shouldn’t just pick RavenDB because it is the new hot think in .Net sphere (or because Ayende aka Oren Eini says so). I will definitely take a look Net4J with the .Net client library &lt;a rel=&quot;nofollow&quot; title=&quot;Neo4jClient on NuGet&quot; target=&quot;_blank&quot; href=&quot;http://nuget.org/packages/Neo4jClient&quot;&gt;Neo4jClient &lt;/a&gt;. Another great point from Jim Webber was; ACID does scale (though many claims otherwise), but he stressed it was distributed ACID with 2PC that doesn’t scale.&lt;/p&gt;
&lt;p&gt;From then on I attended a couple of unfortunate sessions (not worth mentioning). Now it is time for the conference party where the beer is sponsored by &lt;a rel=&quot;nofollow&quot; title=&quot;Atlassian website&quot; target=&quot;_blank&quot; href=&quot;http://www.atlassian.com/&quot;&gt;Atlassian&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/r8v1PVRskSU&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1068</guid>
         <pubDate>Mon, 01 Oct 2012 15:20:37 +0000</pubDate>
      </item>
      <item>
         <title>GOTO Aarhus 2012 Schedule</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/KrwSkTgqz28/</link>
         <description>&lt;p&gt;Soon I&amp;#8217;ll be joining a bunch of great people from the Danish developer community and abroad at this year &lt;a rel=&quot;nofollow&quot; title=&quot;GotoAar 2012 website&quot; target=&quot;_blank&quot; href=&quot;http://gotocon.com/aarhus-2012/&quot;&gt;GOTO Conference in Aarhus&lt;/a&gt; next week.&lt;/p&gt;
&lt;p&gt;I&amp;#8217;ve been looking at the &lt;a rel=&quot;nofollow&quot; title=&quot;GotoAar 2012 conference schedule&quot; target=&quot;_blank&quot; href=&quot;http://gotocon.com/aarhus-2012/schedule/&quot;&gt;conference schedule&lt;/a&gt; trying to create my schedule… the line-up of international fame speakers are impressive, but I&amp;#8217;ll go for the odd sessions to expand my horizon. During breaks I’ll discuss and share ideas with my fellow attendees – I might even skip sessions for interesting discussions in the hallways.&lt;/p&gt;
&lt;p&gt;Here is my tentative schedule:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monday I&amp;#8217;ll attend “&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://gotocon.com/aarhus-2012/presentation/What%20is%20value?&quot;&gt;What is value?&lt;/a&gt;” and “&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://gotocon.com/aarhus-2012/presentation/Management%20Myths:%20are%20we%20getting%20any%20better%20at%20this?&quot;&gt;Management Myths: are we getting any better at this?&lt;/a&gt;” to expand my software engineering and project management skillset.&lt;/li&gt;
&lt;li&gt;Tuesday I&amp;#8217;ll look at the Biiiig Data tracks and attend &amp;#8220;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://gotocon.com/aarhus-2012/presentation/Building%20secured,%20scalable,%20low-latency%20web%20applications%20with%20the%20Windows%20Azure%20Platform&quot;&gt;Building secured, scalable, low-latency web applications with the Windows Azure Platform&lt;/a&gt;&amp;#8221; and &amp;#8220;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://gotocon.com/aarhus-2012/presentation/Runaway%20complexity%20in%20Big%20Data%20systems...%20and%20a%20plan%20to%20stop%20it&quot;&gt;Runaway complexity in Big Data systems&amp;#8230; and a plan to stop it&lt;/a&gt;&amp;#8220;. Hopefully I’ll be inspired how to handle the 1TB size systems; I’m working on.&lt;/li&gt;
&lt;li&gt;Wednesday I&amp;#8217;ll attend the “&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://gotocon.com/aarhus-2012/presentation/Professional%20Productivity%20-%20Part%201&quot;&gt;Professional Productivity&lt;/a&gt;” sessions – yep… I hope to become twice as productive &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/KrwSkTgqz28&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1062</guid>
         <pubDate>Thu, 27 Sep 2012 18:41:13 +0000</pubDate>
      </item>
      <item>
         <title>See you at GOTO Aarhus 2012?</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/cmlQs3TsL28/</link>
         <description>&lt;p&gt;Are you going to &lt;a rel=&quot;nofollow&quot; title=&quot;GOTO Aarhus 2012 conference homepage&quot; target=&quot;_blank&quot; href=&quot;http://gotocon.com/aarhus-2012/&quot;&gt;GOTO Aarhus 2012&lt;/a&gt; conference October 1-3 in Aarhus, Denmark?&lt;/p&gt;
&lt;p&gt;The conference is covers diverse software development topics like big data, augmented data, agile perspectives, JavaScript, UX, continuous delivery, mobile, cloud, languages, NoSQL, scale … so this is not a vendor specific conference where the newest technology is presented.&lt;/p&gt;
&lt;p&gt;I prefer conferences where I get inspired… a conference where all the participants; speakers and fellow participants plant seeds in my head for new ideas and alternative approaches to solving problems.&lt;/p&gt;
&lt;p&gt;That’s why I’m going to the GOTO Aarhus conference.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/cmlQs3TsL28&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1053</guid>
         <pubDate>Tue, 28 Aug 2012 20:03:28 +0000</pubDate>
      </item>
      <item>
         <title>Blog post from 10000 meters in the Air</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/1MEZUJv4Jmw/</link>
         <description>&lt;p&gt;While writing and posting this post I&amp;#8217;m currently flying from Copenhagen, Denmark to London, United Kingdom over the North Sea with &lt;a rel=&quot;nofollow&quot; title=&quot;The airline carrier Norwegians' homepage&quot; target=&quot;_blank&quot; href=&quot;http://www.norwegian.com/&quot;&gt;Norwegian&lt;/a&gt; airlines using the free online Wi-Fi connection onboard. The Internet connection is slow, but that&amp;#8217;s expected as the traffic is routed through satellites and the fact that I share the connection with the 250 or so other passengers; all trying to access Facebook &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;A ping request to Google.com show that a roundtrip takes around 800 ms with some fluctuations into the 1200 ms&lt;/p&gt;
&lt;p&gt;Pinging google.com [173.194.70.113] with 32 bytes of data:&lt;br /&gt; Reply from 173.194.70.113: bytes=32 time=681ms TTL=43&lt;br /&gt; Reply from 173.194.70.113: bytes=32 time=869ms TTL=43&lt;br /&gt; Reply from 173.194.70.113: bytes=32 time=705ms TTL=43&lt;br /&gt; Reply from 173.194.70.113: bytes=32 time=750ms TTL=43&lt;/p&gt;
&lt;p&gt;An Internet connection speed test reveals my upload was around 400 Kbit/s download and 15 Kbit/s upload.&lt;/p&gt;
&lt;p&gt;A trace route didn&amp;#8217;t disclose much information; therefore not included in this blog post.&lt;/p&gt;
&lt;p&gt;The Internet connection is very unreliable making it impossible to work, but IM and light sites are browsable. Internet on a flight is a welcome initiative making it more pleasant to fly.&lt;/p&gt;
&lt;p&gt;I just hope the competitors will do the same and the quality of the connection will improve.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/1MEZUJv4Jmw&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1047</guid>
         <pubDate>Thu, 21 Jun 2012 18:58:09 +0000</pubDate>
      </item>
      <item>
         <title>Community Day Copenhagen 2012 – Solr Presentation</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/JU1xd_kfkQU/</link>
         <description>&lt;p&gt;&lt;img class=&quot;aligncenter size-full wp-image-1035&quot; title=&quot;Community Day Logo&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/CommunityDayLogo.jpg&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;I enjoyed the Community Day immensely and I am looking forward to next year.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot;&gt;Download the presentation together with the C# client, jQuery web client and Solr configuration files&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://lucene.apache.org/solr/&quot;&gt;Download Solr&lt;/a&gt; separately from Apache Foundation.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/JU1xd_kfkQU&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1034</guid>
         <pubDate>Fri, 11 May 2012 09:21:07 +0000</pubDate>
      </item>
      <item>
         <title>Outsourcing requires Talent</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/Cs-gHl6R2Rs/</link>
         <description>&lt;p&gt;&lt;img class=&quot;alignright size-full wp-image-1018&quot; title=&quot;Where are the jobs?&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/offshoring.jpg&quot; alt=&quot;&quot; width=&quot;200&quot; height=&quot;150&quot;/&gt;&lt;em&gt;I’ll be discussing specifically in the context of &lt;a rel=&quot;nofollow&quot; title=&quot;Knowledge worker on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Knowledge_worker&quot;&gt;knowledge workers&lt;/a&gt; who “think for a living” such as software developers, lawyers, business analysts and the likes. I will use software developers as an example, but it applies to other knowledge workers too.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;You might have success outsourcing if you find talent, but you will fail without!&lt;/p&gt;
&lt;p&gt;Businesses neglect the importance of finding skilled and talented software developers when outsourcing, which will almost certainly lead to problems or failure in the long run.&lt;/p&gt;
&lt;p&gt;It doesn’t matter if it is a project or IT services being outsourced – the people in the other end have to have skills and preferably talent.&lt;/p&gt;
&lt;p&gt;Obtaining a degree or completing a certification does not proof that a person has skills. Just as managers never will employ a developer based on resume only, neither should outsourced developers. The business should setup quality parameters in the outsourcing contract or interview the developers themselves – but that is rarely feasible.&lt;/p&gt;
&lt;p&gt;There are other essential parameters that should not be neglected like creativity, motivation and talent nurturing. All the regular personal management things needed, also applies for outsourcing.&lt;/p&gt;
&lt;p&gt;Offshoring to low-cost countries just complicates things even further… as you have to consider the language barrier, culture differences and time zones also.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/Cs-gHl6R2Rs&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1022</guid>
         <pubDate>Wed, 29 Feb 2012 21:10:36 +0000</pubDate>
      </item>
      <item>
         <title>When to Outsource?</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/HKKcRzmOJds/</link>
         <description>&lt;p&gt;&lt;img class=&quot;alignright size-full wp-image-1018&quot; title=&quot;Where are the jobs?&quot; alt=&quot;&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/offshoring.jpg&quot; width=&quot;200&quot; height=&quot;150&quot;/&gt;&lt;em&gt;I’ll be discussing specifically in the context of &lt;a rel=&quot;nofollow&quot; title=&quot;Knowledge worker on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Knowledge_worker&quot;&gt;knowledge workers&lt;/a&gt; who “think for a living” such as software developers, lawyers, business analysts and the likes. I will use software developers as an example, but it applies to other knowledge workers too.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Outsourcing software development can be a good thing for the business, especially if the area is not within the business’s main area of expertise or requiring too few developers to gather enough brain trust to keep the level of expertise.&lt;/p&gt;
&lt;p&gt;If software development is not within the business area of expertise then the area will often be neglected leading to low morale and lack of commitment. It is not seen as an important part of the business, but necessary evil. The developers will not have the best tools possible or access to new knowledge like inspiration at conferences. This is a downwards spiral of developer skills and will lead to failure eventually.&lt;/p&gt;
&lt;p&gt;If the business only has a small number of developers with similar skillset, then the ability to share knowledge is impaired. Developers that have no one or less than a handful of coworkers to share knowledge with, will almost never be very skilled. Knowledge workers require peers to stay knowledgeable.&lt;/p&gt;
&lt;p&gt;If both scenarios above are combined, then the problems become very evident and will never lead to success.&lt;/p&gt;
&lt;p&gt;In either case outsourcing makes sense and will in most cases provide business value.&lt;/p&gt;
&lt;h3&gt;Offshoring&lt;/h3&gt;
&lt;p&gt;Outsourcing to low-cost countries aka offshoring complicates things even further and should not be considered before thorough scrutiny of your business.  Does the business employ the required competency, are the procedures in place and is the organization mature enough?&lt;br /&gt;
Due to the magnitude required by preliminary analysis, offshoring only makes economic sense for larger scale operations and is not viable for smaller businesses.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Update Feb 28. 2013: &lt;/em&gt;A great blog post &lt;a rel=&quot;nofollow&quot; title=&quot;Is Offshoring Less Expensive? Exposing Another Management Myth&quot; target=&quot;_blank&quot; href=&quot;http://www.jrothman.com/blog/mpd/2013/09/is-offshoring-less-expensing-exposing-another-management-myth.html&quot;&gt;Is Offshoring Less Expensive? Exposing Another Management Myth&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/HKKcRzmOJds&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=1010</guid>
         <pubDate>Tue, 28 Feb 2012 19:27:29 +0000</pubDate>
      </item>
      <item>
         <title>Memory Management in .Net</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/FC7WBBkbMkk/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/learning-memory-management/resources/GCPoster.pdf&quot;&gt;&lt;/a&gt;I’ve written about &lt;a rel=&quot;nofollow&quot; title=&quot;Garbage Collection flavors in .Net 2.0 and 3.0&quot;&gt;Garbage Collection in the .Net Framework in version 2.0 and 3.0 a couple of years ago&lt;/a&gt;, but now Red Gate has created a simple and easy to understand funny comic &amp;#8220;Memory Management in .Net&amp;#8221;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/learning-memory-management/resources/GCPoster.pdf&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-997&quot; title=&quot;Memory Management in .Net comic&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/MemoryManagementInDotNet.png&quot; alt=&quot;Memory Management in .Net comic&quot; width=&quot;550&quot; height=&quot;239&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Full Memory Management in .Net comic&quot; target=&quot;_blank&quot; href=&quot;http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/learning-memory-management/resources/GCPoster.pdf&quot;&gt;Download the full one-page comic&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The .Net Framework 4.0 provides the new default behavior of &lt;a rel=&quot;nofollow&quot; title=&quot;Background Garbage Collection on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ee787088.aspx#background_garbage_collection&quot;&gt;background garbage collection&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/FC7WBBkbMkk&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=988</guid>
         <pubDate>Fri, 23 Dec 2011 14:48:48 +0000</pubDate>
      </item>
      <item>
         <title>An unfortunate travel story</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/Rz7m-oVt-Sg/</link>
         <description>&lt;p&gt;The last two and a half weeks have been interesting for me &amp;#8211; Interesting in the “what doesn&amp;#8217;t kill you makes you stronger” kind of way. Here is my challenging story…&lt;/p&gt;
&lt;p&gt;I was on a leisure trip to Rome, Italy to see the sights. A beautiful city with many cites like the Vatican, the Colosseum and the Spanish Steps. I was supposed to flight directly to Manila, Philippines from Rome to assist a customer. The customer was finalizing my travel plans while I was in Rome. Unfortunately I lost my mobile phone in Rome which made it rather difficult to coordinate the travel plans, but after 3 or 4 different travel itineraries the flight was booked from Rome to Italy via Seoul, Korea.&lt;/p&gt;
&lt;p&gt;I arrived in Manila through Seoul only to find out the hotel was not confirmed. To make things worse, they were fully booked and so were all the other hotels in the Makati area in Metro Manila. After an hours searching I managed to find a hotel room for the night, but I had to find another hotel for the next day.&lt;/p&gt;
&lt;p&gt;Apparently available rooms where in short supply in Makati area as I had to change hotel the next five days. I could not book a consecutive reservation at the same hotel. I slept in rooms ranging from extravagant 150 m2 suites to 15 m2 crummy hotel room with ants in my bed. It was tiring, but the weekend retreat to lovely Philippine island of Bohol the following weekend made me see everything in a brighter light.&lt;/p&gt;
&lt;p&gt;&lt;img class=&quot;size-medium wp-image-971 alignright&quot; title=&quot;Philippines Tricycle&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Philippines-Tricycle-300x224.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;224&quot;/&gt;&lt;img class=&quot;size-medium wp-image-972 alignright&quot; title=&quot;Phillippines Jeepney&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Phillippines-Jeepney-300x225.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;225&quot;/&gt;&lt;img class=&quot;size-medium wp-image-969 alignleft&quot; title=&quot;Alona Beach at Bohol Island, Philippines&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/bohol-alona-beach-300x198.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;198&quot;/&gt;&lt;img class=&quot;size-medium wp-image-968 alignleft&quot; title=&quot;Chocolate Hills at Bohol Island, Philippines&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Bohol-Chocolate-Hills-300x283.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;283&quot;/&gt;Friday I had to catch the flight to Bohol, so I took a taxi to the airport. Unfortunately the taxi was barely able to carry its own weight up the Skyway ramp and half way it gave up and broke down. I was now stuck in the middle of Manila with no other available taxi in sight and I was now late and might not make the flight to the lovely island of Bohol. I tried to persuade a tricycle to drive me to the airport, but they were not allowed to enter the airport area – then I tried to hire a Jeepney, but the driver was overly greedy and my attempt to barging failed. Luckily a taxi appeared from nowhere and I was on my way to the airport.&lt;/p&gt;
&lt;p&gt;I arrived 25 minutes after the check-in was closed and 5 minutes before departure. I was immediately redirected to the supervisor, who luckily let me check-in – I rushed through the security check and directly onto the waiting flight.&lt;/p&gt;
&lt;p&gt;It was a great weekend retreat to Bohol, where I say the &lt;a rel=&quot;nofollow&quot; title=&quot;Description of Tarsier on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Tarsier&quot;&gt;Tarsier&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; title=&quot;Chocolate Hills on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Chocolate_Hills&quot;&gt;Chocolate Hills&lt;/a&gt; and snorkeled at the coral reef where I saw clown fish and a turtle.&lt;/p&gt;
&lt;p&gt;Back in Manila and an additional week work it was Friday and time to travel back home to Copenhagen, Denmark. Due to the confusion of the travel itineraries I apparently was supposed to travel home the day before, Thursday and not Friday. I was too late, as it was already Friday. So I had to find another flight from Manila to Copenhagen the same day… With some help from the very helpful Filipino Lee, I managed to get a flight Friday night with Thai Airways through Bangkok, Thailand.&lt;/p&gt;
&lt;p&gt;It was a long trip home as Thai Airways does not have inflight entertainment systems in any of their aircrafts – I thought it was standard in this day and age.&lt;/p&gt;
&lt;p&gt;I’m now home – still without a mobile phone. Fortunately I can already look back at this unfortunate trip a laugh. I enjoyed the trip both to Rome and the Philippines even though there where so many things working against me.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/Rz7m-oVt-Sg&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=966</guid>
         <pubDate>Mon, 21 Nov 2011 06:21:20 +0000</pubDate>
      </item>
      <item>
         <title>Tablets / Zablets...</title>
         <link>http://www.version2.dk/blog/tablets-zablets-17630?utm_medium=feed&amp;utm_source=version2.dk&amp;utm_campaign=blogs&amp;utm_content=tommy_dejbjerg_pedersen</link>
         <description>Yes, 2011 bliver endelig året hvor vi i stedet for blot at snakke om Android tablets, nu kan begynde at planlægge indkøb af nogle af de seriøse bud, som kom frem på CES messen for nylig.
Særligt er Motorolas XOOM tablet nu kommet på min personlige ønskeliste, og jeg glæder mig til at se om den få...</description>
         <guid isPermaLink="false">17630 at http://www.version2.dk</guid>
         <pubDate>Wed, 19 Jan 2011 09:00:00 +0000</pubDate>
         <category>Smartphones</category>
      </item>
      <item>
         <title>Using Lucene.Net with Microsoft Azure</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/7KIqfBjUyxM/</link>
         <description>&lt;p&gt;&lt;img class=&quot;alignright size-thumbnail wp-image-920&quot; title=&quot;azure_logo&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/azure_logo-150x74.png&quot; alt=&quot;&quot; width=&quot;150&quot; height=&quot;74&quot;/&gt;Lucene indexes are usually stored on the file system and preferably on the local file system. In Azure there are additional types of storage with different capabilities, each with distinct benefits and drawbacks. The options for storing Lucene indexes in Azure are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Azure CloudDrive&lt;/li&gt;
&lt;li&gt;Azure Blob Storage&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Azure CloudDrive&lt;/h3&gt;
&lt;p&gt;CloudDrive is the obvious solutions, as it is comparable to on premise file systems with mountable virtual hard drives (VHDs). CloudDrive is however not the optimal choice, as CloudDrive impose notable limitations. The most significant limitation is; only one web role, worker role or VM role can mount the CloudDrive at a time with read/write access. It is possible to mount multiple read-only snapshots of a CloudDrive, but you have to manage creation of new snapshots yourself depending on acceptable staleness of the Lucene indexes.&lt;/p&gt;
&lt;h3&gt;Azure Blob Storage&lt;/h3&gt;
&lt;p&gt;The alternative Lucene index storage solution is Blob Storage. Luckily a Lucene directory (Lucene index storage) implementation for Azure Blob Storage exists in the &lt;a rel=&quot;nofollow&quot; title=&quot;Azure library for Lucene.Net home on MSDN Code Gallery&quot; target=&quot;_blank&quot; href=&quot;http://code.msdn.microsoft.com/AzureDirectory&quot;&gt;Azure library for Lucene.Net&lt;/a&gt;. It is called AzureDirectory and allows any role to modify the index, but only one role at a time. Furthermore each Lucene segment (See Lucene Index Segments) is stored in separate blobs, therefore utilizing many blobs at the same time. This allows the implementation to cache each segment locally and retrieve the blob from Blob Storage only when new segments are created. Consequently compound file format should not be used and optimization of the Lucene index is discouraged.&lt;/p&gt;
&lt;h4&gt;Code sample&lt;/h4&gt;
&lt;p&gt;Getting Lucene.Net up and running is simple, and using it with Azure library for Lucene.Net requires only the Lucene directory to be changes as highlighted below in Lucene index and search example. Most of it is Azure specific configuration pluming.&lt;/p&gt;
&lt;pre&gt;
Lucene.Net.Util.Version version = Lucene.Net.Util.Version.LUCENE_29;

CloudStorageAccount.SetConfigurationSettingPublisher(
    (configName, configSetter) =&amp;gt;
        configSetter(RoleEnvironment
        .GetConfigurationSettingValue(configName)));

var cloudAccount = CloudStorageAccount
    .FromConfigurationSetting(&amp;quot;LuceneBlobStorage&amp;quot;);

var cacheDirectory = new RAMDirectory();

var indexName = &amp;quot;MyLuceneIndex&amp;quot;;
var azureDirectory =
    new AzureDirectory(cloudAccount, indexName, cacheDirectory);

var analyzer = new StandardAnalyzer(version);

// Add content to the index
var indexWriter = new IndexWriter(azureDirectory, analyzer,
    IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.SetUseCompoundFile(false);

foreach (var document in CreateDocuments())
{
    indexWriter.AddDocument(document);
}

indexWriter.Commit();
indexWriter.Close();

// Search for the content
var parser = new QueryParser(version, &amp;quot;text&amp;quot;, analyzer);
Query q = parser.Parse(&amp;quot;azure&amp;quot;);

var searcher = new IndexSearcher(azureDirectory, true);

TopDocs hits = searcher.Search(q, null, 5, Sort.RELEVANCE);

foreach (ScoreDoc match in hits.scoreDocs)
{
    Document doc = searcher.Doc(match.doc);

    var id = doc.Get(&amp;quot;id&amp;quot;);
    var text = doc.Get(&amp;quot;text&amp;quot;);
}
searcher.Close();
&lt;/pre&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/AzureLuceneIndex.zip&quot;&gt;Download the reference example&lt;/a&gt; which uses Azure SDK 1.3 and Lucene.Net 2.9 in a console application connecting either to Development Fabric or your Blob Storage account.&lt;/p&gt;
&lt;h3&gt;Lucene Index Segments (simplified)&lt;/h3&gt;
&lt;p&gt;Segments are the essential building  block in Lucene. A Lucene index  consists of one or more segments, each a  standalone index. Segments are  immutable and created when an  IndexWriter flushes. Deletes or updates  to an existing segment are  therefore not removed stored in the original  segment, but marked as  deleted, and the new documents are stored in a  new segment.&lt;/p&gt;
&lt;p&gt;Optimizing an index reduces the number of segments, by creating a new segment with all the content and deleting the old ones.&lt;/p&gt;
&lt;h3&gt;Azure library for Lucene.Net facts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;It is licensed under Ms-PL, so you do pretty much whatever you want to do with the code.&lt;/li&gt;
&lt;li&gt;Based on Block Blobs (optimized for streaming) which is in tune with Lucene’s incremental indexing architecture (immutable segments) and the caching features of the AzureDirectory voids the need for random read/write of the Blob Storage.&lt;/li&gt;
&lt;li&gt;Caches index segments locally in any Lucene directory (e.g. RAMDirectory) and by default in the volatile Local Storage.&lt;/li&gt;
&lt;li&gt;Calling Optimize recreates the entire blob, because all Lucene segment combined into one segment. Consider not optimizing.&lt;/li&gt;
&lt;li&gt;Do not use Lucene compound files, as index changes will recreate the entire blob. Also this stores the entire index in one blob (+metadata blobs).&lt;/li&gt;
&lt;li&gt;Do use a &lt;a rel=&quot;nofollow&quot; title=&quot;Azure Virtual Machine sizes&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ee814754.aspx&quot;&gt;VM role size (Small, Medium, Large or ExtraLarge)&lt;/a&gt; where the Local Resource size is larger than the Lucene index, as the Lucene segments are cached by default in Local Resource storage.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Azure CloudDrive facts&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Only Fixed Size VHDs are supported.&lt;/li&gt;
&lt;li&gt;Volatile Local Resources can be used to cache VHD content&lt;/li&gt;
&lt;li&gt;Based on Page Blobs (optimized for random read/write).&lt;/li&gt;
&lt;li&gt;Stores the entire VHS in one Page Blob and is therefore restricted to the Page Blob maximum limit of 1 TByte.&lt;/li&gt;
&lt;li&gt;A role can mount up to 16 drives.&lt;/li&gt;
&lt;li&gt;A CloudDrive can only be mounted to a single VM instance at a time for read/write access.&lt;/li&gt;
&lt;li&gt;Snapshot CloudDrives are read-only and can be mounted as read-only drives by multiple different roles at the same time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Additional Azure references&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; title=&quot;Article on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ee691964.aspx&quot;&gt;Understanding Block Blobs and Page Blobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/b/windowsazurestorage/archive/2010/04/11/using-windows-azure-page-blobs-and-how-to-efficiently-upload-and-download-page-blobs.aspx&quot;&gt;Using Windows Azure Page Blobs and How to Efficiently Upload and Download Page Blobs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/b/windowsazurestorage/archive/2010/03/29/windows-azure-drive-demo-at-mix-2010.aspx&quot;&gt;Windows Azure CloudDrive Demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/7KIqfBjUyxM&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=867</guid>
         <pubDate>Sun, 16 Jan 2011 16:17:24 +0000</pubDate>
      </item>
      <item>
         <title>CNUG Lucene.Net presentation</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/HqxHXpiwdFI/</link>
         <description>&lt;p&gt;I have just held another presentation about Lucene.Net, this time in &lt;a rel=&quot;nofollow&quot; title=&quot;Copenhagen .NET User Group homepage&quot; target=&quot;_blank&quot; href=&quot;http://cnug.dk/&quot;&gt;Copenhagen .Net user group&lt;/a&gt;. I hope everyone enjoyed the presentation and walked away with newfound knowledge how to implement full text search into their applications.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.manning.com/hatcher3/&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-927&quot; title=&quot;Lucene In Action&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/LuceneInAction.jpg&quot; alt=&quot;&quot; width=&quot;240&quot; height=&quot;240&quot;/&gt;&lt;/a&gt;I love the presentations, like this one, where everyone participates in the discussion. It makes the experience so much enjoyable and everyone benefits of the collective knowledge sharing.&lt;/p&gt;
&lt;p&gt;The presentation and code samples can be downloaded below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt; Presentation (&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Apache-Lucene-CNUG.pdf&quot;&gt;pdf&lt;/a&gt; | &lt;a rel=&quot;nofollow&quot;&gt;pptx&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt; &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/CnugLucenePlayground.zip&quot;&gt;Code samples (Visual Studio 2010)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I recommend the book &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.manning.com/hatcher3/&quot;&gt;&amp;#8220;Lucene in Action&amp;#8221; by Eric Hatcher&lt;/a&gt;. The samples in this book are all in Java, but they apply equally to Lucene.Net, as it is a 1:1 port of the Java implementation.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/HqxHXpiwdFI&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=926</guid>
         <pubDate>Mon, 10 Jan 2011 19:21:26 +0000</pubDate>
      </item>
      <item>
         <title>Microsoft Julekalender låge #7 vinder</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/Ycc7oZ5BG-M/</link>
         <description>&lt;p&gt;Yet another blog post in Danish, sorry.&lt;/p&gt;
&lt;p&gt;Vinderen af &lt;a rel=&quot;nofollow&quot; title=&quot;Microsoft Julekalender 2010 l&amp;#xe5;ge #7&quot;&gt;gårsdagens Microsoft Julekalender låge #7 fundet&lt;/a&gt;. Vinderen er Gianluca Bosco, som har indsendt følgende WCF klient til servicen:&lt;/p&gt;
&lt;pre&gt;
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(&amp;quot;Ready? Press [ENTER]...&amp;quot;);
        Console.ReadLine();

        var factory = new ChannelFactory&amp;lt;Shared.IMyService&amp;gt;(
            new WSHttpBinding(),
            new EndpointAddress(&amp;quot;http://localhost:8080/MyService&amp;quot;));

        factory.Endpoint.Binding.SendTimeout = new TimeSpan(0,2,0);

        var names = new[] { &amp;quot;Anders&amp;quot;, &amp;quot;Bende&amp;quot;, &amp;quot;Bo&amp;quot;, &amp;quot;Egon&amp;quot;,
            &amp;quot;Jakob&amp;quot;, &amp;quot;Jesper&amp;quot;, &amp;quot;Jonas&amp;quot;, &amp;quot;Martin&amp;quot;, &amp;quot;Ove&amp;quot;,
            &amp;quot;Rasmus&amp;quot;, &amp;quot;Thomas E&amp;quot;, &amp;quot;Thomas&amp;quot; };

        var x = from name in names.AsParallel()
                    .WithDegreeOfParallelism(12)
                select Do(factory, name);

        x.ForAll(Console.WriteLine);

        Console.WriteLine(&amp;quot;Done processing...&amp;quot;);
        Console.ReadLine();
    }

    static string Do(ChannelFactory&amp;lt;Shared.IMyService&amp;gt; factory,
         string name)
    {
        var proxy = factory.CreateChannel();

        var result = proxy.LooongRunningMethod(name);

        return result;
    }
}
&lt;/pre&gt;
&lt;p&gt;Gianluca har rigtig nok fundet den værste performance synder af dem alle, at man ikke skal instantier en ChannelFactory for hvert kald. Alene denne forbedring kan halvere tiden brugt ved et WCF kald.&lt;/p&gt;
&lt;p&gt;Desuden fandt Gianluca den indbyggede fælde i min implementation. Server implementationen kalder Thread.Sleep (mellem 1 og 100 sekunder) for at simulere langvarigt arbejde. Default SendTimout på wsHttpBinding (og alle andre bindings) er 1 minut, hvilket betyder, at klienten vil få en TimeoutException pga. serverens lange arbejde.&lt;/p&gt;
&lt;p&gt;Tillykke til Gianluca med hans nye helikopter.&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Blade_mCX2.jpg&quot;&gt;&lt;img class=&quot;aligncenter size-medium wp-image-823&quot; title=&quot;Remote controlled helicopter model Blade mCX2&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Blade_mCX2-300x300.jpg&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;300&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Der er en mindre optimering, som kan forbedre performance yderligere og det er at kalde Open og Close på en Channel explicit. Det skyldes, at der i en implicit Open er thread synchronisation, således at kun én thread åbner en Channel og de resterende threads venter på at Channel er klar.&lt;/p&gt;
&lt;p&gt;Hvis du har forslag til yderligere forbedringer, så skriv en kommentar.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/Ycc7oZ5BG-M&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=851</guid>
         <pubDate>Wed, 08 Dec 2010 20:33:53 +0000</pubDate>
      </item>
      <item>
         <title>Microsoft Julekalender låge #7</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/wSaGuFHgMHw/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://danielfrost.dk/post/Mr-Frosts-Julekalender-starter-pa-Onsdag!-Er-du-klar-.aspx&quot;&gt;&lt;img class=&quot;alignnone size-full wp-image-821&quot; title=&quot;Microsoft Julekalender 2010&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/MicrosoftJulekalender2010.png&quot; alt=&quot;&quot; width=&quot;550&quot; height=&quot;157&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Sorry – this post is in Danish.&lt;/p&gt;
&lt;p&gt;Dagens opgave handler om Windows Communication Foundation.  WCF er kompleks pga. mængden af funktionalitet og kan derfor virke indviklet. Kompleksiteten afspejles også i størrelsen på WCF assembly System.ServiceModel.dll, som er klart den største assembly i hele .Net Framework Class Library (FCL) … selv større end mscorlib.dll.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Opgaven:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Implementer en klient til nedstående service, som benytter WSHttpBinding med default settings.&lt;/p&gt;
&lt;pre&gt;
[ServiceContract(Namespace = &amp;quot;www.lybecker.com/blog/wcfriddle&amp;quot;)]
public interface IMyService
{
    [OperationContract(ProtectionLevel =
        ProtectionLevel.EncryptAndSign)]
    string LooongRunningMethod(string name);
}

public class MyService : IMyService
{
    public string LooongRunningMethod(string name)
    {
        Console.WriteLine(&amp;quot;{0} entered.&amp;quot;, name);

        // Simulate work by random sleeping
        var rnd = new Random(
            name.Select(Convert.ToInt32).Sum() +
            Environment.TickCount);
        var sleepSeconds = rnd.Next(0, 100);
        System.Threading.Thread.Sleep(sleepSeconds * 1000);

        var message = string.Format(
            &amp;quot;{0} slept for {1} seconds in session {2}.&amp;quot;,
            name,
            sleepSeconds,
            OperationContext.Current.SessionId);
        Console.WriteLine(message);

        return message;
    }
}
&lt;/pre&gt;
&lt;p&gt;Klienten må meget gerne være smukt struktureret og skal:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Implementeres i .Net 3.x eller .Net 4.0&lt;/li&gt;
&lt;li&gt;Simulere et dusin forskellige klienter&lt;/li&gt;
&lt;li&gt;Være så effektiv som mulig (tænk memory, CPU cycles, GC)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beskriv kort jeres valg af optimeringer.&lt;/p&gt;
&lt;p&gt;For at gøre opgaven nemmere at løse, så har jeg allerede løst den for jer… dog ikke optimalt. &lt;a rel=&quot;nofollow&quot;&gt;Download min implementation&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Send løsning til anders at lybecker.com inden midnat; vinderen vil bliver offentligt i morgen og vil blive den lykkelige ejer af en fjernstyrret helikopter med tilbehør, så den er klar til af flyve. En cool office gadget. Helikopteren er nem at flyve og kan holde til en del. Det ved jeg af erfaring &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Se helikopteren flyve nedefor.&lt;/p&gt;
&lt;p&gt;&lt;embed type=&quot;application/x-shockwave-flash&quot; width=&quot;550&quot; height=&quot;331&quot; src=&quot;http://www.youtube.com/v/gAlM4FBtDGI?fs=1&amp;amp;hl=en_US&quot;&gt;&lt;/iframe&gt;&lt;/p&gt; 
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/wSaGuFHgMHw&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=819</guid>
         <pubDate>Tue, 07 Dec 2010 06:45:28 +0000</pubDate>
      </item>
      <item>
         <title>ODIS Data Camp</title>
         <link>http://www.version2.dk/blog/odis-data-camp-16850?utm_medium=feed&amp;utm_source=version2.dk&amp;utm_campaign=blogs&amp;utm_content=tommy_dejbjerg_pedersen</link>
         <description>Dagen byder på Data Camp på ITU hvor ITST er vært til en hack-away day, hvor myndigheder, datajournalister og udviklere sammen vil skabe nogle kreative løsninger ovenpå offentlige data.

Videnskabsministeren åbnede konferencen og udtrykte store forventninger til dagens arbejde og det potentiale a...</description>
         <guid isPermaLink="false">16850 at http://www.version2.dk</guid>
         <pubDate>Thu, 04 Nov 2010 10:00:00 +0000</pubDate>
         <category>Digital forvaltning</category>
      </item>
      <item>
         <title>ANUG Solr/Lucene presentation</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/EStmjsAKkXA/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/ANUG.gif&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-814&quot; title=&quot;ANUG&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/ANUG.gif&quot; alt=&quot;Aarhus .NET user group&quot; width=&quot;150&quot; height=&quot;85&quot;/&gt;&lt;/a&gt;I am on the train to Copenhagen after a successful presentation of Solr/Lucene at the &lt;a rel=&quot;nofollow&quot; title=&quot;AArhus .NET user group homepage&quot; target=&quot;_blank&quot; href=&quot;http://www.anug.dk/&quot;&gt;Aarhus .NET user group&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The presentation went very well judging by the number of questions during the almost 2½ hour long presentation and the feedback afterwards. Love it – thanks &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;The presentation and code samples can be downloaded below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Presentation (&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Apache-Lucene-ANUG.pdf&quot;&gt;pdf&lt;/a&gt;|&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Apache-Lucene-ANUG.pptx&quot;&gt;pptx&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/AnugLucenePlayground.zip&quot;&gt;Code samples (Visual Studio 2010)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Please do contact me if you have any further questions – I’ll love to help out.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/EStmjsAKkXA&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=805</guid>
         <pubDate>Wed, 27 Oct 2010 22:56:42 +0000</pubDate>
      </item>
      <item>
         <title>WCF Timeouts</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/fMyOXVBZkyc/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Timeout.png&quot;&gt;&lt;img class=&quot;alignright size-medium wp-image-791&quot; title=&quot;Timeout&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Timeout-300x300.png&quot; alt=&quot;&quot; width=&quot;170&quot; height=&quot;170&quot;/&gt;&lt;/a&gt;The last two articles about WCF Throttling &lt;a rel=&quot;nofollow&quot; title=&quot;WCF Throttling - Part 1&quot;&gt;part 1&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; title=&quot;WCF Throttling - Part 2&quot;&gt;part 2&lt;/a&gt; would not be complete without looking at WCF timeouts. Any potentially lengthy operation must have a timeout or the system might end up waiting indefinitely – this is remarkably prevalent when working across any network connection (Yes, LAN connections too).&lt;/p&gt;
&lt;p&gt;Timeouts are not directly related to throttling properties, but effect the way the service (or client) performance under load. Timeout properties can be perceived as an annoyance when sending larger messages or dealing with slow connections or services. The frustration increase as the naming of the properties can be deceiving. Read on… and I’ll explain &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Below are the binding properties that all throw TimeoutExceptions if any of setting thresholds are exceeded:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OpenTimeout (TimeSpan) &amp;#8211; the interval of time provided for an open operation to complete including security handshakes (WS-Trust, WS-Secure Conversation etc.). The default is 00:01:00.&lt;/li&gt;
&lt;li&gt;CloseTimeout (TimeSpan) &amp;#8211; the interval of time provided for a close operation to complete. The default is 00:01:00.&lt;/li&gt;
&lt;li&gt;SendTimeout (TimeSpan) &amp;#8211; the interval of time provided for an entire operation to complete. This includes both sending of message and receiving reply! The default is 00:01:00.&lt;/li&gt;
&lt;li&gt;ReceiveTimeout (TimeSpan) &amp;#8211; the interval of time that a connection can remain inactive, during which no application messages are received, before it is dropped. The default is 00:10:00.
&lt;ul&gt;
&lt;li&gt;This setting is only used on the server-side and has no effect on client-side.&lt;/li&gt;
&lt;li&gt;When using Reliable Sessions remember to set the &lt;a rel=&quot;nofollow&quot; title=&quot;ReliableSession.InactivityTimeout property on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.servicemodel.reliablesession.inactivitytimeout.aspx&quot;&gt;InactivityTimeout&lt;/a&gt; property on the reliableSession element to the same value as the &lt;a rel=&quot;nofollow&quot; title=&quot;Binding.ReceiveTimeout property on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.servicemodel.channels.binding.receivetimeout.aspx&quot;&gt;ReceiveTimeout&lt;/a&gt; property, as both inactivity timers has to be satisfied.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Example of configuration file:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;system.serviceModel&amp;gt;
  &amp;lt;bindings&amp;gt;
    &amp;lt;netTcpBinding&amp;gt;
      &amp;lt;binding name=&amp;quot;netTcpBindingConfig&amp;quot;
               openTimeout=&amp;quot;00:01:00&amp;quot;
               closeTimeout=&amp;quot;00:01:00&amp;quot;
               sendTimeout=&amp;quot;00:01:00&amp;quot;
               receiveTimeout=&amp;quot;00:10:00&amp;quot;&amp;gt;
        &amp;lt;reliableSession enabled=&amp;quot;true&amp;quot;
                         inactivityTimeout=&amp;quot;00:10:00&amp;quot; /&amp;gt;
      &amp;lt;/binding&amp;gt;
    &amp;lt;/netTcpBinding&amp;gt;
  &amp;lt;/bindings&amp;gt;
&amp;lt;/system.serviceModel&amp;gt;
&lt;/pre&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/fMyOXVBZkyc&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=787</guid>
         <pubDate>Thu, 14 Oct 2010 10:22:58 +0000</pubDate>
      </item>
      <item>
         <title>WCF Throttling – Part 2</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/-_dQu5eyvBs/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Funnel.jpg&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-780&quot; title=&quot;Funnel&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Funnel.jpg&quot; alt=&quot;&quot; width=&quot;158&quot; height=&quot;140&quot;/&gt;&lt;/a&gt;In the &lt;a rel=&quot;nofollow&quot; title=&quot;WCF Throttling - Part 1&quot;&gt;WCF Throttling – Part 1&lt;/a&gt; article the service throttling behavior was introduced.&lt;/p&gt;
&lt;p&gt;There are other throttling features in WCF that are designed to protect the service from request flooding.&lt;/p&gt;
&lt;p&gt;These WCF throttling feature are configured on the binding, service behaviors and endpoint behaviors.&lt;/p&gt;
&lt;p&gt;Binding properties:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MaxConnections (int) &amp;#8211; specifies the maximum number of outbound and inbound connections the service creates and accepts respectively. Default value is 10 connections. This setting only applies for statefull TCP connections like &lt;a rel=&quot;nofollow&quot; title=&quot;netTcpBinding configuration on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.servicemodel.configuration.nettcpbindingelement.aspx&quot;&gt;netTcpBinding&lt;/a&gt; and not stateless HTTP protocols like &lt;a rel=&quot;nofollow&quot; title=&quot;basicHttpBinding configuration on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.servicemodel.configuration.basichttpbindingelement.aspx&quot;&gt;basicHttpBinding&lt;/a&gt;, &lt;a rel=&quot;nofollow&quot; title=&quot;wsHttpBinding configuration on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.servicemodel.configuration.wshttpbindingelement.aspx&quot;&gt;wsHttpBinding&lt;/a&gt; or &lt;a rel=&quot;nofollow&quot; title=&quot;webHttpBinding configuration on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/bb412176.aspx&quot;&gt;webHttpBinding&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;MaxReceivedMessageSize (long) &amp;#8211; the maximum size of a message (including headers), that can be received on a channel. The sender of a message exceeding this limit will receive a fault and the receiver will drop the message. The default value is 65,536 bytes (64K).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There are two additional properties on the binding that one might mistakenly think is request throttling properties. These are the MaxBufferPoolSize and MaxBufferSize properties and they control &lt;a rel=&quot;nofollow&quot; title=&quot;Detailed explanation of the WCF memory Buffer Manager&quot; target=&quot;_blank&quot; href=&quot;http://obsessivelycurious.blogspot.com/2008/04/wcf-memory-buffer-management.html&quot;&gt;WCF memory Buffer Manager&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Note: remember to set the MaxReceivedMessageSize and MaxBufferSize properties to the same value if using TransferMode.Buffered or an ArgumentException will be thrown at runtime with the message “For TransferMode.Buffered, MaxReceivedMessageSize and MaxBufferSize must be the same value.”&lt;/p&gt;
&lt;p&gt;Binding properties for the &lt;a rel=&quot;nofollow&quot; title=&quot;readerQuotas element on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ms731325.aspx&quot;&gt;readerQuotas&lt;/a&gt; element – used by XmlReader under the hood:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MaxArrayLength (int) &amp;#8211; the maximum allowed array length of data received from a client. The default is 16,384 (16K).&lt;/li&gt;
&lt;li&gt;MaxBytesPerRead (int) &amp;#8211; the maximum allowed bytes returned per read for the XmlReader. The default is 4,096 (4K).&lt;/li&gt;
&lt;li&gt;MaxDepth (int) &amp;#8211; the maximum XML nested node depth. The default is 32.&lt;/li&gt;
&lt;li&gt;MaxNameTableCharCount (int) &amp;#8211; the maximum characters allowed in a table name. This is the maximum length of an XML element or attributes identifier including XML namespace. The default is 16,384 (16K).&lt;/li&gt;
&lt;li&gt;MaxStringContentLength (int) &amp;#8211; the maximum characters allowed in XML element or attribute content. The default is 8,192 (8K).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a rel=&quot;nofollow&quot; title=&quot;DataContractSerializer on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ms405768.aspx&quot;&gt;DataContractSerializer&lt;/a&gt; is by default used to serialize and deserialize messages as it is much faster the XMLSerializer, but with less features. The DataContractSerializer has a single property that can be configures at the endpoint or service behavior:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MaxItemsInObjectGraph (int) &amp;#8211; maximum number of items in an object graph to serialize or deserialize. The default is 65,536 (64K).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Resist the temptation of settings any of these properties to Int.MaxValue and the likes, because determining the correct values are difficult. Throttle the service, so some clients gets served instead of risk boggling down the service with request flooding, resulting in no clients get served.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;You will become the service hero in your organization by throttling instead of letting the service run wild &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/div&gt;
&lt;p&gt;Example of configuration file:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;system.serviceModel&amp;gt;
  &amp;lt;behaviors&amp;gt;
    &amp;lt;endpointBehaviors&amp;gt;
      &amp;lt;behavior name=&amp;quot;endpointBehavior&amp;quot;&amp;gt;
        &amp;lt;dataContractSerializer maxItemsInObjectGraph=&amp;quot;65536&amp;quot;/&amp;gt;
      &amp;lt;/behavior&amp;gt;
    &amp;lt;/endpointBehaviors&amp;gt;
    &amp;lt;serviceBehaviors&amp;gt;
      &amp;lt;behavior name=&amp;quot;serviceBehaviors&amp;quot;&amp;gt;
        &amp;lt;dataContractSerializer maxItemsInObjectGraph=&amp;quot;65536&amp;quot;/&amp;gt;
      &amp;lt;/behavior&amp;gt;
    &amp;lt;/serviceBehaviors&amp;gt;
  &amp;lt;/behaviors&amp;gt;
  &amp;lt;bindings&amp;gt;
    &amp;lt;netTcpBinding&amp;gt;
      &amp;lt;binding name=&amp;quot;netTcpBindingConfig&amp;quot;
                maxReceivedMessageSize=&amp;quot;65536&amp;quot;
                maxConnections=&amp;quot;10&amp;quot;&amp;gt;
        &amp;lt;readerQuotas maxArrayLength=&amp;quot;16384&amp;quot;
                      maxBytesPerRead=&amp;quot;4096&amp;quot;
                      maxDepth=&amp;quot;32&amp;quot;
                      maxStringContentLength=&amp;quot;8192&amp;quot;
                      maxNameTableCharCount=&amp;quot;16384&amp;quot;/&amp;gt;
      &amp;lt;/binding&amp;gt;
    &amp;lt;/netTcpBinding&amp;gt;
  &amp;lt;/bindings&amp;gt;
&amp;lt;/system.serviceModel&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/-_dQu5eyvBs&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=773</guid>
         <pubDate>Mon, 11 Oct 2010 18:05:40 +0000</pubDate>
      </item>
      <item>
         <title>WCF Throttling – Part 1</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/csWT0SDIuyo/</link>
         <description>&lt;p&gt;The default throttling settings in WCF has always been very conservative. There where configured conservatively to diminish the risk of request flooding. Without throttling settings a large number of requests will make the service unresponsive by consuming all resources trying to respond to all requests simultaneously.&lt;/p&gt;
&lt;p&gt;Because of the very conservative settings many developers have run into what seems like WCF performance problems, but was actually incorrectly configured throttling settings.&lt;/p&gt;
&lt;p&gt;WCF throttling is a service behavior configuration and each setting has effect dependent on the &lt;a rel=&quot;nofollow&quot; title=&quot;InstanceContextMode enum on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.instancecontextmode(v=VS.100).aspx&quot;&gt;InstanceContextMode&lt;/a&gt; and &lt;a rel=&quot;nofollow&quot; title=&quot;ConcurrencyMode enum on MSDN&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.concurrencymode.aspx&quot;&gt;ConcurrencyMode&lt;/a&gt; settings.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;maxConcurrentCalls (int) &amp;#8211; the maximum number of concurrent messages processing&lt;/li&gt;
&lt;li&gt;maxConcurrentInstances (int) &amp;#8211; the maximum number of concurrent InstanceContext (service type instances) objects processing&lt;/li&gt;
&lt;li&gt;maxConcurrentSessions (int) &amp;#8211; the maximum number of concurrent sessions processing&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;These throttling settings can be configured in code via the ServiceThrottlingBehavior in the System.ServiceModel.Description namespace or though configuration like below:&lt;/p&gt;
&lt;pre&gt;
&amp;lt;system.serviceModel&amp;gt;
    &amp;lt;serviceBehaviors&amp;gt;
      &amp;lt;behavior name=&amp;quot;throttlingServiceBehavior&amp;quot;&amp;gt;
        &amp;lt;serviceThrottling maxConcurrentCalls=&amp;quot;16&amp;quot;
                           maxConcurrentInstances=&amp;quot;160&amp;quot;
                           maxConcurrentSessions=&amp;quot;10&amp;quot;/&amp;gt;
      &amp;lt;/behavior&amp;gt;
    &amp;lt;/serviceBehaviors&amp;gt;
&amp;lt;/system.serviceModel&amp;gt;
&lt;/pre&gt;
&lt;p&gt;The default values in .Net 3.0/3.5 are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;maxConcurrentCalls = 16&lt;/li&gt;
&lt;li&gt;maxConcurrentSessions = 10&lt;/li&gt;
&lt;li&gt;maxConcurrentInstances = maxConcurrentCalls + maxConcurrentSessions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The default has changed in .Net 4.0 as the .Net 3.0/3.5 default values were too conservative and the increase in server resources – especially the number of cores available. The default values for .Net 4.0 are:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;maxConcurrentCalls = 16 * Environment.ProcessorCount&lt;/li&gt;
&lt;li&gt;maxConcurrentSessions = 100 * Environment.ProcessorCount&lt;/li&gt;
&lt;li&gt;maxConcurrentInstances = maxConcurrentCalls + maxConcurrentSessions&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Environment.ProcessorCount property is misleading as the value is the number of cores (Hyper-Threading counts double). In my development laptop with four Hyper-Threading cores looks like this:&lt;/p&gt;
&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/WcfThrottlingDotNet4.png&quot;&gt;&lt;img class=&quot;aligncenter size-full wp-image-766&quot; title=&quot;WCF Throttling DotNet 4.0 default settings&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/WcfThrottlingDotNet4.png&quot; alt=&quot;&quot; width=&quot;628&quot; height=&quot;124&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/csWT0SDIuyo&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=765</guid>
         <pubDate>Wed, 06 Oct 2010 18:45:35 +0000</pubDate>
      </item>
      <item>
         <title>Raoul Illyés, Microsoft MVP</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/y8OIEZpGOpw/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Microsoft_MVP_logo.png&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-754&quot; title=&quot;Microsoft MVP logo&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Microsoft_MVP_logo.png&quot; alt=&quot;&quot; width=&quot;86&quot; height=&quot;135&quot;/&gt;&lt;/a&gt;A friend and former colleague of mine &lt;a rel=&quot;nofollow&quot; title=&quot;Raoul Illy&amp;#xe9;s Blog&quot; target=&quot;_blank&quot; href=&quot;http://www.guide-line.com/archives/295&quot;&gt;Raoul Illyés has been awarded Microsoft MVP for SQL Server&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I am delighted and lucky to continue working with Raoul and his new company &lt;a rel=&quot;nofollow&quot; title=&quot;Guide-line homepage&quot; target=&quot;_blank&quot; href=&quot;http://www.guide-line.com/&quot;&gt;Guide-line&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Congratulations – It’s about time &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/y8OIEZpGOpw&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=753</guid>
         <pubDate>Tue, 05 Oct 2010 18:32:56 +0000</pubDate>
      </item>
      <item>
         <title>JAOO: The Mobile Imperative</title>
         <link>http://www.version2.dk/blog/jaoo-mobile-imperative-16471?utm_medium=feed&amp;utm_source=version2.dk&amp;utm_campaign=blogs&amp;utm_content=tommy_dejbjerg_pedersen</link>
         <description>En konferencefest er jo typisk en lidt våd affære, og JAOO konferencen i går var bestemt ingen undtagelse, godt hjulpet på vej af gratis drinks og øl sponseret af de glade gutter fra Tradeshift.

Der var dog, mig bekendt, ingen pinlige episoder, hvis man altså lige ser bort fra at &quot;chefkokken&quot; ba...</description>
         <guid isPermaLink="false">16471 at http://www.version2.dk</guid>
         <pubDate>Tue, 05 Oct 2010 06:00:00 +0000</pubDate>
      </item>
      <item>
         <title>JAOO....nu på Android</title>
         <link>http://www.version2.dk/blog/jaoonu-paa-android-16438?utm_medium=feed&amp;utm_source=version2.dk&amp;utm_campaign=blogs&amp;utm_content=tommy_dejbjerg_pedersen</link>
         <description>Jeg sidder her i Store Sal i Musikhuset i Århus, og lytter til åbningen af dette års JAOO konference.

Min tilgang til konferencen er ikke så systematisk, jeg har en 2-3 sessions som er MUST SEE, men ellers så shopper jeg lidt og beslutter efter anbefalinger fra andre, hvad der er værd at se.

So...</description>
         <guid isPermaLink="false">16438 at http://www.version2.dk</guid>
         <pubDate>Mon, 04 Oct 2010 06:50:00 +0000</pubDate>
      </item>
      <item>
         <title>Hacking the government - Folkets Ting</title>
         <link>http://www.version2.dk/blog/hacking-government-folkets-ting-16320?utm_medium=feed&amp;utm_source=version2.dk&amp;utm_campaign=blogs&amp;utm_content=tommy_dejbjerg_pedersen</link>
         <description>Fredag er jo altid en dejlig dag, og dagen i dag starter ekstra godt, for Michael Friis har offentliggjort sit API til Folkets Ting, så vi nu alle kan kode løs i vildskab op mod de data Folketinget udstiller på deres website.

Michael Friis er til dagligt udvikler på Ekstra Bladet, men er først o...</description>
         <guid isPermaLink="false">16320 at http://www.version2.dk</guid>
         <pubDate>Thu, 23 Sep 2010 08:00:00 +0000</pubDate>
      </item>
      <item>
         <title>ASP.Net Security Vulnerability</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/6ktSqexJsLE/</link>
         <description>&lt;p&gt;Friday the September 17th a serious &lt;a rel=&quot;nofollow&quot; title=&quot;Microsoft Security Advisory (2416728) Vulnerability in ASP.NET Could Allow Information Disclosure &quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/technet/security/advisory/2416728.mspx&quot;&gt;security exploit&lt;/a&gt; was demonstrated at security conference by Juliano Rizzo and Thai Duong. A tool called POET (Padding Oracle Exploit Tool) was used to show the exploit in both .Net and Java.&lt;/p&gt;
&lt;p&gt;POET exploits a well-known vulnerability in the way many websites encrypt text stored in ViewState, form authentication tickets, cookies, hidden HTML fields and request parameters.&lt;/p&gt;
&lt;p&gt;It a deficiency in the encryption libraries in both Java and the .Net framework utilizing the fact that encrypted strings are padded in blocks of e.g. 8 bytes or 16 bytes or …. I will not go into details, as it is explained well in details &lt;a rel=&quot;nofollow&quot; title=&quot;Article Automated Padding Oracle Attacks with PadBuster&quot; target=&quot;_blank&quot; href=&quot;http://www.gdssecurity.com/l/b/2010/09/14/automated-padding-oracle-attacks-with-padbuster/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The exploit works on any &lt;a rel=&quot;nofollow&quot; title=&quot;Block cipher on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Block_cipher&quot;&gt;block-cipher encryption&lt;/a&gt; mechanism, such as AES, DES and Triple DES.&lt;/p&gt;
&lt;p&gt;The exploit is quite severe, as it can be used to download the web.config file.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;The attack that was shown in the public relies on a feature in ASP.NET that allows files (typically javascript and css) to be downloaded, and which is secured with a key that is sent as part of the request. Unfortunately if you are able to forge a key you can use this feature to download the web.config file of an application (but not files outside of the application).  We will obviously release a patch for this… &lt;a rel=&quot;nofollow&quot; title=&quot;Comment by Scott Gu&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx&quot;&gt;Scott Gu&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;There are lots of systems affected, such as ASP.Net 1.0-4.0 (WebForms and MVC), SharePoint, Microsoft CRM, JavaServer Faces etc.&lt;/p&gt;
&lt;p&gt;HTTPS with SSL/TLS does not protect your site.&lt;/p&gt;
&lt;p&gt;Below is a video showing how to use the POET tool with DotNetNuke.&lt;br /&gt;
&lt;embed type=&quot;application/x-shockwave-flash&quot; width=&quot;550&quot; height=&quot;331&quot; src=&quot;http://www.youtube.com/v/yghiC_U2RaM?fs=1&amp;amp;hl=en_US&quot;&gt;&lt;/iframe&gt;&lt;/p&gt; 
&lt;p&gt;Scott Gu has &lt;a rel=&quot;nofollow&quot; title=&quot;ASP.Net workaround&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/09/18/important-asp-net-security-vulnerability.aspx&quot;&gt;workaround details until Microsoft releases a patch&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Update &lt;/strong&gt;September 29th, 2010: A &lt;a rel=&quot;nofollow&quot; title=&quot;Microsoft Security Bulletin MS10-070 - Important&quot; target=&quot;_blank&quot; href=&quot;http://www.microsoft.com/technet/security/bulletin/ms10-070.mspx&quot;&gt;security update&lt;/a&gt; is released by Microsoft. More details about the patch on &lt;a rel=&quot;nofollow&quot; title=&quot;Details of the ASP.NET Security Update&quot; target=&quot;_blank&quot; href=&quot;http://weblogs.asp.net/scottgu/archive/2010/09/28/asp-net-security-update-now-available.aspx&quot;&gt;Scott Gu&amp;#8217;s blog&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/6ktSqexJsLE&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=737</guid>
         <pubDate>Mon, 20 Sep 2010 18:54:14 +0000</pubDate>
      </item>
      <item>
         <title>Configuring Windows 7 network priority</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/kKo8dYz0RV4/</link>
         <description>&lt;p&gt;Windows 7 apparently always prioritizes the wireless network connection (Wi-Fi) – no matter if a faster wired network connection is available. This is default behavior &amp;#8211; go figure!&lt;/p&gt;
&lt;p&gt;Luckily you can change it, but it isn’t easy to find. Do the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Go to &amp;#8220;Network and Sharing Center&amp;#8221; (e.g. through the “Control Panel”)&lt;/li&gt;
&lt;li&gt;Click &amp;#8220;Change Adapter Settings&amp;#8221;&lt;/li&gt;
&lt;li&gt;In the &amp;#8220;Network Connections&amp;#8221; window, press the ALT key on your keyboard to being up the menu bar.&lt;br /&gt;
&lt;img class=&quot;size-full wp-image-733 aligncenter&quot; title=&quot;Network Connection Advanced Settings Menu&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/NetworkAdvancedSettingsMenu.png&quot; alt=&quot;&quot; width=&quot;481&quot; height=&quot;201&quot;/&gt;&lt;/li&gt;
&lt;li&gt;Click the &amp;#8220;Advanced&amp;#8221; menu and then &amp;#8220;Advanced Settings&amp;#8221;&lt;/li&gt;
&lt;li&gt;In the “Advanced Settings” windows on the &amp;#8220;Adapters and Bindings&amp;#8221; tab under &amp;#8220;Connections&amp;#8221;, you can change the network connection priority with the arrows on the right.&lt;/li&gt;
&lt;p&gt;&lt;img class=&quot;size-full wp-image-732 aligncenter&quot; title=&quot;Network Connection Advanced Settings&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/NetworkAdvancedSettings.png&quot; alt=&quot;&quot; width=&quot;414&quot; height=&quot;461&quot;/&gt;&lt;/ol&gt;
&lt;p&gt;It will still connect to all available network connections (wireless and wired), unless they are disabled.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/kKo8dYz0RV4&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=730</guid>
         <pubDate>Fri, 10 Sep 2010 19:01:59 +0000</pubDate>
      </item>
      <item>
         <title>Going to JAOO ?</title>
         <link>http://www.version2.dk/blog/going-jaoo-15863?utm_medium=feed&amp;utm_source=version2.dk&amp;utm_campaign=blogs&amp;utm_content=tommy_dejbjerg_pedersen</link>
         <description>JAOO is coming up, og det er tid til at hænge ud med en stor del af netværket in real life, hvilket jeg glæder mig meget til ![Eksternt billede](http://www.version2.dk/uploads/smil3dbd4d6422f04.gif&quot; alt=&quot;)
Altid godt at høre nye war stories, sladder og bare snakke med folk der kan blive helt røde...</description>
         <guid isPermaLink="false">15863 at http://www.version2.dk</guid>
         <pubDate>Mon, 16 Aug 2010 14:00:00 +0000</pubDate>
      </item>
      <item>
         <title>Enabling Danish for SQL Server FullText</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/reSEslrByMQ/</link>
         <description>&lt;div class=&quot;articleInlineBlocks alignright&quot;&gt;&lt;img class=&quot;articleInlineImage&quot; height=&quot;5&quot;/&gt;
&lt;p class=&quot;articleInlineBlockContent&quot;&gt;
SQL Server FullText enables you to search large amount of strings fast, and it is easy to use. It hasn’t changed much since SQL Server 2000.&lt;br /&gt;
A simple getting started tutorial can be found on &lt;a rel=&quot;nofollow&quot; title=&quot;Creating Full Text Catalog and Full Text Search&quot; target=&quot;_blank&quot; href=&quot;http://www.codeproject.com/KB/database/SQLServer2K8FullTextSearh.aspx&quot;&gt;Code Project&lt;/a&gt;.
&lt;/p&gt;
&lt;p style=&quot;margin:0px;&quot;&gt;&lt;img style=&quot;margin-top:10px;&quot; alt=&quot;&quot; class=&quot;articleInlineImage&quot; height=&quot;15&quot;/&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;SQL Server FullText is easy to use in applications requiring string searching.&lt;/p&gt;
&lt;p&gt;The Danish, Polish and Turkish wordbreaker and stemmer implementations for SQL Server FullText is not developed by Microsoft and therefore not enabled by default. The libraries are however part of the installation process and are therefore present on disk.&lt;/p&gt;
&lt;p&gt;To make use of the Danish language capabilities in SQL Server 2008, register the libraries in registry and reload the FullText languages:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Download &amp;amp; run the &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/DanishFullText.zip&quot;&gt;DanishFulltext.reg&lt;/a&gt; file on the server. It will register wordbreaker, stemmer and default location of the thesaurus xml file.&lt;/li&gt;
&lt;li&gt;Run the exec sp_fulltext_service &amp;#8216;update_languages&amp;#8217; in a Management Studio.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Now verify that Danish is enabled with this query: SELECT name FROM sys.fulltext_languages&lt;/p&gt;
&lt;p&gt;Note: The DanishFullText.reg assumes that SQL Server is a default instance (not a named instance). If not, modify the file by changing the MSSQL10.MSSQLSERVER to the instance name.&lt;/p&gt;
&lt;p&gt;It is the same case with Polish and Turkish – they are not registered by default. See more in the MSDN article &lt;a rel=&quot;nofollow&quot; title=&quot;MSDN article&quot; target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/ms345188.aspx&quot;&gt;How to: Load Licensed Third-Party Word Breakers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;List of out of the box SQL Server 2008 FullText supported languages: Arabic, Bengali (India), Brazilian, British English, Bulgarian, Catalan, Chinese (Hong Kong SAR, PRC), Chinese (Macau SAR), Chinese (Singapore), Croatian, Danish, Dutch, English, French, German, Gujarati, Hebrew, Hindi, Icelandic, Indonesian ,Italian, Japanese, Kannada, Korean, Latvian, Lithuanian, Malay &amp;#8211; Malaysia, Malayalam, Marathi, Neutral, Norwegian (Bokmål), Polish, Portuguese, Punjabi, Romanian, Russian, Serbian (Cyrillic), Serbian (Latin), Simplified Chinese, Slovak, Slovenian, Spanish, Swedish, Tamil, Telugu, Thai, Traditional Chinese, Turkish, Ukrainian, Urdu, Vietnamese.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/reSEslrByMQ&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=704</guid>
         <pubDate>Mon, 09 Aug 2010 18:10:19 +0000</pubDate>
      </item>
      <item>
         <title>Java 4-ever</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/K9sVmgA03ok/</link>
         <description>&lt;p&gt;I find this video hilarious&amp;#8230;&lt;br /&gt;
&lt;embed type=&quot;application/x-shockwave-flash&quot; width=&quot;550&quot; height=&quot;334&quot; src=&quot;http://www.youtube.com/v/A1zySeNpW20&amp;amp;hl=da_DK&amp;amp;fs=1&amp;amp;rel=0&amp;amp;hd=1&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
You should use the best tools at hand to solve the problem. That said; choosing between Java or .Net doesn’t really matter in most cases. There are however some areas where Java is a better choice and vice versa.&lt;/p&gt;
&lt;p&gt;I can’t wait to see it in the cinema &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;PS. I do develop with Java even though I do not blog much about it.&lt;/p&gt;
&lt;p&gt;Update: YouTube removed the video due to copyright claims. You can still see it &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://jz10.java.no/java-4-ever-trailer.html&quot;&gt;JavaZone&lt;/a&gt;.&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/K9sVmgA03ok&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=689</guid>
         <pubDate>Sun, 04 Jul 2010 19:09:58 +0000</pubDate>
      </item>
      <item>
         <title>Meeting the SQL Azure Development Team</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/4HX0Et9sH9c/</link>
         <description>&lt;p style=&quot;text-align:center;&quot;&gt;&lt;img class=&quot;size-medium wp-image-682   aligncenter&quot; title=&quot;SQL Azure Logo&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/SqlAzureLogo-300x130.png&quot; alt=&quot;&quot; width=&quot;300&quot; height=&quot;130&quot;/&gt;&lt;/p&gt;
&lt;p style=&quot;text-align:left;&quot;&gt;Last week I was at Microsoft HQ in Redmond, WA, USA. I was invited by the &lt;a rel=&quot;nofollow&quot; title=&quot;SQL Azure Team Blog&quot; target=&quot;_blank&quot; href=&quot;http://blogs.msdn.com/b/sqlazure/&quot;&gt;SQL Azure Development Team&lt;/a&gt; to look at some of the new unreleased features and comment on features in their roadmap.&lt;/p&gt;
&lt;p&gt;Unfortunately most of the content was confidential, meaning that I was under &lt;a rel=&quot;nofollow&quot; title=&quot;Non-Disclosure Agreement on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Non-disclosure_agreement&quot;&gt;NDA&lt;/a&gt;, so I may not disclose any details. Sorry :-/&lt;/p&gt;
&lt;p&gt;During the week with the SQL Azure Development Team I was fortunate to be engaged in technical detailed discussion about some of the upcoming feature releases – mainly discussing the SQL Server features not currently available in SQL Azure. It was interesting and enlightening at the same time to discuss their technical challenges and why they have build SQL Azure the way they have.&lt;/p&gt;
&lt;p&gt;All in all, my conclusion after this event is that Microsoft takes SQL Azure seriously and it will become a major player in the &lt;a rel=&quot;nofollow&quot; title=&quot;Relational Database Management System on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Relational_database_management_system&quot;&gt;RDBMS&lt;/a&gt; world. It will not just be a SQL Server in the cloud, but a separate product with different market segments and different features. I am looking forward to a bright future with SQL Azure &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/4HX0Et9sH9c&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=675</guid>
         <pubDate>Wed, 30 Jun 2010 14:28:05 +0000</pubDate>
      </item>
      <item>
         <title>Check for breaking changes in APIs</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/QBwtOew-MaI/</link>
         <description>&lt;p&gt;Have you ever had the need to compare interfaces of two versions of the same framework?&lt;/p&gt;
&lt;p&gt;If you have, then &lt;a rel=&quot;nofollow&quot; title=&quot;ApiChange on CodePlex&quot; target=&quot;_blank&quot; href=&quot;http://apichange.codeplex.com/&quot;&gt;ApiChange&lt;/a&gt; is a tool for you. It’s open source, powerful and easy to use &lt;img src=&quot;http://www.lybecker.com/blog/wp-includes/images/smilies/simple-smile.png&quot; alt=&quot;:-)&quot; class=&quot;wp-smiley&quot; style=&quot;height:1em;max-height:1em;&quot;/&gt;&lt;/p&gt;
&lt;p&gt;I gave it a spin comparing current trunk version 2.9.2 of Lucene.Net with the latest official release version 2.4.0.&lt;/p&gt;
&lt;p&gt;I downloaded ApiChange and ran the following command in a command prompt:&lt;/p&gt;
&lt;pre&gt;
ApiChange.exe -Diff -old C:&amp;#92;Lucene.Net_2_4_0&amp;#92;Lucene.Net.dll -new C:&amp;#92;trunk&amp;#92;Lucene.Net.dll
&lt;/pre&gt;
&lt;p&gt;The output &lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/BreakingChangesInLucene.txt&quot;&gt;lists all the differences&lt;/a&gt;, but here is a summary:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;23 public types where removed&lt;/li&gt;
&lt;li&gt;96 public types where added&lt;/li&gt;
&lt;li&gt;158 public types where changed&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cool little tool with other features such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Diff public types for breaking changes.&lt;/li&gt;
&lt;li&gt;Who uses a method?&lt;/li&gt;
&lt;li&gt;Who uses a type?&lt;/li&gt;
&lt;li&gt;Who uses implements an interface?&lt;/li&gt;
&lt;li&gt;Who references me?&lt;/li&gt;
&lt;li&gt;What format has the binary (32/64, Managed C++, Pure IL, Unmanaged)?&lt;/li&gt;
&lt;li&gt;Search for all event subscribers and unsubscribers.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It’s based on &lt;a rel=&quot;nofollow&quot; title=&quot;Mono Cecil's website&quot; target=&quot;_blank&quot; href=&quot;http://www.mono-project.com/Cecil&quot;&gt;Mono Cecil&lt;/a&gt; – a free IL parser, and not reflection as I initial thought. &lt;a rel=&quot;nofollow&quot; title=&quot;ApiChange author blog post ApiChange Is Released!&quot; target=&quot;_blank&quot; href=&quot;http://geekswithblogs.net/akraus1/archive/2010/06/03/140207.aspx&quot;&gt;Go check it out…&lt;/a&gt;&lt;/p&gt;
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/QBwtOew-MaI&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=667</guid>
         <pubDate>Tue, 08 Jun 2010 05:59:09 +0000</pubDate>
      </item>
      <item>
         <title>Levels of reuse in Software Development</title>
         <link>http://feedproxy.google.com/~r/AndersLybecker/~3/LY7Xi4H7vJs/</link>
         <description>&lt;p&gt;&lt;a rel=&quot;nofollow&quot; target=&quot;_blank&quot; href=&quot;http://www.lybecker.com/blog/wp-content/uploads/Softwarepuzzle.jpg&quot;&gt;&lt;img class=&quot;alignright size-full wp-image-662&quot; title=&quot;SoftwarePuzzle&quot; src=&quot;http://www.lybecker.com/blog/wp-content/uploads/Softwarepuzzle.jpg&quot; alt=&quot;&quot; width=&quot;165&quot; height=&quot;153&quot;/&gt;&lt;/a&gt;One of the promises of object-orientation is reuse. Developing new software systems is expensive, and maintaining them is even more expensive. Reuse is therefore sensible in both business and technology perspectives.&lt;/p&gt;
&lt;p&gt;With assistance of Erich Gamma, I have identified four levels of reuse.&lt;/p&gt;
&lt;h4&gt;First level of reuse: Copy/paste&lt;/h4&gt;
&lt;p&gt;Duplicating code or functionality makes it easy to reuse it. It’s a real timesaver at first, but keeping all the duplicates up-to-date and maintaining them is horrifying task. Not to mention the problems when forgetting to update one or more duplicates…&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Copy and paste programming is a pejorative term to describe highly repetitive computer programming code apparently produced by copy and paste operations. It is frequently symptomatic of a lack of programming competence, or an insufficiently expressive development environment, as subroutines or libraries would normally be used instead. In certain contexts it has legitimate value, if used with care.” &lt;a rel=&quot;nofollow&quot; title=&quot;Copy/past programming on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Copy_and_paste_programming&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h4&gt;&lt;strong&gt;Second level of reuse: Class libraries&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Reuse at class level or a set of classes in a software library is common and also fairly easy with object-oriented languages.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“Libraries contain code and data that provide services to independent programs. This allows the sharing and changing of code and data in a modular fashion. Some executables are both standalone programs and libraries, but most libraries are not executables …” &lt;a rel=&quot;nofollow&quot; title=&quot;Software Libraries on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Library_(computer_science)&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h4&gt;&lt;strong&gt;Third level of reuse: Design Patterns&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;Patterns allow you to reuse design ideas and concepts independent of concrete code.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;“In software engineering, a design pattern is a general reusable solution to a commonly occurring problem in software design. A design pattern is not a finished design that can be transformed directly into code. It is a description or template for how to solve a problem that can be used in many different situations. Object-oriented design patterns typically show relationships and interactions between classes or objects, without specifying the final application classes or objects that are involved.” &lt;a rel=&quot;nofollow&quot; title=&quot;Design Patterns on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Design_pattern_(computer_science)&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h4&gt;&lt;strong&gt;Fourth level of reuse: Frameworks&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;An object-oriented abstract design to solve a specific problem – often very specialized, like Unit Testing frameworks and Object-Relational Mapping frameworks, but can be large, complex or domain specific.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&amp;#8220;A software framework … is an abstraction in which common code providing generic functionality can be selectively overridden or specialized by user code providing specific functionality. Frameworks are a special case of software libraries in that they are reusable abstractions of code wrapped in a well-defined API, yet they contain some key distinguishing features that separate them from normal libraries.&amp;#8221; &lt;a rel=&quot;nofollow&quot; title=&quot;Software Frameworks on Wikipedia&quot; target=&quot;_blank&quot; href=&quot;http://en.wikipedia.org/wiki/Software_framework&quot;&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It’s all about being pragmatic &amp;#8211; not all software will reach fourth level of reuse and will be structured as frameworks &amp;#8211; frankly it shouldn’t. That said; copy/past style development is unquestionably a wrong path.&lt;/p&gt;
&lt;p&gt;What level is your company at?&lt;/p&gt;
&lt;div class=&quot;zemanta-pixie&quot; style=&quot;margin-top:10px;height:15px;&quot;&gt;&lt;span class=&quot;zem-script more-related pretty-attribution&quot;&gt;&lt;/span&gt;&lt;/div&gt; 
&lt;img src=&quot;http://feeds.feedburner.com/~r/AndersLybecker/~4/LY7Xi4H7vJs&quot; height=&quot;1&quot; width=&quot;1&quot; alt=&quot;&quot;/&gt;</description>
         <author>Anders Lybecker</author>
         <guid isPermaLink="false">http://www.lybecker.com/blog/?p=656</guid>
         <pubDate>Tue, 01 Jun 2010 06:52:33 +0000</pubDate>
      </item>
   </channel>
</rss>
<!-- fe8.yql.bf1.yahoo.com compressed/chunked Thu Oct  1 22:41:30 UTC 2015 -->
