[{"content":"Betatalks is a long-running video and podcast series I created to make useful technical conversations available to the wider developer community.\nMore than 130 episodes in, the format is still straightforward: invite people who know their subject, ask practical questions, and leave enough room for the interesting parts of the conversation.\nWatch #The Betatalks video archive on YouTube covers software development, .NET, Azure, cloud platforms, architecture, developer tooling, and community stories.\nListen #Betatalks the Podcast goes deeper with guests from across the software industry. Listen from the podcast site or use the links there to open it in your preferred podcast app.\nJoin the conversation #Betatalks has grown through its guests and community. The Betatalks Discord is the place to discuss episodes, suggest subjects, and meet other viewers and listeners.\nInterested in joining an episode or suggesting a guest? Contact me.\n","date":"19 August 2026","permalink":"https://www.rickvandenbosch.net/betatalks/","section":"Rick van den Bosch","summary":"\u003cp\u003e\u003cstrong\u003eBetatalks is a long-running video and podcast series I created to make useful technical conversations available to the wider developer community.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eMore than 130 episodes in, the format is still straightforward: invite people who know their subject, ask practical questions,\nand leave enough room for the interesting parts of the conversation.\u003c/p\u003e","title":"Betatalks"},{"content":"Cloud concepts without the cloud-speak.\nCloud, Explained is an upcoming video series for people who are new to cloud computing and Azure. It will make the concepts clear in simple, practical terms, without assuming years of platform experience.\nEpisodes are coming soon.\n","date":null,"permalink":"https://www.rickvandenbosch.net/cloud-explained/","section":"Cloud, Explained","summary":"\u003cp\u003e\u003cstrong\u003eCloud concepts without the cloud-speak.\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eCloud, Explained is an upcoming video series for people who are new to cloud computing and Azure. It will make the concepts\nclear in simple, practical terms, without assuming years of platform experience.\u003c/p\u003e","title":"Cloud, Explained"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/","section":"Rick van den Bosch","summary":"","title":"Rick van den Bosch"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/news/","section":"News","summary":"","title":"News"},{"content":"(banner image: Microsoft Azure December 2022 hero image)\nPast September marked my ten-year employment at Betabit. And it has been one wild ride! I’ve been blessed to be able to do some awesome things like helping customers make the transition to the cloud, organizing the internal Hack Yourself First workshop by Troy Hunt, speaking at conferences internationally, becoming a Microsoft Azure MVP, recording the Betatalks videos and most recently Betatalks the Podcast with lots of great guests, among who Scott Hanselman!\nBesides all of these achievements we’ve also known less fortunate times, like when my wife fell very ill (she’s fine now 🙏🏻) and when a herniated disc incapacitated me for several months (I\u0026rsquo;m fine now, too 🙏🏻).\nThrough all of these times, both happy and sad, the great people at Betabit always had my back, supported me. This was the reason why the choice I’ve made was a tough one to make. Still I did make the choice to challenge myself by switching gears:\nOn January 1st I will be joining Microsoft as a Digital Cloud Solution Architect.\nAlthough naming people opens up the possibility of forgetting someone, I would really like to take this opportunity to explicitly thank the founders of Betabit: Luc \u0026amp; Olav, the person who introduced me to the company and who I have worked with a lot: Sjoerd and of course my partner in crime for lots of the awesome things I have been able to do: Oscar. Next to this, thank you to everyone who I haven’t mentioned explicitly for the great time we’ve spent together. You are all awesome.\nAnd of course: it’s a small world, I’m sure we’ll meet again. 🤗\n","date":"16 November 2022","permalink":"https://www.rickvandenbosch.net/news/switching-gears-2023-edition/","section":"News","summary":"\u003cp\u003e\u003cem\u003e(banner image: \u003ca href=\"https://azure.microsoft.com/en-us/\" target=\"_blank\" rel=\"noreferrer\"\u003eMicrosoft Azure\u003c/a\u003e December 2022 hero image)\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003ePast September marked my ten-year employment at \u003ca href=\"https://www.betabit.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eBetabit\u003c/a\u003e. And it has been one wild ride! I’ve been blessed to be\nable to do some awesome things like helping customers make the transition to the cloud, organizing the internal Hack Yourself First workshop\nby Troy Hunt, speaking at conferences internationally, becoming a Microsoft Azure MVP, recording the\n\u003ca href=\"https://www.youtube.com/playlist?list=PLCLCtgDNNiJR_LDx6RT8X50VrKAH3_49B\" target=\"_blank\" rel=\"noreferrer\"\u003eBetatalks videos\u003c/a\u003e and most recently\n\u003ca href=\"https://podcast.betatalks.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eBetatalks the Podcast\u003c/a\u003e with lots of great guests, among who \u003ca href=\"https://www.hanselman.com\" target=\"_blank\" rel=\"noreferrer\"\u003eScott Hanselman\u003c/a\u003e!\u003c/p\u003e","title":"Switching Gears 2023 edition"},{"content":"The past couple of months I pushed myself to get some Azure certifications, so here\u0026rsquo;s where I am right now:\nExams # AZ-900: Azure Fundamentals AZ-104: Microsoft Azure Administrator AZ-204: Developing Solutions for Microsoft Azure AZ-305: Designing Microsoft Azure Infrastructure Solutions AZ-400: Designing and Implementing Microsoft DevOps Solutions DP-900: Azure Data Fundamentals DP-203: Data Engineering on Microsoft Azure Certifications # Microsoft Certified: Azure Fundamentals Microsoft Certified: Azure Administrator Associate Microsoft Certified: DevOps Engineer Expert Microsoft Certified: Azure Solutions Architect Expert Microsoft Certified: Azure Data Fundamentals Microsoft Certified: Azure Data Engineer Associate Not sure what\u0026rsquo;s next, since there\u0026rsquo;s so much to learn! Currently I am looking at Security and Power Platform.\nYou can see all of my badges on my Credly profile.\n","date":"19 July 2022","permalink":"https://www.rickvandenbosch.net/news/2022-07-15-certifications/","section":"News","summary":"\u003cp\u003eThe past couple of months I pushed myself to get some Azure certifications, so here\u0026rsquo;s where I am right now:\u003c/p\u003e\n\u003ch2 id=\"exams\" class=\"relative group\"\u003eExams \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#exams\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cul\u003e\n\u003cli\u003eAZ-900: Azure Fundamentals\u003c/li\u003e\n\u003cli\u003eAZ-104: Microsoft Azure Administrator\u003c/li\u003e\n\u003cli\u003eAZ-204: Developing Solutions for Microsoft Azure\u003c/li\u003e\n\u003cli\u003eAZ-305: Designing Microsoft Azure Infrastructure Solutions\u003c/li\u003e\n\u003cli\u003eAZ-400: Designing and Implementing Microsoft DevOps Solutions\u003c/li\u003e\n\u003cli\u003eDP-900: Azure Data Fundamentals\u003c/li\u003e\n\u003cli\u003eDP-203: Data Engineering on Microsoft Azure\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"certifications\" class=\"relative group\"\u003eCertifications \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#certifications\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cul\u003e\n\u003cli\u003eMicrosoft Certified: Azure Fundamentals\u003c/li\u003e\n\u003cli\u003eMicrosoft Certified: Azure Administrator Associate\u003c/li\u003e\n\u003cli\u003eMicrosoft Certified: DevOps Engineer Expert\u003c/li\u003e\n\u003cli\u003eMicrosoft Certified: Azure Solutions Architect Expert\u003c/li\u003e\n\u003cli\u003eMicrosoft Certified: Azure Data Fundamentals\u003c/li\u003e\n\u003cli\u003eMicrosoft Certified: Azure Data Engineer Associate\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eNot sure what\u0026rsquo;s next, since there\u0026rsquo;s so much to learn! Currently I am looking at Security and Power Platform.\u003c/p\u003e","title":"Recent certifications"},{"content":"When I first moved my website to Hugo I hosted it on Static website hosting in Azure Storage. And although it\u0026rsquo;s a good way to host your website, there are some extra steps you need to take as soon as you need more than just a place to put your static assets. For instance:\nCORS is not supported No support for HTTPS with custom domains Unable to configure headers For more information on the differences between static website hosting in Azure Storage and Static Web Apps, see the Azure Static Web Apps: a first look blog post.\nThe actual migration didn\u0026rsquo;t take too long since static web apps supports Hugo out of the box, and it automatically creates a pipeline to push the content. I\u0026rsquo;m still working on the configuration of the Enterprise-grade Edge, it will probably result in a blog post later on 🤓\n","date":"14 July 2022","permalink":"https://www.rickvandenbosch.net/news/website-migrated-to-static-web-app/","section":"News","summary":"\u003cp\u003eWhen I first moved my website to \u003ca href=\"https://gohugo.io\" target=\"_blank\" rel=\"noreferrer\"\u003eHugo\u003c/a\u003e I hosted it on\n\u003ca href=\"https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blob-static-website\" target=\"_blank\" rel=\"noreferrer\"\u003eStatic website hosting in Azure Storage\u003c/a\u003e. And although\nit\u0026rsquo;s a good way to host your website, there are some extra steps you need to take as soon as you need more than just a place to put your\nstatic assets. For instance:\u003c/p\u003e","title":"Website migrated to Static Web App"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/api/","section":"Tags","summary":"","title":"Api"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/api-management/","section":"Tags","summary":"","title":"Api Management"},{"content":"Introduction # Azure API Management is a hybrid, multicloud management platform for APIs across all environments.\nFor more information on API Management, check out Microsoft Docs: About API Management.\nAPI Management (APIM) is an Azure service that enables you to manage APIs as first-class assets throughout their lifecycle. It consists of an API Gateway, a management plane and a developer portal. All these components are hosted in Azure and are completely managed by default. Each component has its own place in the ecosystem:\nAPI Gateway\nActs as a façade to the backend services Management Plane\nProvides full access to the API Management service capabilities Developer Portal\nUsed to discover the APIs, onboard to use them, and learn how to consume them Key components of Azure API Management Rate limits and quotas #The power of APIM is that it enables you to define different types of policies on different levels, giving you lots of power on how your APIs are being used. For instance, you can define rate limits and quotas for your APIs. By defining and checking these in APIM, you can control the consumption of your APIs early; requests that exceed the rate limit or quota will be rejected at APIM level and will not even hit your backend service.\nBut sometimes the built-in quotas might not be enough, forcing you to define your own. For one of our customers we had the requirement to have something like credit for two specific API operations. Customers would buy API-credit (separate from the product they subscribed to) for a specific amount of requests. Whenever the API is called, it checks to see if the customer still has credit available. If they have, the API is called as normal. Otherwise, the customer will get a response indicating they don\u0026rsquo;t have credit and they cannot call the API anymore, or they need to buy more credit. This last scenario should be configurable by the sales team.\nAgain, these credits are not connected to the product a customer subscribes to. And each customer might have different levels of credit for the same API operation. This flexibility combined with the requested ease of configuration made it impossible to completely manage this in APIM without building too complex code and/or policies.\nThe options #Because of the expected load of the API endpoints, calling out into for instance an Azure Function to check and see if a customer still has credit available would not be a great fit. The intial reason for this customer to move to APIM was that they were having performance issues trying to store usage statistics to enable them to implement rate limiting.\nIn the end we decided to create API middleware that would allow us to check the credit status for a specific API. But it is middleware with a smart addition\u0026hellip;\nThe solution #Since performance is key, and overshooting quota by a few requests is not an issue, the amount of requests and the customer credit can be cached in memory for a certain amount of time. At least for now. If need be we can always move it to a distributed cache like Redis. But how will we know the amount of requests a customer has made? This is where the Azure API Management REST API comes in, and more specifically the operation Quota By Counter Keys - List By Service. This API \u0026hellip;\nLists a collection of current quota counter periods associated with the counter-key configured in the policy on the specified service instance.\nThis means it allows us to retrieve the Number of times Counter was called and even the Data Transferred in KiloBytes.\n{ \u0026#34;value\u0026#34;: [ { \u0026#34;counterKey\u0026#34;: \u0026#34;xxx.xxx.xxx.xxx\u0026#34;, \u0026#34;periodKey\u0026#34;: \u0026#34;SOME_PERIODKEY\u0026#34;, \u0026#34;periodStartTime\u0026#34;: \u0026#34;2022-07-01T00:00:00Z\u0026#34;, \u0026#34;periodEndTime\u0026#34;: \u0026#34;2022-12-31T00:00:00Z\u0026#34;, \u0026#34;value\u0026#34;: { \u0026#34;callsCount\u0026#34;: 42, \u0026#34;kbTransferred\u0026#34;: 1796.5453825 } } ], \u0026#34;count\u0026#34;: 1, \u0026#34;nextLink\u0026#34;: null } Combining the information from the API Management \u0026ldquo;Quota By Counter Keys\u0026rdquo; REST API and the customer credit, we can create middleware that checks the credit against the number of requests made. Caching the information in the middleware is up to the user\u0026rsquo;s discretion.\n","date":"11 July 2022","permalink":"https://www.rickvandenbosch.net/blog/api-management-advanced-usage-quota/","section":"Blog","summary":"\u003ch2 id=\"introduction\" class=\"relative group\"\u003eIntroduction \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#introduction\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cblockquote\u003e\n\u003cp\u003eAzure API Management is a hybrid, multicloud management platform for APIs across all environments.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003eFor more information on API Management, check out Microsoft Docs:\n\u003ca href=\"https://docs.microsoft.com/en-us/azure/api-management/api-management-key-concepts\" target=\"_blank\" rel=\"noreferrer\"\u003eAbout API Management\u003c/a\u003e.\u003c/p\u003e","title":"API Management: advanced usage quota"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/apim/","section":"Tags","summary":"","title":"APIM"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/azure/","section":"Tags","summary":"","title":"Azure"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/blog/","section":"Blog","summary":"","title":"Blog"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/quota/","section":"Tags","summary":"","title":"Quota"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/","section":"Tags","summary":"","title":"Tags"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/usage/","section":"Tags","summary":"","title":"Usage"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/usage-quota/","section":"Tags","summary":"","title":"Usage Quota"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/azure-logic-apps/","section":"Tags","summary":"","title":"Azure Logic Apps"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/bot/","section":"Tags","summary":"","title":"Bot"},{"content":"The Betatalks Discord #A few months ago we\u0026rsquo;ve started a Betatalks Discord server to build a community and enable our friends to discuss all the Betatalks content we put out there. Think about the Betatalks videos on YouTube, Betatalks live events and the most recent addition: Betatalks the podcast.\nTo notify the corresponding Discord channels about new Betatalks videos or Betatalks the podcast episodes, I created Azure Logic Apps to check for new additions and post them to the webhook. Here\u0026rsquo;s how I built that.\nCreating a Discord webhook #As Discord describes it:\nWebhooks are a simple way to post messages from other apps and websites into Discord using internet magic.\nWhen you create a Discord webhook you give it a name (1), select the channel the webhook posts to (2) and you optionally upload an avatar for the webhook (3). Once you\u0026rsquo;ve done all that save your changes, copy the webhook URL (4) and you should be good to go!\nCreating a Discord webhook Calling Discord webhooks #The most basic form of calling a Discord webhook only needs either a message (in the content property), file contents (in the file property) or an array of up to 10 embed objects (in the embeds property). This means a most basic, valid payload for a Discord webhook looks like this:\n{ \u0026#34;content\u0026#34;: \u0026#34;Hello world!\u0026#34; } More information on the Discord webhook payload can be found in the Discord developer portal.\nSince calling the webhook is as easy as posting an HTTP request to an URL, you can easily test the content you\u0026rsquo;re building using tools like Postman, hoppscoth.io or Visual Studio Code using the REST Client extension.\nBuilding the Logic App #The podcast bot uses the RSS feed to determine if there are new episodes and calls the webhook. The YouTube one uses a connector to YouTube. We\u0026rsquo;ll use the latter as the example in this post.\nTriggering the workflow #The selected trigger for the Logic App is YouTube\u0026rsquo;s \u0026ldquo;When a video is uploaded by a channel\u0026rdquo;. This enables you to select any of the channels you\u0026rsquo;ve subscribed to on YouTube. You can configure how often the Logic App needs to check for new items and then the triggering part of the Logic App is done.\nTriggering the workflow On one condition #The workflow should run on one condition. Or two actually, but they can be seen as one 😁. We only want to post content to the webhook if the title of the video contains the term Betatalks but does not contain podcast. To do this, we add a Condition-action to our workflow. We toLower the video\u0026rsquo;s title and check the conditions we just specified.\nChecking the condition Calling the webhook #Now that we\u0026rsquo;ve defined our trigger and checked our conditions, we can configure calling the webhook. To do so we add an HTTP action. We configure it to do a POST to the webhook endpoint with a body we configure based on dynamic content from the trigger. As we saw in the example earlier we can create a json payload with a content property to hold the message we want to send.\nPosting the information And that\u0026rsquo;s it! To see the resulting messages yourself, check our Betatalks Discord.\nHope this helps!\n","date":"6 May 2021","permalink":"https://www.rickvandenbosch.net/blog/building-a-discord-bot-with-azure-logic-apps/","section":"Blog","summary":"\u003ch2 id=\"the-betatalks-discord\" class=\"relative group\"\u003eThe Betatalks Discord \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#the-betatalks-discord\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eA few months ago we\u0026rsquo;ve started a \u003ca href=\"https://discord.gg/KTkCXQTgjR\" target=\"_blank\" rel=\"noreferrer\"\u003eBetatalks Discord server\u003c/a\u003e to build a community and enable our friends to\ndiscuss all the Betatalks content we put out there. Think about the\n\u003ca href=\"https://www.youtube.com/playlist?list=PLCLCtgDNNiJR_LDx6RT8X50VrKAH3_49B\" target=\"_blank\" rel=\"noreferrer\"\u003eBetatalks videos\u003c/a\u003e on YouTube, Betatalks \u003cem\u003elive\u003c/em\u003e events and the\nmost recent addition: \u003ca href=\"https://podcast.betatalks.nl/\" target=\"_blank\" rel=\"noreferrer\"\u003eBetatalks the podcast\u003c/a\u003e.\u003c/p\u003e","title":"Building a Discord bot with Azure Logic Apps"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/discord/","section":"Tags","summary":"","title":"Discord"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/logic-apps/","section":"Tags","summary":"","title":"Logic Apps"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/serverless/","section":"Tags","summary":"","title":"Serverless"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/csharp/","section":"Tags","summary":"","title":"Csharp"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/dotnet5/","section":"Tags","summary":"","title":"Dotnet5"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/functions/","section":"Tags","summary":"","title":"Functions"},{"content":"Azure .NET 5 Functions #A lot has been said about .NET 5 support for Azure Functions. The most important news: it is now officially supported! 🥳 To enable running Azure Functions with .NET 5, the new Isolated Model enables Functions to run as an out-of-process language worker separate from the Azure Functions runtime. This way you\u0026rsquo;ll have full control over the Function\u0026rsquo;s dependencies on one hand, and new features like a middleware pipeline on the other. For an awesome write-up about everything around this, check out Oscar van Tol\u0026rsquo;s post Azure Functions in .NET 5 and beyond.\nAzure App Configuration # Azure App Configuration provides a service to centrally manage application settings and feature flags. Modern programs, especially programs running in a cloud, generally have many components that are distributed in nature. Spreading configuration settings across these components can lead to hard-to-troubleshoot errors during an application deployment. Use App Configuration to store all the settings for your application and secure their accesses in one place.\nWhat is Azure App Configuration?\nFor an introduction to Azure App Configuration you can check my previous post Azure App Configuration: an introduction.\nBringing the two together #To enable using App Configuration in .NET 5 Functions, you can use the AddAzureAppConfiguration extension method to add App Configuration as a source to the IConfigurationBuilder. This extension method can be found in NuGet package Microsoft.Extensions.Configuration.AzureAppConfiguration. By doing this, you can simply call GetValue on IConfiguration to get a value. Based on the order you add configuration sources to the builder, you will be able to fallback through different source.\nFor example: if you first add Environment Variables (which includes settings.json files, too!) and add App Configuration second, asking for a setting \u0026lsquo;Setting1\u0026rsquo; will first try to get that value from App Configuration. If it can\u0026rsquo;t be found there, the application will search for the setting \u0026lsquo;Setting1\u0026rsquo; in Environment variables.\nWiring up your Functions App #Program.cs:\npublic static void Main() { var host = new HostBuilder() .ConfigureAppConfiguration(c =\u0026gt; { // Add Environment Variables since we need to get the App Configuration connection string from settings. c.AddEnvironmentVariables(); // Call Build() so we can get values from the IConfiguration. var config = c.Build(); var connectionString = config.GetValue\u0026lt;string\u0026gt;(\u0026#34;AppConfigurationConnectionString\u0026#34;); // Add Azure App Configuration with the connectionstring. c.AddAzureAppConfiguration(connectionString); }) .ConfigureFunctionsWorkerDefaults() v.Build(); host.Run(); } Getting a value from App Configuration in a Function #Triggered.cs (an HttpTriggered Function):\npublic class Triggered { // Private field to hold IConfiguration private IConfiguration _configuration; // Constructor that gets IConfiguration injected public Triggered(IConfiguration configuration) { _configuration = configuration; } [Function(\u0026#34;Triggered\u0026#34;)] public HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, \u0026#34;get\u0026#34;)] HttpRequestData req, FunctionContext executionContext) { var response = req.CreateResponse(HttpStatusCode.OK); response.Headers.Add(\u0026#34;Content-Type\u0026#34;, \u0026#34;text/plain; charset=utf-8\u0026#34;); // Call GetVallue\u0026lt;string\u0026gt; on IConfiguration to get the setting, this calls out to App Configuration var settingOne = _configuration.GetValue\u0026lt;string\u0026gt;(\u0026#34;Setting1\u0026#34;); response.WriteString($\u0026#34;The value of the setting is {settingOne}!\u0026#34;); return response; } } I tried this with a complete connection string, so including the access key. Of course this can also work without an access key using a Managed Identity. This eliminates the need for having access keys in code or configuration.\nHope this helps. Happy coding!\n","date":"1 April 2021","permalink":"https://www.rickvandenbosch.net/blog/using-app-configuration-in-net5-functions/","section":"Blog","summary":"\u003ch2 id=\"azure-net-5-functions\" class=\"relative group\"\u003eAzure .NET 5 Functions \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#azure-net-5-functions\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eA lot has been said about .NET 5 support for Azure Functions. The most important news: it is now officially supported! 🥳 To enable running\nAzure Functions with .NET 5, the new \u003cstrong\u003eIsolated Model\u003c/strong\u003e enables Functions to run as an out-of-process language worker separate from the\nAzure Functions runtime. This way you\u0026rsquo;ll have full control over the Function\u0026rsquo;s dependencies on one hand, and new features like a middleware\npipeline on the other. For an awesome write-up about everything around this, check out Oscar van Tol\u0026rsquo;s post\n\u003ca href=\"https://dev.to/oscarvantol/azure-functions-in-net-5-and-beyond-26d6\" target=\"_blank\" rel=\"noreferrer\"\u003eAzure Functions in .NET 5 and beyond\u003c/a\u003e.\u003c/p\u003e","title":"Using Azure App Configuration in .NET 5 Functions"},{"content":"Early this morning I recieved an email that stated I qualified as a Microsoft Certified Trainer (MCT) for 2021/2022! It\u0026rsquo;s a great honor and I am happy to be part of this community.\nMany of Microsoft’s software and technologies are technically complex, and professionals may require training from knowledgeable trainers in aspects of their use. In order to make such training generally available, Microsoft has developed the Microsoft Certified Trainer (MCT) Program which grants membership to professional trainers and learning consultants who demonstrate and maintain technical and instructional expertise on Microsoft technologies and who have complied with all requirements.\nClick the logo to see the Acclaim badge: ","date":"4 March 2021","permalink":"https://www.rickvandenbosch.net/news/mct-2021-2022/","section":"News","summary":"\u003cp\u003eEarly this morning I recieved an email that stated I qualified as a Microsoft Certified Trainer (MCT) for 2021/2022! It\u0026rsquo;s a great honor and\nI am happy to be part of this community.\u003c/p\u003e","title":"Microsoft Certified Trainer 2021 - 2022"},{"content":"There has been a lot happening this month! Most of us are back after summer holiday and are ready to get going again. Unfortunately COVID seems to be getting a renewed grip on the country, so it\u0026rsquo;s kind of uncertain where we\u0026rsquo;re going. Let\u0026rsquo;s hope for the best. But for now, let\u0026rsquo;s go!\nServerless September #This is a good month to do so, since it\u0026rsquo;s #ServerlessSeptember! My colleague Oscar van Tol and I kicked off the month with a webinar that is now available online: \u0026ldquo;Kicking off Serverless September: the present and future of Serverless\u0026rdquo;. Since that, we\u0026rsquo;ve been creating lots and lots of Serverless content and we have shared it on our company\u0026rsquo;s Serverless September page.\nWebsite updates #The website received some love this month, too! There\u0026rsquo;s now a search-box on the top right (powered by Google). I also made some changes to the theme of the site so it makes better use of screen real estate on higher resolutions. And I\u0026rsquo;m now running a dark-themed site. This should be easier on the eyes while still having enough contrast. If there\u0026rsquo;s anything not looking good, please contact me and let me know.\nMicrosoft Ignite #There were so many cool updates at Ignite! Think about Azure Orbital, some awesome new features for Teams, the new Surface Hub 2S 85″, Static Web Apps now supporting Blazor and C# Functions and so much more! Just check out for yourself at the Ignite Session catalog or have a look at the Ignite 2020 book of news.\nSo much more to come \u0026hellip; #One of the great things about the job I have is the opportunity I get to participate in so many different types of projects. There\u0026rsquo;s a lot more comming, and I\u0026rsquo;m looking forward to it.\nOh yeah, one more thing: if there\u0026rsquo;s anything you\u0026rsquo;ld like me to write a post about, let me know!\nStay safe and healthy!\n","date":"25 September 2020","permalink":"https://www.rickvandenbosch.net/news/september-2020-update/","section":"News","summary":"\u003cp\u003eThere has been a \u003cstrong\u003elot\u003c/strong\u003e happening this month! Most of us are back after summer holiday and are ready to get going again. Unfortunately\nCOVID seems to be getting a renewed grip on the country, so it\u0026rsquo;s kind of uncertain where we\u0026rsquo;re going. Let\u0026rsquo;s hope for the best. But for now,\n\u003cstrong\u003elet\u0026rsquo;s go\u003c/strong\u003e!\u003c/p\u003e","title":"September 2020 update"},{"content":"After my two previous posts Azure Static Web Apps: a first look and Azure Static Web Apps: quirks \u0026amp; gotchas, let\u0026rsquo;s have an updated look at ASWA in this post.\nSupport for new languages 👩🏻‍💻 #Announced at Microsoft Ignite this year, Blazor and C# APIs now supported in Azure Static Web Apps. This enables .NET developers to build and deploy full stack .NET applications with Static Web Apps.\nBlazor support #Since ASWA is a static hosting option, which means we don\u0026rsquo;t have a server component*, the Blazor support for ASWA means support for Blazor WebAssembly.\nWebAssembly (abbreviated Wasm) is a binary instruction format for a stack-based virtual machine. Wasm is designed as a portable compilation target for programming languages, enabling deployment on the web for client and server applications.\nSource: webassembly.org\n* Yes, I know. Serving files is normally also done by a server. But in this case we\u0026rsquo;re talking about a server as a machine that executes server-side code for a web application. With Wasm, we don\u0026rsquo;t need this.\nC# Functions support #We can now build C# Functions as the API behind our static web app! I\u0026rsquo;ve done so to test out the functionality, more details on that under \u0026lsquo;Taking it for a spin\u0026rsquo;.\n🐍 Python Functions support #ASWA now also supports Python as your language of choice for building APIs as the backend for your static website.\nWith these languages now being supported, developers using JavaScript, C#, and Python can use ASWA to automatically build and deploy full stack applications from a GitHub repository.\nMetrics 📉 #As far as metrics go: it improved. However, we\u0026rsquo;re not there yet. It now is possible to see metrics like Requests, Function Hits and Function errors. Unfortunately I was not able to see any details after drilling into logs. This made me track down an error in my Function that turned out to be caused by a typo for way longer than I care to admit. 😳\nMetrics! Configuration 📃 #Although configuration for ASWA hasn\u0026rsquo;t changed, I now had a reason to play with it. The C# Functions API I created for the Blazor WebAssembly frontend needed a setting to connect to the right Storage Account. So I needed to add that setting to the Configuration tab. If you\u0026rsquo;ve worked with C# Functions before, you know it has a need for a setting called AzureWebJobsStorage.\nBecause I got a 500-error from the Function, I thought it might be because of the missing AzureWebJobsStorage so I added it. This didn\u0026rsquo;t solve my issue (as said earlier I made a typo in another setting) but when I went back to remove it to keep things clean the setting was gone! Seems like ASWA adds that setting for you, making sure your Functions will run.\nSo there\u0026rsquo;s probably a storage account somewhere that\u0026rsquo;s associated with my ASWA. Question is; will I be able to read the value for the AzureWebJobsStorage setting from my Function? And if so,will I be able to store information there? I might dive into that later 😇\nTaking it for a spin 🔄 #I created a fairly simple solution with a Blazor WebAssembly frontend, a Common project for entities and a C# Functions project for the API my frontend would talk to. This is not the cleanest implementation (since Table Entities are sent to the frontend) but it gets the example done. The entire solution is available on GitHub in the rickvdbosch/aswa-example02 repository. The result can be found at blue-water-047654a03. If you go to the \u0026lsquo;Fetch data\u0026rsquo; page, it will get some blogposts on static web apps from Table Storage through the C# Functions API.\nWhen you\u0026rsquo;re using C# Functions, they too are available at \u0026lt;aswa-url\u0026gt;/api/\u0026lt;function-name\u0026gt;, so you can access them from the frontend without too much hassle.\nCreating the ASWA is the same as it used to be, however this time I could select Blazor as a frontend framework. For the API I just specified the folder that contained the C# Functions and the GitHub workflow to build and deploy them was automatically created. The contents of that workflow, which is of course available in the repo as well, looked the same as the one that was created for the JavaScript Functions. That probably means the Azure/static-web-apps-deploy@v0.0.1-preview task determines what needs to be done on the fly?\nConclusion and resources 🔗 #This is the first (big) update on Static Web Apps since the launch of their Preview at Build earlier this year. At first I felt like they rushed it to announce at Build, and then had other things to attend to. Fortunately, we have Blazor and C# support now 🤓\nMicrosoft is actively listening to feedback. I even got an answer of the program manager of Azure Functions \u0026amp; Azure Static Web Apps about the quirks and gotchas post. It is very nice to see the improvevements to ASWA. And then to think it\u0026rsquo;s still only a preview \u0026hellip; 🤯\nSome interesting links to be found here:\nBlazor and C# APIs now supported in Azure Static Web Apps\nTutorial: Building a static web app with Blazor in Azure Static Web Apps\n","date":"23 September 2020","permalink":"https://www.rickvandenbosch.net/blog/azure-static-web-apps-update/","section":"Blog","summary":"\u003cp\u003eAfter my two previous posts \u003ca href=\"/blog/azure-static-web-apps-a-first-look\"\u003eAzure Static Web Apps: a first look\u003c/a\u003e and\n\u003ca href=\"/blog/azure-static-web-apps-quirks-gotchas\"\u003eAzure Static Web Apps: quirks \u0026amp; gotchas\u003c/a\u003e, let\u0026rsquo;s have an \u003cem\u003eupdated look\u003c/em\u003e at ASWA in this post.\u003c/p\u003e\n\u003ch2 id=\"support-for-new-languages-\" class=\"relative group\"\u003eSupport for new languages 👩🏻‍💻 \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#support-for-new-languages-\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eAnnounced at \u003ca href=\"https://myignite.microsoft.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eMicrosoft Ignite\u003c/a\u003e this year,\n\u003ca href=\"https://azure.microsoft.com/en-us/updates/blazor-and-c-sharp-apis-now-supported-in-azure-static-web-apps/\" target=\"_blank\" rel=\"noreferrer\"\u003eBlazor and C# APIs now supported in Azure Static Web Apps\u003c/a\u003e.\nThis enables .NET developers to build and deploy full stack .NET applications with Static Web Apps.\u003c/p\u003e","title":"Azure Static Web Apps: UPDATE"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/blazor/","section":"Tags","summary":"","title":"Blazor"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/staticwebapps/","section":"Tags","summary":"","title":"Staticwebapps"},{"content":"It\u0026rsquo;s Serverless September! The one month a year in which we can keep talking about Serverless to our friends without feeling bad about it. So here goes \u0026hellip; 🤓\nIn this post we\u0026rsquo;ll have a look at Power Automate. Because of the low code / no code nature of the service, it\u0026rsquo;s a great fit for citizen developers to automate (business) processes. And although I love to code, it\u0026rsquo;s good to also look at these other types of services that expand the Serverless universe.\n👩🏻‍💻 Citizen developers #Citizen developers aren\u0026rsquo;t new. We all know the (overly complex) spreadsheet that the entire company used, or the Access application you couldn\u0026rsquo;t do without. The term \u0026lsquo;citizen developer\u0026rsquo;, however, is new. With the rise of low code / no code platforms, citizen developers have become a valued part of IT within companies.\nA citizen developer is a user who creates new business applications for consumption by others using development and runtime environments sanctioned by corporate IT. In the past, end-user application development has typically been limited to single-user or workgroup solutions built with tools like Microsoft Excel and Access..\nSource: Gartner Information Technology Glossary - Citizen Developer 🔌 Power Platform #Power Automate is part of Microsoft Power Platform. This combines Power BI, Power Apps, Power Automate and Power Virtual Agents into a business application platform.\nPowerful alone. Better together. #The Microsoft Power Platform is more than the sum of its parts. Connect them together—and to Office 365, Dynamics 365, Azure, and hundreds of other apps—and build end-to-end business solutions.\nOne of those parts is the subject of this article:\n📜 Microsoft Flow Power Automate #Power Automate is the service formerly known as Microsoft Flow. And while the URL powerautomate.com does exist, it currently forwards to the \u0026lsquo;old\u0026rsquo; flow.microsoft.com. Just like the app is still called Flow and the entire UI still uses that name.\nPower Automate is a designer-first integration service that enables you to create automated workflows, connecting to an ever increasing collection of currently more than 350 (❗) popular services. These services include (lots of services in) Azure, Salesforce, Office 365, Twitter, GitHub, Twilio, MailChimp and Zendesk.\n🌊 Types of Flows #There are five different types of Flows you can create:\nAutomated flow: triggered by a designated event. Instant flow: triggered manually as needed. Scheduled flow: you choose when and how often it runs. UI flow: record a process in the user interface. Business process flow: guides users through a multistep process. Most of them are pretty self-explanatory, while I do think we can break these up into two different groups. Numbers 1 to 3 are flows with different types of triggers, while 4 and 5 are different types of Flow alltogether.\n🤖 Robotic Process Automation (RPA) #Robotic Process Automation (or RPA) automates interaction with a GUI, which enables you to automate repetitive, tedious tasks. In Power Automate, this is available through UI-flows. There\u0026rsquo;s a lot to be said about it, but it might be best illustrated with this video.\nEarlier this year Microsoft aqcuired Softomotive which enables Microsoft \u0026hellip;\nfurther democratizing RPA and enabling everyone to create bots to automate manual business processes.\n➕ Creating a Flow #There are three ways to create a new Flow:\nStart from a blank flow Start from a template Start from a connector Starting from a blank flow, selecting one of the types of flows, enables us to build a totally custom flow. When starting from a template, you can select from hundreds of premade templates. These templates are arranged in categories Remote work, Email, Notifications, Save to cloud and Approval. Of course you can add all kinds of customizations to have the flow meet your needs. The last way to create a flow is by starting from a connector. This enables you to start working on a flow based on the source. So if you\u0026rsquo;re not sure about how to start the flow, but you do know the connector you\u0026rsquo;re going to need for it, this might be the preferred way to start working on your flow.\n📝 Working on a Flow #Working on a flow will present you the Power Automate visual designer you see in the image below.\nPower Automate visual designer The flow in the image does the following:\nIt triggers on new tweets containing #ServerlessSeptember It passes the tweet id, text and language into Cognitive Services Text Analytics If sentiment is more than 70% positive, it sends me an email with the tweet info Now take into account that almost the entire flow is on the image\u0026hellip; only the details for the email that is to be sent is not entirely visible. But you probably get the point 😁\n💰 Licensing / Pricing #The licensing for Power Automate is dependent on a lot of factors. But here\u0026rsquo;s a simplified version of the different licensing plans:\nPlan Price Per user $15 per user/month Per user with attended RPA $40 per user/month Per flow $500 for 5 flows per month (additional flows: $100 per flow/month) Add-ons # Add-on Price AI Builder $500 per unit/month Unattended RPA $150 per bot/month Other #You get some Power Automate usage rights with for instance Microsoft 365 or Dynamics 365. The details are quite specific and depend on the type of license you have for the respective service. For more information about licensing in general, see Power Automate Pricing. For more detailed information you can download the Licensing guide.\n📫 Closing #Power Automate is a very powerful service (pun intended) that enables business users to automate workflows without writing any code. It\u0026rsquo;s UI based and leverages the power of a great amount of connectors. If you haven\u0026rsquo;t done so already, go have a look!\n","date":"22 September 2020","permalink":"https://www.rickvandenbosch.net/blog/serverless-power-automate/","section":"Blog","summary":"\u003cp\u003eIt\u0026rsquo;s Serverless September! The one month a year in which we can keep talking about Serverless to our\nfriends without feeling bad about it. So here goes \u0026hellip; 🤓\u003c/p\u003e\n\u003cp\u003eIn this post we\u0026rsquo;ll have a look at Power Automate. Because of the low code / no code nature of the\nservice, it\u0026rsquo;s a great fit for citizen developers to automate (business) processes. And although I\n\u003cstrong\u003elove\u003c/strong\u003e to code, it\u0026rsquo;s good to also look at these other types of services that expand the Serverless\nuniverse.\u003c/p\u003e","title":"Serverless: Power Automate"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/angular/","section":"Tags","summary":"","title":"Angular"},{"content":"After playing around with Azure Static Web Apps (ASWA) for some time I found some quirks and gotchas. Of course Static Web Apps are still in preview. Most of these are probably because of that fact. Despite that, it might still be interesting to know about them. That way if you run into any of them, you\u0026rsquo;ll at least know it\u0026rsquo;s not you \u0026hellip; 😉\n🏭 Creating an Azure Static Web App #It all starts when you want to create an ASWA: searching for it in the list of resources in the Azure portal doesn\u0026rsquo;t show it. 😱\nDude, where\u0026rsquo;s my Static Web App? The solution to this one is simple:\nOpen up the menu (if it\u0026rsquo;s not visible already) Click \u0026lsquo;Create a resource\u0026rsquo;\nYou could also click it on the \u0026lsquo;Home\u0026rsquo; screen of the portal Go to the \u0026lsquo;Web\u0026rsquo; category OR search for (part of) \u0026lsquo;static web app\u0026rsquo; Click \u0026lsquo;Static Web App (preview)\u0026rsquo; Go ahead, create your Azure Static Web App 🔁 Round trip configuration #Most of the things you configure when you create an Azure Static Web App automatically land in a GitHub Actions workflow. When I first created my ASWA I hooked it up to my ASWA-example repository with only the frontend configured, something like the image below.\nConfiguring a Static Web App The API location is optional, so you can use an ASWA with just a static frontend. After getting that to work I wanted to add an API, too. After going to the ASWA in the Azure Portal there\u0026rsquo;s no possibility to even see, let alone edit, most of the the configuration you entered upon creation. And it\u0026rsquo;s understandable, since it would mean interpreting everything (and anything) that people can put in that workflow. Still, the configuration can be found in a very specific part of the workflow file, so it should be possible. We\u0026rsquo;ll see where it goes in the future.\n🔑 API key #In the light of current events I changed the default branch on all of my repositories to be main. I did so after configuring my ASWA and didn\u0026rsquo;t change anything there except for updating the workflow to be triggered on this new branch name. Just before recording our Betatalks episode on Static Web Apps I created a PR to show off the awesome Environments-functionality of ASWA. Unfortunately, the GitHub Actions workflow failed on deploying with the message:\nThe content server has rejected the request with: BadRequest\nReason: No matching static site was found or the api key was invalid.\nApparently something of the name of the branch to watch made its way into the key, which was automatically created and put into a GitHub secret (secrets are environment variables that are encrypted and only exposed to selected actions). But the value for the key was nowhere to be found (or regenerated) in the Azure Portal. Not under the ASWA itself, but also not in Azure Active Directory. It\u0026rsquo;s probably something that\u0026rsquo;s currently still abstracted away. Because I didn\u0026rsquo;t want to re-do the changes I made to the workflow I (temporarily) added a branch with the original name to enable me to demo during the video.\n⚡ Functions #The Azure Function powered APIs that enable you to \u0026ldquo;encapsulate compute requirements via reusable API endpoints with dynamic scale based on demand\u0026rdquo; are shown on the Functions blade. But that\u0026rsquo;s it. They\u0026rsquo;re shown there, but there\u0026rsquo;s nothing more. Clicking them doesn\u0026rsquo;t do anything. There\u0026rsquo;s also no Functions App somewhere in the subscription that hosts the Functions. Or at least it\u0026rsquo;s not visible. I even went into Azure Resource Explorer but that only gave me errors on anything under the resource group. So\u0026hellip; there\u0026rsquo;s no way of seeing anything else about the Functions, not even any monitoring. And speaking about monitoring, \u0026hellip;\n📊 Monitoring #There\u0026rsquo;s currently no monitoring available for an ASWA. Nothing. There\u0026rsquo;s nothing available for the static web app, nor for the Functions that might be behind the frontend. No call history, no metrics or insights, zilch. And although I get ASWA is currently in preview, this feels like basic functionality for this service.\n💾 Resources # The aswa-example repository on GitHub, including the GitHub Actions workflow The resulting app at aswa.rickvandenbosch.net My previous post, Azure Static Web Apps: a first look The docs! About Static Web Apps Do you have anything I need to add here? Don\u0026rsquo;t hesitate to contact me.\n❗ DISCLAIMER #I love Azure Static Web Apps. Or maybe it\u0026rsquo;s better to say I love the promise of Azure Static Web Apps. And although this post might feel a bit like I\u0026rsquo;m bashing the service, it\u0026rsquo;s only meant to give insight into the things you might run into while working with the preview.\nHope this helps!\n","date":"15 September 2020","permalink":"https://www.rickvandenbosch.net/blog/azure-static-web-apps-quirks-gotchas/","section":"Blog","summary":"\u003cp\u003eAfter playing around with Azure Static Web Apps (ASWA) for some time I found some quirks and gotchas. Of\ncourse Static Web Apps are still in preview. Most of these are probably because of that fact. Despite that,\nit might still be interesting to know about them. That way if you run into any of them, you\u0026rsquo;ll at least\nknow it\u0026rsquo;s not you \u0026hellip; 😉\u003c/p\u003e","title":"Azure Static Web Apps: quirks \u0026 gotchas"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/typescript/","section":"Tags","summary":"","title":"Typescript"},{"content":"Although the two have a lot in common, even including parts of the name, there are a few very clear differences between Static website hosting in Azure Storage and Static Web Apps. We\u0026rsquo;ll have a look at what those differences are and take a first look at the most recent of the two: Static Web Apps.\nStatic website hosting in Azure Storage #Static website hosting is a feature you can enable free of charge on a storage account. This feature is available on general-purpose v2 Standard storage accounts and not in any other types. Enabling the feature creates a $web container where you can host your static files. It\u0026rsquo;s even possible to setup a custom domain for the static website.\nFor a step-by-step guide see the Host a static website in Azure Storage article.\nStatic Website hosting also has some limitation which are listed below.\nCORS is not supported No support for HTTPS with custom domains Unable to configure headers The second and third are relatively easy to solve by adding Azure CDN.\nThe static website can, of course, connect to an external API like for example an ASP.NET Web API or HTTP triggered Azure Functions. It doesn\u0026rsquo;t do anything for that, it just enables you to call them. If you\u0026rsquo;re the one developing this API, you\u0026rsquo;re responsible for deploying and hosting that API. That\u0026rsquo;s where Static Web Apps come in \u0026hellip;\nStatic Web Apps # A modern web app service that offers streamlined full-stack development from source code to global high availability.\nStatic Web Apps seems more like a combination of several services bound together in an Azure-branded offering. It combines the power of source code control from GitHub, CI/CD with GitHub actions, something that acts a lot like static website hosting and the awesomeness of Azure Functions. Together, they automatically build and deploy full stack web apps, consisting from to Azure from a GitHub repository.\nSo\u0026hellip; what does it do? # The workflow of Azure Static Web Apps is tailored to a developer\u0026rsquo;s daily workflow. Apps are built and deployed based off GitHub interactions.\nSeamless developer experience and CI/CD When creating an Azure Static Web Apps resource, there\u0026rsquo;s a GitHub Actions workflow created in the repo you specify upon creation. This workflow automatically builds and deploys your app, and its API if you specified it, to Azure on each push to (or PR that is accepted into) the branch you specified.\nStatic assets are hosted in Azure and will be served from points physically close to the users. The accompanying API endpoints are hosted using Azure Functions which eliminates the need for a back-end server completely.\nCreating an Azure Static Web App #When creating a Static Web App, the Azure portal asks you to specify a couple of things. Most importantly, you need to sign in with GitHub and pick the repo and branch you would like it to keep an eye on. This is the repo the GitHub Actions workflow is created in, and the branch that triggers it.\nCreating a Static Web App - Basics Next up: specifying where to find what to build and where the output goes. As you can see in the screenshot below, the first input needed is \u0026lsquo;App location\u0026rsquo;. This is the folder where the frontend you want to build can be found in the repo. It defaults to the root (/).\nThe second input, \u0026lsquo;API location\u0026rsquo;, is optional. It holds the location of the API that goes with your frontend. If you don\u0026rsquo;t want to specify it now, that\u0026rsquo;s not an issue. However, you do need some GotHub Action / YAML knowledge if you want to add it later.\nThe final input asks for the artifact location. This is the location of the build output relevant to the App location. So if youset App location to be \u0026lsquo;/src\u0026rsquo; and Artifact location to be \u0026lsquo;public\u0026rsquo;, the content at \u0026lsquo;/src/public\u0026rsquo; will be pushed to the static web app.\nCreating a Static Web App - Build After you\u0026rsquo;ve created the static web app, you would expect the app to be available at something like staticwebappname.azurestaticapps.net. Or at least I expected this. This is not the case, however. A globally unique name is generated for you and used in the URL. The static web app I created when I took the screenshots got the name mango-smoke-022564a03.\nManagement from the Azure portal #The Azure portal doesn\u0026rsquo;t provide a lot of options to manage the static web apps. Most of what you configured when creating it ended up in the GitHub Actions workflow. They do, however, link to connected resources in GitHub. Like for instance recent runs, the workflow file and the repo the static web app is connected to.\nThe portal does enable you to add some environment specific (more info on this later) configuration settings, add custom domains and look at the Functions that are connected to the static web app. You do not have any say in how those Functions are hosted, by the way. Currently only JavaScript Functions are supported. Since TypeScript Functions are transpiled into JavaScript you can use that as well.\nAnd then there\u0026rsquo;s the \u0026lsquo;Environments\u0026rsquo; menu item. This is maybe one of the most powerfull features of Static Web Apps, since \u0026hellip;\nStaging environments are automatically created when a pull request is generated, and are promoted into production once the pull request is merged.\nThat\u0026rsquo;s kind of a BIG DEAL. I tested it out by creating a separate branch on my GitHub repo, completely changing the design of the website and creating a PR. And it worked. It created a separate environment that showed me the result of what the website would look like if the Pull Request were to be merged.\nThere\u0026rsquo;s Access control (IAM) like on other Azure resources. Role management, Locks and the possibility to export a template complete the Blades for static web apps. For now.\nFinishing up #If you got all the input correct on the first attempt, you\u0026rsquo;re probably good to go. When I created my first static web app a while back I started with an Angular frontend and later on added the API. I had to change some stuff in the workflow file and search around a bit to make sure I had everything in place.\nIf you\u0026rsquo;re interested in the entire workflow file, have a look at the aswa-example repository, but I\u0026rsquo;ll add the most important part here:\n###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig app_location: \u0026#39;aswa-frontend\u0026#39; # App source code path api_location: \u0026#39;aswa-api\u0026#39; # Api source code path - optional app_artifact_location: \u0026#39;dist/aswa-frontend\u0026#39; # Built app content directory - optional app_build_command: \u0026#39;npm run build-prod\u0026#39; ###### End of Repository/Build Configurations ###### The app_build_command defines a custom command to build your frontend. By default, it tries to run the npm run build or npm run build:Azure commands. Because my frontend was an Angular app, and the documentation on Custom build commands has an example that you can run ng build --prod to build an Angular app, I thought I was good to go. Unfortunately (and of course) the Angular CLI is not installed globally, which is needed to call it to build an Angular app. That\u0026rsquo;s why I now have a Pull Request open to change the example in the documentation. 😁\nConclusion #Static Web Apps are a first (?) but very powerful step into bringing Azure and GitHub closer together. Or better yet: to having seamless integration between the two. But as an Azure service, it feels a bit like the odd man out.\nThe most important reason for me to feel that way is the fact you (currently) have no control over what\u0026rsquo;s happening in your Azure environment once you\u0026rsquo;ve created the static web apps resource. All the settings you did while creating the resource landed in the GitHub action and are not editable from the Azure portal anymore. Currently, static web apps are in preview. So this may change. But since that would mean parsing a YAML file that might have been changed entirely from the GitHub side, I think this is unlikely. But I\u0026rsquo;d love to be proven wrong there. 🤓\nResources #The example I created can be found at aswa.rickvandenbosch.net, the sourcecode is available in my aswa-example repository on GitHub.\nGot a question? Contact me!\n","date":"17 July 2020","permalink":"https://www.rickvandenbosch.net/blog/azure-static-web-apps-a-first-look/","section":"Blog","summary":"\u003cp\u003eAlthough the two have a lot in common, even including parts of the name, there are a few very clear differences between\n\u003cem\u003eStatic website hosting in Azure Storage\u003c/em\u003e and \u003cem\u003eStatic Web Apps\u003c/em\u003e. We\u0026rsquo;ll have a look at what those differences are and\ntake a first look at the most recent of the two: \u003cem\u003eStatic Web Apps\u003c/em\u003e.\u003c/p\u003e","title":"Azure Static Web Apps: a first look"},{"content":"Yesterday I recieved the awesome news I will be a Microsoft Azure MVP for another year! Another very big “thank you” to everyone who has helped me get here. 🙏🏻\nA special thank you to my employer Betabit. They support me putting lots of effort into the community and organize or sponsor events. They even enable my colleague Oscar van Tol and me to create video content.\nFind my MVP profile here: Rick van den Bosch If you have any questions, don\u0026rsquo;t hesitate to contact me. Not only technical questions are welcome; if you (are part of an underrepresented group and) want to be active in the Dutch community, please contact me and I will try to help you. Or do my best to get you in contact with someone who can.\n","date":"2 July 2020","permalink":"https://www.rickvandenbosch.net/news/azure-mvp/","section":"News","summary":"\u003cp\u003eYesterday I recieved the \u003cstrong\u003eawesome\u003c/strong\u003e news I will be a Microsoft Azure MVP for another year! Another very big “\u003cstrong\u003ethank you\u003c/strong\u003e”\nto everyone who has helped me get here. 🙏🏻\u003c/p\u003e","title":"Azure MVP 2020-2021"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/blog/","section":"Tags","summary":"","title":"Blog"},{"content":"This post is part of a series on hosting your Hugo website on Azure. Keep an eye on this website for future articles.\nIntro #As you might have seen or read somewhere, I\u0026rsquo;ve migrated the previous version of my personal website, which was in WordPress, to the current one that is made in Hugo. One of the reasons for migrating away from WordPress was the fact that due to a vulnerability in one of the WordPress modules, spammers were able to use my account to send out a lot of mails.\nAnd also: static sites rule, baby 🤓\nSetting a goal 🎯 #The final goal I set for myself was quite a big one: I wanted my site to \u0026hellip;\nhave CI/CD in place run on Azure have the latest security measures in place (like providing an HTTP Strict-Transport-Security (HSTS) Header) have a letsencrypt certificate in place\nfor both the APEX (or naked) domain and the www-domain (so I can redirect securely everywhere I needed to) have a decent score in tools like PageSpeed Insights and webhint perform good in search engines be eligible for HSTS preloading There are quite a few steps I had to take before it all started working as I wanted it, both locally and online. This first blog post is about getting the basics in place.\nThe world’s fastest framework for building websites. #Hugo is one of the most popular open-source static site generators. With its amazing speed and flexibility, Hugo makes building websites fun again.\nSetting up the dev machine 💻 #The Hugo website has a decent Getting Started in the documentation section; I advise you to start there. As a developer who focusses on Microsoft technology, I use Visual Studio Code on a Windows machine. After following the Quick Start in the Getting Started in which I installed Hugo using chocolatey (Hugo is not available in winget yet), I installed the Hugo Language and Syntax Support VS Code extensions which, among other things, provides all sorts of Hugo snippets.\nAdds syntax highlighting and snippets to Hugo files in VS Code\nHere you see how it helps setting up a figure element:\nThe Hugo snippets in action Prepare to host in Azure ☁ #I\u0026rsquo;ve chosen to host this website in Static website hosting in Azure Storage. You get static website hosting for free with a Storage Account V2. Enabling it provisions a $web container that gets a region-specific web endpoint that you can use to access the website. You set the name of the index document and, optionally, of the 404 page and you\u0026rsquo;re good to go. Static website hosting is similar to, but also very different from, Azure Static Web Apps. But more on that in a later post 😉\nStatic website hosting provides exactly that: static website hosting. It also doesn\u0026rsquo;t do (a lot) more than that. You can connect it to a custom domain, but that does not support HTTPS. There are more limitations:\nThe files in the container are case-sensitive Files are served through anonymous access requests Only read operations are available CORS is not supported It does not natively support HTTPS on custom domains Headers are not available Having a look at this list, one could say it might not be the best solution to run a blog on\u0026hellip; And yet: here we are 😁. At the end of this series, you\u0026rsquo;ll know exactly what you need to do to run a website on static website hosting.\nSource code control 👨🏻‍💻 #The source code for my website is currently in a private GitHub repo. I\u0026rsquo;m thinking about making it public, but having the same content as I have on my website be on GitHub might not be a great choice SEO-wise.\nThe reason I chose for GitHub is relatively simple: I wanted to play around with GitHub Actions a bit in a production scenario, so there\u0026rsquo;s that\u0026hellip;\nConclusion #In this post we talked about the basic things we need to do to get up and running creating a website in Hugo.\nDo you miss something in setting up a dev machine for Hugo? Are there any additional VS Code extensions that are vital for creating content? Let me know in the comments 👇🏻 or contact me.\nNext time #In the next post, we\u0026rsquo;ll look into migrating posts from WordPress and making the contact form from the default theme work, among other things.\n","date":"1 July 2020","permalink":"https://www.rickvandenbosch.net/blog/hosting-hugo-on-azure-i/","section":"Blog","summary":"\u003cp\u003e\u003cem\u003eThis post is part of a series on hosting your Hugo website on Azure. Keep an eye on this website for future articles.\u003c/em\u003e\u003c/p\u003e\n\u003ch2 id=\"intro\" class=\"relative group\"\u003eIntro \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#intro\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eAs you might have seen or read somewhere, I\u0026rsquo;ve migrated the previous version of my personal website, which was in WordPress,\nto the current one that is made in \u003ca href=\"https://gohugo.io\" target=\"_blank\" rel=\"noreferrer\"\u003eHugo\u003c/a\u003e. One of the reasons for migrating away from WordPress was the\nfact that due to a vulnerability in one of the WordPress modules, spammers were able to use my account to send out a \u003cem\u003elot\u003c/em\u003e of mails.\u003c/p\u003e","title":"Hosting your Hugo website on Azure - Part I"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/personal/","section":"Tags","summary":"","title":"Personal"},{"content":"I have been building software professionally since 1999. That has taken me from writing application code to leading teams, designing software systems, and helping organisations make architecture decisions that still work after the first diagram.\nToday I work at Microsoft as a Cloud \u0026amp; AI Senior Cloud Solution Architect. My work sits at the intersection of software engineering, cloud architecture, Azure, and the changes AI is bringing to how we design and build software.\nA few generations of software #My interest in computers started with a Commodore 64 and a tape deck. I later saved for months to add 8 MB of memory to a 486. By the time I started working in software, the web was young, .NET did not exist yet, and shipping software usually meant something very different from what it means today.\nSince then I have worked as a developer, lead developer, team lead, project leader, software architect, and cloud architect. I have used Azure since its early days and watched cloud computing move from an interesting new option to the default context for much of modern software development.\nThat history is useful, but only when it helps with today\u0026rsquo;s decisions. I am interested in which engineering practices survive technology shifts, where new tools genuinely improve the work, and where they simply move complexity somewhere less visible.\nSharing the work #I have spoken at software conferences and community events since 2012, in the Netherlands and internationally. My current topics include AI-assisted software development, software and cloud architecture, .NET, Azure, and the changing role of the software architect. The talks are practical: fewer predictions, more lessons from building and operating real systems.\nI also created and host Betatalks, a long-running video and podcast series with more than 130 episodes. It is a place for candid technical conversations with people who build software and shape the community around it.\nEngineering perspective #AI changes important parts of software development. It does not remove the need to understand systems, make trade-offs, review code, or take responsibility for what reaches production. I am particularly interested in that overlap: what experienced engineering brings to AI-assisted development, and what experienced engineers need to relearn.\nThis site is where I keep those practical notes and opinions. The archive goes back to 2005 because the path matters too.\nBackground #Before joining Microsoft in 2023, I spent more than a decade at Betabit. I have also been involved in developer communities including .NET Zuid.\nYou can find me as rickvdbosch on GitHub, LinkedIn, YouTube, and Instagram. For speaking enquiries or a conversation, use the contact page.\n","date":"29 June 2020","permalink":"https://www.rickvandenbosch.net/about/","section":"Rick van den Bosch","summary":"\u003cp\u003eI have been building software professionally since 1999. That has taken me from writing application code to leading teams,\ndesigning software systems, and helping organisations make architecture decisions that still work after the first diagram.\u003c/p\u003e","title":"About Rick"},{"content":"For speaking invitations, technical conversations, or questions about something I have published, email is the most direct route.\nEmail: rickvdbosch@outlook.com LinkedIn: rickvdbosch GitHub: rickvdbosch For speaking enquiries, include the event, audience, preferred format, and date when possible.\n","date":"29 June 2020","permalink":"https://www.rickvandenbosch.net/contact/","section":"Rick van den Bosch","summary":"\u003cp\u003eFor speaking invitations, technical conversations, or questions about something I have published, email is the most direct route.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eEmail: \u003ca href=\"mailto:rickvdbosch@outlook.com\"\u003erickvdbosch@outlook.com\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eLinkedIn: \u003ca href=\"https://www.linkedin.com/in/rickvdbosch/\" target=\"_blank\" rel=\"noreferrer\"\u003erickvdbosch\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eGitHub: \u003ca href=\"https://github.com/rickvdbosch\" target=\"_blank\" rel=\"noreferrer\"\u003erickvdbosch\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor speaking enquiries, include the event, audience, preferred format, and date when possible.\u003c/p\u003e","title":"Contact"},{"content":"I have been speaking at software conferences, user groups, and community events since 2012, both in the Netherlands and internationally. I speak as an engineer and architect: the goal is to give people ideas they can use when they return to work.\nCurrent topics # AI-assisted software development: what changes for developers, what does not, and where generated code needs experienced judgement. AI and software architecture: using AI without giving up system understanding, review, or responsibility. Cloud and software architecture: practical trade-offs in distributed systems and Azure-based platforms. .NET and Azure: patterns, platform capabilities, and lessons from building production systems. The changing role of the software architect: staying close to code while helping teams make durable decisions. Talks can be adapted for keynotes, conference sessions, or smaller technical audiences. I favour concrete examples and honest trade-offs over abstract best-practice lists.\nWhy Rick #I have built software professionally since 1999, worked with Azure since its early days, and now work at Microsoft as a Cloud \u0026amp; AI Senior Cloud Solution Architect. Alongside that work, I created and host Betatalks, with more than 130 episodes of technical conversations and community content.\nMy public sessions and event history are available on Sessionize. Some older decks remain available on SlideShare as part of the speaking archive.\nInvite me #If the perspective fits your audience, get in touch with the event, audience, format, and date. I am happy to discuss which topic would be most useful.\n","date":"29 June 2020","permalink":"https://www.rickvandenbosch.net/speaker/","section":"Rick van den Bosch","summary":"\u003cp\u003eI have been speaking at software conferences, user groups, and community events since 2012, both in the Netherlands and\ninternationally. I speak as an engineer and architect: the goal is to give people ideas they can use when they return to work.\u003c/p\u003e","title":"Speaker"},{"content":"Way back when I started blogging, I started out with Blogger. The use of that didn\u0026rsquo;t last long, because I was contacted by a colleague at the time to move over to BloggingAbout.net, which I did. They ran Community Server for over nine (9!) years before switching over to WordPress.\nLater, I migrated my blog to be part of my personal website. With everything in WordPress already, the easiest route was to use WordPress for my personal website as well since migrating would be easy.\nThe times they are a-changin' #There are several reasons for me to change from WordPress to Hugo. First of all, I had a LOT of email being sent through a vulnerable module in my website. Second, WordPress seems to be getting a bit too much for my specific needs. I only add new blog posts every now and again and I do some minor changes to my pages.\nAlso: static sites rule, baby 🤓\nThe biggest downside for switching? I have 300+ posts on my blog, and the export I ran doesn\u0026rsquo;t export all the information correctly, so I\u0026rsquo;m now manually migrating all those blogposts over\u0026hellip;\nWhat do you think? #Although there\u0026rsquo;s quite some plugins that I\u0026rsquo;m losing with the switch, I think I can add their functionality to my Hugo site manually. I\u0026rsquo;m really curios what you think about this new version of the website.\nLet me know in the comments or contact me!\n","date":"12 June 2020","permalink":"https://www.rickvandenbosch.net/news/migrated-to-hugo/","section":"News","summary":"\u003cp\u003eWay back when I started blogging, I started out with \u003ca href=\"https://www.blogger.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eBlogger\u003c/a\u003e. The use of that\ndidn\u0026rsquo;t last long, because I was contacted by a colleague at the time to move over to\n\u003ca href=\"https://bloggingabout.net/\" target=\"_blank\" rel=\"noreferrer\"\u003eBloggingAbout.net\u003c/a\u003e, which I did. They ran Community Server for over nine (9!)\nyears before switching over to \u003ca href=\"https://wordpress.com\" target=\"_blank\" rel=\"noreferrer\"\u003eWordPress\u003c/a\u003e.\u003c/p\u003e","title":"Migrated to Hugo"},{"content":"Intro #The possibilities for software development have changed tremendously over the past couple of years. Actually, it’s better to say that the number of options has increased tremendously. With the final breakthrough and continuous expansion of the cloud, the supply of different types for resources like compute and data store is larger than ever before. And while you can even find a decision tree for selecting the right type of compute to use in for instance Microsoft Azure, selecting the right type of data store to use for your application is no simple feat. This article tries to give some background on why this is the case, and to give you a direction for making that choice.\nThe good old days #Back in the good old days the choice where to put your data was simple: use a relational database. The reason for this was both practical and limiting; in most cases the only type of data store that was available, was a relational database. This was true both in software and in the knowledge of the employees. *\nBecause these databases used to run on on-premises hardware, the first solution to any kind of performance problems used to be to get more or faster hardware. When bringing your relational database to the cloud, the model is different. You cannot solve performance issues by simply giving it more or faster hardware. Well, you can if you scale up to a more performant tier, but with that come higher (recurring!) costs.\nDifferent data store types #Relational databases aren’t going out of style. Moreover, they’re still immensely popular and you can use them, too. But for the right type of data. To determine what the ‘right type of data’ actually is, you can see documentation like Choose the right data store and Criteria for choosing a data store to give you some pointers.\nNext to relational databases, these are the different categories of data store types we can determine:\nDocument database (NoSQL) Key/Value storage Graph database Search engine database Modern business software processes more and more data, from both internal and external sources. This gives us diversity in the characteristics of the data and the way this data needs to be processed. Because of this, it’s often better to use different data store types, depending on the shape of, and need for, each set of data. Systems that use multiple data tore types use what’s called polyglot persistence.\nConsequences #Does this mean you have to go back to the drawing board? Do you have to revisit the entire data structure of your application? Fortunately this isn’t the case in most situations; looking critically at what’s currently there can already give you a lot of insight. By searching for types of data that would better fit a different type of data store you can start dissecting and optimizing the data structure of your application.\nBe sure to use technical solutions that help you switch out classes that implement connecting to different data store types. You can do so by using Dependency Injection, for instance. This way, you don’t tie in too hard to one specific type of data store.\nConclusion #The choice for the type of data store is a fundamental design choice. The first and most important step is to determine the category of data store that fits best. As soon as you’ve made that choice, search for the best type of data store within that category. Factor in things like costs, available features and the ease of maintenance.\nAnd if, for some reason, you make a bad choice; don’t sweat. One of the nice things about the cloud is that it’s just as simple to tear down a data store as it is to setup a new one. 😁\nWant to discuss on the topic? Contact me!\n* Disclaimer: of course, some companies had more options than just a relational database. And yes, there were employees that for sure had knowledge of more types of systems than just such a database. But the answer of the vast majority was simple; “Data? That goes into our database.” And for a large part this is still true.\n","date":"12 June 2020","permalink":"https://www.rickvandenbosch.net/blog/the-right-tool-for-the-job-data-store/","section":"Blog","summary":"\u003ch2 id=\"intro\" class=\"relative group\"\u003eIntro \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#intro\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eThe possibilities for software development have changed tremendously over the past couple of years. Actually, it’s better to say that the number of options has \u003cem\u003eincreased\u003c/em\u003e tremendously. With the final breakthrough and continuous expansion of the cloud, the supply of different types for resources like compute and data store is larger than ever before. And while you can even find a \u003ca href=\"https://rickvdbos.ch/bbdata\" target=\"_blank\" rel=\"noreferrer\"\u003edecision tree\u003c/a\u003e for selecting the right type of compute to use in for instance \u003ca href=\"https://azure.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eMicrosoft Azure\u003c/a\u003e, selecting the right type of data store to use for your application is no simple feat. This article tries to give some background on why this is the case, and to give you a direction for making that choice.\u003c/p\u003e","title":"The right tool for the job: data store"},{"content":"To better distinguish between technical content and news I\u0026rsquo;ve added a news section to my website. This enables me to add information to my website that\u0026rsquo;s (temporarily) interesting but not blogworthy.\nDo you like the addition? Let me know below or through the contact page.\n","date":"2 June 2020","permalink":"https://www.rickvandenbosch.net/news/added-news-section/","section":"News","summary":"\u003cp\u003eTo better distinguish between technical content and news I\u0026rsquo;ve added a news section to my website. This enables\nme to add information to my website that\u0026rsquo;s (temporarily) interesting but not blogworthy.\u003c/p\u003e","title":"Added news section"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/development/","section":"Tags","summary":"","title":"Development"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/dotnet/","section":"Tags","summary":"","title":"Dotnet"},{"content":"My post Using Triggers \u0026amp; Bindings in Azure Functions V2 drew quite some attention over the past months. But there is a lot more to say about them. Time for a small follow up 😁\nCovered previously ⌚ #In my previous post we covered relative simple things like writing to blob storage and putting messages on a Service Bus. But the bindings for Azure Functions are so much more powerful.\nExample: Table storage binding ✅ #I really love Table storage, especially for simple data. Connecting to a storage account and getting the information from Table storage is not a lot of code, although it does feel like there\u0026rsquo;s a lot of plumbing there.\nLet\u0026rsquo;s start with getting everything from a Table storage table (this is a very inefficient query, by the way).\nvar connectionString = \u0026#34;\u0026lt;YOUR-CONNECTION-STRING\u0026gt;\u0026#34;;\rvar storageAccount = CloudStorageAccount.Parse(connectionString);\rvar tableClient = storageAccount.CreateCloudTableClient();\rCloudTable table = tableClient.GetTableReference(\u0026#34;\u0026lt;TABLE-NAME\u0026gt;\u0026#34;);\rawait table.CreateIfNotExistsAsync();\rvar result = await GetEntitiesFromTable(table); Just to be complete, here\u0026rsquo;s the code for the GetEntitiesFromTable method (we\u0026rsquo;ll be re-using this later on):\nprivate static async Task\u0026lt;IEnumerable\u0026lt;T\u0026gt;\u0026gt; GetEntitiesFromTable\u0026lt;T\u0026gt;(CloudTable table) where T : ITableEntity, new()\r{\rTableQuerySegment\u0026lt;T\u0026gt; querySegment = null;\rvar entities = new List\u0026lt;T\u0026gt;();\rvar query = new TableQuery\u0026lt;T\u0026gt;();\rdo\r{\rquerySegment = await table.ExecuteQuerySegmentedAsync(query, querySegment?.ContinuationToken);\rentities.AddRange(querySegment.Results);\r} while (querySegment.ContinuationToken != null);\rreturn entities;\r} So the first block of code, all 6 lines of them, are needed to:\nGet the connection string of the storage to connect to Create an instance of CloudStorageAccount Create a client to connect to Table Storage Get an instance of CloudTable for a specific table Create the table if it doesn\u0026rsquo;t exist Get all the entities from the CloudTable Simplify that 🔽 #Let\u0026rsquo;s see if Bindings can help make this simpler:\npublic static async Task Run(\r[HttpTrigger(AuthorizationLevel.Anonymous, \u0026#34;get\u0026#34;, Route = null)] HttpRequest req,\r[Table(\u0026#34;\u0026lt;TABLE-NAME\u0026gt;\u0026#34;, Connection = \u0026#34;connstring\u0026#34;)] CloudTable table,\rILogger log)\r{\rvar result = await GetEntitiesFromTable(table);\r} The Table binding on line 3 takes care of 5 of all 6 lines of code of our previous implementation. That means there\u0026rsquo;s only 1 line* of code left! We\u0026rsquo;re automatically getting an instance of CloudTable pointing to the right table in the right storage account, just by specifying the binding the right way. This is AWESOME!\n* I know we still have the GetEntitiesFromTable method, but that also didn\u0026rsquo;t count in the first example, so there 😁\nWe can of course also get an instance of CloudTable that points to a specific partition in the storage table by providing the partition key in the binding:\n[Table(\u0026#34;\u0026lt;TABLE-NAME\u0026gt;\u0026#34;, \u0026#34;\u0026lt;PARTITION-KEY\u0026gt;\u0026#34;, Connection = \u0026#34;connstring\u0026#34;)] CloudTable table Simpler! ⏬ #How about we can have the binding provide you with exactly one entity that satisfies the query you would like to perform? Well, you can. In the example below we\u0026rsquo;re using the rowKey that is specified as part of the URL for the HttpTrigger as the value for the row key of the entity in partition \u0026ldquo;\u0026lt;PARTITION-KEY\u0026gt;\u0026rdquo; we would like to retrieve.\npublic async Task\u0026lt;IActionResult\u0026gt; Run(\r[HttpTrigger(AuthorizationLevel.Anonymous, \u0026#34;get\u0026#34;, Route = \u0026#34;entities/{rowKey}\u0026#34;)] HttpRequest req,\r[Table(\u0026#34;\u0026lt;TABLE-NAME\u0026gt;\u0026#34;, \u0026#34;\u0026lt;PARTITION-KEY\u0026gt;\u0026#34;, \u0026#34;{rowKey}\u0026#34;, Connection = \u0026#34;connstring\u0026#34;)] MyEntity entity This abstracts away everything about connecting to table storage and querying for a specific entity\u0026hellip; and just provides that one entity you\u0026rsquo;re looking for as a parameter to your Function.\nGot questions? Contact me!\nHope this helps.\n","date":"28 February 2020","permalink":"https://www.rickvandenbosch.net/blog/using-table-storage-bindings-in-azure-functions/","section":"Blog","summary":"\u003cp\u003eMy post \u003ca href=\"https://www.rickvandenbosch.net/blog/using-triggers-bindings-in-azure-functions-v2/\" target=\"_blank\" rel=\"noreferrer\"\u003eUsing Triggers \u0026amp; Bindings in Azure Functions V2\u003c/a\u003e drew quite some attention over the past months. But there is a lot more to say about them. Time for a small follow up 😁\u003c/p\u003e","title":"Using (Table Storage) Bindings in Azure Functions"},{"content":"This post on using App Configuration using .NET Full Framework was based on a contribution by Steven Hack.\nMy last post Azure App Configuration: an introduction received a lot of good feedback. And one of those pieces of feedback was a question if it’s also possible to use App Configuration if you’re using Full Framework.\nThe short answer: yes, this is possible!\nFor the slightly longer answer: keep reading 🤓\nRequirements ✔ #There are a couple of things you need to keep into account if you want to use App Configuration in .NET FF. This is a list of things that had to be in place to be able to get App Configuration working with FF:\n.NET 4.7.1 or higher HttpRuntime target framework 4.6.1 NuGet: System.Configuration.ConfigurationManager NuGet: Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration Configuration 🏷 #To be able to use App Configuration in .NET FF, you need to add it as a configuration builder. You can do so in the web.config:\n\u0026lt;configuration\u0026gt;\r\u0026lt;configSections\u0026gt;\r\u0026lt;section name=\u0026#34;configBuilders\u0026#34;\rtype=\u0026#34;System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\u0026#34;\rrestartOnExternalChanges=\u0026#34;false\u0026#34;\rrequirePermission=\u0026#34;false\u0026#34; /\u0026gt;\r\u0026lt;/configSections\u0026gt;\r\u0026lt;configBuilders\u0026gt;\r\u0026lt;builders\u0026gt;\r\u0026lt;!-- Use the endpoint if you want to use Managed Identities.\rThe connection string parameter is the old conventional way.\rThe latest version of the NuGet package does not support connection string anymore.\r--\u0026gt;\r\u0026lt;add name=\u0026#34;AppConfigStore\u0026#34;\rmode=\u0026#34;Greedy\u0026#34;\rendpoint=\u0026#34;\u0026lt;YOUR_ENDPOINT\u0026gt;\u0026#34;\rconnectionString=\u0026#34;\u0026lt;YOUR_CONNECTIONSTRING\u0026gt;\u0026#34;\rtype=\u0026#34;Microsoft.Configuration.ConfigurationBuilders.AzureAppConfigurationBuilder, Microsoft.Configuration.ConfigurationBuilders.AzureAppConfiguration, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35\u0026#34; /\u0026gt;\r\u0026lt;/builders\u0026gt;\r\u0026lt;/configBuilders\u0026gt;\r\u0026lt;appSettings configBuilders=\u0026#34;AppConfigStore\u0026#34;\u0026gt;\r\u0026lt;add key=\u0026#34;Setting1\u0026#34; value=\u0026#34;local\u0026#34; /\u0026gt;\r\u0026lt;/appSettings\u0026gt;\r...\r\u0026lt;/configuration\u0026gt; Using it 🧰 #With all the plumbing out of the way, we can start using App Configuration. Look closely, since this next section contains all the code you need to get it up \u0026amp; running. Be sure not to miss anything!\nThis example reads the setting with name Setting1:\nvar setting = ConfigurationManager.AppSettings[\u0026#34;Setting1\u0026#34;]; As a result, if the setting with name ‘Setting1’ is in App Configuration, it will take that one. If it’s not there but is in the Application Settings of the Azure App Service, that’s the value that will be used. And if that is not available, but there is a setting with that name in the appsettings.json file, that will be the provided value.\nYou should be good to go!\nResources 🔗 #Thanks again to Steven Hack for providing the example. His solution was based on the article Create a .NET Framework app with Azure App Configuration.\nIf you have any questions, don’t hesitate to contact me. Hope this helps!\n","date":"17 February 2020","permalink":"https://www.rickvandenbosch.net/blog/app-configuration-full-framework/","section":"Blog","summary":"\u003cp\u003e\u003cem\u003eThis post on using App Configuration using .NET Full Framework was based on a contribution by \u003ca href=\"https://twitter.com/IIStevowII\" target=\"_blank\" rel=\"noreferrer\"\u003eSteven Hack\u003c/a\u003e.\u003c/em\u003e\u003c/p\u003e\n\u003cp\u003eMy last post \u003ca href=\"https://www.rickvandenbosch.net/blog/azure-app-configuration-an-introduction/\" target=\"_blank\" rel=\"noreferrer\"\u003eAzure App Configuration: an introduction\u003c/a\u003e received a lot of good feedback. And one of those pieces of feedback was a question if it’s also possible to use App Configuration if you’re using Full Framework.\u003c/p\u003e","title":"Azure App Configuration with .NET Full Framework"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/howto/","section":"Tags","summary":"","title":"HowTo"},{"content":"Azure App Configuration is a powerful way to manage and store application configuration on a central location. Integrating it into for instance ASP.NET (Core) is pretty straightforward. This post gives you an introduction to Azure App Configuration and a simple example of how to integrate it in ASP.NET Core.\nCreating an Azure App Configuration 🆕 #Of course there are several ways to create a specific resource in the Azure Portal. One of the simplest is to go to the portal, open up App Configuration and click the Add button. The form below will appear.\nCreating an App Configuration in the Azure Portal The globally unique name of the App Configuration resource (this will be the prefix in the URL)\nIn this case, the URL will be https://ciadr-appconfig.azconfig.io The subscription to create the App Configuration in The Resource Group to create the App Configuration in The location of the App Configuration As soon as you have all information filled in, click the Create button. That\u0026rsquo;s it! You just created your (first?) Azure App Configuration.\nUnderstanding the possibilities 🤯 #There\u0026rsquo;s a decent amount of documentation on (the possibilities of) Azure App Configuration available over at Microsoft Docs.\nAzure App Configuration provides a service to centrally manage application settings and feature flags. Modern programs, especially programs running in a cloud, generally have many components that are distributed in nature. Spreading configuration settings across these components can lead to hard-to-troubleshoot errors during an application deployment. Use App Configuration to store all the settings for your application and secure their accesses in one place.\nWhat is Azure App Configuration?\nThe two most important things available in App Configuration are 1) Feature management and 2) Keys and Values.\nOther features: Feature management 💡 #Feature flags (or feature toggles or switches) are a way of determining which feature is available for which (group of) user(s). A decent feature management solution can help you manage quick changes to feature availability on demand. To implement feature flags, your application needs to make use of them, and you need a separate storage for the feature flags and their state. I\u0026rsquo;m planning for a separate post on implementing feature flags using Azure App Configuration.\nIf you\u0026rsquo;re interested in reading more about feature flags and the possibilities App Configuration has for it, take a look at the Feature management overview documentation.\nOther features: Point-in-time snapshot ⏲ # Azure App Configuration keeps records of the precise times when a new key-value pair is created and then modified. These records form a complete timeline in key-value changes. An App Configuration store can reconstruct the history of any key value and replay its past value at any given moment, up to the present. With this feature, you can “time-travel” backward and retrieve an old key value.\nPoint-in-time snapshot\nOther features: Event handling ⚡ # Azure App Configuration events enable applications to react to changes in key-values. This is done without the need for complicated code or expensive and inefficient polling services. Instead, events are pushed through Azure Event Grid to subscribers such as Azure Functions, Azure Logic Apps, or even to your own custom HTTP listener, and you only pay for what you use.\nReacting to Azure App Configuration events\nKeys and Values 🗄 #This introduction focuses on actual configuration in App Configuration. In the end, configuration of an application is (roughly) nothing more than some values you can request based on their keys. Think about the AppSettings element in a web.config file.\nKeys and values in App Configuration give you exactly that. And more 🤓.\nConfiguration explorer #For managing keys and values, you go to the Configuration explorer. This immediately shows us there\u0026rsquo;s more than just keys and values\u0026hellip;\nConfiguration explorer There are three different types of filters available:\nThe date filter 📅 #As mentioned in the chapter Point-in-time snapshot, App Configuration stores a complete timeline in key-value changes. By clicking the \u0026lsquo;Select date\u0026rsquo; button, you get a date and time selector to specify the point-in-time you want to see the configuration for that exact moment.\nSelect date The filter works instantly, and will show you all settings that were there at that specified moment, and the values they had then.\nFiltering on keys 🔑 #You can filter on keys, enabling you to for instance prefix keys for specific customers. There\u0026rsquo;s some decent documentation on how to Query key values.\nIn short:\nEach key value is uniquely identified by its key plus a label that can be null. You query an App Configuration store for key values by specifying a pattern. The App Configuration store returns all key values that match the pattern and their corresponding values and attributes.\nFiltering on labels 🏷 #Labels are optional fields for a key-value pair, that can be used to differentiate key values with the same key. For instance, a key Setting1 with labels STG and PRD are actually two separate keys in an App Configuration store.\nCreate a new key-value pair #There\u0026rsquo;s a Create button there that let\u0026rsquo;s you create a new key-value-pair. If you click it, there\u0026rsquo;s another little surprise:\nNext to adding a \u0026rsquo;normal\u0026rsquo; key-value pair, you can also add a \u0026rsquo; Key vault reference\u0026rsquo;. This will, together with a Managed Identity, let the platform help you getting a secret from Key Vault without you having to write any code.\nSo the UI for actually creating a new key-value looks like this:\nCreate a new key-value The Key and Value fields speak for themselves. We talked about Labels, too. The one thing to add here is that the Label dropdown will be populated with any labels that were already used in this App Configuration. The last field in this form is that of Content type. Providing a proper content-type can enable transformations of values when they are retrieved by applications.\nWriting the code! #First, we add Azure App Configuration to the ConfigurationBuilder when creating the IHostBuilder.\npublic static IHostBuilder CreateHostBuilder(string[] args) =\u0026gt; Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder =\u0026gt; { webBuilder.UseStartup\u0026lt;Startup\u0026gt;(); webBuilder.ConfigureAppConfiguration((webHostBuilderContext, configurationBuilder) =\u0026gt; { // Comment 1. var settings = configurationBuilder.Build(); configurationBuilder.AddAzureAppConfiguration(options =\u0026gt; { // Comment 2 options.Connect(settings[\u0026#34;AppConfigurationConnectionString\u0026#34;]) .Select(KeyFilter.Any, null) .Select(KeyFilter.Any, \u0026#34;Test\u0026#34;) .Select(KeyFilter.Any, \u0026#34;Acc\u0026#34;) .Select(KeyFilter.Any, \u0026#34;Prod\u0026#34;); }); }); }); } Comments # First we build the IConfigurationBuilder to be able to access settings in the sources already added (appsettings.json). If you don\u0026rsquo;t specify a label to filter on, you only get values with a null label. As soon as you specify a label, you only get values with that label. And then the extra-good news: you can stack filters! The last filter \u0026lsquo;wins\u0026rsquo; (stacks over the rest). So this configuration roughly translates into: When there\u0026rsquo;s a setting with the label \u0026lsquo;Prod\u0026rsquo;, give me that one. If a value labeled \u0026lsquo;Prod\u0026rsquo; is not there, but there is a value labeled \u0026lsquo;Acc\u0026rsquo;, give me that one. When there is no value labeled \u0026lsquo;Acc\u0026rsquo;, but there\u0026rsquo;s a value labeled \u0026lsquo;Test\u0026rsquo;, give me that one. If there\u0026rsquo;s no value with the label \u0026lsquo;Test\u0026rsquo;, give me the one without a label. Next, to get values from App Configuration you simply inject IConfiguration into for instance your Razor Page class and get settings from it like you would in any other scenario:\n// Field for holding the IConfiguration private readonly IConfiguration _configuration; // Public property to bind against from the view public string Setting1 { get; set; } public IndexModel(IConfiguration configuration) { _configuration = configuration; } // Getting the value from the IConfiguration like you normally would. // This gets the value from App Configuration (if it\u0026#39;s in there) public void OnGet() { Setting1 = _configuration.GetValue\u0026lt;string\u0026gt;(nameof(Setting1)); } Resources #Video #I did a talk on this topic earlier this year, and I got the opportunity to talk about it in an episode of dotnetFlix. You can find the episode here:\nWorking example #For the code I used in this examples (and in the dotnetFlix video), see the GitHub repo rickvdbosch/ciadr.\nHope this helps! If you have any questions, don\u0026rsquo;t hesitate to contact me.\n","date":"6 February 2020","permalink":"https://www.rickvandenbosch.net/blog/azure-app-configuration-an-introduction/","section":"Blog","summary":"\u003cp\u003eAzure App Configuration is a powerful way to manage and store application configuration on a central location. Integrating it into for instance ASP.NET (Core) is pretty straightforward. This post gives you an introduction to Azure App Configuration and a simple example of how to integrate it in ASP.NET Core.\u003c/p\u003e","title":"Azure App Configuration: an introduction"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/eventgrid/","section":"Tags","summary":"","title":"EventGrid"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/security/","section":"Tags","summary":"","title":"Security"},{"content":"Here\u0026rsquo;s a short post I didn\u0026rsquo;t want to hold from you. As you may already know I wrote a blogpost on Using Triggers \u0026amp; Bindings in Azure Functions. It handles quite a few nice possibilities of using triggers and bindings in Azure Functions (if I may say so myself\u0026hellip; 😳). Fortunately, you learn something new every day. So I learned about Property Binding recently\u0026hellip;\nProperty Binding #Like in the HttpTriggerReturnBinding example in the functions-triggers-bindings-example GitHub repository, let\u0026rsquo;s say we have a model RequestModel that we\u0026rsquo;re receiving through a POST on an HttpTriggered Function. Here\u0026rsquo;s the RequestModel class:\npublic class RequestModel { public string Message { get; set; } public string Identifier { get; set; } } This model is automatically deserialized from the POST body by the platform: if you bind the HttpTrigger to a parameter of type RequestModel, it will be available in your Function:\n[HttpTrigger(AuthorizationLevel.Anonymous, \u0026#34;post\u0026#34;, Route = null)] RequestModel model Like that\u0026rsquo;s not enough magic already, let\u0026rsquo;s sprinkle that with an extra bit of \u0026hellip;\nImage missing\nLet\u0026rsquo;s suppose you would like your Output Binding to use the value of the Identifier property as the name for the Blob to bind against\u0026hellip;? No problem! You can do so like this:\n[FunctionName(nameof(HttpTriggerPropertyBinding))] public static async Task\u0026lt;IActionResult\u0026gt; Run( [HttpTrigger(AuthorizationLevel.Anonymous, \u0026#34;post\u0026#34;, Route = null)] RequestModel model, [Blob(\u0026#34;properties/{Identifier}.txt\u0026#34;, FileAccess.Write, Connection = \u0026#34;scs\u0026#34;)] Stream stream, ILogger log) { using var writer = new StreamWriter(stream); await writer.WriteLineAsync($\u0026#34;Message:\\t{model.Message}\u0026#34;); return new OkResult(); } You see that {Identifier} part inside of the Blob binding? It binds to the property of the model and uses the value as the Blob\u0026rsquo;s name! So a POST with a body like this:\n{ \u0026#34;message\u0026#34;: \u0026#34;This. Is. Awesome!\u0026#34;, \u0026#34;identifier\u0026#34;: \u0026#34;uniqueIdentifier\u0026#34; } \u0026hellip; would mean you get a Blob at properties/uniqueIdentifier.txt with the contents\nMessage: This. Is. Awesome!\nWorking example(s) #Want to get your hands on some actual working example? Go to the GitHub repo functions-triggers-bindings-example in general, or the HttpTriggerPropertyBinding file in particular for a working example on how to use property binding.\nHope this helps!\n","date":"29 January 2020","permalink":"https://www.rickvandenbosch.net/blog/azure-functions-binding-to-a-property/","section":"Blog","summary":"\u003cp\u003eHere\u0026rsquo;s a short post I didn\u0026rsquo;t want to hold from you. As you may already know I wrote a blogpost on \u003ca href=\"https://www.rickvandenbosch.net/blog/using-triggers-bindings-in-azure-functions-v2/\" target=\"_blank\" rel=\"noreferrer\"\u003eUsing Triggers \u0026amp; Bindings in Azure Functions\u003c/a\u003e. It handles quite a few nice possibilities of using triggers and bindings in Azure Functions (if I may say so myself\u0026hellip; 😳). Fortunately, you learn something new every day. So I learned about Property Binding recently\u0026hellip;\u003c/p\u003e","title":"Azure Functions: binding to a property"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/tip/","section":"Tags","summary":"","title":"Tip"},{"content":"Probably there\u0026rsquo;s no need for me to say why .NET Core 3.0 is a big deal. There are enough articles on that. For a great write-up see Announcing .NET Core 3.0.\nFrom the inception of the .NET Core project, we’ve added around fifty thousand .NET Framework APIs to the platform. .NET Core 3.0 closes much of the remaining capability gap with .NET Framework 4.8.\nIntroducing .NET 5\nNext to adding this massive amount of .NET Framework APIs, they\u0026rsquo;ve also added some new ones. And while they won\u0026rsquo;t be adding any extra .NET Framework APIs anymore, new APIs will keep pouring in.\nOne of the very interesting ones already available right now: System.Text.Json. To get a head start on how to use it, see Try the new System.Text.Json APIs.\nJsonNamingPolicy #The JsonNamingPolicy determines the naming policy used to convert property name to another format. Like the well-known camelCasing format. But sometimes, systems/requirements ask for a different naming policy. Today I encountered a naming policy where a property name SomeProperty would result in a Json property name some_property. There\u0026rsquo;s no naming policy for that one\u0026hellip;\nThe nice thing about the new Json APIs: we can create one ourselves!\nThe System.Text.Json serializer can read and write JSON asynchronously and is optimized for UTF-8 text [\u0026hellip;]\nBy default, we produce minified JSON.\nImmo Landwerth @ Try the new System.Text.Json APIs\nLet\u0026rsquo;s code! 🤓 #First we\u0026rsquo;re creating a custom JsonNamingPolicy to implement converting the name:\npublic class CustomJsonNamingPolicy : JsonNamingPolicy { public override string ConvertName(string name) { if (name == null) { throw new ArgumentNullException(nameof(name)); } var result = new StringBuilder(); for (var i = 0; i \u0026lt; name.Length; i++) { var c = name[i]; if (i == 0) { result.Append(char.ToLower(c)); } else { if (char.IsUpper(c)) { result.Append(\u0026#39;_\u0026#39;); result.Append(char.ToLower(c)); } else { result.Append(c); } } } return result.ToString(); } } Next up: using the newly created naming policy:\nvar options = new JsonSerializerOptions { PropertyNamingPolicy = new CustomJsonNamingPolicy() }; var result = JsonSerializer.Deserialize\u0026lt;MyClass\u0026gt;(json, options); With Json.NET we had DefaultSettings which enabled us to set settings like the contract resolver only once. With System.Text.Json this isn\u0026rsquo;t possible (yet?). There\u0026rsquo;s an open GitHub issue “Change JsonSerializer default settings” that goes into this.\nCurrent solutions/workarounds range from simply specifying the options for each call, to implementing a wrapper around JsonSerializer so you can specify the options once and then only use the wrapper.\nOf course, there are possible error scenarios with solutions, so I\u0026rsquo;ll be keeping an eye on the GitHub issue above. For now I\u0026rsquo;ve chosen the solution where I have a static instance of the desired options and I used them for each call.\npublic sealed class DefaultJsonSerializerOptions { public static readonly JsonSerializerOptions Options = new JsonSerializerOptions { IgnoreNullValues = true, PropertyNamingPolicy = new CustomJsonNamingPolicy() }; } var result = JsonSerializer.Deserialize\u0026lt;MyClass\u0026gt;(json, DefaultJsonSerializerOptions.Options); Conclusion #It\u0026rsquo;s awesome that Json serialization is now available in .NET Core 3 by default. Stuff like being able to roll your own naming policy being available from the start is great. I\u0026rsquo;ll be keeping a close eye on the future developments to see where it\u0026rsquo;s heading.\nIf you have any questions or would like to discuss, don\u0026rsquo;t hesitate to [contact me][/contact].\nThe featured image is a photo by fabio on Unsplash.\n","date":"28 October 2019","permalink":"https://www.rickvandenbosch.net/blog/creating-a-custom-jsonnamingpolicy/","section":"Blog","summary":"\u003cp\u003eProbably there\u0026rsquo;s no need for me to say why .NET Core 3.0 is a \u003cem\u003ebig deal\u003c/em\u003e. There are enough articles on that. For a great write-up see \u003ca href=\"https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0/\" target=\"_blank\" rel=\"noreferrer\"\u003eAnnouncing .NET Core 3.0\u003c/a\u003e.\u003c/p\u003e","title":"Creating a custom JsonNamingPolicy"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/error/","section":"Tags","summary":"","title":"Error"},{"content":"Yesterday I was working with one of our customers to fix an issue with an ASP.NET application throwing an error. That application threw the error on the first request coming in through Azure Front Door. When we sent a request to the original (back end) URL, the application worked fine and never threw the exception. 🤔\nTime to investigate\u0026hellip;!\nFinding the cause 🧐 #First step of course was to find the cause of the exception. With all the logging in place like Application Insights Azure Monitor that didn\u0026rsquo;t take too long. Because the application is rolled out internationally, they initially use the user\u0026rsquo;s preferred language set in the browser to determine the language to display to the user. The error was on the line where they read the UserLanguages from the incoming request. As it turns out, that property was null for the request coming from Azure Front Door.\nSolving the issue #We couldn\u0026rsquo;t find a (quick) solution to make the first request actually have all the properties expected in the ASP.NET Application. So the temporary workaround was to default to the en-us locale whenever the UserLanguages property was null. Granted, it\u0026rsquo;s kinda not OK this threw an exception instead of gracefully degrading. On the other hand: now we could see something was going wrong.\nTesting 🚪 Front Door #To test this I created a web application and put it behind the Front Door service. In that test application I iterate over all the properties of the HttpContext.HttpRequest and print them out. As far as I can see right now, there are two properties that have differences between a direct request and a request through Front Door. Both the AcceptTypes and the UserLanguages property are empty for Front Door requests, while they are absolutely filled in when directly accessing the test application.\nConclusion #I\u0026rsquo;m not quite sure what the reason is for the first Front Door request to be different from a direct request. Is it a bug? Is it intentional and if so, why? Or is it because Front Door is developed using a framework that doesn\u0026rsquo;t support these properties, having them be empty when being forwarded?\nI\u0026rsquo;ll keep looking in to this. If I find an answer, this blog post will be updated. For now I hope this post helps at least one person with the same issue.\nIf you\u0026rsquo;re running into this or other issues or have any questions, don\u0026rsquo;t hesitate to [contact me][/contact].\n","date":"10 October 2019","permalink":"https://www.rickvandenbosch.net/blog/front-door-incomplete-first-request/","section":"Blog","summary":"\u003cp\u003eYesterday I was working with one of our customers to fix an issue with an ASP.NET application throwing an error. That application threw the error on the \u003cem\u003efirst\u003c/em\u003e request coming in through Azure Front Door. When we sent a request to the original (back end) URL, the application worked fine and never threw the exception. 🤔\u003c/p\u003e","title":"Front Door incomplete first request"},{"content":"This post is part of a series on Managed Identity. For an introduction, see Managed Identity – Part I. For a post that shows you how to connect your application to different types of Azure resources using Managed Identity see Managed Identity – Part II. Stay tuned for future posts.\nIntroduction #Elaborating on Part I and Part II, this blog post will show you how to debug your Managed Identity enabled application locally.\nNormally debugging something when running it locally shouldn\u0026rsquo;t deserve its own blog post. With Managed Identity there are some things to take into account when debugging since it heavily depends on the Azure platform. So here we are 😊\nAzure Service Authentication #The first thing you need to do is configure the account to use when debugging applications from Visual Studio by checking if the correct account is selected. To do this go to Tools – Options – “Azure Service Authentication” and choose/configure the right account.\nChoose an account for your apps to authenticate and access Azure resources with when debugging from Visual Studio.\nAzure Service Authentication - Account selection When you\u0026rsquo;re running applications locally without debugging from Visual Studio, for instance by manually executing func start or running your console app, you need to do some extra magic\u0026hellip;\nDevice login #For those of you who have the Azure extension in Visual Studio Code; you\u0026rsquo;re probably familiar with the Device Login. The same process goes for logging in into command line environments. You can sign in interactively through your browser with the az login command. This used to tell you to go to https://microsoft.com/devicelogin and enter a random code as shown here:\naz login \u0026ndash;use-device-code With the most recent versions of the Azure CLI, this is even simpler. You execute az login, a browser is opened where you login to your account and you\u0026rsquo;re done. This looks like the image below. As you can see, this command automatically finds all subscriptions to which you have access right after you logged in.\nConnecting to resources #Connecting to Key Vault simply works. The AzureServiceTokenProvider has a KeyVaultTokenCallback we can pass into the constructor of the KeyVaultClient using a KeyVaultClient.AuthenticationCallback and the result is our locally running application being authenticated to connect to the Key Vault (depending on the rights we gave ourselves, of course).\nConnecting to other Azure resources while running locally, like Azure SQL for instance, is a bit more challenging. Let\u0026rsquo;s start by taking the steps necessary:\nCreate a SQL Server and SQL Database Add your user account to an AD group and set it as the AD admin * Try to connect to the database using the code from Managed Identity – Part II Currently, Microsoft accounts (like live.com, outlook.com) cannot be set as admin. Only users and security groups within your organization can be set as admin. private const string RESOURCE = \u0026#34;https://database.windows.net/\u0026#34;; private const string CONNECTIONSTRING = \u0026#34;Server=tcp:\u0026lt;YOUR_SERVER_NAME\u0026gt;.database.windows.net,1433;Initial Catalog=\u0026lt;YOUR_DATABASE_NAME\u0026gt;;\u0026#34;; using (var connection = new SqlConnection(CONNECTIONSTRING)) { var tokenProvider = new AzureServiceTokenProvider(); connection.AccessToken = await tokenProvider.GetAccessTokenAsync(RESOURCE); await connection.OpenAsync(); // Do your magic to the database! } And here is the result:\nSqlException - \u0026#34;Login failed for user \u0026#39;NT AUTHORITY\\\\ANONYMOUS LOGON\u0026#39;.\u0026#34; Why don\u0026rsquo;t I have access? # Wait\u0026hellip; what? Looking into the details, we\u0026rsquo;ll find that the call to GetAccessTokenAsync went through fine and even provided us with a token. Then why is that not working? And what\u0026rsquo;s up with that \u0026lsquo;anonymous logon\u0026rsquo;?\nEven more puzzling is the fact that, when deploying this to Azure, it actually works.\nDeconstructing the token we got using a tool like jwt.ms or jwt.io shows that the audience for the token is exactly what we expected it to be: https://database.windows.net. The issuer however seems to be off. It\u0026rsquo;s not the same as our Azure Active Directory tenant.\nNot the right issuer 😕 Apparently, when using an Microsoft account (mine\u0026rsquo;s an Outlook.com one, migrated over from the good old Hotmail days) you need to explicitly specify the tenant id you want to use. This can either be the Directory ID of your Azure Active Directory that you can find on the Azure Active Directory properties blade, or the xxx.onmicrosoft.com name associated with it. The call to GetAccessTokenAsync then changes into this:\nprivate const string TENANT_ID = \u0026#34;\u0026lt;YOUR_TENANT_ID\u0026gt;\u0026#34;; connection.AccessToken = await tokenProvider.GetAccessTokenAsync(RESOURCE, TENANT_ID); After this change, we can see the token we\u0026rsquo;re getting is actually from my Azure Active Directory tenant.\nThe right issuer! 🤓 Conclusion #Running applications locally but still leveraging the power of Managed Identity is very well possible. Although there are a few caveats. So whenever you\u0026rsquo;re running into your local user not being able to connect to an Azure Resource using Managed Identity: check if you specified the Tenant ID!\nHope this helps.\nResources #The GitHub repo rickvdbosch/managed-identity-example holds an example implementation of connecting to quite a few types of Azure resources. It will be updated regularly.\nIf you have any questions, don’t hesitate to contact me.\n","date":"2 October 2019","permalink":"https://www.rickvandenbosch.net/blog/managed-identity-part-iii/","section":"Blog","summary":"\u003cp\u003e\u003cem\u003eThis post is part of a series on Managed Identity. For an introduction, see \u003ca href=\"/blog/managed-identity-part-i/\"\u003eManaged Identity – Part I\u003c/a\u003e. For a post that shows you how to connect your application to different types of Azure resources using Managed Identity see \u003ca href=\"/blog/managed-identity-part-ii/\"\u003eManaged Identity – Part II\u003c/a\u003e. Stay tuned for future posts.\u003c/em\u003e\u003c/p\u003e","title":"Managed Identity – Part III"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/conferences/","section":"Tags","summary":"","title":"Conferences"},{"content":"Next week my colleague Daniël te Winkel and I will do a session at Techorama 2019 titled Getting sh*t done with Azure Functions (on AKS!). Or GSDwAF for short 🤓\nWe will talk about running Azure Functions in a Kubernetes deployment using Managed Identities and implementing Dependency Injection. And, even better, we\u0026rsquo;ll show you how!\nWho will we see Tuesday, October 1 • 3:00pm – 4:00pm • room 3?\nUPDATE #That. Was. AWESOME!\nWe had a great crowd, some nice feedback already and an overall very good time doing our session! The entire conference was cool. The rooms with their big screens are great (it\u0026rsquo;s in a cinema). The overall ambiance was relaxed and it is so cool meeting old and new friends. I had some very insightful conversations.\nHave a look at the image above for the super cool view we had during our talk. Cool huh?\nYou can find anything and everything related to our session here:\nhttps://www.theurlist.com/gsdwaf\nIf you have any questions, don\u0026rsquo;t hesitate to contact me.\n","date":"19 September 2019","permalink":"https://www.rickvandenbosch.net/blog/techorama-2019/","section":"Blog","summary":"\u003cp\u003eNext week my colleague \u003ca rel=\"noreferrer noopener\" href=\"https://www.linkedin.com/in/dtewinkel/\" target=\"_blank\"\u003eDaniël te Winkel\u003c/a\u003e and I will do a session at \u003ca href=\"https://www.techorama.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eTechorama 2019\u003c/a\u003e titled \u003cstrong\u003eGetting sh*t done with Azure Functions (on AKS!)\u003c/strong\u003e. Or GSDwAF for short 🤓\u003c/p\u003e\n\u003cp\u003eWe will talk about running Azure Functions in a Kubernetes deployment using Managed Identities and implementing Dependency Injection. And, even better, we\u0026rsquo;ll show you how!\u003c/p\u003e","title":"Techorama 2019"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/funny/","section":"Tags","summary":"","title":"Funny"},{"content":"Some time ago Oscar van Tol and I started creating video content for the community. We call them #Betatalks and create them because of two very important reasons:\nWe believe in sharing knowledge It\u0026rsquo;s. So. Much. Fun. 🤣 We talk about a lot of developer stuff: from “Microsoft Build 2019 Highlights” in episode 1 to “C# 8, What\u0026rsquo;s new?” in episode 4.\nThe most recent #Betatalks is episode 5: “All about configuration in Azure”. We discuss things like the options you have for configuration in Azure and how to use them? We talk about App Settings, App Configuration, Key Vault and Managed Identity (find my blog posts here: part I, part II).\nNever mis an episode of #Betatalks? Go to Betabit on Youtube and click subscribe. 🙌🏻👍🏻\nIf you have any feedback, would like to propose a topic or want to be a guest on #Betatalks don\u0026rsquo;t hesitate to contact me.\n","date":"17 September 2019","permalink":"https://www.rickvandenbosch.net/blog/video-content/","section":"Blog","summary":"\u003cp\u003eSome time ago \u003ca href=\"https://oscarvantol.nl/\" target=\"_blank\" rel=\"noreferrer\"\u003eOscar van Tol\u003c/a\u003e and I started creating video content for the community. We call them #Betatalks and create them because of two very important reasons:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eWe believe in sharing knowledge\u003c/li\u003e\n\u003cli\u003eIt\u0026rsquo;s. So. Much. Fun. 🤣\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eWe talk about a lot of developer stuff: from “Microsoft Build 2019 Highlights” in \u003ca href=\"https://www.youtube.com/watch?v=PtLLxiPFi0Q\" target=\"_blank\" rel=\"noreferrer\"\u003eepisode 1\u003c/a\u003e to “C# 8, What\u0026rsquo;s new?” in \u003ca href=\"https://www.youtube.com/watch?v=Ib1OSKzevV8\" target=\"_blank\" rel=\"noreferrer\"\u003eepisode 4\u003c/a\u003e.\u003c/p\u003e","title":"Video content 📹"},{"content":"This post is part of a series on Managed Identity. For an introduction, see Managed Identity – Part I. Stay tuned for future posts.\nIntroduction #Elaborating on Part I, this blog post will show you how to connect your application to different types of Azure resources using Managed Identity.\nTo use the Managed Identity to actually connect to Azure Resources, you\u0026rsquo;re going to need the NuGet package Microsoft.Azure.Services.AppAuthentication. This package enables a service to authenticate to Azure services using the developer’s Azure Active Directory/ Microsoft account during development, and authenticate as itself (using OAuth 2.0 Client Credentials flow) when deployed to Azure.\nKey Vault #The Azure resource that is easiest to connect to is probably Key Vault. There are two ways of connecting: through code, or by using Key Vault references (currently in preview).\nKey Vault references #With these Key Vault references you simply put a reference to a secret in Key Vault in your Application Settings, like @Microsoft.KeyVault({referenceString}) where {referenceString} is either a full URI to a secret including its version, or a set of values in the form VaultName=\u0026lt;em\u0026gt;vaultName\u0026lt;/em\u0026gt;;SecretName=\u0026lt;em\u0026gt;secretName\u0026lt;/em\u0026gt;;SecretVersion=\u0026lt;em\u0026gt;secretVersion\u0026lt;/em\u0026gt;.\nAccessing Key Vault from code #As already mentioned a couple of times, there\u0026rsquo;s an awesome NuGet package that helps you connect using Managed Identity. Within this package is the AzureServiceTokenProvider which has a KeyVaultTokenCallback. This is, not surprisingly, a callback that you can pass into the Key Vault client to create an instance that uses Managed Identity to connect to the Key Vault. In code, this looks something like this:\nprivate const string SECRET_NAME = \u0026#34;\u0026lt;YOUR_SECRET\u0026#39;S_NAME\u0026gt;\u0026#34;; private const string VAULT_URL = \u0026#34;https://\u0026lt;YOUR_VAULT\u0026#39;S_NAME\u0026gt;.vault.azure.net/\u0026#34;; var tokenProvider = new AzureServiceTokenProvider(); using (var kvc = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(tokenProvider.KeyVaultTokenCallback))) { var x = await kvc.GetSecretAsync(VAULT_URL, SECRET_NAME); } SQL #When you want to connect to Azure SQL, there\u0026rsquo;s a slightly different approach you need to take. The SqlConnection class has a property called AccessToken. And of course, the AzureServiceTokenProvider provides tokens 😁.\nWhen asking for a token, the provider needs to know what resource you\u0026rsquo;re asking a token for. Here\u0026rsquo;s an example (notice the fact there\u0026rsquo;s no username or password in the connection string!):\nprivate const string RESOURCE = \u0026#34;https://database.windows.net/\u0026#34;; private const string CONNECTIONSTRING = \u0026#34;Server=tcp:\u0026lt;YOUR_SERVER_NAME\u0026gt;.database.windows.net,1433;Initial Catalog=\u0026lt;YOUR_DATABASE_NAME\u0026gt;;\u0026#34;; using (var connection = new SqlConnection(CONNECTIONSTRING)) { var tokenProvider = new AzureServiceTokenProvider(); connection.AccessToken = await tokenProvider.GetAccessTokenAsync(RESOURCE); await connection.OpenAsync(); // Do your magic to the database! } Service Bus #As with SQL, for Service Bus you need to get a token for a specific resource too. And for Service Bus, this resource is https://servicebus.azure.net/. Using the token is just a bit different yet again.\nprivate const string NAMESPACE = \u0026#34;https://\u0026lt;YOUR_NAMESPACE\u0026gt;.servicebus.windows.net\u0026#34;; private const string QUEUE_NAME = \u0026#34;\u0026lt;YOUR_QUEUE_NAME\u0026gt;\u0026#34;; var tokenProvider = new ServiceBusTokenProvider(); var queueClient = new QueueClient(NAMESPACE, QUEUE_NAME, tokenProvider); Azure Storage #Connecting to Azure Storage using Managed Identity has the most elaborate example code. First of all you need to create a StorageCredential that you pass into for instance the CloudBlobClient. That credential takes a TokenCredential instance which needs, among other things, a method that renews a token. And when renewing a token, you need to specify the resource you need the token for.\nIn code, it looks something like this:\nprivate const string BLOB_URI = \u0026#34;\u0026lt;COMPLETE_URI_TO_A_BLOB\u0026gt;\u0026#34;; var azureServiceTokenProvider = new AzureServiceTokenProvider(); // Get the initial access token and the interval at which to refresh it. var tokenAndFrequency = await TokenRenewerAsync(azureServiceTokenProvider, CancellationToken.None); // Create a TokenCredential which can be used to pass into the StorageCredentials constructor. var tokenCredential = new TokenCredential(tokenAndFrequency.Token, TokenRenewerAsync, azureServiceTokenProvider, tokenAndFrequency.Frequency.Value); var storageCredentials = new StorageCredentials(tokenCredential); var blob = new CloudBlockBlob(new Uri(BLOB_URI), storageCredentials); var content = await blob.DownloadTextAsync(); With the TokenRenewerAsync looking a bit like this:\nprivate static async Task\u0026lt;NewTokenAndFrequency\u0026gt; TokenRenewerAsync(Object state, CancellationToken cancellationToken) { // Note: you can also specify the root URI for your storage account. const string STORAGE_RESOURCE = \u0026#34;https://storage.azure.com/\u0026#34;; var authResult = await ((AzureServiceTokenProvider)state).GetAuthenticationResultAsync(STORAGE_RESOURCE); // Renew the token 5 minutes before it expires. var next = (authResult.ExpiresOn - DateTimeOffset.UtcNow) - TimeSpan.FromMinutes(5); if (next.Ticks \u0026lt; 0) { next = default(TimeSpan); Console.WriteLine(\u0026#34;Renewing token...\u0026#34;); } // Return the new token and the next refresh time. return new NewTokenAndFrequency(authResult.AccessToken, next); } Conclusion #Managed Identities for Azure Resources are awesome. They provide a great level of security. Using it, however, might take some getting used to. Especially since there are so many different ways necessary to get a token for different types of resources.\nResources #You can find all of the examples that I\u0026rsquo;ve used in this article on GitHub: rickvdbosch/managed-identity-example. This repo will be updated regularly with new examples.\nIf you have any questions, don\u0026rsquo;t hesitate to contact me.\n","date":"13 September 2019","permalink":"https://www.rickvandenbosch.net/blog/managed-identity-part-ii/","section":"Blog","summary":"\u003cp\u003e\u003cem\u003eThis post is part of a series on Managed Identity. For an introduction, see \u003ca href=\"https://www.rickvandenbosch.net/blog/managed-identity-part-i/\" target=\"_blank\" rel=\"noreferrer\"\u003eManaged Identity – Part I\u003c/a\u003e. Stay tuned for future posts.\u003c/em\u003e\u003c/p\u003e\n\u003ch2 id=\"introduction\" class=\"relative group\"\u003eIntroduction \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#introduction\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eElaborating on \u003ca href=\"https://www.rickvandenbosch.net/blog/managed-identity-part-i/\" target=\"_blank\" rel=\"noreferrer\"\u003ePart I\u003c/a\u003e, this blog post will show you how to connect your application to different types of Azure resources using Managed Identity.\u003c/p\u003e","title":"Managed Identity – Part II"},{"content":"This post is part of a series on Managed Identity. Stay tuned for future posts.\nIntroduction #Connecting your application to a resource like Storage or a SQL database used to involve a connection string. This isn\u0026rsquo;t very secure. These settings are available through the Azure portal. So they might get compromised.\nWith the introduction of Azure Key Vault, we got a way of separating these secrets from our application configuration. We can store them in a safe, secure place. There\u0026rsquo;s only one downside: you need a connection string to connect to Key Vault. So the problem isn\u0026rsquo;t solved; we only moved it. We can still get to the connection string the application uses to get secrets from Key Vault. So anyone with access to that connection string can still access those same secrets.\nWith Managed Identity (MI), we now have a truly secure solution. This series of blog posts will dive into MI and how to use it to separate secrets from code and configuration.\nThe basics # Managed identities for Azure resources provides Azure services with an automatically managed identity in Azure Active Directory (Azure AD). You can use this identity to authenticate to any service that supports Azure AD authentication without having any credentials in your code.\nAzure AD managed identities for Azure resources documentation\nCreating a Managed Identity #To use a MI for your application, you need to create one. There are two types: a System Assigned one and a User Assigned one. A system assigned MI is directly tied to the Azure service instance it\u0026rsquo;s enabled on. A user assigned MI can be assigned to one or more Azure service instances.\nFor our examples, we\u0026rsquo;re using a System Assigned Managed Identity.\nThese Azure services currently support using system assigned managed identities to connect to Azure resources:\nVirtual Machines\nVirtual Machines Scale Sets\nApp Service\nBlueprints *\nFunctions\nLogic Apps *\nData Factory V2\nAPI Management\nContainer Instances *\nContainer Registry Tasks\n* in preview\nTo create a MI, you go to the application you want to enable MI on in the Azure Portal. Select the Identity menu item to open the Identity blade:\nThe \u0026lsquo;Identity\u0026rsquo; blade By switching the Status toggle to On, you enable the MI for your application. Of course, don\u0026rsquo;t forget to click Save.\nOK, so your application now has its own MI. What\u0026rsquo;s next?\nGiving the Managed Identity access #Next up is giving the MI access to the resource you would like it to connect to. The list of Azure services that support using managed identities for Azure resources is as follows:\nResource Manager\nKey Vault\nData Lake\nAzure SQL\nEvent Hubs *\nService Bus *\nStorage blobs and queues\nAnalysis Service\n* in preview\nTo give the MI access, go to the resource you want to connect to in the Azure Portal. Navigate to the Access Control (IAM) blade. There you can check the role assignment your MI has for the resource. Since we just created it, it shouldn\u0026rsquo;t have any. To give the MI access, add a role assignment to it:\nThe \u0026lsquo;Access control (IAM)\u0026rsquo; blade After selecting the identity and clicking save, the role will be added to the MI of the App Service. In this case rvdbbbdemoweb gets the role Reader assigned. This means the MI of the web application now has read access to the Key Vault.\nUsing the Managed Identity #To use the MI to actually read secrets from the Key Vault, add a NuGet package to your application: Microsoft.Azure.Services.AppAuthentication.\nThis NuGet package\u0026hellip;\nEnables a service to authenticate to Azure services using the developer\u0026rsquo;s Azure Active Directory/ Microsoft account during development, and authenticate as itself (using OAuth 2.0 Client Credentials flow) when deployed to Azure.\nFrom there, it\u0026rsquo;s just a couple of lines of code to access the secrets in the Key Vault without any secrets in code or config.\n// Name of the secret to get from Key Vault private const string SECRET_NAME = \u0026#34;NAME_OF_THE_SECRET\u0026#34;; // The URL to the Key Vault to get the secret from private const string VAULT_URL = \u0026#34;https://rvdbbbdemo.vault.azure.net/\u0026#34;; [...] var tokenProvider = new AzureServiceTokenProvider(); using (var kvc = new KeyVaultClient( new KeyVaultClient.AuthenticationCallback( tokenProvider.KeyVaultTokenCallback))) { var x = await kvc.GetSecretAsync(VAULT_URL, SECRET_NAME); var secret = x.Value; } As you can see, the only thing you\u0026rsquo;re specifying is the Key Vault to connect to and the name of the secret to retrieve.\nIn the next post in this series, I will be diving deeper into testing this code locally. Since you don\u0026rsquo;t have the MI available there, how can you debug your code?\nResources #You can find some working examples on GitHub: rickvdbosch/managed-identity-example. This repo will be updated regularly with new examples.\nIf you have any questions, don\u0026rsquo;t hesitate to contact me.\n","date":"11 July 2019","permalink":"https://www.rickvandenbosch.net/blog/managed-identity-part-i/","section":"Blog","summary":"\u003cp\u003e\u003cem\u003eThis post is part of a series on Managed Identity. Stay tuned for future posts.\u003c/em\u003e\u003c/p\u003e\n\u003ch2 id=\"introduction\" class=\"relative group\"\u003eIntroduction \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#introduction\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eConnecting your application to a resource like Storage or a SQL database used to involve a connection string. This isn\u0026rsquo;t very secure. These settings are available through the \u003ca href=\"https://portal.azure.com\" target=\"_blank\" rel=\"noreferrer\"\u003eAzure portal\u003c/a\u003e. So they might get compromised.\u003cbr\u003e\nWith the introduction of \u003ca href=\"https://azure.microsoft.com/en-in/services/key-vault/\" target=\"_blank\" rel=\"noreferrer\"\u003eAzure Key Vault\u003c/a\u003e, we got a way of separating these secrets from our application configuration. We can store them in a safe, secure place. There\u0026rsquo;s only one downside: you need a connection string to connect to Key Vault. So the problem isn\u0026rsquo;t solved; we only moved it. We can still get to the connection string the application uses to get secrets from Key Vault. So anyone with access to that connection string can still access those same secrets.\u003c/p\u003e","title":"Managed Identity – Part I"},{"content":"Calling an API from a Logic App is pretty straightforward. You open up the Logic App Designer and add an HTTP Action. Specify the method to use and the URI you want to call and you\u0026rsquo;re good to go!\nWhen the API you want to call uses Cookie Authentication, this seems pretty straightforward too. After all, the HTTP Action has an Authentication property you can set. However, this property doesn\u0026rsquo;t include Cookie authentication. These are the available options:\nNone Basic Client Certificate Active Directory OAuth Raw Managed Identity\n– or – Enter custom value How NOT to add Cookie Authentication The image above shows the first try to add cookie authentication in a Logic App. Unfortunately, this returns an Unauthorized. If you click the “Add new parameter” field, a little bit of magic happens which shows you this:\nWhat\u0026rsquo;s this magic?!!?! As you can see, the “Add new parameter” dropdown allows you to enable a checkbox that says “Cookie” that enables you to enter the HTTP cookie. You cannot enter the value straight in the dropdown, so close it down after you selected the checkbox and see a magic Cookie field appear underneath the Authentication field.\nThe end result looks something like this:\nThere you go \u0026hellip; ! 🤓 And that\u0026rsquo;s it! Of course you can use any cookie value. It includes options for using expressions, so you can store the cookie in for instance a variable and use it from there.\nIf you have any questions, leave a comment or contact me. Hope this helps!\n","date":"3 May 2019","permalink":"https://www.rickvandenbosch.net/blog/howto-call-an-api-with-cookie-authentication-from-a-logic-app/","section":"Blog","summary":"\u003cp\u003eCalling an API from a \u003ca href=\"https://docs.microsoft.com/en-us/azure/logic-apps/logic-apps-overview\" target=\"_blank\" rel=\"noreferrer\"\u003eLogic App\u003c/a\u003e is pretty straightforward. You open up the Logic App Designer and add an HTTP Action. Specify the method to use and the URI you want to call and you\u0026rsquo;re good to go!\u003c/p\u003e","title":"HowTo: Call an API with cookie authentication from a Logic App"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/link/","section":"Tags","summary":"","title":"Link"},{"content":"I am humbled and very proud to be awarded a Microsoft Azure MVP award today. A big “thank you” to all who helped me get here. 🙏🏻\nA special thank you to my employer Betabit who supports me putting lots of effort into the community and helps organize or sponsor events.\nIt\u0026rsquo;s strange but very cool to see social media \u0026rsquo;explode\u0026rsquo; (at least according to my standards) after my announcement. But I\u0026rsquo;m still just Rick, a guy who loves to do fun things with code, in the cloud.\nAnd of course: if you have any questions, don\u0026rsquo;t hesitate to contact me. Especially with Azure related questions!\nYou can find my MVP profile here: Rick van den Bosch ","date":"1 May 2019","permalink":"https://www.rickvandenbosch.net/blog/azure-mvp/","section":"Blog","summary":"\u003cp\u003eI am humbled and very proud to be awarded a Microsoft Azure MVP award today. A big “thank you” to all who helped me get here. 🙏🏻\u003c/p\u003e\n\u003cp\u003eA special thank you to my employer \u003ca href=\"https://www.betabit.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eBetabit\u003c/a\u003e who supports me putting lots of effort into the community and helps organize or sponsor events.\u003cbr\u003e\nIt\u0026rsquo;s strange but very cool to see social media \u0026rsquo;explode\u0026rsquo; (at least according to my standards) after my announcement. But I\u0026rsquo;m still just Rick, a guy who loves to do fun things with code, in the cloud.\u003c/p\u003e","title":"Microsoft Azure MVP"},{"content":"Last week one of my colleagues had a question: Is there a performance penalty when you add multiple Azure Blob storage bindings in an Azure Function? Or is the connection only established when you access one of those blobs? Answering this grew into a way to have Dynamic output bindings in Azure Functions.\nThis post elaborates on [blog/using-triggers-bindings-in-azure-functions-v2](Using Triggers \u0026amp; Bindings in Azure Functions V2).\nFirst try #The idea was simple:\nCreate a Blob-triggered Azure Function. Add two Azure Blob storage output bindings. Have some logic determine which of the bindings to actually use. Check if only the accessed Blob is there. Here\u0026rsquo;s what the first try looked like:\n[FunctionName(\u0026#34;DynamicOutputBindings\u0026#34;)] public static async Task Run( [BlobTrigger(\u0026#34;upload/{name}\u0026#34;, Connection = \u0026#34;scs\u0026#34;)] Stream uploadedBlob, [Blob(\u0026#34;copied-scenario1/{name}\u0026#34;, FileAccess.Write)] Stream scenarioOneStream, [Blob(\u0026#34;copied-scenario2/{name}\u0026#34;, FileAccess.Write)] Stream scenarioTwoStream, string name, ILogger log) { if (SomeValue()) { await uploadedBlob.CopyToAsync(scenarioOneStream); } else { await uploadedBlob.CopyToAsync(scenarioTwoStream); } } private static bool SomeValue() { return (DateTime.Now.Millisecond % 2) == 0; } Behold: the result of our first try! The initial idea was that only the Blob that was actually accessed would be created. But since it\u0026rsquo;s default behavior for an output binding to expect the binding to be necessary, it is created as soon as the Function is executed. So the fact that both containers hold a blob with the same name is expected.\nThe details are in the Size column. Although both containers contain the blob, only one contains the contents. This matches the logic of the Function: based on some very complex logic, only one of the two Blob bindings is copied to.\nTry again #To be able to actually have a dynamic binding, a binding that only creates a Blob when it is actually needed, we use the Binder class (the terribly complex SomeValue method was left unchanged ?) to dynamically bind against one of either Blobs.\n[FunctionName(\u0026#34;DynamicOutputBindings\u0026#34;)] public static async Task Run( [BlobTrigger(\u0026#34;upload/{name}\u0026#34;, Connection = \u0026#34;scs\u0026#34;)] Stream uploadedBlob, Binder binder, string name, ILogger log) { BlobAttribute blobAttribute; if (SomeValue()) { blobAttribute = new BlobAttribute(\u0026#34;copied-scenario1/{name}\u0026#34;, FileAccess.Write); } else { blobAttribute = new BlobAttribute(\u0026#34;copied-scenario2/{name}\u0026#34;, FileAccess.Write); } using (var output = await binder.BindAsync\u0026lt;Stream\u0026gt;(blobAttribute)) { await uploadedBlob.CopyToAsync(output); } } This results in only one of the containers having a Blob matching the uploaded one; the container that is actually needed based on the logic inside of the Azure Function.\nHope this helps.\n","date":"16 April 2019","permalink":"https://www.rickvandenbosch.net/blog/dynamic-output-bindings-in-azure-functions/","section":"Blog","summary":"\u003cp\u003eLast week one of my colleagues had a question: Is there a performance penalty when you add multiple \u003ca href=\"https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-blob\" target=\"_blank\" rel=\"noreferrer\"\u003eAzure Blob storage bindings\u003c/a\u003e in an Azure Function? Or is the connection only established when you access one of those blobs? Answering this grew into a way to have Dynamic output bindings in Azure Functions.\u003c/p\u003e","title":"Dynamic output bindings in Azure Functions"},{"content":"We\u0026rsquo;re hosting a VS2019 Launch Event at the Betabit The Hague office. Join us for some Visual Studio 2019 goodness! And maybe even some swag\u0026hellip; ?\nJoin us on April 2 for the launch of Visual Studio 2019. Learn about how Visual Studio 2019 is more productive, modern, and innovative, participate in live Q\u0026amp;As, and be the first to take the latest version for a spin.\nhttps://visualstudio.microsoft.com/vs2019-launch/\nThe agenda is as follows:\n18:00 - 19:00 Watching the “Not your average keynote” live 19:00 - 19:45 Break (including dinner) 19:45 - 20:30 Hands-on VS2019 presentation 20:30 - 21:00 Drinks! You\u0026rsquo;re welcome to join in. Since spaces are limited; sign up fast! https://www.betabit.nl/nl/kennis/visual-studio-2019-launch.\nWill I see you there April 2nd? If you have any questions, don\u0026rsquo;t hesitate to contact me.\n","date":"5 March 2019","permalink":"https://www.rickvandenbosch.net/blog/dutch-vs2019-launch-event/","section":"Blog","summary":"\u003cp\u003eWe\u0026rsquo;re hosting a VS2019 Launch Event at the \u003ca href=\"https://www.betabit.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eBetabit\u003c/a\u003e The Hague office. Join us for some Visual Studio 2019 goodness! And maybe even some swag\u0026hellip; ?\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eJoin us on April 2 for the launch of Visual Studio 2019. Learn about how Visual Studio 2019 is more productive, modern, and innovative, participate in live Q\u0026amp;As, and be the first to take the latest version for a spin.\u003cbr\u003e\n\u003ca href=\"https://visualstudio.microsoft.com/vs2019-launch/\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://visualstudio.microsoft.com/vs2019-launch/\u003c/a\u003e\u003c/p\u003e","title":"Dutch VS2019 launch event"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/visual-studio/","section":"Tags","summary":"","title":"Visual Studio"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/vs2019/","section":"Tags","summary":"","title":"VS2019"},{"content":"To start things off: yes. There\u0026rsquo;s some pretty decent documentation on all the available Triggers \u0026amp; Bindings in Azure Functions. Like this overview page. And you can also find documentation on specific bindings, like the Service Bus Binding. Nevertheless, I wanted to add to that documentation with some simple, real-world examples using triggers \u0026amp; bindings. So here goes.\nWriting to Blob Storage #Consider this very simple BlobTriggered Azure Function. It copies the triggering file into a different container in Azure Blob Storage:\npublic static async Task Run( [BlobTrigger(\u0026#34;upload/{name}\u0026#34;, Connection = \u0026#34;scs\u0026#34;)]Stream addedBlob, string name, ILogger log) { // Setting up my BlobStorageRepository (it\u0026#39;s a wrapper) var connectionString = Environment.GetEnvironmentVariable(\u0026#34;scs\u0026#34;, EnvironmentVariableTarget.Process); var blobStorageRepository = new BlobStorageRepository(connectionString); await blobStorageRepository.AddFileAsync(\u0026#34;copied\u0026#34;, name, addedBlob); } This looks like a decent solution. But bindings can make this code so much simpler!\nConsider the next code:\npublic static async Task Run( [BlobTrigger(\u0026#34;upload/{name}\u0026#34;, Connection = \u0026#34;scs\u0026#34;)]Stream addedBlob, [Blob(\u0026#34;copied/{name}\u0026#34;, FileAccess.Write, Connection = \u0026#34;scs\u0026#34;)]Stream stream, string name, ILogger log) { await addedBlob.CopyToAsync(stream); } The result here is the same! By using the out binding, you can directly access the stream in the “copied” container. And you can use the “name” parameter from the input binding.\nNext to that, it\u0026rsquo;s not just Stream you can bind to. For the out bindings, here\u0026rsquo;s the list of types you can bind to (taken from this article):\nTextWriter out string out byte[] CloudBlobStream Stream CloudBlobContainer CloudBlobDirectory ICloudBlob CloudBlockBlob CloudPageBlob CloudAppendBlob This means you can also bind against, for instance, a CloudBlobContainer to output multiple blobs.\nPutting messages on a Service Bus #When it comes to Blobs, chances are you wouldn\u0026rsquo;t want to write a large amount of them based on one trigger. Although I can think of some scenario\u0026rsquo;s\u0026hellip;\nFor Service Bus however, this scenario is far more likely. Lets have a look at how we can implement that using a ServiceBusBinding. The below Function reads a file. It then splits the contents on a space, and puts every word on a Service Bus queue as a separated message:\npublic static void Run( [BlobTrigger(\u0026#34;to-process/{name}\u0026#34;, Connection = \u0026#34;scs\u0026#34;)]Stream addedBlob, [ServiceBus(\u0026#34;process\u0026#34;, Connection = \u0026#34;sbcss\u0026#34;, EntityType = EntityType.Queue)] ICollector queueCollector, string name, ILogger log) { using (var reader = new StreamReader(addedBlob)) { var words = (await reader.ReadToEndAsync()).Split(\u0026#39; \u0026#39;); Parallel.ForEach(words.Distinct(), (word) =\u0026gt; { queueCollector.Add(word); }); } } Now that almost feels like magic ? Almost everything is abstracted away for you: connecting and writing to a Service Bus are not even your concern anymore.\nFor Service Bus out bindings, the types you can bind to are (taken from here):\nout T paramName out string out byte[] out Message ICollector or IAsyncCollector The ICollector\u0026lt;T\u0026gt; and IAsyncCollector\u0026lt;T\u0026gt; are for creating multiple messages. A message is created when you call the Add method. In async functions, use the return value or IAsyncCollector instead of an out parameter.\nThe IAsyncCollector\u0026lt;T\u0026gt;.AddAsync() behavior depends on the type of binding you\u0026rsquo;re using. And on whether or not the underlying service supports batches. If the service does, calling AddAsync only prepares the items. In that case, calling FlushAsync() actually flushes them. When a function completes successfully, FlushAsync() will be called automatically.\nThe services that currently support batching:\nSendGrid Twilio EventHub There\u0026rsquo;s an open issue on GitHub that states they Need to drive consistency for IAsyncCollector batching across bindings. Something to keep an eye on.\nHope this helps.\n","date":"28 February 2019","permalink":"https://www.rickvandenbosch.net/blog/using-triggers-bindings-in-azure-functions-v2/","section":"Blog","summary":"\u003cp\u003eTo start things off: yes. There\u0026rsquo;s some pretty decent documentation on all the available Triggers \u0026amp; Bindings in Azure Functions. Like this \u003ca href=\"https://docs.microsoft.com/en-us/azure/azure-functions/functions-triggers-bindings\" target=\"_blank\" rel=\"noreferrer\"\u003eoverview page\u003c/a\u003e. And you can also find documentation on specific bindings, like the \u003ca href=\"https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus\" target=\"_blank\" rel=\"noreferrer\"\u003eService Bus Binding\u003c/a\u003e. Nevertheless, I wanted to add to that documentation with some simple, real-world examples using triggers \u0026amp; bindings. So here goes.\u003c/p\u003e","title":"Using Triggers \u0026 Bindings in Azure Functions V2"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/devops/","section":"Tags","summary":"","title":"DevOps"},{"content":"The issue #While trying to publish an NPM package to our artifacts registry in Azure DevOps, we got an error:\nnpm failed with return code: 4294963248\nThe exit code for the task was -4048. Strange thing is that we have our build agents running on-prem, but running this task locally on our dev machines worked just fine. We found out pretty quickly that it was an authentication issue. Because of this we thought that the npm publish task of Azure DevOps might have issues with getting the authentication right for the registry. Although we specified the registry to publish to in the task, we kept getting the error. After passing in a JWT token of one of our team members into the npm publish task, it did work. This made us to be suspicuous of the npm publish task even more\u0026hellip;\nInvestigating further #After diving into the logs, my colleague noticed something was off. The registry URL we were using, was\nhttps://pkgs.dev.azure.com/\u0026lt;organization_name\u0026gt;/_packaging/\u0026lt;feedName\u0026gt;/npm/registry/ But as soon as we tried installing a package from out registry, the logs showed a different URL alltogether:\nhttps://\u0026lt;organization_name\u0026gt;.pkgs.visualstudio.com/_packaging/\u0026lt;feedUUID\u0026gt;/npm/registry. So it looks like the Azure DevOps build pipelines have issues using the Azure DevOps URL, while the issue is not there when using the VisualStudio URL.\nThe solution #The solution is as simple as can be: we changed the URL for the feed. The publish task works like a charm now.\nWe\u0026rsquo;re guessing the issue might be with the New Azure DevOps URL setting that you can find under Organization settings – Overview. Since we\u0026rsquo;re not quite sure of the impact, we haven\u0026rsquo;t tested it yet\u0026hellip; As soon as we do, I\u0026rsquo;ll update this post with the results.\n","date":"7 December 2018","permalink":"https://www.rickvandenbosch.net/blog/npm-publish-to-azure-artifacts-fails/","section":"Blog","summary":"\u003ch2 id=\"the-issue\" class=\"relative group\"\u003eThe issue \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#the-issue\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eWhile trying to publish an NPM package to our artifacts registry in Azure DevOps, we got an error:\u003c/p\u003e","title":"NPM publish to Azure Artifacts fails"},{"content":"This Thursday December 6th I\u0026rsquo;ll be speaking at Azure Thursday - December 2018. The last of the regular Azure Thursdays this year.\nThis is a group for all developers, consultants, architects and IT professionals who want to dive into for them unknown topics related to Azure. Azure Thursday are happening every first Thursday of the month and the format will be different every evening. From hand-on workshops to technical talks.\nAzure Thursdays\nI\u0026rsquo;ll be doing a session on Building a (simple) Azure IoT solution. It involves, as you might have guessed, the IoT button from the post “Getting started with the teXXmo® IoT Button“. The other session is on how to “Automate your container build and deploy process using ACR tasks \u0026amp; GIT”.\nHope to see you there.\n","date":"3 December 2018","permalink":"https://www.rickvandenbosch.net/blog/azure-thursdays-december-2018/","section":"Blog","summary":"\u003cp\u003eThis Thursday December 6th I\u0026rsquo;ll be speaking at \u003ca href=\"https://www.meetup.com/Azure-Thursdays/\" target=\"_blank\" rel=\"noreferrer\"\u003eAzure Thursday - December 2018\u003c/a\u003e. The last of the regular Azure Thursdays this year.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThis is a group for all developers, consultants, architects and IT professionals who want to dive into for them unknown topics related to Azure. Azure Thursday are happening every first Thursday of the month and the format will be different every evening. From hand-on workshops to technical talks.\u003cbr\u003e\n\u003ca href=\"https://www.meetup.com/Azure-Thursdays/\" target=\"_blank\" rel=\"noreferrer\"\u003eAzure Thursdays\u003c/a\u003e\u003c/p\u003e","title":"Azure Thursdays december 2018"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/iot/","section":"Tags","summary":"","title":"IoT"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/gadgets/","section":"Tags","summary":"","title":"Gadgets"},{"content":"A few weeks ago I ordered some teXXmo® IoT Buttons to play around with. I wanted to jump right in, but I had to look some stuff up to be able to get it up and running, connecting to the right WiFi and IoT Hub. Here\u0026rsquo;s a short recap of how to get started with the teXXmo® IoT Button.\nStarting the device #There are several modes the button can work in: sending its payload, configuring the button and running webREPL. For initial setup for an out of the box button, press and hold the button for 6 to 9 seconds. This puts the button in Configuration mode. It flashes orange with a frequency of 1 Hz (once per second), then red with the same frequency. For more information on the different modes the IoT Button can operate in, have a look at the flow chart.\nConnecting to the device #Connecting to the device is pretty simple. If you want to configure it right away, visit the Azure Portal first to retrieve your IoT Hub connection string and device secret. You\u0026rsquo;re going to need it, and you won\u0026rsquo;t be able to get it once you\u0026rsquo;re connected to the button.\nTo connect to the button, you have to connect to its WiFi hotspot. The SSID is ESP_XX:XX:XX, where the XX:XX:XX is a code. For this IoT button, the SSID is ESP_44:64:2D.\nOnce you\u0026rsquo;re connected to the device\u0026rsquo;s WiFi, open up a browser and go to 192.168.4.1. We\u0026rsquo;re now ready to configure the device.\nConfiguring the device #There\u0026rsquo;s several things you can configure on the device. Those being:\nIoT Hub configuration Timeserver WiFi IP Configuration User JSON The IoT Hub configuration has three things you can set: the name of the Azure IoT Hub the IoT Button needs to connect to, the name of the device in the IoT Hub and the device secret. After you\u0026rsquo;ve created an IoT Hub, you can add the button to the hub as a device:\nThe WiFi settings are pretty self-explanatory: the SSID is the service set identifier for the network. Or, in short: its name. The password is of course the password for the WiFi network, if any.\nAnd, for this article, the last but definitely not least configuration tab: the User JSON. This field can hold any JSON you\u0026rsquo;ld like the button to send to the IoT Hub. As you can see in the image above, this is the payload I configured for this IoT Button:\n{ \u0026#34;message\u0026#34;: \u0026#34;The button was pressed!\u0026#34; \u0026#34;company\u0026#34;: \u0026#34;Betabit\u0026#34;, \u0026#34;route\u0026#34;: true } The reason I added the route property is I can use it to determine if I need to route this message based on Message routing.\nWrapping up #After you\u0026rsquo;ve configured everything you need to on the IoT Button, go to the Shutdown tab and shut down the button. To use it, just press the button for 1 to 5 seconds. The button will flash once per second while it starts, 10 times per second while it connects to the configured WiFi and IoT Hub to send the message. If all goes well, you\u0026rsquo;ll see the LED on the IoT Button light up green for 2 seconds, and your user defined JSON should be on the IoT Hub 🤓\n","date":"30 November 2018","permalink":"https://www.rickvandenbosch.net/blog/getting-started-with-the-iot-button/","section":"Blog","summary":"\u003cp\u003eA few weeks ago I ordered some teXXmo® IoT Buttons to play around with. I wanted to jump right in, but I had to look some stuff up to be able to get it up and running, connecting to the right WiFi and IoT Hub. Here\u0026rsquo;s a short recap of how to get started with the \u003ca href=\"https://www.iot-button.eu/index_en.html\" target=\"_blank\" rel=\"noreferrer\"\u003eteXXmo® IoT Button\u003c/a\u003e.\u003c/p\u003e","title":"Getting started with the teXXmo® IoT Button"},{"content":"Here\u0026rsquo;s a quicky: Oscar van Tol and I are joining forces again on Thursday June 21st. This time we\u0026rsquo;re telling you everything there is to know on leveraging the power of different Azure services to supercharge your web application. And the session is appropriately titled Supercharge your web application with Azure ?. Or SCYWAWA for short (hint: this might become the twitter hashtag as well\u0026hellip;).\nThe sessions is part of the 49th WAZUG NL event and will be hosted at Betabit\u0026rsquo;s head office in Rotterdam. And it includes this awesome BBQ! The second session that evening is done by Henry Been. His subject is Secure development: keeping your application secrets private. By the way, both of these links are in Dutch.\nSign up for SCYWAWA #You can sign up on the event page of WAZUG. But you should hurry, because we have only 40% of the seats left at the time of writing this blog post. If you have any questions, contact me.\n","date":"10 June 2018","permalink":"https://www.rickvandenbosch.net/blog/scywawa/","section":"Blog","summary":"\u003cp\u003eHere\u0026rsquo;s a quicky: \u003ca href=\"https://oscarvantol.wordpress.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eOscar van Tol\u003c/a\u003e and I are joining forces again on Thursday June 21st. This time we\u0026rsquo;re telling you everything there is to know on leveraging the power of different Azure services to supercharge your web application. And the session is appropriately titled \u003cem\u003eSupercharge your web application with Azure\u003c/em\u003e ?. Or SCYWAWA for short (hint: this might become the \u003ca href=\"https://twitter.com/search?f=tweets\u0026amp;q=%23scywawa\" target=\"_blank\" rel=\"noreferrer\"\u003etwitter hashtag\u003c/a\u003e as well\u0026hellip;).\u003c/p\u003e","title":"Supercharge your web app with Azure"},{"content":"This morning I received an e-mail with the following message: “Congratulations! Your session Working with Microsoft Graph has been accepted for Microsoft TechDays 2018!”\nSo it looks like I will be doing a talk on Microsoft Graph at TechDays Sweden October 24th and 25th later this year 🤓. There\u0026rsquo;s a few reasons for me to be looking forward to this. First of all: this will be my first visit to Sweden! It\u0026rsquo;s also my first time speaking at a conference in another country. And last but not least, I\u0026rsquo;m looking forward to meeting the attendees and speakers for TechDays Sweden.\nSession description # In this technical session we\u0026rsquo;ll dive into using Microsoft Graph to execute different types of actions. This varies from simple tasks like inviting users to your Azure Active Directory B2B tenant, to (way) more complex scenario\u0026rsquo;s where (information from) different Graph entities are combined.\nIf you have any tips or pointers, leave a comment below or contact me. This can be tips on the content, or on where to go when in the neighborhood of Stockholm 🤓.\n","date":"5 June 2018","permalink":"https://www.rickvandenbosch.net/blog/session-tdswe-2018/","section":"Blog","summary":"\u003cp\u003eThis morning I received an e-mail with the following message: “\u003cem\u003eCongratulations! Your session \u003cstrong\u003eWorking with Microsoft Graph\u003c/strong\u003e has been accepted for \u003cstrong\u003eMicrosoft TechDays 2018\u003c/strong\u003e!\u003c/em\u003e”\u003c/p\u003e\n\u003cp\u003eSo it looks like I will be doing a talk on \u003ca href=\"https://developer.microsoft.com/en-us/graph\" target=\"_blank\" rel=\"noreferrer\"\u003eMicrosoft Graph\u003c/a\u003e at \u003ca href=\"https://tdswe.se/?lang=en\" target=\"_blank\" rel=\"noreferrer\"\u003eTechDays Sweden\u003c/a\u003e October 24th and 25th later this year 🤓. There\u0026rsquo;s a few reasons for me to be looking forward to this. First of all: this will be my first visit to Sweden! It\u0026rsquo;s also my first time speaking at a conference in another country. And last but not least, I\u0026rsquo;m looking forward to meeting the attendees and \u003ca href=\"https://tdswe.se/speakers-2/?lang=en\" target=\"_blank\" rel=\"noreferrer\"\u003espeakers for TechDays Sweden\u003c/a\u003e.\u003c/p\u003e","title":"Session @ TechDays Sweden 2018"},{"content":"One of the time consuming tasks we\u0026rsquo;re facing at my current assignment is inviting users to our Azure Active Directory tenant. Especially since we (used to) do this in the Azure Portal. We\u0026rsquo;re using Azure Active Directory B2B to which external users are invited as guests. We investigated using Microsoft Graph to automate this process. Since there\u0026rsquo;s several things to take into account when implementing this, here\u0026rsquo;s a quick HowTo.\nBy the way, I\u0026rsquo;ll be taking some shortcuts here and there. For instance in creating Views and Controller actions for the web app. I will do so because I want this guide to focus on how to call the Microsoft Graph. And because I\u0026rsquo;m assuming you know how to create a View or Controller action.\nWhat will we create? #We\u0026rsquo;ll create a Web App that uses application credentials to invite users to an Azure Active Directory tenant using Microsoft Graph. We\u0026rsquo;re using application credentials because we want to enable this functionality for different types of users. They might not all have admin rights on the tenant. This way the application is granted the right to invite users so the user doesn\u0026rsquo;t have to be. To keep the guide somewhat simple and focused on the task at hand, I\u0026rsquo;m ignoring login in to the web app for now.\nAzure Active Directory endpoints #There are currently two Azure Active Directory endpoints: V1 and V2. The V1 endpoint is the endpoint we know. V2 has some extra functionality. Here\u0026rsquo;s the biggest difference:\nThe v2.0 endpoint allows developers to write apps that accept sign-in from both Microsoft Accounts and Azure AD accounts, using a single auth endpoint. This gives you the ability to write your app completely account-agnostic; it can be ignorant of the type of account that the user signs in with. Of course, you can make your app aware of the type of account being used in a particular session, but you don\u0026rsquo;t have to.\nSource: What\u0026rsquo;s different about the v2.0 endpoint?\nNext to this, app registrations for the V2 endpoint are not done in the Azure Portal, but in the separate Application Registration Portal. For this HowTo we will use the Azure Active Directory V1 endpoint and an app registration in the Azure Portal.\nThe guide #These are the steps needed to create this simple sample application.\n1. Create an App Registration in the Azure Portal # Go to the Azure Portal and open up Azure Active Directory Go to App Registrations Click New application registration Give the new App Registration a Name, choose Web app/API as the Application Type and give it a (fake) Sign-on URL. Click Create After the application registration is created, click Settings Go to Required permissions Click Add Click Select an API Select Microsoft Graph and click Select Under Application Permissions *, check Invite guest users to the organization As an extra, I\u0026rsquo;ve also selected Read all users\u0026rsquo; full profiles to enable me to show the users in the web app Click Select to select the permissions, then Done to finish adding API access. IMPORTANT!\nClick the Grant permissions button to actually grant the permissions to the application. An admin has to grant these permissions, you can do so by clicking the button. Any changes you make in the permissions you enable for the application require you to explicitly grant the permissions by clicking the button.\nGo to Keys Under Passwords, type a Key description, select a Duration and click Save IMPORTANT!\nCopy the Key value after you save, since you won\u0026rsquo;t be able to retrieve the key after you closed the blade.\n* Application Permissions and Delegated permissions #I\u0026rsquo;ve explicitly said to check the permissions for the application under Application permissions. And there\u0026rsquo;s a reason to do this. You should use Delegated permissions when you want the application to call the API as the logged in user. When the application calls Graph as itself, use Application permissions. Since we want to enable everyone that uses the app to invite users, we\u0026rsquo;re using Application permissions.\n2. Create and implement the Web App # Create an ASP.NET web application. I created one using .NET Core 2.0 but you\u0026rsquo;re free to choose whatever is your preference. Add the Microsoft.Graph NuGet package Add the Active Directory Authentication Library NuGet package (Microsoft.IdentityModel.Clients.ActiveDirectory) Create something like an InviteUserModel, controller actions and views Create a ClientCredential with\u0026hellip; The id of the application you created in step 1 The Secret for the application you created in step 1 Create an AuthenticationContext for your AAD tenant (something like https://login.microsoftonline.com/\u0026lt;YOUR_AAD_TENANT\u0026gt;.onmicrosoft.com) Get a token for Microsoft Graph by calling AcquireToken on the AuthenticationContext Create a DelegateAuthProvider that adds the resulting token to the header of each request Setting it all up should look something like this:\nvar clientCredential = new ClientCredential(_appId, _appSecret); var authenticationContext = new AuthenticationContext($\u0026#34;https://login.microsoftonline.com/{_tenant}\u0026#34;); var authenticationResult = authenticationContext.AcquireTokenAsync(\u0026#34;https://graph.microsoft.com\u0026#34;, clientCredential).Result; var delegateAuthProvider = new DelegateAuthenticationProvider((requestMessage) =\u0026gt; { requestMessage.Headers.Authorization = new AuthenticationHeaderValue(\u0026#34;bearer\u0026#34;, authenticationResult.AccessToken); return Task.FromResult(0); }); return new GraphServiceClient(delegateAuthProvider); 3. Use Microsoft Graph #Since I made an example that holds a GraphServiceClientHelper, this it what it looks like to use it:\nvar graphServiceClient = GraphServiceClientHelper.CreateGraphServiceClient(); var invitation = await graphServiceClient.Invitations.Request().AddAsync(new Invitation { InviteRedirectUrl = \u0026#34;https://localhost:xxx\u0026#34;, InvitedUserDisplayName = inviteUserModel.DisplayName, InvitedUserEmailAddress = inviteUserModel.EmailAddress, InvitedUserMessageInfo = new InvitedUserMessageInfo { CustomizedMessageBody = inviteUserModel.InviteMessage }, SendInvitationMessage = inviteUserModel.SendInviteMessage }); IMPORTANT!\nThe InviteRedirectUrl is a required parameter. It should hold the URL to which the invited user is forwarded after accepting the invitation.\nGotcha! #Please be advised that there are some differences between the V1.0 Graph API and the beta version. One example is that the beta version doesn\u0026rsquo;t support retrieving more than 100 items at a time. On the other hand, V1.0 doesn\u0026rsquo;t support expanding the MemberOf property, while the beta does support this. To call the beta version, use the constructor overload for GraphServiceClient that takes two parameters: baseUrl and authenticationProvider. You do not have to change the url of the resource you\u0026rsquo;re acquiring a token for. Tokens for Microsoft Graph work for both V1.0 and the beta version.\nInitializing the GraphServiceClient for the beta version should look something like this:\nnew GraphServiceClient(\u0026#34;https://graph.microsoft.com/beta\u0026#34;, delegateAuthProvider); Source code #I\u0026rsquo;ve hosted the (extremely simple) example on GitHub. You can find it here: rickvdbosch/MicrosoftGraphExample. If you have any issues completing this guide post a comment, or contact me.\n","date":"22 May 2018","permalink":"https://www.rickvandenbosch.net/blog/invite-aad-user-microsoft-graph/","section":"Blog","summary":"\u003cp\u003eOne of the time consuming tasks we\u0026rsquo;re facing at my current assignment is inviting users to our Azure Active Directory tenant. Especially\nsince we (used to) do this in the Azure Portal. We\u0026rsquo;re using Azure Active Directory B2B to which external users are invited as guests. We\ninvestigated using Microsoft Graph to automate this process. Since there\u0026rsquo;s several things to take into account when implementing this,\nhere\u0026rsquo;s a quick HowTo.\u003c/p\u003e","title":"HowTo: invite AAD user with Microsoft Graph"},{"content":"While cleaning up the app registrations in my Azure Active Directory, I ran into two applications I couldn\u0026rsquo;t delete since the \u0026lsquo;Delete\u0026rsquo; button is not clickable. I\u0026rsquo;ve had this happen for both application types: both Web app/API and Native.\nIt\u0026rsquo;s actually pretty simple to enable removing these app registrations: make sure the application is not Multi-tenanted. *\n* Designates whether users in external organizations are allowed to grant your app access to data in their organization\u0026rsquo;s directory. This control affects only the ability to grant access. It does not affect any access that has already been granted.\nHere\u0026rsquo;s how to fix this for each application type:\nWeb app /API app registrations #It turns out solving this one is really simple:\nGo to the app registration Open up the properties Find the \u0026lsquo;Multi-tenanted\u0026rsquo; option and switch it to \u0026lsquo;No\u0026rsquo; Save the properties and you\u0026rsquo;re good to go Native app registrations #Now when trying to go about this the same way with a Native app registration, you\u0026rsquo;ll find you cannot changed its multi-tenancy in the Azure portal. At least you can\u0026rsquo;t do that directly in the portal by simply clicking one button. But there is a way:\nGo to the app registration Click the \u0026lsquo;Manifest\u0026rsquo; button on top of the app registration blade Click the \u0026lsquo;Edit\u0026rsquo; button on top of the Manifest blade Find the \u0026lsquo;availableToOtherTenants\u0026rsquo; setting and change the value to be \u0026lsquo;false\u0026rsquo; Click \u0026lsquo;Save\u0026rsquo; and you\u0026rsquo;re good to go Hope this helps.\n","date":"13 December 2017","permalink":"https://www.rickvandenbosch.net/blog/unable-remove-app-registrations-aad/","section":"Blog","summary":"\u003cp\u003eWhile cleaning up the app registrations in my Azure Active Directory, I ran into two applications I couldn\u0026rsquo;t delete since the \u0026lsquo;Delete\u0026rsquo; button is not clickable. I\u0026rsquo;ve had this happen for both application types: both Web app/API and Native.\u003c/p\u003e","title":"Unable to remove (native) app registrations in Azure Active Directory"},{"content":"I\u0026rsquo;ve done another session on Serverless, this time at the Techdays in The Netherlands. The TechDays were held October 12 \u0026amp; 13 in the Amsterdam RAI. My session was partially based on the \u0026ldquo;Dude, Where\u0026rsquo;s my Server?\u0026rdquo; talk I did earlier this year. The main focus for the talk this time: Azure Event Grid.\nServerless, Azure Functions and Azure Event Grid #My session was Going Serverless (2/2): Hands-on with Azure Event Grid. It was the second part of two back-to-back sessions I did with my colleague Oscar van Tol. The first part: Going Serverless (1/2): Creating, Debugging and Monitoring Azure Functions.\nVideo! #Because TechDays recorded all sessions you can watch it right here, right now! Oh, and by the way: the session is in Dutch. So there\u0026rsquo;s that\u0026hellip;\nThe presentation and examples in Github are in English though, so that\u0026rsquo;ll probably help you get up \u0026amp; running using Azure Event Grid. If you\u0026rsquo;re having any issues getting stuff to work don\u0026rsquo;t hesitate to contact me.\nResources #You can find all resource on the session here:\nSee the presentation on SlideShare here: presentation @ SlideShare Get the source code (including all steps for the demos): github.com/betabitnl/td2017rvdb Watch the recording of the session here: youtube.com/watch?v=bGBO4AEB1Ik The TechDays website: techdays.nl ","date":"8 November 2017","permalink":"https://www.rickvandenbosch.net/blog/hands-on-with-azure-event-grid/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;ve done another session on Serverless, this time at the Techdays in The Netherlands. The TechDays were held October 12 \u0026amp; 13 in the Amsterdam RAI. My session was partially based on the \u003ca href=\"/blog/serverless-dude-wheres-my-server/\"\u003e\u0026ldquo;Dude, Where\u0026rsquo;s my Server?\u0026rdquo;\u003c/a\u003e talk I did earlier this year. The main focus for the talk this time: Azure Event Grid.\u003c/p\u003e","title":"Hands-on with Azure Event Grid"},{"content":"Do you live in or near The Netherlands? Would you like to know everything there is to know about Serverless Computing? Join Oscar van Tol and myself on September 20th. We will be presenting the knowledge session “Dude, Where\u0026rsquo;s my Server?” organised by Betabit and Blaak Selectie. If you don\u0026rsquo;t need any additional information and just want to reserve a spot, send an email to evenementen@betabit.nl with your name and phone number. If you need a bit more context, keep reading.\nServerless is HOT #We can\u0026rsquo;t deny it: Serverless computing is hot. The true pay-per-use model that it is associated with is getting more and more interesting for customers. But not only that; there are several benefits we can attribute to it. If we only look at costs, we can see reduced operational and infrastructural costs. Dependent on the usage scenario, you might also be looking at reduced development and/or scaling costs.\nBut there are more benefits, apart from costs. Think of a shorter time to market, improved latency and geolocation and of course enhanced scalability. This and much, much more will be part of the knowledge session September 20th.\nCode! #Be advised: our session will not be a management summary of the good, the bad and the ugly on Serverless. We\u0026rsquo;re planning on showing you how to leverage its power. Not only Logic Apps, which require little to no code, will be part of the session. Azure Functions will also be a large part of it. So our session will include writing code. And preferably lots of it!\nHints \u0026amp; tips #If you have any tips on content we could or should cover, or have some awesome stuff that we can use: let me know by getting in contact. We\u0026rsquo;ve started preparing for this session some time ago, but we\u0026rsquo;ll be making changes up to the last minute. This way we can make sure we have the most recent information for you to hit the ground running when you want to start using Serverless.\n","date":"17 August 2017","permalink":"https://www.rickvandenbosch.net/blog/serverless-dude-wheres-my-server/","section":"Blog","summary":"\u003cp\u003eDo you live in or near The Netherlands? Would you like to know everything there is to know about Serverless Computing? Join \u003ca href=\"https://oscarvantol.wordpress.com\" target=\"_blank\" rel=\"noreferrer\"\u003eOscar van Tol\u003c/a\u003e and myself on September 20th. We will be presenting the knowledge session \u003ca href=\"https://betabit.nl/events/dude-wheres-my-server?ref=rickvandenbosch.net\" target=\"_blank\" rel=\"noreferrer\"\u003e“Dude, Where\u0026rsquo;s my Server?”\u003c/a\u003e organised by \u003ca href=\"https://betabit.nl?ref=rickvandenbosch.net\" target=\"_blank\" rel=\"noreferrer\"\u003eBetabit\u003c/a\u003e and \u003ca href=\"https://blaakselectie.nl/\" target=\"_blank\" rel=\"noreferrer\"\u003eBlaak Selectie\u003c/a\u003e. If you don\u0026rsquo;t need any additional information and just want to reserve a spot, send an email to \u003ca href=\"mailto:evenementen@betabit.nl\"\u003eevenementen@betabit.nl\u003c/a\u003e with your name and phone number. If you need a bit more context, keep reading.\u003c/p\u003e","title":"Serverless computing: “Dude, Where’s my Server?”"},{"content":"The people over at Microsoft have been working hard and have delivered a lot of stuff. That makes for a nice start after the holidays! So there\u0026rsquo;s a lot of cool stuff available to play with. I created some simple and easy to remember links for all of these goodies. Feel free to use and distribute these 🙂\nLinks to the goodies! # The spec for .NET Standard 2.0 is complete (https://bit.ly/netstandard2) .NET Core 2.0 (https://bit.ly/dotnetcore2) ASP.NET Core 2.0 (https://bit.ly/aspnetcore2) Entity Framework Core 2.0 (https://bit.ly/efcore2) Visual Studio 2017 version 15.3 (https://bit.ly/vs2017153) And to top it all of, there\u0026rsquo;s also an update on the Azure Functions and WebJobs Tools.\nOh, and last but not least: VSTS Sprint 121 was put in production. For more information on what that means, check https://bit.ly/vsts121.\n","date":"16 August 2017","permalink":"https://www.rickvandenbosch.net/blog/so-many-new-dotnet-goodies/","section":"Blog","summary":"\u003cp\u003eThe people over at Microsoft have been working hard and have delivered \u003cem\u003ea lot\u003c/em\u003e of stuff. That makes for a nice start after the holidays! So there\u0026rsquo;s a lot of cool stuff available to play with. I created some simple and easy to remember links for all of these goodies. Feel free to use and distribute these 🙂\u003c/p\u003e","title":"So many new (.NET) goodies!"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/vs2017/","section":"Tags","summary":"","title":"VS2017"},{"content":"In one of the projects I\u0026rsquo;m currently working on we\u0026rsquo;re using an ASP.NET Core Web API with an Angular front-end. We\u0026rsquo;re using ADAL.js as an Azure Active Directory Authentication Library and ng2-adal for integration with Angular. To get the type declarations for all these packages in TypeScript we use The Future of Declaration Files.\nSome time ago, our build server started acting up with the following message:\nType \u0026#39;Observable\u0026lt;void\u0026gt;\u0026#39; is not assignable to type \u0026#39;Observable\u0026lt;User\u0026gt;\u0026#39; The error occured in ADAL.service.ts, at line 133 to be precise. After quite some investigation I discovered that the issue was in package.json:\n\u0026#34;devDependencies\u0026#34;: { \u0026#34;typescript\u0026#34;: \u0026#34;^2.3.2\u0026#34;, Based on Semantic Versioning the caret (^) indicates the package will update to the most recent minor version. So ^2.3.2 means 2.4.0 will be accepted but 3.0.0 will not. Looking at all version changes of used npm packages on the build server showed there was a new version of TypeScript: 2.4.0. I removed the caret to try and fix the issue, which it did. Life was great and we could all continue with business as usual.\nThe issue #I recently got a new laptop. Or actually a new (and awesome) Surface Pro but more on that later. The device was prepared before I got it, so a lot of tools like Visual Studio were already installed. I added my personal toolbox to it, cloned our Git repo and started working. The first time I built the solution I got an error:\nType \u0026#39;Observable\u0026lt;void\u0026gt;\u0026#39; is not assignable to type \u0026#39;Observable\u0026lt;User\u0026gt;\u0026#39; Wait, what? I solved that one! I tried lots of stuff to fix this one: from clearing my complete npm cache to matching all npm package versions up to patch level with the ones used on the build server. All to no avail. Since none of my colleagues working on the same project had any issues, and matching the package versions of the build server didn\u0026rsquo;t help it was probably a tooling issue.\nSolution # After looking at the tools I had on my machine, I noticed the version of the TypeScript SDK. It was version 2.4.1 which is the latest version. And although the TypeScript version in packages.json was explicitly set to 2.3.3 I wasn\u0026rsquo;t quite sure these would play nice together. I removed the TypeScript SDK and installed an older version (2.3.3). Because of just a bit of built-up frustration I was skeptical this would work, but it did! I\u0026rsquo;ll be investigating the details later but for now I have a functioning environment again. So me == happy 🙂\nHope this helps.\n","date":"19 July 2017","permalink":"https://www.rickvandenbosch.net/blog/typescript-build-error-ts2322/","section":"Blog","summary":"\u003cp\u003eIn one of the projects I\u0026rsquo;m currently working on we\u0026rsquo;re using an ASP.NET Core Web API with an Angular front-end. We\u0026rsquo;re using ADAL.js as an \u003ca href=\"https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-authentication-libraries\" target=\"_blank\" rel=\"noreferrer\"\u003eAzure Active Directory Authentication Library\u003c/a\u003e and \u003ca href=\"https://www.npmjs.com/package/ng2-adal\" target=\"_blank\" rel=\"noreferrer\"\u003eng2-adal\u003c/a\u003e for integration with Angular. To get the type declarations for all these packages in TypeScript we use \u003ca href=\"https://blogs.msdn.microsoft.com/typescript/2016/06/15/the-future-of-declaration-files/\" target=\"_blank\" rel=\"noreferrer\"\u003eThe Future of Declaration Files\u003c/a\u003e.\u003c/p\u003e","title":"TypeScript build error TS2322"},{"content":"My employer Betabit hosted a Hack Yourself First workshop by Troy Hunt on Monday 5th and Tuesday 6th of June. Because we are always looking to improve, this was a great opportunity to tune up our security skills. We had a great time, got terrified and most of all: we learned a lot.\nFirst contact: a Twitter DM to Troy Hunt You think you know security #We\u0026rsquo;ve seen a lot of different subjects during the workshop. Lots of them sounded familiar. Some of them even were acted upon already by some of the attendees. After two days of Troy showing us what\u0026rsquo;s actually out there the general feeling is there\u0026rsquo;s room for improvement :).\nThe build-up in the workshop was great: Troy first showed us how to hack sites manually. Because we have experience in software development it was relatively easy for the attendees. It gave us an overall idea of what we needed to do. Then the scary part came: the tools. There are so many hacking tools available that almost completely remove the need for software development experience. Those tools enable anyone with an interest or time on their hands to start hacking. All the more reason to see security as an important aspect of your system.\nAdding security #When a project nears the end of its development, security is often seen as something that needs to be \u0026lsquo;added\u0026rsquo;. Needless to say: if you start thinking about such an important aspect at the end of the project life-cycle you\u0026rsquo;ll be late to the party. It needs to get attention from the start. Security is not something you add, it needs to be an integral part of the development process.\nWhen a system has been designed from the ground up to be secure its called security by design. A secure design should distrust many things, especially user input. That can also mean you have to distrust what comes from within the system since this might be put there by a user too.\nThey shared everything real openly. Betabit wants to let everyone know what they are doing. I guess they like to stand up there and go ‘hey, we are taking this security-thing very seriously’. So that was really cool!\n— Troy Hunt – Weekly update 38 (Trondheim edition)\nExperience #We had two awesome days in this workshop. Troy is a great speaker who is easy to listen to and whose dynamic fit that of the group perfectly. He built up the workshop making stuff fall into place during those two days. I had the privilege to spend some more time with him at dinner and he\u0026rsquo;s also an all around nice guy. Oh, and he liked the custom made hoodies we made for the workshop 🙂\nThis workshop gave us some new insights and renewed focus on ones we already had. You could feel the energy in the group. The urge to start working on the stuff we worked with during the workshop. Some of us were already putting the things we learned in practice that same week. Others made sure it made it to the backlog. We\u0026rsquo;ve added a lot of (security) tools to our developer toolbox that we take with us when we go out and do our job. And that\u0026rsquo;s a good thing.\nA big thank you to my employer Betabit for making this possible!\n","date":"26 June 2017","permalink":"https://www.rickvandenbosch.net/blog/security-workshop-hack-yourself-first/","section":"Blog","summary":"\u003cp\u003eMy employer \u003ca href=\"https://www.betabit.nl?ref=rickvandenbosch.net\" target=\"_blank\" rel=\"noreferrer\"\u003eBetabit\u003c/a\u003e hosted a Hack Yourself First workshop by \u003ca href=\"https://www.troyhunt.com\" target=\"_blank\" rel=\"noreferrer\"\u003eTroy Hunt\u003c/a\u003e on Monday 5th and Tuesday 6th of June. Because we are always looking to improve, this was a great opportunity to tune up our security skills. We had a great time, got terrified and most of all: we learned a lot.\u003c/p\u003e","title":"Security workshop: Hack Yourself First"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/workshop/","section":"Tags","summary":"","title":"Workshop"},{"content":"Earlier this year two colleagues and I attended Microsoft Build for the first time. In short: it was amazing. For those looking for more info: here\u0026rsquo;s a short recap on what we saw and did while we were there.\nKeynotes #Yes, I\u0026rsquo;ve watched Build keynotes of earlier editions online. And yes, it felt big and impressive when I did so. Imagine how much more big and impressive it is to actually be there!\nThe room was huge, but they managed to make it feel like they were letting you in on a secret. We could easily see the demos that were shown on stage because of the good coverage. And especially with the more appealing demos, you could feel the energy and excitement in the room.\nSessions #Almost all sessions we attended were awesome. Some sessions were even just as packed with announcements as the keynotes were. There was one big difference with other events I\u0026rsquo;ve attended, like TechDays here in The Netherlands. There were so many people presenting who are actually involved in the product they were doing a session on. Which means you get to see people talk about their product. About the stuff they work on every day, the stuff they are excited about. And that shows.\nAzure Compute: New features and roadmap by Corey Sanders @ Build 2017 Conference #Next to the sessions there was \u0026lsquo;The Hub\u0026rsquo;. The Hub is best described as an exhibition area where a lot of product teams had a booth. It was very cool to get a chance to talk and give feedback to the people who are responsible for the tools and products you use on a daily basis.\nWe talked about the next version of .NET Core. We gave feedback to the Visual Studio product team. We discussed ways in which we use Application Insights that the team hadn\u0026rsquo;t thought of. And that\u0026rsquo;s just naming a few.\nEnvironment # Pike Place Market Build was held in the Washington State Convention Center in Seattle this year. That might have enabled even more product teams to be present. Next to attending Build we also did some touristy things. We visited Bainbridge Island (I took the photo for the header image on the homepage while we were on the ferry). Of course we walked the city, we visited to Pike Place Market (where the mongers at Pike Place Fish Market throw fish around) and we went to the Space Needle. The last day we visited the Boeing factory. I\u0026rsquo;ve been there almost ten years ago, so I thought I wouldn\u0026rsquo;t be as impressed this time around. I was mistaking. If you\u0026rsquo;re ever in the neighborhood you should definitely visit.\nVlog #We made some videos (in Dutch) and posted them on our \u0026lsquo;company\u0026rsquo; Youtube channel. Company is in quotes since we don\u0026rsquo;t have a lot of content yet, and we were actually trying some stuff out at Build. It was nice to give it a go and to get used to holding a camera in front your face.\nConclusion #I had an awesome experience attending Build. It\u0026rsquo;s a great conference for those working with and depending on Microsoft products and tools. So I will definitely go again if I ever get that chance.\n","date":"14 June 2017","permalink":"https://www.rickvandenbosch.net/blog/build-2017/","section":"Blog","summary":"\u003cp\u003eEarlier this year two colleagues and I attended Microsoft Build for the first time. In short: it was amazing. For those looking for more info: here\u0026rsquo;s a short recap on what we saw and did while we were there.\u003c/p\u003e","title":"Build 2017"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/angularjs/","section":"Tags","summary":"","title":"AngularJS"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/debug/","section":"Tags","summary":"","title":"Debug"},{"content":"Part of the system we are developing uses AngularJS. Because we had an increase in the use of our system, and more diverse configurations were using our system, we got some new bugs filed. One of these bugs was about a select list showing the binding in stead of the actual value for several options. Since this \u0026lsquo;worked on our machines\u0026rsquo; it had to be connected to the client\u0026rsquo;s configuration. As soon as stuff (options in this case) started moving around, it got even prettier\u0026hellip;\nI\u0026rsquo;ve tried several solutions like using ng-value instead of value and using the fixIE() solution that roams the internet. Unfortunately all to no avail. Finally I did find solution. Let me share it so you don\u0026rsquo;t have to look for one as long as I did 😉\nOriginal code #Our original code was in a directive that actually used two select lists to facilitate moving values from one to another, enabling and disabling items. It looked something like this:\n\u0026lt;div\u0026gt; \u0026lt;select ng-model=\u0026#34;selectedLeft\u0026#34; multiple style=\u0026#34;float: left; width:40%; height: 300px;\u0026#34;\u0026gt; \u0026lt;option ng-repeat=\u0026#34;option in selected track by $index\u0026#34; value=\u0026#34;{{option}}\u0026#34;\u0026gt;{{option | lowercase}}\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;section style=\u0026#34;float: left; padding: 10px;\u0026#34;\u0026gt; \u0026lt;button ng-click=\u0026#34;moveRight()\u0026#34; ng-disabled=\u0026#34;selectedLeft.length \u0026lt; 1\u0026#34;\u0026gt;\u0026gt;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button ng-click=\u0026#34;moveLeft()\u0026#34; ng-disabled=\u0026#34;selectedRight.length \u0026lt; 1\u0026#34;\u0026gt;\u0026lt;\u0026lt;\u0026lt;/button\u0026gt; \u0026lt;/section\u0026gt; \u0026lt;select ng-model=\u0026#34;selectedRight\u0026#34; multiple style=\u0026#34;float: left; width:40%; height: 300px;\u0026#34;\u0026gt; \u0026lt;option ng-repeat=\u0026#34;option in rightList track by $index\u0026#34; value=\u0026#34;{{option}}\u0026#34;\u0026gt;{{option | lowercase}}\u0026lt;/option\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; Solution #Changing the way we built up the select list helped us out in the end: instead of using an ng-repeat on the option tag, we used ng-options on the select tag. This fixed the issue for us! The HTML of the directive looks like this now:\n\u0026lt;div\u0026gt; \u0026lt;select ng-model=\u0026#34;selectedLeft\u0026#34; multiple style=\u0026#34;float: left; width:40%; height: 300px;\u0026#34; ng-options=\u0026#34;option as option|lowercase for option in selected track by option\u0026#34;\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;section style=\u0026#34;float: left; padding: 10px;\u0026#34;\u0026gt; \u0026lt;button ng-click=\u0026#34;moveRight()\u0026#34; ng-disabled=\u0026#34;selectedLeft.length \u0026lt; 1\u0026#34;\u0026gt;\u0026gt;\u0026gt;\u0026lt;/button\u0026gt; \u0026lt;button ng-click=\u0026#34;moveLeft()\u0026#34; ng-disabled=\u0026#34;selectedRight.length \u0026lt; 1\u0026#34;\u0026gt;\u0026lt;\u0026lt;\u0026lt;/button\u0026gt; \u0026lt;/section\u0026gt; \u0026lt;select ng-model=\u0026#34;selectedRight\u0026#34; multiple style=\u0026#34;float: left; width:40%; height: 300px;\u0026#34; ng-options=\u0026#34;option as option|lowercase for option in rightList track by option\u0026#34;\u0026gt; \u0026lt;/select\u0026gt; \u0026lt;/div\u0026gt; Hope this helps.\n","date":"5 April 2017","permalink":"https://www.rickvandenbosch.net/blog/ie-shows-binding-in-select-instead-of-value-using-angularjs/","section":"Blog","summary":"\u003cp\u003ePart of the system we are developing uses AngularJS. Because we had an increase in the use of our system, and more diverse configurations were using our system, we got some new bugs filed. One of these bugs was about a select list showing the binding in stead of the actual value for several options. Since this \u0026lsquo;worked on our machines\u0026rsquo; it had to be connected to the client\u0026rsquo;s configuration. As soon as stuff (options in this case) started moving around, it got even prettier\u0026hellip;\u003c/p\u003e","title":"IE shows binding in select instead of value using AngularJS"},{"content":"We held a 2.5 hour presentation about .NET Core at the Betabit office in Rotterdam on March 29th. Where \u0026lsquo;we\u0026rsquo; means my colleague Oscar van Tol and myself. We ended up having way too much content for the evening. We decided to host a hands-on workshop for those interested. At that workshop we will not only show .NET Core, but also enable you to have a go at it yourself. The location will most probably be the Betabit office in Utrecht because it\u0026rsquo;s located more central. Stay tuned for more info on the details of the workshop.\n.NET Core: not your daddy\u0026rsquo;s dotnet #About that evening: we had a lot of fun doing this talk and we\u0026rsquo;re looking forward to doing more in the future. You can find the presentation on Slideshare, the sourcecode we used for the demos (and then some\u0026hellip;!) can be found on GitHub: betabitnl/nyddn.\nHappy coding.\n","date":"5 April 2017","permalink":"https://www.rickvandenbosch.net/blog/net-core-not-your-daddys-dotnet/","section":"Blog","summary":"\u003cp\u003eWe held a 2.5 hour presentation about .NET Core at the \u003ca href=\"https://www.betabit.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eBetabit\u003c/a\u003e office in Rotterdam on March 29th. Where \u0026lsquo;we\u0026rsquo; means my colleague \u003ca href=\"https://oscarvantol.wordpress.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eOscar van Tol\u003c/a\u003e and myself. We ended up having way too much content for the evening. We decided to host a hands-on workshop for those interested. At that workshop we will not only show .NET Core, but also enable you to have a go at it yourself. The location will most probably be the Betabit office in Utrecht because it\u0026rsquo;s located more central. Stay tuned for more info on the details of the workshop.\u003c/p\u003e","title":".NET Core: not your daddy’s dotnet"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/demos-betas/","section":"Tags","summary":"","title":"Demos \u0026 Betas"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/arm/","section":"Tags","summary":"","title":"ARM"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/automation/","section":"Tags","summary":"","title":"Automation"},{"content":"Intro #In my current project we use Azure Resource Manager (ARM) templates to help with deployments across multiple subscriptions and environments. One of the elements of the ARM template is adding a couple of Shared Access Policies to enable Read and Write on the queues we have in place. The policies have been defined on Service Bus level because they span multiple queues.\nOur ARM template functioned just fine, (automated) deployment was up \u0026amp; running and life was beautiful. Until our automated deployment to our development environment triggered in the night of January 24th. Our ARM template, not having been changed for a while, suddenly errored out with a Bad Request. The message read:\nRequest payload is not in the expected format.\nSearching for the issue #We checked everything: API versions (still version 2015-08-01, so no changes there), variables we introduced (no changes there) and parameters. We even stripped out all dynamic behavior just to be sure that wasn\u0026rsquo;t the cause. And it wasn\u0026rsquo;t.\nThe offending part of the ARM template (the one that had functioned before) looked like this:\n{ \u0026#34;apiVersion\u0026#34;: \u0026#34;2015-08-01\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;[concat(variables(\u0026#39;servicebus_namespace_name\u0026#39;), \u0026#39;/\u0026#39;, \u0026#39;RoleName\u0026#39;)]\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;Microsoft.ServiceBus/namespaces/authorizationRules\u0026#34;, \u0026#34;dependsOn\u0026#34;: [ \u0026#34;[concat(\u0026#39;Microsoft.ServiceBus/namespaces/\u0026#39;, variables(\u0026#39;servicebus_namespace_name\u0026#39;))]\u0026#34; ], \u0026#34;location\u0026#34;: \u0026#34;[variables(\u0026#39;location\u0026#39;)]\u0026#34;, \u0026#34;properties\u0026#34;: { \u0026#34;Rights\u0026#34;: [ //\u0026#34;Send\u0026#34;, \u0026#34;Listen\u0026#34; //\u0026#34;Manage\u0026#34; ] } } I found an article Create a Service Bus authorization rule for namespace and queue using an Azure Resource Manager template. One of the things in that article is an example that also holds a piece of template to create an Authorization Rule on Service Bus level:\n{ \u0026#34;apiVersion\u0026#34;: \u0026#34;[variables(\u0026#39;sbVersion\u0026#39;)]\u0026#34;, \u0026#34;name\u0026#34;: \u0026#34;[variables(\u0026#39;namespaceAuthRuleName\u0026#39;)]\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;Microsoft.ServiceBus/namespaces/authorizationRules\u0026#34;, \u0026#34;dependsOn\u0026#34;: [ \u0026#34;[concat(\u0026#39;Microsoft.ServiceBus/namespaces/\u0026#39;, parameters(\u0026#39;serviceBusNamespaceName\u0026#39;))]\u0026#34; ], \u0026#34;location\u0026#34;: \u0026#34;[resourceGroup().location]\u0026#34;, \u0026#34;properties\u0026#34;: { \u0026#34;Rights\u0026#34;: [ \u0026#34;Send\u0026#34; ] } } I put the two parts next to each other and started removing all differences between the two. Spacing, newlines\u0026hellip; I made sure everything matched. And what do you know? The damned thing worked.\nSeveral tries (and failures) later, I now know what caused our ARM template to fail. It were the comments in the Rights element.\nSolution #In the end, the only thing I had to do to get our template working again was remove the comments in the Rights element. I did try with several different comments (with and without a comma in there, for instance) but the comments I tried all made the template fail. As said earlier, the template worked earlier, including the comments. The fact that there are comments all over the place in our ARM template makes it even stranger\u0026hellip;\nHope this helps.\n","date":"1 February 2017","permalink":"https://www.rickvandenbosch.net/blog/error-creating-service-bus-authorization-rules-using-arm/","section":"Blog","summary":"\u003ch2 id=\"intro\" class=\"relative group\"\u003eIntro \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#intro\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eIn my current project we use \u003ca href=\"https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview\" target=\"_blank\" rel=\"noreferrer\"\u003eAzure Resource Manager\u003c/a\u003e (ARM) templates to help with deployments across multiple subscriptions and environments. One of the elements of the ARM template is adding a couple of Shared Access Policies to enable Read and Write on the queues we have in place. The policies have been defined on Service Bus level because they span multiple queues.\u003c/p\u003e","title":"Creating Service Bus authorization rules with ARM errors out"},{"content":"As the title states: I was unable to attach the remote debugger (for instance to an Azure Web App) after installing Visual Studio 2015 Update 2. I got an error with something about invalid memory access or something like that.\nThe solution is simple: install Remote Tools for Visual Studio 2015 Update 2. Go to the webite, pick your machine\u0026rsquo;s architecture (the x86 install won\u0026rsquo;t run on a x64 machine) and click download. After installing, you\u0026rsquo;re good to go!\nHope this helps.\nPS: There\u0026rsquo;s a list of Related releases on the Visual Studio 2015 Update 2 page. Have a look, it\u0026rsquo;s helpful 😉\n","date":"6 April 2016","permalink":"https://www.rickvandenbosch.net/blog/unable-to-attach-remote-debugger-after-visual-studio-2015-update-2/","section":"Blog","summary":"\u003cp\u003eAs the title states: I was unable to attach the remote debugger (for instance to an Azure Web App) after installing Visual Studio 2015 Update 2. I got an error with something about invalid memory access or something like that.\u003c/p\u003e","title":"Unable to attach remote debugger after Visual Studio 2015 Update 2"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/vs2015/","section":"Tags","summary":"","title":"VS2015"},{"content":"After updating Visual Studio 2015 (there was an update for GitHub Extensions, one for the NuGet Package Manager and, of course, there was Visual Studio 2015 Update 2) I tried to add the WindowsAzure.Storage NuGet package to a project I started about a month ago. I opened NuGet Package Manager, went to the Browse tab and typed WindowsAzure.Storage. The result: No Packages Found. OK, so then I\u0026rsquo;ll just\u0026hellip;.\nWait\u0026hellip; WHAT?\nNo Packages Found\nAfter doing all sorts of things, including looking for other NuGet packages with the same result, I found what the issue seemed to be: the Package Sources weren\u0026rsquo;t up to par, since the Official feed had vannished. I fixed them and then set the \u0026lsquo;Package source\u0026rsquo; to be \u0026lsquo;All\u0026rsquo; in the upper right corner of the NuGet Package Manager. Fixed it for me!\nHope this helps.\n","date":"5 April 2016","permalink":"https://www.rickvandenbosch.net/blog/unable-to-find-specific-nuget-packages-after-update/","section":"Blog","summary":"\u003cp\u003eAfter updating Visual Studio 2015 (there was an update for GitHub Extensions, one for the NuGet Package Manager and, of course, there was \u003ca href=\"https://www.visualstudio.com/en-us/news/vs2015-update2-vs.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eVisual Studio 2015 Update 2\u003c/a\u003e) I tried to add the WindowsAzure.Storage NuGet package to a project I started about a month ago. I opened NuGet Package Manager, went to the Browse tab and typed WindowsAzure.Storage. The result: \u003cem\u003eNo Packages Found\u003c/em\u003e. OK, so then I\u0026rsquo;ll just\u0026hellip;.\u003c/p\u003e","title":"Unable to find specific NuGet packages after update"},{"content":"Just ran into an exception when running both update-database and add-migration in the Package Manager Console for an EF Code First project. The Exception read:\nThe type initializer for System.Data.Entity.Migrations.DbMigrationsConfiguration\\'1 threw an exception.\nThe cause? An invalid config file for the project I was trying to run the tools for. So: if you run into this exception, check your configs 😉\n","date":"18 March 2016","permalink":"https://www.rickvandenbosch.net/blog/exception-with-ef-code-first-migrations/","section":"Blog","summary":"\u003cp\u003eJust ran into an exception when running both update-database and add-migration in the Package Manager Console for an EF Code First project. The Exception read:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe type initializer for \u003ccode\u003eSystem.Data.Entity.Migrations.DbMigrationsConfiguration\\'1\u003c/code\u003e threw an exception.\u003c/p\u003e","title":"Exception with EF code first migrations"},{"content":"After making sure my Visual Studio always ran as an administrator by following my own post HowTo: Have Visual Studio always run as administrator on Windows 8, I got a message if I wanted to save changes to devenv.sln each and every time I double clicked a Solution. Since the problem kept occuring after installing Visual Studio 2015 CTP6, I wanted to solve it. So here we go!\nDouble clicking a Solution file doesn’t start devenv.exe (which is set to be run as an administrator) but will cause the Microsoft Visual Studio Version Selector (VSLauncher.exe) to be run. This tool selects the right version of Visual Studio to open the Solution. Because VSLauncher.exe is not being run as an administrator, the error occurs.\nThe Solution #Find VSLauncher.exe, which is typically located at C:\\Program Files (x86)\\Common Files\\Microsoft Shared\\MSEnv and make sure it runs as an administrator too. This will cause the Version Selector to be started with the correct privileges, helping it start devenv.exe with the right privileges. Problem solved 😉\nHope this helps\n","date":"16 April 2015","permalink":"https://www.rickvandenbosch.net/blog/running-visual-studio-as-an-administrator-causes-save-changes-to-devenv-sln-when-double-clicking-solutions/","section":"Blog","summary":"\u003cp\u003eAfter making sure my Visual Studio always ran as an administrator by following my own post \u003ca href=\"/blog/howto-have-visual-studio-always-run-as-administrator-on-windows-8/\"\u003eHowTo: Have Visual Studio always run as administrator on Windows 8\u003c/a\u003e, I got a message if I wanted to save changes to devenv.sln each and every time I double clicked a Solution. Since the problem kept occuring after installing Visual Studio 2015 CTP6, I wanted to solve it. So here we go!\u003c/p\u003e","title":"Running Visual Studio as an administrator causes ‘Save changes to devenv.sln’ when double clicking solutions"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/vs2013/","section":"Tags","summary":"","title":"VS2013"},{"content":"‼ There’s new information in this issue. Please read the updates at the bottom of the article.‼\nWe use our own TFS server and were using TFS 2013 Update 2 up until last Tuesday. We have several build definitions for my current project, and most of them are scheduled at a specific time, because we have specific times for automatic deployment. Up until Tuesday, everything seemed to work well and the Builds ran at the specified time (both before and after Daylight Saving Time applied).\nAnd then I installed Update 4… 🙂\nThe issue #After installing Update 4, our scheduled builds ran an hour early. Of course I checked both the time on the server and the time the build was scheduled for: these were fine. I looked at the Update 4 documentation, but couldn’t find anything related. I did see however the build server report its time setting as UTC +01:00, and the build definition stating UTC +02:00.\nNext up was searching the web, which pointed me to an article on connect.microsoft.com: Scheduled build launched 1 hour earlier. As a comment on this article, which is from July last year, Microsoft employee Mario mentions the issue is fixed in the (at that time) RC of the Summer Update. He also mentions:\nOnce you install that Update on the server please recreate/re add the build definition and the database will now respect the right times.\nVisual Studio 2013 Update 3 \u0026amp; 4 #Since we were using Update 2, I looked at the documentation of both Update 3 and Update 4. And if you go to the New technology improvements in Visual Studio 2013 Update 3 chapter and look at the Fixed issues paragraph you find this for Team Foundation Server:\nScheduled builds may run an hour early after daylight saving time.\nThis led me to believe the update Mario was talking about July last year was part of Update 3. Which might be the cause of our issues.\nThe solution – Quick \u0026amp; Dirty #To get our builds to run at the scheduled times, we used a real obvious and Quick \u0026amp; Dirty solution: we shifted the scheduled times of the builds an hour, so they run at the time we expect them to run, not the time they are scheduled to run (??!?!?).\nThere are some downsides to this solution, like the builds not running at their scheduled time, but an hour early. That’s not logical. So you should document / communicate it well. Another downside is I expect the build won’t run at the right time after Daylight Saving Time.\nThe REAL solution #I created a new build definition that was scheduled at a specific time. And it ran at the specified time. Since Update 3 solves this issue, I expect it to run at the same time after Daylight Saving Time.\nSo the only REAL solution is to re-create your build definitions.\nScenarios #I think (but am not sure) the following scenarios apply:\nBuild definition created in Build definition running in Result Update 2 Update 2 Works fine (?) Update 3 / 4 Update 3 / 4 Works fine Update 2 Update 3 / 4 Trouble in paradise References #For details about the updates, have a look at the Description of Visual Studio 2013 Update 3 and Description of Visual Studio 2013 Update 4.\nYou can find the Connect article over at Scheduled build launched 1 hour earlier.\nUPDATE April 9 2015 16:15 #It seems like it’s enough to edit (something small in) the build definition and save it to TFS again. The builds for which we shifted the time now build at the shifted time.\nI’ve set the time for the scheduled builds to their original value and hope I can add a second update here tomorrow saying all is well…\nUPDATE April 10 2015 09:45 #Just to confirm, like Bryan MacFarlane states below: changing something small and saving your build definition is enough to fix this issue. So the impact is minor. 😀\n","date":"9 April 2015","permalink":"https://www.rickvandenbosch.net/blog/scheduled-build-launches-an-hour-early-on-tfs-2013-after-installing-update-3-or-4/","section":"Blog","summary":"\u003cp\u003e‼ There’s new information in this issue. Please read the updates at the bottom of the article.‼\u003c/p\u003e\n\u003cp\u003eWe use our own TFS server and were using TFS 2013 Update 2 up until last Tuesday. We have several build definitions for my current project, and most of them are scheduled at a specific time, because we have specific times for automatic deployment. Up until Tuesday, everything seemed to work well and the Builds ran at the specified time (both before and after Daylight Saving Time applied).\u003c/p\u003e","title":"Scheduled build launches an hour early on TFS 2013 (after installing Update 3 or 4)"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/tfs/","section":"Tags","summary":"","title":"TFS"},{"content":" Last week I received my Intel Galileo board (windowsondevices.com) and I started playing with developing for it yesterday. I created a first test project, but it didn’t run. Visual Studio couldn’t find the Arduino header file, which was probably due to a missing NuGet package (the Galileo C++ SDK). I tried to save the project, because you need to before you can manage NuGet packages, but to no avail. Visual Studio served me a ‘The operation could not be completed’ error without any additional information.][2]\nA while ago I posted about some handy settings in Visual Studio like Zero-impact projects \u0026amp; Cutting/copying empty lines. Turns out that the Windows for IoT project template does some extra things upon creation. And with the ‘Save new projects when created’ checkbox unchecked, it’s not able to do that. Rendering the project unsaveable…\nThe solution #It’s as easy as it is ugly to have to do this: simply check the checkbox in ‘Save new projects when created’ before creating your Windows for IoT project. Then you’re good to go…!\nHope this helps\n","date":"16 September 2014","permalink":"https://www.rickvandenbosch.net/blog/error-saving-galileo-wiring-app-in-visual-studio/","section":"Blog","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/galileo-image1.webp\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n Last week I received my Intel Galileo board (\u003ca href=\"https://www.windowsondevices.com\" target=\"_blank\" rel=\"noreferrer\"\u003ewindowsondevices.com\u003c/a\u003e) and I started \u003cdel\u003eplaying with\u003c/del\u003e developing for it yesterday. I created a first test project, but it didn’t run. Visual Studio couldn’t find the Arduino header file, which was probably due to a missing NuGet package (the Galileo C++ SDK). I tried to save the project, because you need to before you can manage NuGet packages, but to no avail. Visual Studio served me a ‘The operation could not be completed’ error without any additional information.][2]\u003c/p\u003e","title":"Error saving Galileo Wiring App in Visual Studio"},{"content":"A few minutes before my second session at the Dutch Techdays started I tried connecting to my Virtual Machine in Microsoft Azure through remote desktop. It didn’t connect\u0026hellip; The RDP client tried to connect to the Virtual Machine, but nothing happened.\nSo I rebooted the VM and tried connecting again, confident that this would solve the problem. It didn’t connect…. again. As I started stressing out a bit (the VM was the main character of my session) I thought of one last thing I could try.\nFixing the issue #The next steps helped me save my Virtual Machine without too much loss of time (I was able to connect again just before the start of my session!):\nGo to the Azure Management Portal Open up the details of the VM you’re having trouble with Go to the ENDPOINTS tab (see image below) Select the ‘Remote Desktop’ endpoint and click EDIT at the bottom of the screen Change the public port to a different (random) number Wait for the changes to be propagated Success! Hope this helps.\n","date":"7 May 2014","permalink":"https://www.rickvandenbosch.net/blog/fixing-the-remote-desktop-connection-to-a-virtual-machine-in-microsoft-azure/","section":"Blog","summary":"\u003cp\u003eA few minutes before my second session at the Dutch Techdays started I tried connecting to my Virtual Machine in Microsoft Azure through remote desktop. It didn’t connect\u0026hellip; The RDP client tried to connect to the Virtual Machine, but nothing happened.\u003c/p\u003e","title":"Fixing the Remote Desktop Connection to a Virtual Machine in Microsoft Azure"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/hpc/","section":"Tags","summary":"","title":"HPC"},{"content":"As I wrote earlier I presented at the 2014 Dutch Techdays. The session content is now available online. Find it here (Dutch):\nSession information + PDF of my presentation My presentation on SlideShare My session on Channel 9 ","date":"7 May 2014","permalink":"https://www.rickvandenbosch.net/blog/techdays-2014-the-netherlands/","section":"Blog","summary":"\u003cp\u003eAs I wrote earlier I presented at the 2014 Dutch Techdays. The session content is now available online. Find it here \u003cstrong\u003e(Dutch)\u003c/strong\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://www.microsoft.com/netherlands/techdays/SessionDetail.aspx?sessionId=4588\" target=\"_blank\" rel=\"noreferrer\"\u003eSession information + PDF of my presentation\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://www.slideshare.net/rickvdbosch/high-performance-computing-in-microsoft-azure-rick-van-den-bosch\" target=\"_blank\" rel=\"noreferrer\"\u003eMy presentation on SlideShare\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"https://channel9.msdn.com/Events/TechDays/Techdays-2014-the-Netherlands/High-Performance-Computing-in-Windows-Azure\" target=\"_blank\" rel=\"noreferrer\"\u003eMy session on Channel 9\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/Techdays14_Logo_1.gif\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\n\u003ca href=\"https://channel9.msdn.com\" target=\"_blank\" rel=\"noreferrer\"\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/channel-9-logo.webp\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/a\u003e\u003c/p\u003e","title":"Techdays 2014 The Netherlands"},{"content":" When working with Visual Studio 2012 on our current project, the error ‘These files are not text files and cannot be opened in the comparison window.’ shows up every now and again. I’ve tried several things to solve this problem.\nHere’s the one that works:\nClose Visual Studio Navigate to your version of the c:\\users\\{username}\\AppData\\Local\\Temp\\ folder Delete the TFSTemp folder Restart Visual Studio and try again. You should be good to go! Hope this helps.\n","date":"12 March 2014","permalink":"https://www.rickvandenbosch.net/blog/error-comparing-historic-versions-of-a-tfs-source-controlled-file/","section":"Blog","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/vserror-comparing.webp\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003cp\u003eWhen working with Visual Studio 2012 on our current project, the error ‘These files are not text files and cannot be opened in the comparison window.’ shows up every now and again. I’ve tried several things to solve this problem.\u003c/p\u003e","title":"Error comparing historic versions of a TFS source controlled file"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/vs2012/","section":"Tags","summary":"","title":"VS2012"},{"content":"There are a couple of websites I manage that use Twitter Bootstrap*. These websites are fully responsive and work well on all devices. Or actually, almost all devices. The wrapping of columns in a container on a Windows Phone doesn’t work the way you’d want it out of the box. Windows Phone interprets device-width as the actual resolution size. Other mobile browsers use what the manufacturer (or browser vendor) has decided is the optimal viewport width.\nTo fix this issue, follow these steps:\nAdd this line to use –ms-viewport in your CSS file @-ms-viewport{ width: device-width; } Add this line to the head tag of your HTML page (it’s probably already there since you’re using Bootstrap) (function() { if (\u0026#34;-ms-user-select\u0026#34; in document.documentElement.style \u0026amp;\u0026amp; navigator.userAgent.match(/IEMobile\\/10\\.0/)) { var msViewportStyle = document.createElement(\u0026#34;style\u0026#34;); msViewportStyle.appendChild( document.createTextNode(\u0026#34;@-ms-viewport{width:auto!important}\u0026#34;) ); document.getElementsByTagName(\u0026#34;head\u0026#34;)[0].appendChild(msViewportStyle); } })(); I found this solution over at Matt Stow’s blog ‘Firewoiks’. You can find the original article here.\nHope this helps.\n* The Bootstrap project is no longer under the Twitter brand.\nOriginally created by a designer and a developer at Twitter, Bootstrap has become one of the most popular front-end frameworks and open source projects in the world.\n– about Bootstrap\n","date":"21 February 2014","permalink":"https://www.rickvandenbosch.net/blog/getting-bootstrap-to-work-on-windows-phone-8/","section":"Blog","summary":"\u003cp\u003eThere are a couple of websites I manage that use \u003cdel\u003eTwitter\u003c/del\u003e \u003ca href=\"https://www.getbootstrap.com\" target=\"_blank\" rel=\"noreferrer\"\u003eBootstrap\u003c/a\u003e*. These websites are fully responsive and work well on all devices. Or actually, almost all devices. The wrapping of columns in a container on a Windows Phone doesn’t work the way you’d want it out of the box. Windows Phone interprets \u003ccode\u003edevice-width\u003c/code\u003e as the actual resolution size. Other mobile browsers use what the manufacturer (or browser vendor) has decided is the optimal viewport width.\u003c/p\u003e","title":"Getting Bootstrap to work on Windows Phone 8"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/twitter-bootstrap/","section":"Tags","summary":"","title":"Twitter Bootstrap"},{"content":"I’m proud to announce that this year I’ll be speaking at the TechDays in the World Forum in Den Haag, April 16 – 17. This session will be about High Performance Computing in Windows Azure.\nCamera resolutions keep increasing, your digital behavior on websites and in apps is collected, images that satellites make get more and more detailed and (research) equipment produces more data. The amount of data that’s being stored keeps increasing. This data often has to be processed to become information. With increasing amounts of data to be processed the need for a Cluster like solution to achieve this within acceptable time grows. With the rise of the Cloud you don’t need to have that Cluster in the basement anymore, but you can leverage the power and capacity of the Cloud. In this session you see how High Performance Computing in Windows Azure can be used to distribute processing tasks to multiple machines in Windows Azure.\n","date":"7 February 2014","permalink":"https://www.rickvandenbosch.net/blog/speaking-at-techdays-2014/","section":"Blog","summary":"\u003cp\u003eI’m proud to announce that this year I’ll be \u003ca href=\"https://www.microsoft.com/netherlands/techdays/SpeakerDetail.aspx?speakerId=188\" target=\"_blank\" rel=\"noreferrer\"\u003espeaking\u003c/a\u003e at the TechDays in the World Forum in Den Haag, April 16 – 17. This session will be about \u003ca href=\"https://www.microsoft.com/netherlands/techdays/SessionDetail.aspx?sessionId=4588\" target=\"_blank\" rel=\"noreferrer\"\u003eHigh Performance Computing in Windows Azure\u003c/a\u003e.\u003c/p\u003e","title":"Speaking at TechDays 2014"},{"content":"Bloggingabout.net has moved from Community Server to WordPress. One of the changes that comes along with this is that the URL of my blog has changed too. I went from bloggingabout.net/blogs/rick to rick.bloggingabout.net.\nThanks to Dennis for putting in a lot of time and effort to migrate BloggingAbout to our new WordPress environment. I’m looking forward to adding a lot more interesting content to my blog in the new Bloggingabout.net!\n","date":"4 February 2014","permalink":"https://www.rickvandenbosch.net/blog/blog-moved/","section":"Blog","summary":"\u003cp\u003eBloggingabout.net has moved from Community Server to WordPress. One of the changes that comes along with this is that the URL of my blog has changed too. I went from bloggingabout.net/blogs/rick to \u003ca href=\"https://rick.bloggingabout.net\" target=\"_blank\" rel=\"noreferrer\"\u003erick.bloggingabout.net\u003c/a\u003e.\u003c/p\u003e","title":"Blog moved…"},{"content":"When you have more than one Microsoft Account that you use regularly, you might recognize the scenario where your Visual Studio keeps you signed in to Visual Studio Online… with the wrong account. You keep getting messages that you don’t have access rights. Restarting Visual Studio, rebooting and even clearing all (Visual Studio) cookies doesn’t help. Here’s a quick fix:\nOpen Visual Studio Open the Visual Studio web browser (under View, Other Windows, Web Browser) Go to Visual Studio Online Click sign out You should be good to go now!\nHope this helps.\n","date":"27 November 2013","permalink":"https://www.rickvandenbosch.net/blog/howto-sign-out-of-visual-studio-online-when-deleting-cookies-wont-help/","section":"Blog","summary":"\u003cp\u003eWhen you have more than one Microsoft Account that you use regularly, you might recognize the scenario where your Visual Studio keeps you signed in to Visual Studio Online… with the wrong account. You keep getting messages that you don’t have access rights. Restarting Visual Studio, rebooting and even clearing all (Visual Studio) cookies doesn’t help. Here’s a quick fix:\u003c/p\u003e","title":"HowTo: sign out of Visual Studio Online (when deleting cookies won’t help)"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/visual-studio-online/","section":"Tags","summary":"","title":"Visual Studio Online"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/javascript/","section":"Tags","summary":"","title":"Javascript"},{"content":" I\u0026rsquo;ve been running into the error message on the right (“Unable to get property \u0026lsquo;style\u0026rsquo; of undefined or null reference”) when opening an instance or a new tab of IE10 for the past couple of weeks. It didn\u0026rsquo;t matter what start page I used, since I tried about:blank, google.com and approximately a dozen more. I found out McAfee SiteAdvisor was the cause of this error pretty quick, but since the company I\u0026rsquo;m currently in doesn\u0026rsquo;t allow users to disable SiteAdvisor and I needed IE10 for some testing purposes, I had to find a different solution to the problem.\nI found a workaround which will do for now: in IE10, go to \u0026lsquo;Tools\u0026rsquo; then \u0026lsquo;Compatibility View Settings\u0026rsquo; and check \u0026lsquo;Display all websites in Compatibility View\u0026rsquo;. This will, as you imagined, open all pages in Compatibility View which causes the errors to stop popping up. It is not an ideal solution, but it\u0026rsquo;s better than closing a script error message for every single IE instance or tab that is opened. Besides, it\u0026rsquo;s pretty easy to get IE to render as true IE10 in stead of Compatibility View by changing the browser mode to IE10 in the F12 developer tools.\nGood to know: after changing browser mode to normal IE10 in a tab, the error doesn\u0026rsquo;t occur in that tab for the current or subsequent pages you visit while it maintains the Browser Mode. Of course new instances and new tabs will have Compatibility View enabled again.\nHope this helps\n","date":"4 July 2013","permalink":"https://www.rickvandenbosch.net/blog/scripterrors-opening-a-new-tab-of-ie10-on-a-windows-7-machine/","section":"Blog","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/scripterrors01.webp\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\nI\u0026rsquo;ve been running into the error message on the right (“Unable to get property \u0026lsquo;style\u0026rsquo; of undefined or null reference”) when opening an instance or a new tab of IE10 for the past couple of weeks. It didn\u0026rsquo;t matter what start page I used, since I tried about:blank, google.com and approximately a dozen more. I found out McAfee SiteAdvisor was the cause of this error pretty quick, but since the company I\u0026rsquo;m currently in doesn\u0026rsquo;t allow users to disable SiteAdvisor and I needed IE10 for some testing purposes, I had to find a different solution to the problem.\u003c/p\u003e","title":"ScriptErrors opening (a new tab of) IE10 on a Windows 7 machine"},{"content":"Just a quick little post today: I got the error “The Path \u0026lsquo;path\u0026rsquo; is already mapped in workspace \u0026lsquo;workspace\u0026rsquo;” when I connected to a new Team Foundation Server and tried to map my workspace today. I had connected to a Team Foundation Services project a while back to get some shared code, but I already removed the workspace and the server binding. Even though Visual Studio didn\u0026rsquo;t see any other bindings, mapping my workspace to the same folder the previous TFS binding was mapped to served me this error.\nThe quick solution: manually edit (or remove if you don\u0026rsquo;t have any other bindings) the file VersionControl.config, which can be found under %AppData%\\Local\\Microsoft\\Team Foundation\\4.0\\Cache\nHope this helps.\n","date":"2 April 2013","permalink":"https://www.rickvandenbosch.net/blog/error-the-path-path-is-already-mapped-in-workspace-workspace/","section":"Blog","summary":"\u003cp\u003eJust a quick little post today: I got the error “The Path \u0026lsquo;path\u0026rsquo; is already mapped in workspace \u0026lsquo;workspace\u0026rsquo;” when I connected to a new Team Foundation Server and tried to map my workspace today. I had connected to a Team Foundation Services project a while back to get some shared code, but I already removed the workspace and the server binding. Even though Visual Studio didn\u0026rsquo;t see any other bindings, mapping my workspace to the same folder the previous TFS binding was mapped to served me this error.\u003c/p\u003e","title":"Error: The Path ‘path’ is already mapped in workspace ‘workspace’"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/mvc4/","section":"Tags","summary":"","title":"MVC4"},{"content":"A rather long title for this post, but that’s exactly what happened: when I opened an ASP.NET MVC 4 project with a cshtml view open, Visual Studio would crash with the error messages seen on the right. This would only occur if the first project I opened had a cshtml file open. When I opened another (type of) project first and then opened a project with a cshtml file open, the problem did not occur. Debugging Visual Studio with a new instance of Visual Studio (Inception anyone?) made things a bit clearer. (Part of) the exception information:\nSource\nWebEssentials2012\nMessage\nCould not load type \u0026lsquo;Microsoft.Less.Core.LessMixinDeclaration\u0026rsquo; from assembly \u0026lsquo;Microsoft.VisualStudio.Web.Extensions, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a\u0026rsquo;.\nAfter searching around a bit, I found this blog post by Mads Kristensen: Web Tools 2012.2 and Web Essentials. This post talks about Web Tools 2012.2 and Web Essentials 2.5, and how an error can occur if you install Web Tools 2012.2 and don’t upgrade to Web Essentials 2.5. However, I do have Web Essentials 2.5.1 installed so this issue shouldn’t be the same as mine.\nAlthough my situation didn’t match the one on Mads’s blog, I decided to install Web Tools 2012.2 just to see what the result would be. As it turned out, installing the Web Tools 2012.2 did solve the problem. Here’s why I think this solved it:\nI had an older version of WebEssentials installed, which included specific functionality. This functionality was moved to Web Tools, and out of the new version of Web Essentials. When I updated to the new version of Web Essentials (without having Web Tools installed!), the functionality was no longer available in Web Essentials giving me the ‘Could not load type’ exception.\nI’m not sure why the exception did not occur when I opened a different project first or if this is the exact reason of the exception occurring. I’ll contact Mads to share my findings, he might be able to reproduce this.\nHope this helps\n","date":"15 March 2013","permalink":"https://www.rickvandenbosch.net/blog/visual-studio-2012-crashes-when-opening-an-asp-net-mvc-project-with-a-cshtml-open/","section":"Blog","summary":"\u003cp\u003eA rather long title for this post, but that’s exactly what happened: when I opened an ASP.NET MVC 4 project with a cshtml view open, Visual Studio would crash with the error messages seen on the right. This would only occur if the \u003cem\u003efirst\u003c/em\u003e project I opened had a cshtml file open. When I opened another (type of) project first and then opened a project with a cshtml file open, the problem did not occur. Debugging Visual Studio with a new instance of Visual Studio (\u003ca href=\"https://www.imdb.com/title/tt1375666\" target=\"_blank\" rel=\"noreferrer\"\u003eInception\u003c/a\u003e  anyone?) made things a bit clearer. (Part of) the exception information:\u003c/p\u003e","title":"Visual Studio 2012 crashes when opening an ASP.NET MVC project with a cshtml open"},{"content":"Just a quickie today: when working with Twitter Bootstrap tabs, like I am in my ASP.NET MVC 4 project, you might want to add Next and Previous buttons on the tabs to create something of a Wizard. Here’sa step by step overview of how I did this:\nAdd an ID to all the ListItem elements that are used for the tab navigation. For instance:\n\u0026lt;ul class=\u0026#34;nav nav-tabs\u0026#34; id=\u0026#34;myTab\u0026#34;\u0026gt; \u0026lt;li\u0026gt;\u0026lt;a href=\u0026#34;#example\u0026#34; data-toggle=\u0026#34;tab\u0026#34; id=\u0026#34;xmpl\u0026#34;\u0026gt;Example\u0026lt;/a\u0026gt;\u0026lt;/li\u0026gt; ... \u0026lt;/ul\u0026gt; Add a button you would like to use to activate the Example tab\nIn the onclick, call the ShowTab JavaScript function with the id of the ListItem for the Example tab (which is xmpl in this example)\nThe ShowTab function is simple:\nfunction ShowTab(tabname){ $(\u0026#39;#\u0026#39; + tabname).tab(\u0026#39;show\u0026#39;); } Hope this helps\n","date":"16 January 2013","permalink":"https://www.rickvandenbosch.net/blog/how-to-add-next-and-previous-buttons-to-twitter-bootstrap-tabs/","section":"Blog","summary":"\u003cp\u003eJust a quickie today: when working with \u003cdel\u003eTwitter\u003c/del\u003e \u003ca href=\"https://getbootstrap.com\" target=\"_blank\" rel=\"noreferrer\"\u003eBootstrap\u003c/a\u003e tabs, like I am in my ASP.NET MVC 4 project, you might want to add Next and Previous buttons on the tabs to create something of a Wizard. Here’sa step by step overview of how I did this:\u003c/p\u003e","title":"How to add Next and Previous buttons to Twitter Bootstrap tabs"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/jquery/","section":"Tags","summary":"","title":"JQuery"},{"content":"When debugging JavaScript in an ASP.NET MVC (4) application, it is not always enough to uncheck the \u0026lsquo;Disable script debugging\u0026rsquo; checkboxes under \u0026lsquo;Tools\u0026rsquo; – \u0026lsquo;Internet Options\u0026rsquo; – \u0026lsquo;Advanced\u0026rsquo; – \u0026lsquo;Browsing\u0026rsquo;. JavaScript inside a Razor view (a cshtml file) cannot be debugged from Visual Studio. To debug your JavaScript, move it to a separate .js file and link to that file from your Razor view. This way, breakpoints set in the JavaScript will be hit and you can debug from Visual Studio.\nHope this helps\nDisclaimer: I know about the F12 Developer Tools, Firebug and all the other possibilities we have to debug JavaScript. This post is about getting JavaScript debugging to work with Visual Studio and breakpoints set in Visual Studio. For those who want it that way. So there\u0026hellip; 😉\n","date":"19 December 2012","permalink":"https://www.rickvandenbosch.net/blog/debugging-javascript-with-visual-studio-in-an-asp-net-mvc-4-application/","section":"Blog","summary":"\u003cp\u003eWhen debugging JavaScript in an ASP.NET MVC (4) application, it is not always enough to uncheck the \u0026lsquo;Disable script debugging\u0026rsquo; checkboxes under \u0026lsquo;Tools\u0026rsquo; – \u0026lsquo;Internet Options\u0026rsquo; – \u0026lsquo;Advanced\u0026rsquo; – \u0026lsquo;Browsing\u0026rsquo;. JavaScript inside a Razor view (a cshtml file) cannot be debugged from Visual Studio. To debug your JavaScript, move it to a separate .js file and link to that file from your Razor view. This way, breakpoints set in the JavaScript will be hit and you can debug from Visual Studio.\u003c/p\u003e","title":"Debugging JavaScript with Visual Studio in an ASP.NET MVC 4 application"},{"content":"Problem:\nDeveloping a generic class that maps datasets, datatables and datarows from a legacy system to my domain model, I ran into an issue. I wanted to call a generic method with a runtime type. Lets say the method looked like this: public string DoSomething\u0026lt;T\u0026gt;(string param). Because I use reflection to iterate properties on a type, the type of the properties was dynamic and only known at runtime. I wanted to do something like this:\nDoSomething\u0026lt;propertyInfo.PropertyType\u0026gt;(\u0026#34;bloggingabout\u0026#34;); This however resulted in an error message. The tooltip on the red colored propertyInfo read “Cannot resolve symbol \u0026lsquo;propertyInfo\u0026rsquo;”, while the build error stated “The type or namespace name \u0026lsquo;propertyInfo\u0026rsquo; could not be found (are you missing a using directive or an assembly reference?)”. This is expected behavior, because “The type argument [\u0026hellip;] can be any type recognized by the compiler.” So that says compiler. So the type is parsed (and should be known) at compile time.\nSolution:\nThe solution is found in reflection. Taken from the MSDN article for the MethodInfo.MakeGenericMethod Mehod:\nThe MakeGenericMethod method allows you to write code that assigns specific types to the type parameters of a generic method definition, thus creating a MethodInfo object that represents a particular constructed method. If the ContainsGenericParameters property of this MethodInfo object returns true, you can use it to invoke the method or to create a delegate to invoke the method.\nIn our example, this would look something like this:\ninstance.GetType() .GetMethod(\u0026#34;DoSomething\u0026#34;) .MakeGenericMethod(propertyInfo.PropertyType) .Invoke(mapper, new object[] { \u0026#34;bloggingabout\u0026#34; }); More information:\nGeneric Type Parameters (C# Programming Guide)\nMethodInfo.MakeGenericMethod Method\n","date":"2 December 2012","permalink":"https://www.rickvandenbosch.net/blog/how-to-call-a-generic-method-with-a-runtime-type/","section":"Blog","summary":"\u003cp\u003e\u003cstrong\u003eProblem:\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eDeveloping a generic class that maps datasets, datatables and datarows from a legacy system to my domain model, I ran into an issue. I wanted to call a generic method with a runtime type. Lets say the method looked like this: \u003ccode\u003epublic string DoSomething\u0026lt;T\u0026gt;(string param)\u003c/code\u003e. Because I use reflection to iterate properties on a type, the type of the properties was dynamic and only known at runtime. I wanted to do something like this:\u003c/p\u003e","title":"How To: Call a generic method with a runtime type"},{"content":"After installing Visual Studio 2012 Update 1, my Visual Studio stopped opening files in preview mode when I clicked them in the Solution Explorer. This setting seems to have changed with the installation of Update 1. To re-enable opening files clicked (once) in the Solution Explorer in Preview mode, go to ‘Tools’ – ‘Options’ – ‘Environment’ – ‘Tabs and Windows’.\nThere, check the box under ‘Preview Tab’ – ‘Single-click opens files in the preview tab in:’ – ‘Solution Explorer (Alt + click to avoid previewing)’.\nHope this helps\nEDIT: #This is a lot easier: the \u0026lsquo;Preview Selected Items\u0026rsquo; button in the Solution Explorer toolbar: ","date":"2 December 2012","permalink":"https://www.rickvandenbosch.net/blog/enable-preview-in-visual-studio-2012-after-update-1/","section":"Blog","summary":"\u003cp\u003eAfter installing Visual Studio 2012 Update 1, my Visual Studio stopped opening files in preview mode when I clicked them in the Solution Explorer. This setting seems to have changed with the installation of Update 1. To re-enable opening files clicked (once) in the Solution Explorer in Preview mode, go to ‘Tools’ – ‘Options’ – ‘Environment’ – ‘Tabs and Windows’.\u003c/p\u003e","title":"Enable preview in Visual Studio 2012 after Update 1"},{"content":"Twitter Bootstrap is a\u0026hellip; “Sleek, intuitive, and powerful front-end framework for faster and easier web development.” One of the nice things in Bootstrap is you can use icons from Glyphicons. To use these, you can simply use this markup \u0026lt;i class=\u0026quot;icon-fire\u0026quot;\u0026gt;\u0026lt;/i\u0026gt; to get a nice fire icon.\nTranslating this into an ActionLink styled as a button in an MVC4 application would look something like the following:\n@Html.ActionLink(\u0026#34;\u0026lt;i class=\u0026#34;icon-fire\u0026#34;\u0026gt;\u0026lt;/i\u0026gt; Invent fire\u0026#34;, \u0026#34;fire\u0026#34;, new { @class = \u0026#34;btn\u0026#34; }) Unfortunately, this renders as follows:\nThe reason this is not rendered correctly is because Html.ActionLink HtmlEncodes the text you pass in the actionLink parameter. You can check this by opening the System.Web.Mvc assembly in your disassembler of choice, and having a look at the GenerateLinkInternal method on the HtmlHelper class. It HtmlEncodes the linkText, and doesn\u0026rsquo;t have any option to have it not do that. To solve this, I wrote an extension method called NoEncodeActionLink, looking like this:\npublic static IHtmlString NoEncodeActionLink(this HtmlHelper htmlHelper, string linkText, string action, object htmlAttributes) { UrlHelper urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext); TagBuilder builder = new TagBuilder(\u0026#34;a\u0026#34;); builder.InnerHtml = linkText; builder.Attributes[\u0026#34;href\u0026#34;] = urlHelper.Action(action); builder.MergeAttributes(new RouteValueDictionary(htmlAttributes)); return MvcHtmlString.Create(builder.ToString()); } Calling the new overload (don\u0026rsquo;t forget to add a using statement to the namespace holding the extension method), the linkText parameter is not HtmlEncoded, which means the ActionLink now renders fine, including the icon (and the button style):\nHope this helps.\n","date":"7 November 2012","permalink":"https://www.rickvandenbosch.net/blog/how-to-create-an-actionlink-with-a-twitter-bootstrap-icon-in-mvc4/","section":"Blog","summary":"\u003cp\u003e\u003ca href=\"https://getbootstrap.com\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cdel\u003eTwitter\u003c/del\u003e Bootstrap\u003c/a\u003e is a\u0026hellip; “Sleek, intuitive, and powerful front-end framework for faster and easier web development.” One of the nice things in Bootstrap is you can use icons from \u003ca href=\"https://glyphicons.com\" target=\"_blank\" rel=\"noreferrer\"\u003eGlyphicons\u003c/a\u003e. To use these, you can simply use this markup \u003ccode\u003e\u0026lt;i class=\u0026quot;icon-fire\u0026quot;\u0026gt;\u0026lt;/i\u0026gt;\u003c/code\u003e to get a nice fire icon.\u003c/p\u003e","title":"How To: Create an ActionLink with a Twitter Bootstrap icon in MVC4"},{"content":" In the past, when you had some XML document that you wanted to translate into classes we had to create / generate a schema based on the XML file. Next, we had to generate a class based on the schema with an external tool. Not all too user friendly and somewhat time consuming.\nIn Visual Studio 2012 you copy the XML you want to create a class/classes for, place the cursor in a class file on the location you want the code to be added and select the following menu items: Edit – Paste Special – Paste XML as Classes. And you’re done! Just like that…\nIf you want to try real quick, there’s a sample XML file (books.xml) available here.\nEDIT:\nThe feature is .NET Framework 4.5 specific. Taken from this MSDN article \u0026lsquo;Generating Data Type Classes from XML\u0026rsquo;:\n“.NET Framework 4.5 includes a new feature to generate data type classes from XML.”\n","date":"24 October 2012","permalink":"https://www.rickvandenbosch.net/blog/tip-paste-xml-as-classes-in-visual-studio-2012/","section":"Blog","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/paste-xml-as-classes.webp\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003cp\u003eIn the past, when you had some XML document that you wanted to translate into classes we had to create / generate a schema based on the XML file. Next, we had to generate a class based on the schema with an external tool. Not all too user friendly and somewhat time consuming.\u003c/p\u003e","title":"TIP: “Paste XML as Classes” in Visual Studio 2012"},{"content":"My Microsoft Touch Mouse stopped scrolling in Visual Studio on my Windows 8 machine some time ago. Because this kills productivity, I wanted to fix the problem. After trying some things I found that the problem only occurred when I ran Visual Studio as Administrator. Searching a bit further I found this bug to be added to Microsoft Connect. I found a workaround for the problem:\nGo to the location where you have Microsoft Mouse and Keyboard Center installed Open up the properties of ipoint.exe Set it to Run as Administrator Kill and restart ipoint.exe (or restart the machine) Welcome back scrolling in Visual Studio…! Hope this helps\n","date":"23 October 2012","permalink":"https://www.rickvandenbosch.net/blog/microsoft-touch-mouse-visual-studio-2012-and-scrolling/","section":"Blog","summary":"\u003cp\u003eMy Microsoft Touch Mouse stopped scrolling in Visual Studio on my Windows 8 machine some time ago. Because this kills productivity, I wanted to fix the problem. After trying some things I found that the problem only occurred when I \u003ca href=\"/blog/howto-have-visual-studio-always-run-as-administrator-on-windows-8\"\u003eran Visual Studio as Administrator\u003c/a\u003e. Searching a bit further I found this bug to be \u003ca href=\"https://connect.microsoft.com/VisualStudio/feedback/details/762365/loss-of-mouse-scrolling-with-microsoft-touch-mouse-with-vs-2012-when-running-as-administrator\" target=\"_blank\" rel=\"noreferrer\"\u003eadded to Microsoft Connect\u003c/a\u003e. I found a workaround for the problem:\u003c/p\u003e","title":"Microsoft Touch Mouse, Visual Studio (2012) and scrolling"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/windows-8/","section":"Tags","summary":"","title":"Windows 8"},{"content":"In my previous post about being unable to access the iis metabase I wanted my Visual Studio to ‘Run as Administrator’ on my Windows 8 machine. I only managed to get this working for the pinned taskbar icon and not for items in the jumplist or for items you open by double clicking them. The solution to check the box ‘Run as Administrator’ on the compatibility tab of the file properties for devenv.exe was not a solution, because there is no more Compatibility tab in Windows 8 :).\nBut there is a way to have devenv.exe always ‘Run as Administrator’. Here’s how:\nRight click devenv.exe en select Troubleshoot compatibility (first picture) Select the option ‘Troubleshoot program’ after the wizard has finished detecting issues Choose the ‘The program requires additional permissions’ option (second picture). The wizard will apply the ‘Run as Administrator’ setting to devenv.exe Click ‘Test the program…’ (third picture – the wizard requires this) and close the wizard Enjoy! ","date":"16 October 2012","permalink":"https://www.rickvandenbosch.net/blog/howto-have-visual-studio-always-run-as-administrator-on-windows-8/","section":"Blog","summary":"\u003cp\u003eIn my previous post about being \u003ca href=\"/blog/unable-to-access-the-iis-metabase.aspx\"\u003eunable to access the iis metabase\u003c/a\u003e I wanted my Visual Studio to ‘Run as Administrator’ on my Windows 8 machine. I only managed to get this working for the pinned taskbar icon and not for items in the jumplist or for items you open by double clicking them. The solution to check the box ‘Run as Administrator’ on the compatibility tab of the file properties for devenv.exe was not a solution, because there is no more Compatibility tab in Windows 8 :).\u003c/p\u003e","title":"HowTo: Have Visual Studio always run as administrator on Windows 8"},{"content":" I opened a solution in Visual Studio 2012 on my laptop running Windows 8, when I was presented with the error “The Web Application Project SomeWebProject is configured to use IIS. Unable to access the IIS metabase. You do not have sufficient privilege to access IIS web sites on your machine.” The user I was logged in with was a local administrator and was able to open up and use IIS Manager, but still I was presented with this error. The solution to this is simple: start your Visual Studio with \u0026lsquo;Run as Administrator\u0026rsquo;. You can do this by right clicking the shortcut and selecting \u0026lsquo;Run as Administrator\u0026rsquo;.\nTIP:\nTo always have your Visual Studio open with \u0026lsquo;Run as Administrator\u0026rsquo;, please follow these steps:\nright click the shortcut you are used to use bring up its properties click \u0026lsquo;Advanced\u0026hellip;\u0026rsquo; on the \u0026lsquo;Shortcut\u0026rsquo; tab check the box \u0026lsquo;Run as administrator\u0026rsquo; (see image below) close the windows with \u0026lsquo;OK\u0026rsquo; Somehow I felt like this was default behavior on my Win7 VS2010 install, but it might be I set up the shortcut for it there too\u0026hellip;\n","date":"4 October 2012","permalink":"https://www.rickvandenbosch.net/blog/unable-to-access-the-iis-metabase/","section":"Blog","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/iismetabase01.webp\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003cp\u003eI opened a solution in Visual Studio 2012 on my laptop running Windows 8, when I was presented with the error “\u003cem\u003eThe Web Application Project SomeWebProject is configured to use IIS.  Unable to access the IIS metabase. You do not have sufficient privilege to access IIS web sites on your machine.\u003c/em\u003e” The user I was logged in with was a local administrator and was able to open up and use IIS Manager, but still I was presented with this error. The solution to this is simple: start your Visual Studio with \u0026lsquo;Run as Administrator\u0026rsquo;. You can do this by right clicking the shortcut and selecting \u0026lsquo;Run as Administrator\u0026rsquo;.\u003c/p\u003e","title":"Unable to access the IIS metabase"},{"content":" Just a small post today: as of September first I joined Betabit (site is in Dutch).\nAfter having had several employers in the last few years, this feels like coming home.\nOn our way to do nice things\u0026hellip;!\n","date":"21 September 2012","permalink":"https://www.rickvandenbosch.net/blog/coming-home/","section":"Blog","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/Betabit-logo-groot.webp\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003cp\u003eJust a small post today: as of September first I joined \u003ca href=\"https://www.betabit.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eBetabit\u003c/a\u003e (site is in \u003cem\u003eDutch\u003c/em\u003e).\u003c/p\u003e\n\u003cp\u003eAfter having had several employers in the last few years, this feels like coming home.\u003c/p\u003e","title":"Coming home"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/ajax/","section":"Tags","summary":"","title":"Ajax"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/ajax-control-toolkit/","section":"Tags","summary":"","title":"Ajax Control Toolkit"},{"content":"Just a quick one: if you have a textbox with a Calendar (extender) from the Ajax Control Toolkit and an associated PopupButtonID which is an image, the calendar won\u0026rsquo;t close when you click outside the popup. Use an input type=”image”or an ImageButton to solve this problem.\nHope this helps.\n","date":"24 May 2012","permalink":"https://www.rickvandenbosch.net/blog/ajax-control-toolkit-calendar-doesnt-close-when-clicking-outside-the-calendar/","section":"Blog","summary":"\u003cp\u003eJust a quick one: if you have a textbox with a \u003ca href=\"https://www.asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/Calendar/Calendar.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eCalendar\u003c/a\u003e (extender) from the \u003ca href=\"https://ajaxcontroltoolkit.codeplex.com\" target=\"_blank\" rel=\"noreferrer\"\u003eAjax Control Toolkit\u003c/a\u003e and an associated \u003ccode\u003ePopupButtonID\u003c/code\u003e which is an image, the calendar won\u0026rsquo;t close when you click outside the popup. Use an input type=”image”or an ImageButton to solve this problem.\u003c/p\u003e","title":"Ajax Control Toolkit Calendar doesn’t close when clicking outside the calendar"},{"content":"When building an ASP application that generates Word documents, it was working fine on the local machine: A Windows XP installation with Office 2007. When we deployed it to windows 2008 (64 bit) and Word 2007 we saw that Documents.Open returned null. Other than this, there are no exceptions.\nThe code that returned the error (simplified):\nApplication app = new Application(); Document doc = app.Documents.Open(ref name); As it turns out, a 64 bit system stores temporary files in C:\\Windows\\Sys\\WOW64\\config\\system\\profile\\Desktop folder.\nThe solution:\nCreate a new directory called “Desktop” inside C:\\Windows\\Sys\\WOW64\\config\\system\\profile\nHope this helps.\n","date":"2 February 2012","permalink":"https://www.rickvandenbosch.net/blog/documents-open-returns-null-running-word-automation-under-asp-net-on-x64/","section":"Blog","summary":"\u003cp\u003eWhen building an ASP application that generates Word documents, it was working fine on the local machine: A Windows XP installation with Office 2007. When we deployed it to windows 2008 (64 bit) and Word 2007 we saw that \u003ccode\u003eDocuments.Open\u003c/code\u003e returned null. Other than this, there are no exceptions.\u003c/p\u003e","title":"Documents.Open returns null, running Word automation under ASP.NET on x64"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/sql/","section":"Tags","summary":"","title":"SQL"},{"content":" When installing SQL Server 2008 R2 on a Windows XP (or, according to the comments, Windows 7) development machine that has been around for quite some time, I got an error stating an unhandled exception occured in the application (see image). The error showed up directly upon startup and read:\nAn error occurred creating the configuration section handler for userSettings/Microsoft.SqlServer.Configuration.LandingPage.Properties.Settings: Could not load file or assembly \u0026lsquo;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\u0026rsquo; or one of its dependencies.\nRepairing the .NET 4.0 framework didn\u0026rsquo;t solve the issue. Neither did removing all SQL stuff through \u0026lsquo;Add or Remove Programs\u0026rsquo;. Looking into the error a bit further\u0026hellip;\nThe system cannot find the file specified. (C:\\Documents and Settings\\USERNAME\\Local Settings\\Application Data\\Microsoft\\Corporation\\LandingPage.exe\\StrongName_ryspccglaxmt4nhllj5z3thycltsvyyx10.0.0.0user.config line 5) —\u0026gt; System.IO.FileNotFoundException: Could not load file or assembly \u0026lsquo;System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\u0026rsquo; or one of its dependencies. The system cannot find the file specified.\nSo the problem probably wasn\u0026rsquo;t that System.dll couldn\u0026rsquo;t be found, but some user.config file for the landingpage executable. The solution is as simple as it is radical: remove the entire (temporary) folder \u0026lsquo;C:Documents and Settings\\USERNAME\\Local Settings\\Application Data\\Microsoft\\Corporation\u0026rsquo; (where USERNAME is, of course, the current username). After this the setup should start up without any problems.\n","date":"27 January 2012","permalink":"https://www.rickvandenbosch.net/blog/unhandled-exception-installing-sql-server-2008-r2-on-a-windows-xp-windows-7-machine/","section":"Blog","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/unhandled-exception-SQL.webp\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003cp\u003eWhen installing SQL Server 2008 R2 on a Windows XP (or, according to the comments, Windows 7) development machine that has been around for quite some time, I got an error stating an unhandled exception occured in the application (see image). The error showed up directly upon startup and read:\u003c/p\u003e","title":"Unhandled exception installing SQL Server 2008 R2 on a Windows XP / Windows 7 machine"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/work/","section":"Tags","summary":"","title":"Work"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/appfabric/","section":"Tags","summary":"","title":"Appfabric"},{"content":" When installing the Windows Azure AppFabric Tools for Visual Studio (found here), you might get the error message shown at the top, stating that Windows Server AppFabric is installed and that it is not compatible with this release of Windows Azure AppFabric Developer Tools for Microsoft Visual Studio 2010 – June 2011 CTP. It asks to uninstall Windows Server AppFabric and rerun this setup if you want to install Windows Azure AppFabric Developer Tools for Microsoft Visual Studio 2010 – June 2011 CTP.\nWhen looking for the install of ‘Windows Server AppFabric’ to remove it through ‘Uninstall a program’ you won’t find this item in the list of installed programs. This might feel as a big problem heading your way…\nSolution\nThis is, however, only a small problem on your way to Azure AppFabric development. Go to your list of installed programs and click ‘View installed updates’. Under Windows, you will find the update ‘Windows Server AppFabric (KB970622)’. Uninstall the update, restart your machine and try installing the Windows Azure AppFabric Tools for Visual Studio again…\nEnjoy!\n","date":"26 July 2011","permalink":"https://www.rickvandenbosch.net/blog/error-installing-the-windows-azure-appfabric-tools-for-visual-studio-ctp/","section":"Blog","summary":"\u003cp\u003e\n\n\n\n\n\n\n  \n  \n\u003cfigure\u003e\u003cimg src=\"/images/posts/error-azure-apfabric.webp\" alt=\"\" class=\"mx-auto my-0 rounded-md\" /\u003e\n\u003c/figure\u003e\n\u003c/p\u003e\n\u003cp\u003eWhen installing the Windows Azure AppFabric Tools for Visual Studio (found \u003ca href=\"https://www.microsoft.com/download/en/details.aspx?displaylang=en\u0026amp;id=17691\" target=\"_blank\" rel=\"noreferrer\"\u003ehere\u003c/a\u003e), you might get the error message shown at the top, stating that Windows Server AppFabric is installed and that it is not compatible with this release of Windows Azure AppFabric Developer Tools for Microsoft Visual Studio 2010 – June 2011 CTP. It asks to uninstall Windows Server AppFabric and rerun this setup if you want to install Windows Azure AppFabric Developer Tools for Microsoft Visual Studio 2010 – June 2011 CTP.\u003c/p\u003e","title":"Error installing the Windows Azure AppFabric Tools for Visual Studio (CTP)"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/vs2010/","section":"Tags","summary":"","title":"VS2010"},{"content":"When writing WCF services, most of us find ourselves writing quick test applications. To give you more time to do what a developer should be doing (adding business value to the project) the Visual Studio team added a WCF test client that can help you reach goals faster.\nThis is not a very difficult application, but it does the trick and is more than sufficient for simple testing. The WCF Test Client can be found at this location (without the ‘ (x86)’ for x86 machines): C:\\Program Files (x86)\\Microsoft\\Visual Studio 10.0\\Common\\7\\IDE.\nTaken from the help:\nWindows Communication Foundation (WCF) Test Client (WcfTestClient.exe) is a GUI tool that allows users to input test parameters, submit that input to the service, and view the response that the service sends back. It provides a seamless service testing experience when combined with WCF Service Host.\nWCF Test Client screenshots:\nUpdated:\nThanks to Marco for pointing out my typo\u0026hellip;!\n","date":"1 June 2011","permalink":"https://www.rickvandenbosch.net/blog/the-visual-studio-2010-test-client-for-wcf-services/","section":"Blog","summary":"\u003cp\u003eWhen writing WCF services, most of us find ourselves writing quick test applications. To give you more time to do what a developer should be doing (adding business value to the project) the Visual Studio team added a WCF test client that can help you reach goals faster.\u003c/p\u003e","title":"The Visual Studio 2010 Test Client for WCF services"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/wcf/","section":"Tags","summary":"","title":"WCF"},{"content":"Saving a file from Silverlight using the SaveFileDialog, added in Silverlight 3, is easy. If you’re used to desktop development however, you might find yourself getting a SecurityException with the message ‘File operation not permitted. Access to path \u0026lsquo;xxx\u0026rsquo; is denied.’. Here’s why:\nIn desktop development, you’re used to getting a filename from a SaveFileDialog. Next, you start doing whatever you need to be doing to the file, based on the filename. This would look something like this:\nSaveFileDialog saveFileDialog = new SaveFileDialog(); if (saveFileDialog.ShowDialog() == true) { StreamWriter streamWriter = new StreamWriter(saveFileDialog.SafeFileName); streamWriter.Write(\u0026#34;Follow me on twitter: @rickvdbosch\u0026#34;); streamWriter.Flush(); streamWriter.Close(); } This results in the SecurityException. First time I saw the property, I genuinely thought it said SaveFileName. But, as you can see, it says SafeFileName. It is named safe, because the returned file name has all file path information removed for security purposes.\nIn Silverlight, if you want the above functionality, it should look something like this:\nSaveFileDialog saveFileDialog = new SaveFileDialog(); if (saveFileDialog.ShowDialog() == true) { StreamWriter streamWriter = new StreamWriter(saveFileDialog.OpenFile()); streamWriter.WriteLine(\u0026#34;Follow me on twitter: @rickvdbosch\u0026#34;); streamWriter.Flush(); streamWriter.Close(); } The OpenFile method opens the file specified by the SafeFileName returning a Stream, giving you the opportunity to save whatever you want to save over there.\nHope this helps.\nOn a side note: the == true part in the if condition is needed in this case. Because the ShowDialog method returns a nullable boolean it is not enough to use saveFileDiaolog.ShowDialog() in the condition. Just so you know… 🙂\n","date":"20 January 2011","permalink":"https://www.rickvandenbosch.net/blog/howto-save-a-file-from-silverlight-using-the-savefiledialog/","section":"Blog","summary":"\u003cp\u003eSaving a file from Silverlight using the \u003ca href=\"https://msdn.microsoft.com/en-us/library/system.windows.controls.savefiledialog%28v=vs.95%29.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eSaveFileDialog\u003c/a\u003e, added in Silverlight 3, is easy. If you’re used to desktop development however, you might find yourself getting a SecurityException with the message ‘File operation not permitted. Access to path \u0026lsquo;xxx\u0026rsquo; is denied.’. Here’s why:\u003c/p\u003e","title":"HowTo: Save a file from Silverlight using the SaveFileDialog"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/silverlight/","section":"Tags","summary":"","title":"Silverlight"},{"content":"Here’s a quick Visual Studio tip for you…\nI frequently search for a specific text in my solution because I need to do something in all places where that text occurs. Today I found out how you can open all the files that are mentioned in the Find Results window.\nSearch for the text you’re looking for. In my case this is ITest*.\nOpen up the Search Results window and select all the records where the text was found. You can do this by dragging your mouse cursor over the text or clicking the text of the first search result, holding SHIFT and clicking the text of the last.\nRight click anywhere on the selected text and choose ‘Go to location’. If you click anywhere other than on selected text, you will lose the selection and you’ll probably get just one file opened. When all files are opened you will keep the ‘Go To Next Location F8’ and ‘Go To Previous Location SHIFT + F8’ functionality. That might be a nice one to loop through all the locations where your text was found. Especially when it was found more than once in one file.\nHope this helps.\n* The usefulness of searching for this interface is arbitrary due to functionality as ‘Find all references’ and so on. Luckily I’m only using it for this example. So lets not focus on that but on the tip this post is about 😉\n","date":"17 January 2011","permalink":"https://www.rickvandenbosch.net/blog/howto-open-all-files-from-the-find-results-window/","section":"Blog","summary":"\u003cp\u003eHere’s a quick Visual Studio tip for you…\u003c/p\u003e\n\u003cp\u003eI frequently search for a specific text in my solution because I need to do something in all places where that text occurs. Today I found out how you can open all the files that are mentioned in the Find Results window.\u003c/p\u003e","title":"HowTo: open all files from the Find Results window"},{"content":"For a project I’ll probably dedicate a post on this blog to in the future, I needed a ZIP library for Silverlight. After asking around on twitter (@rickvdbosch) I was pointed towards the SharpZipLib port on Codeplex, found on https://slsharpziplib.codeplex.com.\nBasically what I wanted to do was replace a file inside the ZIP file with my version of that file. The file was located in a specific folder inside the ZIP and could be found by either iterating through the ZipEntries in the ZIP, or by getting it based on its name. But deleting the file gave me a ZipException with the error message ‘Cannot find entry to delete’. When I added a file myself, it could be deleted just fine, but the ZIP just did not want the existing file to be removed.\nAfter searching around on some forums, I found there was a new development version of SharpZipLib which might solve the problem. But that was the full version, not the Silverlight port. So I searched around some more and found something about subfolders.\nAs it turns out, and existing file can be deleted when it is located in the root of the ZIP. Apparently there’s some bug keeping you from deleting files in subfolders. Anyhow, moving the file I need updated to the root of the ZIP solved my problem for me (for now), so I can continue my project. If and when slsharpziplib is updated in the future, I’ll have a look if they solved this in the port too…\nHope this helps.\n","date":"12 January 2011","permalink":"https://www.rickvandenbosch.net/blog/cannot-find-entry-to-delete-deleting-files-from-a-zip-with-sl-sharpziplib/","section":"Blog","summary":"\u003cp\u003eFor a project I’ll probably dedicate a post on this blog to in the future, I needed a ZIP library for Silverlight. After asking around on twitter (\u003ca href=\"https://twitter.com/rickvdbosch\" target=\"_blank\" rel=\"noreferrer\"\u003e@rickvdbosch\u003c/a\u003e) I was pointed towards the SharpZipLib port on Codeplex, found on \u003ca href=\"https://slsharpziplib.codeplex.com\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://slsharpziplib.codeplex.com\u003c/a\u003e.\u003c/p\u003e","title":"‘Cannot find entry to delete’ deleting files from a Zip with (SL) SharpZipLib"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/patch/","section":"Tags","summary":"","title":"Patch"},{"content":"The past couple of days I’ve been experiencing some issues with the context menu for my Solution Explorer in Visual Studio 2010. It contained scrollbars even when there was sufficient space on the screen to show the menu without scrolling.\nSearching for that issue I immediately found this blog post on The Visual Studio Blog. Taken from that post:\nWe’re pleased to announce that there are patches available for Visual Studio and Windows Presentation Foundation that fix this problem. You will need to install both patches to fix this issue\nVisual Studio 2010 patch: KB2345133 Windows Presentation Foundation 4.0 patch: KB2413613 X86: NDP40-KB2413613-x86.exe. X64: NDP40-KB2413613-x64.exe. I installed both patches and find Visual Studio no longer shows scrollbars in my context menu when I don’t need ‘em. Next to that I am now able to scroll through the menu (when using scrollbars) by using the mousewheel. I think this didn’t work before the patches, but I can’t test my ‘before’ situation anymore…\nHope this helps.\n","date":"7 January 2011","permalink":"https://www.rickvandenbosch.net/blog/patches-available-for-scrolling-context-menu-in-visual-studio-2010/","section":"Blog","summary":"\u003cp\u003eThe past couple of days I’ve been experiencing some issues with the context menu for my Solution Explorer in Visual Studio 2010. It contained scrollbars even when there was sufficient space on the screen to show the menu without scrolling.\u003c/p\u003e","title":"Patches available for scrolling context menu in Visual Studio 2010"},{"content":"The above scenario gave me the well-known could not load file or assembly error message. The assembly that couldn’t be found was log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304. Or one of its dependencies of course… The situation in which I was getting this error message:\nusing the CrystalReportViewer in an ASP.NET application having the ASP.NET application hosted in IIS (the error did not occur on the ASP.NET Development Server) running on a 64 bit machine Log4net was available in the GAC, with the exact version and PublicKeyToken stated in the error message. So that couldn’t be the problem. Or could it…? Having a second (and closer) look at the log4net assembly in the GAC one thing stood out.\nThe Processor Architecture for the log4net assembly is set to x86. That means it can’t be loaded by IIS, which is x64 on this machine. OK, so now we know what’s wrong. Next: how to solve this?\nSolution #I tried several things to get my (x64) IIS, Crystal Reports and log4net to get to play together nicely. Things that did not help to get this problem fixed included removing log4net from the assemblies section of the web.config, kicking my machine around the office and trying to recompile log4net for the x64 architecture.\nAs far as I have been able to find out, these two steps will get it working:\nEnable 32 bit ASP.NET IIS integration #Open a command prompt, go to the non x64 framework folder of your choice (for instance C:WindowsMicrosoft.NETFrameworkv4.0.30319) and execute “aspnet_regiis –enable –i”\nEnable 32 bit apps for 64 bit IIS #Open a command prompt and execute:\ncscript.exe %SystemDrive%inetpubAdminScriptsadsutil.vbs set W3SVC/AppPools/Enable32BitAppOnWin64 true If you do not have the admin scripts installed, install the from the ‘Turn Windows features on or off’ option in your Control Panel. The scripts are located under Internet Information Services – Web Management Tools – IIS 6 Management Compatibility – IIS 6 Scripting Tools.\nI’m not sure of any negative side-effects at this point. If I run into any in the future I’ll let you know. For now my application is working like a charm!\nHope this helps.\n","date":"5 January 2011","permalink":"https://www.rickvandenbosch.net/blog/using-crystal-reports-in-asp-net-on-a-64-bit-machine/","section":"Blog","summary":"\u003cp\u003eThe above scenario gave me the well-known \u003cem\u003ecould not load file or assembly\u003c/em\u003e error message. The assembly that couldn’t be found was \u003ccode\u003elog4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=692fbea5521e1304\u003c/code\u003e. \u003cem\u003eOr one of its dependencies\u003c/em\u003e of course… The situation in which I was getting this error message:\u003c/p\u003e","title":"Using Crystal Reports in ASP.NET on a 64 bit machine"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/x64/","section":"Tags","summary":"","title":"X64"},{"content":"Just a small post to start the new year\u0026hellip; and let it be a good one!\nWhen opening a XAML document in Visual Studio, it opens in split view by default. This might become annoying when you have a large XAML document, because all the content needs to be rendered before you can get some work done.\nHere’s how you can have Visual Studio open XAML documents in code view:\nGo to Tools, Options Under Text Editor open the XAML section and select Miscellaneous Under Default View check the Always open documents in full XAML view box (see image below) Click OK to apply and you’re all done! Hope this helps.\n","date":"4 January 2011","permalink":"https://www.rickvandenbosch.net/blog/howto-have-visual-studio-open-xaml-documents-in-code-view/","section":"Blog","summary":"\u003cp\u003eJust a small post to start the new year\u0026hellip; and let it be a good one!\u003c/p\u003e\n\u003cp\u003eWhen opening a XAML document in Visual Studio, it opens in split view by default. This might become annoying when you have a large XAML document, because all the content needs to be rendered before you can get some work done.\u003c/p\u003e","title":"HowTo: have Visual Studio open XAML documents in code view"},{"content":"As of December first I\u0026rsquo;ll be joining the ranks of Valid (www.valid.nl – Dutch website). I\u0026rsquo;m very excited to start over there and I am convinced we will be able to do great stuff together 🙂\nI would also like to take this opportunity to thank BDO (www.bdo.nl) for the past period and wish them all the best with the plans for the future of \u0026lsquo;our\u0026rsquo; system.\nUpdate 14 Jan 2011\nValid now has (the beginning of) an English website available: see here.\n","date":"29 October 2010","permalink":"https://www.rickvandenbosch.net/blog/making-valid-choices/","section":"Blog","summary":"\u003cp\u003eAs of December first I\u0026rsquo;ll be joining the ranks of Valid (\u003ca href=\"https://www.valid.nl/\" target=\"_blank\" rel=\"noreferrer\"\u003ewww.valid.nl\u003c/a\u003e – Dutch website). I\u0026rsquo;m very excited to start over there and I am convinced we will be able to do great stuff together 🙂\u003c/p\u003e","title":"Making Valid choices"},{"content":"Although the feature has been around since ASP.NET 2.0, I still meet people that don\u0026rsquo;t know and/or use app_offline.htm. Do you know (and use) the feature\u0026hellip;?\nWhen working on an ASP.NET web application, you should notify your visitors in a decent way that your application is down. There\u0026rsquo;s a nice default feature available for these purposes since ASP.NET 2.0. Somehow, however, this feature is not very well known and rarely used. The App_Offline.htm feature in ASP.NET 2.0 provides an easy way to bring down an ASP.NET application while you make changes to it. This feature kicks in as soon as you place a file called app_offline.htm in the root of the application. When ASP.NET detects the file, it will shut-down the app-domain for the application and won\u0026rsquo;t restart it for requests. The app_offline.htm file will be sent as the response to all new dynamic requests for the application. When you\u0026rsquo;re done updating the site, just delete or rename the file and your site it will come back online.\nTaken from (or actually inspired on) this blog post of Scott Guthrie:\nKeep an eye on a feature of IE6(+) called “Show Friendly Http Errors”. This can be configured in the Tools -\u0026gt; Internet Options -\u0026gt; Advanced tab within IE, and is on by default with IE6. With this setting turned on, when a server returns a non HTTP-200 status code with less than 512 bytes of content, IE will not show the returned HTML and instead substitutes its own generic status code message.\nIf you use the app_offline.htm feature, make sure you have at least 512 bytes of content within it to make sure that your HTML shows up to your users instead of IE\u0026rsquo;s friendly status message. If you don\u0026rsquo;t want to have a lot of text show-up on the page, one trick you can use is to just add an html client-side comment with some bogus content to push it over 512 bytes. For example:\n\u0026lt;!DOCTYPE html PUBLIC \u0026#34;-//W3C//DTD XHTML 1.0 Transitional//EN\u0026#34; \u0026#34;https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\u0026#34;\u0026gt; \u0026lt;html xmlns=\u0026#34;https://www.w3.org/1999/xhtml\u0026#34; \u0026gt; \u0026lt;head\u0026gt; \u0026lt;title\u0026gt;Site Under Construction \u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;Under Construction \u0026lt;/h1\u0026gt; \u0026lt;h2\u0026gt;We\u0026#39;re currently working on our site... \u0026lt;/h2\u0026gt; \u0026lt;!-- Adding additional hidden content so that IE Friendly Errors don\u0026#39;t prevent this message from displaying (note: it will show a \u0026#34;friendly\u0026#34; 404 error if the content isn\u0026#39;t of a certain size). \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; \u0026lt;h2\u0026gt;Gone to Florida for the sun... \u0026lt;/h2\u0026gt; --\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; Hope this helps\n","date":"8 October 2010","permalink":"https://www.rickvandenbosch.net/blog/little-heard-of-asp-net-feature-app_offline-htm/","section":"Blog","summary":"\u003cp\u003eAlthough the feature has been around since ASP.NET 2.0, I still meet people that don\u0026rsquo;t know and/or use app_offline.htm. Do you know (and use) the feature\u0026hellip;?\u003c/p\u003e\n\u003cp\u003eWhen working on an ASP.NET web application, you should notify your visitors in a decent way that your application is down. There\u0026rsquo;s a nice default feature available for these purposes since ASP.NET 2.0. Somehow, however, this feature is not very well known and rarely used. The \u003ccode\u003eApp_Offline.htm\u003c/code\u003e feature in ASP.NET 2.0 provides an easy way to bring down an ASP.NET application while you make changes to it. This feature kicks in as soon as you place a file called app_offline.htm in the root of the application. When ASP.NET detects the file, it will shut-down the app-domain for the application and won\u0026rsquo;t restart it for requests. The app_offline.htm file will be sent as the response to all new dynamic requests for the application. When you\u0026rsquo;re done updating the site, just delete or rename the file and your site it will come back online.\u003c/p\u003e","title":"Little-heard-of ASP.NET feature: app_offline.htm"},{"content":"Because we were still using an old Visual Studio 2005 solution which included a Web Site project, it was time to upgrade. We upgraded our Visual Studio 2005 solution to Visual Studio 2010 (and .NET 4.0), converted the Web Site Project to a Web Application Project and then, of course, the AjaxControlToolkit had to follow. I downloaded the latest build from their Codeplex site and updated the references in the different projects. I ran the website, and that\u0026rsquo;s where things got ugly \u0026hellip;\nMost pages worked nicely, but there were a few that gave an “AjaxControlToolkit is undefined” error. I removed all references to the AjaxControlToolkit, removed all the old versions of it from my machine, referenced the most recent version again, all to no avail. After Googling * Binging the error I found a LOT of possible solutions. These included:\nUse the ToolkitScriptManager from the AjaxControlToolkit in stead of the built-in ScriptManager When using the ToolkitScriptManager, set CombineScripts to false When using the ToolkitScriptManager, set EnablePartialRendering to true Clear the browser cache Clear the ASP.NET Temporary Files directory Use a (dummy) control to make sure the JavaScript files have been loaded correctly Unfortunately, none of these possible solutions helped us with our specific problem. Our problem occurred when we, for instance, set the PositioningMode for a control from custom JavaScript using the AjaxControlToolkit.PositioningMode enumeration. The error was always from custom JavaScript. After looking around a bit more I found one site that mentioned something about changing the AjaxControlToolkit ‘namespace’ in JavaScript. After playing around a bit I found out that changing the use of AjaxControlToolkit.XXX to System.Extended.UI.XXX provided the solution.\nHope this helps.\n* Of course this is a weak attempt at a joke, but fact is that Google (the first 7 or so pages) only pointed me in the direction of the solutions that weren\u0026rsquo;t solutions for my situation. When I tried Bing for a change, I found something that put me on the right track pretty fast. Kudos to Bing!\n","date":"23 September 2010","permalink":"https://www.rickvandenbosch.net/blog/ajaxcontroltoolkit-is-undefined/","section":"Blog","summary":"\u003cp\u003eBecause we were still using an old Visual Studio 2005 solution which included a Web Site project, it was time to upgrade. We upgraded our Visual Studio 2005 solution to Visual Studio 2010 (and .NET 4.0), converted the Web Site Project to a Web Application Project and then, of course, the AjaxControlToolkit had to follow. I downloaded the latest build from \u003ca href=\"https://ajaxcontroltoolkit.codeplex.com/\" target=\"_blank\" rel=\"noreferrer\"\u003etheir Codeplex site\u003c/a\u003e and updated the references in the different projects. I ran the website, and that\u0026rsquo;s where things got ugly \u0026hellip;\u003c/p\u003e","title":"“AjaxControlToolkit is undefined”"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/dotnetmag/","section":"Tags","summary":"","title":"Dotnetmag"},{"content":"Yesterday I remembered two Visual Studio options Sara Ford told about in a presentation of her I attended a while back. Changing them made me happy\u0026hellip; 🙂\nZero-impact projects #When I have to test something real quick, I tend to create a new project in Visual Studio and scribble some code to test whatever I want to test at that point. This causes my project directory to be filled with projects named WindowsFormsApplication14 or something like that. To make this stop, go to Tools - Options - Projects and Solutions - General. Uncheck the option \u0026lsquo;Save new projects when created\u0026rsquo;. This way those newly made (and shortly used) projects aren\u0026rsquo;t saved untill you explicitly tell Visual Studio to do so. No more WindowsFormsApplication63 for you! Unless you want to name it that way intentionally, of course\u0026hellip;\nCutting/copying empty lines #We probably all experienced this at one time or another: you select some code, copy it, go to an empty line where you want to past the code\u0026hellip;\u0026hellip;.and you press CTRL + C by accident. With the default settings, you just copied an empty line and have lost the stuff you copied earlier. But with this next option, empty lines won\u0026rsquo;t get copied or cut anymore! Go to Tools - Options - Text Editor - All languages (or just the language you want to change this setting for) and deselect the option \u0026lsquo;Apply Cut or Copy commands to blank lines when there is no selection\u0026rsquo;.\nHappy coding!\n","date":"19 May 2010","permalink":"https://www.rickvandenbosch.net/blog/visual-studio-zero-impact-projects-cuttingcopying-empty-lines/","section":"Blog","summary":"\u003cp\u003eYesterday I remembered two Visual Studio options \u003ca href=\"https://blogs.msdn.com/saraford/\" target=\"_blank\" rel=\"noreferrer\"\u003eSara Ford\u003c/a\u003e told about in a presentation of her I attended a while back. Changing them made me happy\u0026hellip; 🙂\u003c/p\u003e\n\u003ch2 id=\"zero-impact-projects\" class=\"relative group\"\u003eZero-impact projects \u003cspan class=\"absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100\"\u003e\u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700\" style=\"text-decoration-line: none !important;\" href=\"#zero-impact-projects\" aria-label=\"Anchor\"\u003e#\u003c/a\u003e\u003c/span\u003e\u003c/h2\u003e\u003cp\u003eWhen I have to test something real quick, I tend to create a new project in Visual Studio and scribble some code to test whatever I want to test at that point. This causes my project directory to be filled with projects named \u003ccode\u003eWindowsFormsApplication14\u003c/code\u003e or something like that. To make this stop, go to Tools - Options - Projects and Solutions - General. Uncheck the option \u0026lsquo;Save new projects when created\u0026rsquo;. This way those newly made (and shortly used) projects aren\u0026rsquo;t saved untill you explicitly tell Visual Studio to do so. No more \u003ccode\u003eWindowsFormsApplication63\u003c/code\u003e for you! Unless you want to name it that way intentionally, of course\u0026hellip;\u003c/p\u003e","title":"Visual Studio: Zero-impact Projects \u0026 Cutting/copying empty lines"},{"content":"Sometimes it\u0026rsquo;s the little things that make you love a new product just a bit more.\nI tend to close stuff I don\u0026rsquo;t use anymore fairly quickly. Sometimes I even close an Explorer window or an application right after I used it, only to find I need it again in a few moments\u0026hellip; We all have our quirks, right 😉\nWhile developing I regularly close all the documents I have open in Visual Studio, especially when I am done with a specific task. And most of the time, I like to collapse all the projects and their subfolders too to keep a tidy work environment. I also have the option \u0026lsquo;Track Active Item in Solution Explorer\u0026rsquo; checked under \u0026lsquo;Tools\u0026rsquo; – \u0026lsquo;Options\u0026rsquo; – \u0026lsquo;Projects and solutions\u0026rsquo; – \u0026lsquo;General\u0026rsquo;. Of course I have, I\u0026rsquo;d almost add\u0026hellip;\nIn older versions of Visual Studio (while having the \u0026lsquo;Track Active Item in Solution Explorer\u0026rsquo; option turned on) choosing the \u0026lsquo;Close all documents\u0026rsquo; item in the \u0026lsquo;Windows\u0026rsquo; menu after having collapsed all the projects lead to one project opening up again. That was the project with the document that was active just before closing all the documents. The \u0026lsquo;Track Active Item in Solution Explorer\u0026rsquo; option seemed to squeeze in a \u0026lsquo;Look at that guy!\u0026rsquo; just before all the documents actually closed, making Visual Studio open up the project and highlighting the file again. Although I knew this happened, I somehow kept to my usual routine of collapsing all the projects and their subfolders before closing all documents, with the same result each time: me closing that one project (or those seven subfolders) twice.\nBut\u0026hellip;\u0026hellip; no more in Visual Studio 2010! This newly built IDE seems to understand my way of work: no longer does Visual Studio (or the \u0026lsquo;Track Active Item in Solution Explorer\u0026rsquo; option) open up the project of an active item when I choose \u0026lsquo;Close All Documents\u0026rsquo;. I\u0026rsquo;m not even sure if this was a specific choice or just a coincidental side-effect of the new IDE, but it makes me love Visual Studio 2010 just a bit more\u0026hellip; 🙂\n","date":"4 May 2010","permalink":"https://www.rickvandenbosch.net/blog/visual-studio-2010-close-all-documents/","section":"Blog","summary":"\u003cp\u003eSometimes it\u0026rsquo;s the little things that make you love a new product just a bit more.\u003c/p\u003e\n\u003cp\u003eI tend to close stuff I don\u0026rsquo;t use anymore fairly quickly. Sometimes I even close an Explorer window or an application right after I used it, only to find I need it again in a few moments\u0026hellip; We all have our quirks, right 😉\u003c/p\u003e","title":"Visual Studio 2010: Close all documents"},{"content":"While working with Visual Studio 2010, a new feature caught my eye that isn\u0026rsquo;t communicated (strongly) in the “What\u0026rsquo;s new” lists you can find online. As part of the Visual Studio 2010 supports multiple web.config files! Now we can create a separate web.config file for each configuration we have for our application. If you add a configuration through the configuration manager, you have the possibility to add a web.config file for the new configuration, too.\nA web application gets two configurations by default: a Debug and a Release configuration. When opening the plus sign in front of the web.config file, two extra files appear: web.debug.config and web.release.config. Depending on the active configuration, Visual Studio selects the correct version.\nThe web.config file contains the default configuration. Configuration specific config files may add or remove settings or change current ones. This is done using simple transformation tags.\nFor more information on transformations have a look at:\nWeb Deployment: Web.Config Transformation (Visual Web Developer Team Blog) Web.config Transformation Syntax for Web Application Project Deployment (MSDN library) ","date":"18 April 2010","permalink":"https://www.rickvandenbosch.net/blog/visual-studio-2010-and-the-web-config/","section":"Blog","summary":"\u003cp\u003eWhile working with Visual Studio 2010, a new feature caught my eye that isn\u0026rsquo;t communicated (strongly) in the “What\u0026rsquo;s new” lists you can find online. As part of the Visual Studio 2010 supports multiple \u003ccode\u003eweb.config\u003c/code\u003e files! Now we can create a separate \u003ccode\u003eweb.config\u003c/code\u003e file for each configuration we have for our application. If you add a configuration through the configuration manager, you have the possibility to add a \u003ccode\u003eweb.config\u003c/code\u003e file  for the new configuration, too.\u003c/p\u003e","title":"Visual Studio 2010 and the web.config"},{"content":"As you probably know I\u0026rsquo;ve worked for my own company for quite a while (see my post \u0026lsquo;A new challenge\u0026rsquo; of October first 2008). Because business was good, I had way too little time to keep this blog up to date. Sorry for that\u0026hellip;\nSince the beginning of this month, that all has changed: I joined BDO) and can now work \u0026rsquo;normal\u0026rsquo; hours in stead of \u0026lsquo;I-own-my-own-company-and-have-to-make-every-minute-of-every-day-count\u0026rsquo; hours. I\u0026rsquo;ll probably still be pretty busy, but there\u0026rsquo;s a difference between busy and busy\u0026hellip; 😉\nI\u0026rsquo;ll be keeping you posted about stuff I run into, think about or find interesting. As long as they have anything to do with software development of course\u0026hellip; And if you have any suggestions, questions or requests: let me know.\n","date":"16 April 2010","permalink":"https://www.rickvandenbosch.net/blog/changing-lanes/","section":"Blog","summary":"\u003cp\u003eAs you probably know I\u0026rsquo;ve worked for my own company for quite a while (see my post \u0026lsquo;\u003ca href=\"/blog/a-new-challenge\"\u003eA new challenge\u003c/a\u003e\u0026rsquo; of October first 2008). Because business was good, I had way too little time to keep this blog up to date. Sorry for that\u0026hellip;\u003c/p\u003e","title":"Changing lanes"},{"content":"After installing Windows 7 and Visual Studio 2010 on my laptop, I ran into the well-known message “The project location is not trusted”. I thought all I had to do was follow the instructions in this MSDN article to get my development share to be trusted again, but this doesn’t seem to work.\nI already tried adding the new child group under the Internet_Zone in stead of the LocalIntranet_Zone, and using the complete server name and the server IP address in stead of the name of the server. All of these steps did not solve the message popping up…\nI’m open to any suggestions, ‘cause this problem is beginning to drive me nuts.\n","date":"12 August 2009","permalink":"https://www.rickvandenbosch.net/blog/the-project-location-is-not-trusted/","section":"Blog","summary":"\u003cp\u003eAfter installing Windows 7 and Visual Studio 2010 on my laptop, I ran into the well-known message “The project location is not trusted”. I thought all I had to do was follow the instructions in \u003ca href=\"https://msdn.microsoft.com/en-us/library/bs2bkwxc%28VS.80%29.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ethis MSDN article\u003c/a\u003e to get my development share to be trusted again, but this doesn’t seem to work.\u003c/p\u003e","title":"“The project location is not trusted”"},{"content":"When installing Windows Vista on a MacBook Pro, the default driver for the Wireless Network Adapter doesn’t function properly. To get the Wireless Network Adapter to work, first install the Boot Camp Services by inserting your OS X DVD and running the setup. Next you need to install the Boot Camp 2.1 update. You can download that one by running Apple Software Update, which is installed as part of the Boot Camp Services. And that’s where things go wrong… The Boot Camp update installation downloads properly, but doesn’t complete.\nThe reason the update doesn’t install properly? The Boot Camp 2.1 update is American only and therefore expects to find a key in the registry with the decimal value 1033 (American English). Since the Windows version we installed was Dutch, the update couldn’t complete.\nHow to fix this issue #To fix this problem, follow the steps below:\nOpen the registry editor Search for the ProductName key with the value ‘Boot Camp Services’ (for the Dutch version, this was ‘Boot Camp-Services’), located under HKEY_CLASSES_ROOTInstaller and then some… Double click the Language key in that same location to open it Change the value to 409 (Hex) or 1033 (Decimal) Reboot the machine and install the Boot Camp update That’s it! Hope this helps.\n","date":"10 July 2009","permalink":"https://www.rickvandenbosch.net/blog/running-windows-vista-on-a-macbook-pro/","section":"Blog","summary":"\u003cp\u003eWhen installing Windows Vista on a MacBook Pro, the default driver for the Wireless Network Adapter doesn’t function properly. To get the Wireless Network Adapter to work, first install the Boot Camp Services by inserting your OS X DVD and running the setup. Next you need to install the Boot Camp 2.1 update. You can download that one by running Apple Software Update, which is installed as part of the Boot Camp Services. And that’s where things go wrong… The Boot Camp update installation downloads properly, but doesn’t complete.\u003c/p\u003e","title":"Running Windows Vista on a MacBook Pro"},{"content":"Thanks to our friends at Microsoft (and their great BizSpark program) I will be able to attend DevDays ‘09! We won tickets because we updated our company profile and added projects at the Discover Metro site. Normally attending this kind of event is not available to young startups like ours, but now it is!\nI’ll be seeing you @ The Hague next week 🙂\n","date":"18 May 2009","permalink":"https://www.rickvandenbosch.net/blog/microsoft-devdays-09-im-attending/","section":"Blog","summary":"\u003cp\u003eThanks to our friends at Microsoft (and their great \u003ca href=\"https://www.microsoft.com/bizspark\" target=\"_blank\" rel=\"noreferrer\"\u003eBizSpark program\u003c/a\u003e) I will be able to attend DevDays ‘09! We won tickets because we updated our company profile and added projects at the \u003ca href=\"https://www.discovermetro.net\" target=\"_blank\" rel=\"noreferrer\"\u003eDiscover Metro\u003c/a\u003e site. Normally attending this kind of event is not available to young startups like ours, but now it is!\u003c/p\u003e","title":"Microsoft DevDays ‘09, I’m attending!"},{"content":"I just read this great article by Mark Voermans: Expression Web SuperPreview: Look how your site renders in various Browsers.\nI don’t know about you guys, but I’ve been waiting for this for a long, LONG time. I’ll give it a go this afternoon and let you know what I think…\nUpdate: #This first beta version only allows you to preview your site in different versions of Internet Explorer. We will have to wait for the full feature set until the final release of this tool…\nTaken from the SuperPreview site:\nThis free download will allow you to compare renderings of IE6 with whatever other version of IE you have installed on your machine. If you have installed IE8, you’ll be able to compare IE6, IE8 and IE8 running in IE7 compatibility mode, side-by-side.\n","date":"27 March 2009","permalink":"https://www.rickvandenbosch.net/blog/finally-a-way-to-preview-your-site-in-all-important-browsers/","section":"Blog","summary":"\u003cp\u003eI just read this great article by \u003ca href=\"https://www.isvblogvoer.nl/\" target=\"_blank\" rel=\"noreferrer\"\u003eMark Voermans\u003c/a\u003e: \u003ca href=\"https://blogs.microsoft.nl/blogs/blog_van_mark_voermans/archive/2009/03/27/expression-web-superpreview-look-how-your-site-renders-in-various-browsers.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eExpression Web SuperPreview: Look how your site renders in various Browsers\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eI don’t know about you guys, but I’ve been waiting for this for a long, LONG time. I’ll give it a go this afternoon and let you know what I think…\u003c/p\u003e","title":"Finally, a way to preview your site in all (important) browsers"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/test/","section":"Tags","summary":"","title":"Test"},{"content":"Of course, twitter has been around for quite a while. The popularity of the service is booming, because it is becoming more and more mainstream now. I myself joined somewhere in the end of 2007, when it was still underground \u0026hellip; 😜\nDo you (actively) use twitter? And if so, what’s your account, do you use it on your desktop / laptop / mobile device … and which client(s) do you use?\nMy Twitter info:\nUsername: rickvdbosch Desktop / laptop client: the official twitter app Windows Mobile device: the official twitter app ","date":"26 March 2009","permalink":"https://www.rickvandenbosch.net/blog/twitter/","section":"Blog","summary":"\u003cp\u003eOf course, twitter has been around for quite a while. The popularity of the service is booming, because it is becoming more and more mainstream now. I myself joined somewhere in the end of 2007, when it was still underground \u0026hellip; 😜\u003c/p\u003e","title":"Twitter"},{"content":"The article about our company that was placed in two Dutch magazines can now be found on our website (and of course, this one is in Dutch).\n","date":"24 March 2009","permalink":"https://www.rickvandenbosch.net/blog/article-de-mediagarde-online/","section":"Blog","summary":"\u003cp\u003eThe article about \u003ca href=\"https://www.mediagarde.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eour company\u003c/a\u003e that was placed in two Dutch magazines can now be \u003ca href=\"https://mediagarde.nl/afbeeldingen/Artikel%20in%20Bedrijf.pdf\" target=\"_blank\" rel=\"noreferrer\"\u003efound on our website\u003c/a\u003e (and of course, this one is in Dutch).\u003c/p\u003e","title":"Article ‘de MediaGarde’ online"},{"content":"I just read an interesting article on Bertrand Le Roy\u0026rsquo;s blog. The most important information:\nIt so happens that the menu control is making a bad assumption on what the default value for z-index should be. We debated this at length with the IE team, but it became clear as we did so that they were right and that we were wrong. We had to fix that.\nSo here it is, the patch for menu is out and you can apply it to build IE8-compatible ASP.NET WebForms sites…\nWindows 2000, XP, Server 2003:\nWindows Vista, Server 2008:\n(the KB article is not yet ready but will be published shortly)\nRead the entire article over here: ASP menu fix for IE8 problem available\n","date":"23 March 2009","permalink":"https://www.rickvandenbosch.net/blog/fix-available-for-ie8-aspmenu-problem/","section":"Blog","summary":"\u003cp\u003eI just read an interesting article on Bertrand Le Roy\u0026rsquo;s blog. The most important information:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIt so happens that the menu control is making a bad assumption on what the default value for z-index should be. We debated this at length with the IE team, but it became clear as we did so that they were right and that we were wrong. We had to fix that.\u003c/p\u003e","title":"Fix available for IE8 asp:menu problem"},{"content":"Our company has been mentioned in an article at the (pretty well-known) blog www.frankwatching.com.\nRead it over here (Dutch)\n","date":"23 March 2009","permalink":"https://www.rickvandenbosch.net/blog/our-company-at-frankwatching-com/","section":"Blog","summary":"\u003cp\u003e\u003ca href=\"https://www.mediagarde.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eOur company\u003c/a\u003e has been mentioned in an article at the (pretty well-known) blog \u003ca href=\"https://www.frankwatching.com\" target=\"_blank\" rel=\"noreferrer\"\u003ewww.frankwatching.com\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eRead it \u003ca href=\"https://www.frankwatching.com/archive/2009/03/13/app-gespot-microsoft-bizspark/\" target=\"_blank\" rel=\"noreferrer\"\u003eover here\u003c/a\u003e (Dutch)\u003c/p\u003e","title":"Our company at frankwatching.com"},{"content":"When trying to pass some command line arguments to a Console Application, I got the following message: “The current project settings specify that the project will be debugged with specific security permissions. In this mode, command line arguments will not be passed to the executable. Do you want to continue debugging anyway?” (see image)\nI didn’t run in to this earlier, but yesterday it suddenly popped up. But I did change my zone security, so that might be of some influence… Apparently, this is because of the Debug in Zone settings you can find at the Security tab of your project properties. Deselecting the ‘Enable ClickOnce Security Settings’ checkbox will solve this ‘problem’ for you.\nFor more information about Code Access Security, take a look over here.\n","date":"10 March 2009","permalink":"https://www.rickvandenbosch.net/blog/in-this-mode-command-line-arguments-will-not-be-passed-to-the-executable/","section":"Blog","summary":"\u003cp\u003eWhen trying to pass some command line arguments to a Console Application, I got the following message: “The current project settings specify that the project will be debugged with specific security permissions. In this mode, command line arguments will not be passed to the executable. Do you want to continue debugging anyway?” (see image)\u003c/p\u003e","title":"In this mode, command line arguments will not be passed to the executable"},{"content":"I’m reinstalling my laptop after I got it back from a repair… EMPTY (grrr).\nWhat tools shouldn’t I forget when preparing this laptop to be my development machine? Already have Visual Studio, SQL Management Studio, Office and the Windows Live tools installed… (and of course I have all kinds of tools at hand from my server like DebugView, Reflector and whatnot)\n","date":"18 February 2009","permalink":"https://www.rickvandenbosch.net/blog/installing-my-laptop-after-a-repair/","section":"Blog","summary":"\u003cp\u003eI’m reinstalling my laptop after I got it back from a repair… EMPTY (grrr).\u003c/p\u003e\n\u003cp\u003eWhat tools shouldn’t I forget when preparing this laptop to be my development machine? Already have Visual Studio, SQL Management Studio, Office and the Windows Live tools installed… (and of course I have all kinds of tools at hand from my server like DebugView, Reflector and whatnot)\u003c/p\u003e","title":"Installing my laptop after a repair"},{"content":"When you use a MasterPage to define the design of your website, you might come across the problem that there is no body element in a web content form. This can be a problem when you want to add an onload script to a specific page. You could of course add the onload on the MasterPage, but you might not want the script to run on every page. There are several workarounds to fix this ‘problem’. The one I used last week was to do the following:\nAdd the runat=”server” tag on the body in the MasterPage Add a unique ID on the body in the MasterPage Add a method to the MasterPage to set the onload for the body. This might look a bit like this (of course you can also have the script for the load be a parameter for the method): internal void SetBodyLoad() { MasterPageBody.Attributes.Add(\u0026#34;onLoad\u0026#34;, \u0026#34;initialize()\u0026#34;); } Add this line of code in the Page_Load of the page you want to have the onload: ((MasterPageName)Master).SetBodyLoad(); This worked for me! Hope this helps.\n","date":"30 January 2009","permalink":"https://www.rickvandenbosch.net/blog/howto-add-a-body-onload-script-to-a-page-that-uses-a-masterpage/","section":"Blog","summary":"\u003cp\u003eWhen you use a MasterPage to define the design of your website, you might come across the problem that there is no body element in a web content form. This can be a problem when you want to add an onload script to a specific page. You could of course add the onload on the MasterPage, but you might not want the script to run on every page. There are several workarounds to fix this ‘problem’. The one I used last week was to do the following:\u003c/p\u003e","title":"HowTo: Add a body onload script to a page that uses a MasterPage"},{"content":"I know it has been a while since my last post, but I\u0026rsquo;m about to resurface! I\u0026rsquo;ve played in a musical the entire month of December and (because of that) we were busy getting our company up and running again in the new year. So now I\u0026rsquo;ll be developing more and I\u0026rsquo;ll probably have more things to blog about. So keep posted to see more stuff over here \u0026hellip;\nFor now, here are some interesting articles about Microsoft\u0026rsquo;s Surface:\nTwo more cool Surface apps Surface, the banking demo Microsoft Surface apps for Education ","date":"28 January 2009","permalink":"https://www.rickvandenbosch.net/blog/resurface/","section":"Blog","summary":"\u003cp\u003eI know it has been a while since my last post, but I\u0026rsquo;m about to resurface! I\u0026rsquo;ve played in a musical the entire month of December and (because of that) we were busy getting \u003ca href=\"https://www.mediagarde.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eour company\u003c/a\u003e up and running again in the new year. So now I\u0026rsquo;ll be developing more and I\u0026rsquo;ll probably have more things to blog about. So keep posted to see more stuff over here \u0026hellip;\u003c/p\u003e","title":"(Re)surface"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/surface/","section":"Tags","summary":"","title":"Surface"},{"content":"I\u0026rsquo;ve had my current installation for a few months now, and I\u0026rsquo;ve used it for development purposes. Today I suddenly encountered an error when trying to add items to the Toolbox. Visual Studio 2008 simply disappeared\u0026hellip; No errors, no warnings, it just went away.\nAfter some searching and a lot of trying, I found that deinstalling the PowerCommands for Visual Studio 2008 did the trick. I\u0026rsquo;m guessing that the installation of a service pack (for either Visual Studio or .NET Framework) changed something somewhere, making Visual Studio disappear into thin air when having PowerCommands installed and clicking the \u0026lsquo;Choose items\u0026rsquo; context menuitem. Anyway: the problem is gone now\u0026hellip;!\nAccording to some forumposts I read reinstalling the PowerCommands after this problem was solved does not cause the problem to reappear. I haven\u0026rsquo;t come to testing that yet \u0026lsquo;cause I\u0026rsquo;m working on a deadline here\u0026hellip; (Why do these things always happen when you have a deadline\u0026hellip;?)\nHope this helps.\n","date":"2 December 2008","permalink":"https://www.rickvandenbosch.net/blog/clicking-choose-items-on-the-toolbox-crashes-visual-studio-2008/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;ve had my current installation for a few months now, and I\u0026rsquo;ve used it for development purposes. Today I suddenly encountered an error when trying to add items to the Toolbox. Visual Studio 2008 simply disappeared\u0026hellip; No errors, no warnings, it just went away.\u003c/p\u003e","title":"Clicking ‘Choose items’ on the toolbox crashes Visual Studio 2008"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/visual-studio-extensibility/","section":"Tags","summary":"","title":"Visual Studio Extensibility"},{"content":"Scott Guthrie posted about a cool new ASP.NET server control: Chart. It can be used for free with ASP.NET 3.5 to enable rich browser-based charting scenarios.\nRead more over here: https://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx\n","date":"26 November 2008","permalink":"https://www.rickvandenbosch.net/blog/nice-new-addition-to-asp-net/","section":"Blog","summary":"\u003cp\u003eScott Guthrie posted about a cool new ASP.NET server control: Chart. It can be used for free with ASP.NET 3.5 to enable rich browser-based charting scenarios.\u003c/p\u003e\n\u003cp\u003eRead more over here: \u003ca href=\"https://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://weblogs.asp.net/scottgu/archive/2008/11/24/new-asp-net-charting-control-lt-asp-chart-runat-quot-server-quot-gt.aspx\u003c/a\u003e\u003c/p\u003e","title":"Nice new addition to ASP.NET"},{"content":"Our company has (the first draft of) a new website online. We\u0026rsquo;re still working on the content, but the design is now online. Check it out @ www.mediagarde.nl (Dutch).\n","date":"21 November 2008","permalink":"https://www.rickvandenbosch.net/blog/new-website/","section":"Blog","summary":"\u003cp\u003eOur company has (the first draft of) a new website online. We\u0026rsquo;re still working on the content, but the design is now online. Check it out @ \u003ca href=\"https://www.mediagarde.nl\" target=\"_blank\" rel=\"noreferrer\"\u003ewww.mediagarde.nl\u003c/a\u003e (Dutch).\u003c/p\u003e","title":"New website"},{"content":"While developing a page that was to be used through an inline wrapper, I got an error: “Validation of viewstate MAC failed”. This error can usually be resolved by disabling event validation, viewstate encryption or viewstate for the MAC. In my case these solutions did not resolve the issue.\nAfter some testing Response.Redirect appeared to be the cause. I changed the page so it doesn\u0026rsquo;t need the redirect any more, and the problem disappeared. I\u0026rsquo;ll try if ending the response when redirecting will help, but for now I can continue working\u0026hellip;\nHope this helps.\n","date":"20 November 2008","permalink":"https://www.rickvandenbosch.net/blog/inline-wrappers-response-redirect-error/","section":"Blog","summary":"\u003cp\u003eWhile developing a page that was to be used through an inline wrapper, I got an error: “Validation of viewstate MAC failed”. This error can usually be resolved by \u003ca href=\"https://www.google.com/search?num=20\u0026hl=en\u0026safe=off\u0026q=%22Validation+of+viewstate+MAC+failed%22+disable+event+validation\" target=\"_blank\"\u003edisabling event validation\u003c/a\u003e, \u003ca href=\"https://www.google.com/search?num=20\u0026hl=en\u0026safe=off\u0026q=%22Validation+of+viewstate+MAC+failed%22+disable+encryption+viewstate\u0026btnG=Search\" target=\"_blank\"\u003eviewstate encryption\u003c/a\u003e or \u003ca href=\"https://www.google.com/search?num=20\u0026hl=en\u0026safe=off\u0026q=%22Validation+of+viewstate+MAC+failed%22+enableviewstatemac\" target=\"_blank\"\u003eviewstate for the MAC\u003c/a\u003e. In my case these solutions did not resolve the issue.\u003c/p\u003e","title":"Inline wrappers \u0026 Response.Redirect() == Error"},{"content":"I\u0026rsquo;ve been busy the last couple of weeks. Between (the announcements at) all the Conferences to follow like PDC and Tech·Ed, all the projects to do, the rehearsal for the musical I\u0026rsquo;m in in December (Dutch) and the start of our new company (Dutch), I didn\u0026rsquo;t have a lot of time to blog\u0026hellip;\nSince we expect things to settle down in the next couple of days, I\u0026rsquo;m expecting to pick up where I left in a week or so. Hang in there, and if you have any subjects you would like me to blog about or any questions you would like answered: let me know. Oh, and try to keep those subjects and/or questions development related. 😉\nPS I\u0026rsquo;m guessing you know why I didn\u0026rsquo;t title this post “I\u0026rsquo;ll be back” 🙂\n","date":"12 November 2008","permalink":"https://www.rickvandenbosch.net/blog/i-will-return/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;ve been busy the last couple of weeks. Between (the announcements at) all the Conferences to follow like PDC and Tech·Ed, all the projects to do, the rehearsal for \u003ca target=\"_blank\" href=\"https://www.veldhovenserevue.nl/\"\u003ethe musical I\u0026rsquo;m in in December\u003c/a\u003e (Dutch) and the start of our \u003ca target=\"_blank\" href=\"https://www.mediagarde.nl/\"\u003enew company\u003c/a\u003e (Dutch), I didn\u0026rsquo;t have a lot of time to blog\u0026hellip;\u003c/p\u003e","title":"I will return…"},{"content":"Because I stopped working at Avanade and started my own company (this web site is under construction and in Dutch), I had to buy and install a new laptop. Everything went great and I was up and running in half a day. Or should I say half an evening\u0026hellip; 😉\nThe next day I wanted to continue developing a web site we are working on. I needed one of the Ajax Control Toolkit controls, so I added it to my toolbar the way you should go about this (create a separate tab, right click, \u0026lsquo;choose items\u0026rsquo;, browse for the assembly). Strange enough, none of the toolkit controls showed up in my toolbar. I tried again, restarted Visual Studio and even restarted my computer. All to no avail\u0026hellip;\nAfter a while, I checked the \u0026lsquo;Show all\u0026rsquo; option for the toolbar, and there were my Ajax controls, all of them disabled (grayed out). And if you think that is weird, read on for the cause of this behavior ;).\nAfter some searching, I found something that I thought could be a solution. Unfortunately this did not solve my problems. Not even after repeating the steps several times. Luckily there were several people that commented on that same post, stating the proposed fix didn\u0026rsquo;t actually fix the problem. One of them said something about Microsoft wireless hardware being the culprit. I removed the wireless receiver of my Microsoft Wireless Notebook Optical Mouse, and the controls all appeared on the toolbar. Enabled and all\u0026hellip;!\nNow, whenever I need the Ajax controls in Visual Studio, I do the following:\nStart Visual Studio (if not started already) Open up a web page or a user control, or at least something you can place an Ajax control on Open up the toolbox (note: no Ajax controls!) Unplug the wireless device and see the controls appear like magic Plug in the device: the controls should stay where they are Hope this helps some of you\u0026hellip; ","date":"13 October 2008","permalink":"https://www.rickvandenbosch.net/blog/ajax-control-toolkit-controls-dont-show-up-in-visual-studio-toolbar/","section":"Blog","summary":"\u003cp\u003eBecause I \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2008/10/01/a-new-challenge.aspx\" target=\"_blank\"\u003estopped working at Avanade\u003c/a\u003e and started \u003ca href=\"https://www.mediagarde.nl\" target=\"_blank\"\u003emy own company\u003c/a\u003e (this web site is under construction and in Dutch), I had to buy and install a new laptop. Everything went great and I was up and running in half a day. Or should I say half an evening\u0026hellip; 😉\u003c/p\u003e","title":"Ajax Control Toolkit controls don’t show up in Visual Studio toolbar"},{"content":"As of today, I am no longer working for Avanade. I had a good time over there, but my personal goals changed. I found a new challenge: I started a company with a good friend of mine. We’re still building the website, so the information is not there yet. But it will be soon. So check the website every now and again.\nWe’re very excited and can\u0026rsquo;t wait to get started!\n","date":"1 October 2008","permalink":"https://www.rickvandenbosch.net/blog/a-new-challenge/","section":"Blog","summary":"\u003cp\u003eAs of today, I am no longer working for Avanade. I had a good time over there, but my personal goals changed. I found a new challenge: I started a company with a good friend of mine. We’re still building the website, so the information is not there yet. But it will be soon. So check \u003ca target=\"_blank\" href=\"https://www.mediagarde.nl\"\u003ethe website\u003c/a\u003e every now and again.\u003c/p\u003e","title":"A new challenge …"},{"content":"We all know the “Get a Mac” videos from Apple. And to be honest, they’re pretty funny sometimes. Most of the time… 😉 After a horrible start with the Seinfeld commercials (no offence Jerry), Microsoft might be on to something with their new campain “I’m a PC” (Seinfeld commercials to be found there, too).\nThey got an actor that looks like the PC guy in the Get a Mac commercials and used him to introduce some new videos, telling us how many different kind of PC’s there are. And it wouldn’t be Microsoft if they didn’t put in some celebrities like Eva Longoria, Pharrell Williams, Deepak Chopra and of course bill\u0026rsquo;s there too. There’s (always) room for improvement, but they’ve made the first (big) steps.\n”I’m a PC, and I’ve been made into a stereotype…”\n_Edit\n_ Both the Microsoft PressPass and the Youtube video can\u0026rsquo;t be embedded over here. So have a look over here:\nhttps://www.microsoft.com/PressPass/SilverlightApps/videoplayer_3/standalone.aspx?xml=mms://msstudios.wmod.llnwd.net/a2294/o21/presspass/PRIDE60_MBR.wmv\u0026r=email\u0026id=1\u0026layout=top\nOr paste this link in Windows Media Player or iTunes to open the movie:\nmms://msstudios.wmod.llnwd.net/a2294/o21/presspass/PRIDE60_MBR.wmv\n","date":"20 September 2008","permalink":"https://www.rickvandenbosch.net/blog/im-a-pc/","section":"Blog","summary":"\u003cp\u003eWe all know the “\u003ca href=\"https://www.apple.com/getamac/ads\" target=\"_blank\"\u003eGet a Mac\u003c/a\u003e” videos from Apple. And to be honest, they’re pretty funny sometimes. Most of the time… 😉 After a horrible start with the Seinfeld commercials (no offence Jerry), Microsoft might be on to something with their new campain “\u003ca href=\"https://www.microsoft.com/presspass/windows/videoGallery.aspx\" target=\"_blank\"\u003eI’m a PC\u003c/a\u003e” (Seinfeld commercials to be found there, too).\u003cbr\u003e\nThey got an actor that looks like the PC guy in the Get a Mac commercials and used him to introduce some new videos, telling us how many different kind of PC’s there are. And it wouldn’t be Microsoft if they didn’t put in some celebrities like Eva Longoria, Pharrell Williams, Deepak Chopra and of course bill\u0026rsquo;s there too. There’s (always) room for improvement, but they’ve made the first (big) steps.\u003c/p\u003e","title":"I’m a PC"},{"content":"We developed an ASP.NET page (A) to be wrapped in an existing PHP page (B) using an inline wrapper. After a few days in which both pages displayed nicely, our page (A) suddenly got displayed twice inside the existing page (B). And even weirder was that the postbacks of the first occurrence didn’t work, and the postbacks of the second were executed outside of the wrapper.\nWe had changed some stuff the night before, so I finally checked the file line by line against an earlier version. The problem we eventually found was small and not too easy to find. But so easy to solve… Because of an external editor, the page’s (A) header had received an ID, probably because of the runat=”server” tag. Removing the ID tag was enough to have both pages working fine again.\n","date":"18 September 2008","permalink":"https://www.rickvandenbosch.net/blog/an-inline-wrapper-and-having-too-much-on-your-head/","section":"Blog","summary":"\u003cp\u003eWe developed an ASP.NET page (A) to be wrapped in an existing PHP page (B) using an inline wrapper. After a few days in which both pages displayed nicely, our page (A) suddenly got displayed twice inside the existing page (B).  And even weirder was that the postbacks of the first occurrence didn’t work, and the postbacks of the second were executed outside of the wrapper.\u003c/p\u003e","title":"An inline wrapper and having too much on your head"},{"content":"I installed iTunes 8 on our laptop, and connected an iPod to check if all worked accordingly. The iTunes was installed in Dutch, so the displayed information was also. Apparently, when you\u0026rsquo;re Dutch, you get some extra capacity on your iPod, free of charge!\nImage missing\niTunes displayed the free space on the iPod as being \u0026lsquo;Gratis\u0026rsquo;, the Dutch word for when you don\u0026rsquo;t have to pay for stuff. Because free in English means both \u0026rsquo;not occupied\u0026rsquo; and \u0026lsquo;for free\u0026rsquo;, the wrong one seems to have been translated into Dutch here\u0026hellip;\n","date":"10 September 2008","permalink":"https://www.rickvandenbosch.net/blog/itunes-8-translation-glitch/","section":"Blog","summary":"\u003cp\u003eI installed iTunes 8 on our laptop, and connected an iPod to check if all worked accordingly. The iTunes was installed in Dutch, so the displayed information was also. Apparently, when you\u0026rsquo;re Dutch, you get some extra capacity on your iPod, free of charge!\u003c/p\u003e","title":"iTunes 8 translation glitch"},{"content":"StyleCop version 4.3 was released last tuesday. A short summary of what version 4.3 brings us: Various bugfixes, including fixes for VS integration issues Rules documentation is included and integrated into VS “Show Error Help” New rules, see blogpost for the rules Branding change from Source Analysis to StyleCop **Links\n** StyleCop blog: https://blogs.msdn.com/sourceanalysis/\nRelease announcement on the StyleCop blog: https://blogs.msdn.com/sourceanalysis/archive/2008/08/19/stylecop-4-3-is-released.aspx\nStyleCop 4.3 download: https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis\u0026amp;ReleaseId=1425 ","date":"26 August 2008","permalink":"https://www.rickvandenbosch.net/blog/stylecop-v4-3-now-available/","section":"Blog","summary":"\u003cp\u003eStyleCop version 4.3 was released last tuesday. A short summary of what version 4.3 brings us: \u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVarious bugfixes, including fixes for VS integration issues\u003c/li\u003e\n\u003cli\u003eRules documentation is included and integrated into VS “Show Error Help”\u003c/li\u003e\n\u003cli\u003eNew rules, see \u003ca target=\"_blank\" href=\"https://blogs.msdn.com/sourceanalysis/archive/2008/08/19/stylecop-4-3-is-released.aspx\"\u003eblogpost\u003c/a\u003e for the rules\u003c/li\u003e\n\u003cli\u003eBranding change from Source Analysis to StyleCop\n**Links\u003cbr\u003e\n** StyleCop blog: \u003ca href=\"https://blogs.msdn.com/sourceanalysis/\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://blogs.msdn.com/sourceanalysis/\u003c/a\u003e\u003cbr\u003e\nRelease announcement on the StyleCop blog: \u003ca href=\"https://blogs.msdn.com/sourceanalysis/archive/2008/08/19/stylecop-4-3-is-released.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://blogs.msdn.com/sourceanalysis/archive/2008/08/19/stylecop-4-3-is-released.aspx\u003c/a\u003e\u003cbr\u003e\nStyleCop 4.3 download: \u003ca href=\"https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis\u0026amp;ReleaseId=1425\" title=\"https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis\u0026amp;ReleaseId=1425\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis\u0026amp;ReleaseId=1425\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e","title":"StyleCop v4.3 now available"},{"content":"Taken from the SysInternals website:\nThe SysInternals web site was created in 1996 by Mark Russinovich and Bryce Cogswell to host their advanced system utilities and technical information. Microsoft acquired Sysinternals in July, 2006. Whether you’re an IT Pro or a developer, you’ll find Sysinternals utilities to help you manage, troubleshoot and diagnose your Windows systems and applications.\nOne of the must-have SysInternals tools for a developer is DebugView.\nDebugView is an application that lets you monitor debug output on your local system, or any computer on the network that you can reach via TCP/IP. It is capable of displaying both kernel-mode and Win32 debug output, so you don\u0026rsquo;t need a debugger to catch the debug output your applications or device drivers generate, nor do you need to modify your applications or drivers to use non-standard debug output APIs.\nSo that means that an easy Debug.Write (or Debug.WriteLine) statement is picked up by the DebugView tool, and displayed in the tool. From there, you can filter the lines, search them and more\u0026hellip;!\nThe code that made this screenshot: Debug.WriteLine(“Written through a simple Debug.WriteLine statement”);\nImage missing\nTechnorati tags: link,Visual Studio,Development ","date":"7 August 2008","permalink":"https://www.rickvandenbosch.net/blog/cool-tool-debugview/","section":"Blog","summary":"\u003cp\u003eTaken from the \u003ca href=\"https://technet.microsoft.com/en-us/sysinternals/default.aspx\" target=\"_blank\" rel=\"noopener\"\u003eSysInternals website\u003c/a\u003e:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eThe SysInternals web site was created in 1996 by \u003ca href=\"https://blogs.technet.com/markrussinovich/about.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eMark Russinovich\u003c/a\u003e and Bryce Cogswell to host their advanced system utilities and technical information. Microsoft acquired Sysinternals in July, 2006. Whether you’re an IT Pro or a developer, you’ll find Sysinternals utilities to help you manage, troubleshoot and diagnose your Windows systems and applications.\u003c/p\u003e","title":"Cool tool: DebugView"},{"content":"Earlier this week the Microsoft Research Faculty Summit was held. On 10 was on the scene, and has a nice movie about the Sphere. For the entire article @ on 10, have a look over here: https://on10.net/blogs/laura/Sphere-multi-touch-computing/.\nThis is just another sign that the best is yet to come\u0026hellip; Good times 🙂\n","date":"31 July 2008","permalink":"https://www.rickvandenbosch.net/blog/microsoft-research-sphere-multi-touch-computing/","section":"Blog","summary":"\u003cp\u003eEarlier this week the \u003ca href=\"https://research.microsoft.com/workshops/fs2008/\" target=\"_blank\"\u003eMicrosoft Research Faculty Summit\u003c/a\u003e was held. \u003ca href=\"https://www.on10.net\" target=\"_blank\"\u003eOn 10\u003c/a\u003e was on the scene, and has a nice movie about the \u003ca href=\"https://mschnlnine.vo.llnwd.net/d1/on10/6/4/1/3/2/spheremulti_on10.wmv\" target=\"_blank\"\u003eSphere\u003c/a\u003e. For the entire article @ on 10, have a look over here: \u003ca href=\"https://on10.net/blogs/laura/Sphere-multi-touch-computing/\" title=\"https://on10.net/blogs/laura/Sphere-multi-touch-computing/\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://on10.net/blogs/laura/Sphere-multi-touch-computing/\u003c/a\u003e.\u003c/p\u003e","title":"Microsoft Research: Sphere multi-touch computing"},{"content":"Rob Enderle, columnist at TechNewsWorld, gives a new/changed view on Microsoft, Google, Apple and Linux in his article The Fall of Google, the Rebirth of Microsoft and the Changing Face of Apple and Linux. A nice read\u0026hellip;\nOne of the cool quotes from the article:\n\u0026hellip;but it becomes risky for anyone to depend on the other guy screwing up as they typically don\u0026rsquo;t forever.\n","date":"23 July 2008","permalink":"https://www.rickvandenbosch.net/blog/a-new-view-on-microsoft-google-apple-and-linux/","section":"Blog","summary":"\u003cp\u003eRob Enderle, columnist at \u003ca href=\"https://www.technewsworld.com\" target=\"_blank\"\u003eTechNewsWorld\u003c/a\u003e, gives a new/changed view on Microsoft, Google, Apple and Linux in his article \u003ca href=\"https://www.ecommercetimes.com/story/The-Fall-of-Google-the-Rebirth-of-Microsoft-and-the-Changing-Face-of-Apple-and-Linux-63776.html\" target=\"_blank\"\u003eThe Fall of Google, the Rebirth of Microsoft and the Changing Face of Apple and Linux\u003c/a\u003e. A nice read\u0026hellip;\u003c/p\u003e","title":"A new view on Microsoft, Google, Apple and Linux"},{"content":"Avanade Netherlands released a new website [1]. Unlike the previous one, this one is here to stay 😉\nThe website holds information about events, career possibilities, publications, videos, links to blogs of Avanade Netherlands employees and more\u0026hellip; Have a look!\nIt is in Dutch, by the way.\n[1] https://www.werkenbijavanade.nl (Dutch)\nTechnorati tags: link,Avanade ","date":"3 July 2008","permalink":"https://www.rickvandenbosch.net/blog/new-avanade-nl-website-online/","section":"Blog","summary":"\u003cp\u003eAvanade Netherlands released a \u003ca href=\"https://www.werkenbijavanade.nl\" target=\"_blank\"\u003enew website\u003c/a\u003e [1]. Unlike the previous one, this one is here to stay 😉\u003cbr\u003e\nThe website holds information about events, career possibilities, publications, videos, links to blogs of Avanade Netherlands employees and more\u0026hellip; Have a look!\u003c/p\u003e","title":"New Avanade NL website online"},{"content":"When you want to implement a custom stsadm for SharePoint, all you realy have to do is implement the Microsoft.SharePoint.StsAdmin.ISPStsadmCommand interface. Because I develop on a machine with no SharePoint installed, I (only) copy the assemblies I need to develop locally. For the stsadm command I was working on recently (more on this in a future post) I only needed the Microsoft.SharePoint and Microsoft.Office.Server assemblies. Or at least I thought so\u0026hellip;\nAfter implementing the functionality I tried running code analysis, and I got two errors:\nCA0052 : No targets were selected.\nCA0055 : Could not load AssemblyName.\nAfter trying several ways to fix this, I finally compiled the project on a machine with SharePoint installed. At that point, compiling and running code analysis both worked fine. Code analysis then gave a warning that pointed me to the solution of the problem:\nCA2123 : Microsoft.Security : Add the following security attribute to \u0026lsquo;ClassName.MethodName(string)\u0026rsquo; in order to match a LinkDemand on base method \u0026lsquo;ISPStsadmCommand.GetHelpMessage(string)\u0026rsquo;: [SharePointPermission(SecurityAction.LinkDemand, ObjectModel = true)].\nApparently the attribute requires an extra reference. When I copied that assembly (Microsoft.SharePoint.Security) to my non-SharePoint development machine, all worked correctly. FYI: I did add the attribute code analysis suggested by the way.\n","date":"30 June 2008","permalink":"https://www.rickvandenbosch.net/blog/running-code-analysis-on-a-custom-stsadm-command-gives-errors-ca0052-and-ca0055/","section":"Blog","summary":"\u003cp\u003eWhen you want to implement a custom stsadm for SharePoint, all you realy have to do is implement the Microsoft.SharePoint.StsAdmin.ISPStsadmCommand interface. Because I develop on a machine with no SharePoint installed, I (only) copy the assemblies I need to develop locally. For the stsadm command I was working on recently (more on this in a future post) I only needed the Microsoft.SharePoint and Microsoft.Office.Server assemblies. Or at least I thought so\u0026hellip;\u003c/p\u003e","title":"Running code analysis on a custom stsadm command gives errors CA0052 and CA0055"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/sharepoint/","section":"Tags","summary":"","title":"SharePoint"},{"content":"While writing a custom stsadm command for SharePoint (more on that in a future post) and having to do something based on the command the user typed in, I used ToLower(CultureInfo.InvariantCulture) on the command string to be able to check without the hassle of differences in casing. When I ran code analysis on my project, I got this somewhat cryptic message:\nCA1308 : Microsoft.Globalization : In method \u0026lsquo;CommandParser.Run(string, StringDictionary, out string)\u0026rsquo;, replace the call to \u0026lsquo;string.ToLower(CultureInfo)\u0026rsquo; with String.ToUpperInvariant().\nSo in order to solve a code analysis warning I should change lowercasing a string to a call to ToUpperInvariant? That seems a bit strange, right? Because I was almost sure this could not be a typo, I searched around a bit. When you search for the error number, you get an explanation from Microsoft through the MSDN article Normalize strings to uppercase [1]. Apparently there\u0026rsquo;s an issue with a small group of characters which are unable to round trip when converted to lowercase. For more information: have a look at Michael Kaplan\u0026rsquo;s post Get off my (lower) case! (or: Casing, the 1st) which explains it pretty well [2].\nHope this helps some of you 😉\n[1] https://msdn.microsoft.com/en-us/library/bb386042.aspx\n[2] https://blogs.msdn.com/michkap/archive/2004/12/02/273619.aspx\n","date":"17 June 2008","permalink":"https://www.rickvandenbosch.net/blog/a-not-so-clear-visual-studio-code-analysis-message-ca1308/","section":"Blog","summary":"\u003cp\u003eWhile writing a custom stsadm command for SharePoint (more on that in a future post) and having to do something based on the command the user typed in, I used ToLower(\u003ca target=\"_blank\" href=\"https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture.aspx\"\u003eCultureInfo.InvariantCulture\u003c/a\u003e) on the command string to be able to check without the hassle of differences in casing. When I ran code analysis on my project, I got this somewhat cryptic message:\u003c/p\u003e","title":"A not so clear Visual Studio code analysis message (CA1308)"},{"content":"One of the posts that is being read quite frequently over here is HOWTO: Encode a password using MD5 in C# (or: howto calculate the MD5 hash for a string). One of the (many) reactions to that post was from one Simucal, stating:\nAlso, to the original poster, Rick van den Bosch\u0026hellip; shame on you for using ASCIIEncoding.Default.GetBytes(). You do realize that would seriously restrict the usefulness of your method to working only in languages that ASCII has the character sets for, right?\nI suggest you read this article entitled:\nThe Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)\nYes, I do realize that using ASCIIEncoding.Default.GetBytes() would seriously restrict the usefulness of the method to working only in languages that ASCII has the character sets for. The primary reason for the post was to illustrate the way to calculate the hash. Representing it as a string was only there to be complete for a specific scenario. I did not try to write a hashing function for every language 😉\nThat being said, the post Simucal refers to is a good one, and it truly is the absolute minimum every software developer absolutely, positively must know about unicode and character sets. And I guess there are no excuses ;). So if you haven\u0026rsquo;t done so already, go and read it.\n","date":"11 June 2008","permalink":"https://www.rickvandenbosch.net/blog/the-absolute-minimum-every-software-developer/","section":"Blog","summary":"\u003cp\u003eOne of the posts that is being read quite frequently over here is \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2005/05/18/4118.aspx\" target=\"_blank\"\u003eHOWTO: Encode a password using MD5 in C# (or: howto calculate the MD5 hash for a string)\u003c/a\u003e. One of the (many) reactions to that post was from one Simucal, stating:\u003c/p\u003e","title":"The absolute minimum every software developer …"},{"content":"The situation I talked about in my previous post had one very big issue: LINQ sometimes just is too dynamic\u0026hellip; 😉\nThe fact that I changed the value for the Ranking property for each SpecificObject that got matched, made the primary LINQ query have a different outcome. LINQ uses lazy evaluation and because of that, the contents of finalGroups and exitGroups changed every time I changed the Ranking value for one of the SpecificObjects. Each time the variable containing the outcome of the LINQ query is iterated through, the query is evaluated again. This made that the matching was all off, and I ended up with a bunch of exit groups that got matched!\nTo have a simple solution, I did the following. This holds the final and exit objects in a \u0026lsquo;static\u0026rsquo; list in stead of a dynamic query result. This way, the SpecificObjects in the finalObjects and exitObjects lists stay the same, regardless of the changes you make to any of the SpecificObjects.\nint count;\nint numberOfPossibilities;\nIEnumerable temp;\nList finalObjects; List exitObjects; count = 0;\nfinalObjects = new List();\nexitObjects = new List(); temp = from SpecificObject specificObject in AllSpecificObjects\norderby specificObject.Ranking\nselect specificObject; foreach (SpecificObject specificObject in temp)\n{\nif (count \u0026lt; numberOfPossibilities)\n{\nfinalObjects.Add(specificObject);\n}\nelse\n{\nexitObjects.Add(specificObject);\n}\ncount++;\n}\nBy the way, we have a winner. Ruud Campsteijn was pretty quick with the right answer! ","date":"7 June 2008","permalink":"https://www.rickvandenbosch.net/blog/a-scenario-where-linq-is-too-dynamic-answered/","section":"Blog","summary":"\u003cp\u003eThe situation I talked about in \u003ca target=\"_blank\" href=\"/blogs/rick/archive/2008/06/06/a-scenario-where-linq-is-too-dynamic.aspx\"\u003emy previous post\u003c/a\u003e had one very big issue: LINQ sometimes just is too dynamic\u0026hellip; 😉\u003cbr\u003e\nThe fact that I changed the value for the Ranking property for each SpecificObject that got matched, made the \u003cem\u003eprimary\u003c/em\u003e LINQ query have a different outcome. LINQ uses lazy evaluation and  because of that, the contents of finalGroups and exitGroups changed every time I changed the Ranking value for one of the SpecificObjects. Each time the variable containing the outcome of the LINQ query is iterated through, the query is evaluated again. This made that the matching was all off, and I ended up with a bunch of exit groups that got matched!\u003c/p\u003e","title":"A scenario where LINQ is too dynamic (answered)"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/linq/","section":"Tags","summary":"","title":"Linq"},{"content":"While developing an algorithm to match preferences to possibilities, I had to sort a generic list of a specific object type (SpecificObject). The first x objects would be matched, the rest would be excluded because of the number of available places. To determine the group of objects that would be matched and the group that would be excluded, I did something like this:\nIEnumerable sortedObjects;\nIEnumerable finalObjects; IEnumerable exitObjects; sortedObjects = from SpecificObject specificObject in AllSpecificObjects\norderby specificObject.Ranking\nselect specificObject;\nfinalObjects = sortedObjects.Take(numberOfPossibilities);\nexitObjects = sortedObjects.Skip(numberOfPossibilities);\nNext I would iterate through the possibilities and look for a match in (a subset of) the \u0026lsquo;finalObjects\u0026rsquo; list. To be sure the matching would be done honestly during this process, I changed the value for the Ranking property after a positive match. This way, SpecificObjects that had no match yet would move up in the ranking and would be matched before SpecificObjects that already had one or more positive matches. Unfortunately, this had a very unwanted side-effect.\nCan you think of it? Let me know and put it in the comments. The answer can be found in my next post.\n","date":"6 June 2008","permalink":"https://www.rickvandenbosch.net/blog/a-scenario-where-linq-is-too-dynamic/","section":"Blog","summary":"\u003cp\u003eWhile developing an algorithm to match preferences to possibilities, I had to sort a generic list of a specific object type (SpecificObject). The first x objects would be matched, the rest would be excluded because of the number of available places. To determine the group of objects that would be matched and the group that would be excluded, I did something like this:\u003c/p\u003e","title":"A scenario where LINQ is too dynamic"},{"content":"After developing a custom Web Service to be hosted in SharePoint (based on this HowTo article on MSDN) and deploying it on a testing environment, I got some entries in the EventLog over there, stating:\n“Unable to connect publishing custom string handler for output caching. IIS Instance Id is \u0026lsquo;xxxxxxxxx\u0026rsquo;, url is \u0026lsquo;https://internalsharepointserver/somesubfolder/services.asmx“\nThe PublishingHttpModule trying to cache an unmanaged path seems to be the problem here. When enabled for a custom web application (such as my web service), it causes the eventlog entry each time certain requests like web service calls or static CSS files are made.\nThe quick solution is to simply remove the PublishingHttpModule for the custom web application. You can do so by editing the web.config file:\n\u0026laquo;/span\u0026gt;httpModules\u0026gt;\n\u0026laquo;/span\u0026gt;remove name=“PublishingHttpModule” /\u0026gt;\n\u0026hellip;\n\u0026lt;/httpModules\u0026gt; To completely switch back to all default ASP.NET modules, use these settings in the web.config file:\n\u0026laquo;/span\u0026gt;httpModules\u0026gt;\n\u0026laquo;/span\u0026gt;clear/\u0026gt;\n\u0026laquo;/span\u0026gt;add name=“OutputCache” type=“System.Web.Caching.OutputCacheModule” /\u0026gt;\n\u0026laquo;/span\u0026gt;add name=“Session” type=“System.Web.SessionState.SessionStateModule” /\u0026gt;\n\u0026laquo;/span\u0026gt;add name=“WindowsAuthentication” type=“System.Web.Security.WindowsAuthenticationModule” /\u0026gt;\n\u0026laquo;/span\u0026gt;add name=“FormsAuthentication” type=“System.Web.Security.FormsAuthenticationModule” /\u0026gt;\n\u0026laquo;/span\u0026gt;add name=“PassportAuthentication” type=“System.Web.Security.PassportAuthenticationModule” /\u0026gt;\n\u0026laquo;/span\u0026gt;add name=“UrlAuthorization” type=“System.Web.Security.UrlAuthorizationModule” /\u0026gt;\n\u0026laquo;/span\u0026gt;add name=“FileAuthorization” type=“System.Web.Security.FileAuthorizationModule” /\u0026gt; \u0026hellip;\n\u0026lt;/httpModules\u0026gt;\n","date":"4 June 2008","permalink":"https://www.rickvandenbosch.net/blog/unable-to-connect-publishing-custom-string-handler/","section":"Blog","summary":"\u003cp\u003eAfter developing a custom Web Service to be hosted in SharePoint (based on this \u003ca href=\"https://msdn2.microsoft.com/en-us/library/ms464040.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eHowTo article on MSDN\u003c/a\u003e) and deploying it on a testing environment, I got some entries in the EventLog over there, stating:\u003c/p\u003e","title":"Unable to connect publishing custom string handler …"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/wss/","section":"Tags","summary":"","title":"WSS"},{"content":"I only had time for a quickie:\nThe page containing all my online profiles has been updated\u0026hellip;\nWhen interested, have a look at them{.null}.\n","date":"27 May 2008","permalink":"https://www.rickvandenbosch.net/blog/online-profiles-update/","section":"Blog","summary":"\u003cp\u003eI only had time for a quickie:\u003c/p\u003e\n\u003cp\u003eThe page containing all my online profiles has been updated\u0026hellip;\u003cbr\u003e\nWhen interested, have a look \u003ca href=\"/blogs/rick/pages/My-online-profiles.aspx\"\u003eat them\u003c/a\u003e{.null}.\u003c/p\u003e","title":"Online profiles – update"},{"content":"After extending a textbox with a NumberUpDownExtender, which comes with the AJAX Control Toolkit, I recieved the error “the number of fractional digits is out of range”. This happened when debugging my web application and using the extender. When using the web app in non-debug mode, nothing happened. This included the value change \u0026rsquo;not happening'.\nFortunately, this one was REALY easy, but it is not to be found on the web. That\u0026rsquo;s why I am posting this embarassing personal slip-up anyway. As it turned out, I switched the values in minimum and maximum. Make sure the Maximum property of the extender holds the highest value of the two and you should be good to go 😉\nBy the way, you would think something like this a) could be determined design- or compiletime, and b) could generate a better exception than \u0026rsquo;number of fractional digits out of range'.\n","date":"10 May 2008","permalink":"https://www.rickvandenbosch.net/blog/the-number-of-fractional-digits-is-out-of-range/","section":"Blog","summary":"\u003cp\u003eAfter extending a textbox with a NumberUpDownExtender, which comes with the AJAX Control Toolkit, I recieved the error “the number of fractional digits is out of range”. This happened when debugging my web application and using the extender. When using the web app in non-debug mode, nothing happened. This included the value change \u0026rsquo;not happening'.\u003c/p\u003e","title":"The number of fractional digits is out of range?"},{"content":"Image missing\nWhile developing a web application for a friend of mine, I ran into a Visual Studio error message I hadn\u0026rsquo;t seen before: Error connecting to undo manager of source file \u0026lsquo;D:DevelopmentSomeWeb ApplicationDefault.master.designer.cs\u0026rsquo;.\nThe error occured whenever I tried to start the (web) application in debug mode. The application did start OK after the error message though. Starting the application without debugging didn\u0026rsquo;t cause the error.\nI closed the solution file I had opened, but that didn\u0026rsquo;t solve the issue. Stopping the ASP.NET Development Server didn\u0026rsquo;t do anything either. I had to exit Visual Studio al together to get this error to go away.\nI searched for this specific error, and saw it already occured in Visual Studio 2005 SP1. Scott Hanselman has a blog post on how he solved this issue. Now, in Visual Studio 2008, this error still seems to be in there\u0026hellip;\n","date":"5 May 2008","permalink":"https://www.rickvandenbosch.net/blog/error-connecting-to-undo-manager/","section":"Blog","summary":"\u003cp\u003e\u003cspan class=\"missing-image\" role=\"img\" aria-label=\"Image missing\"\u003eImage missing\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003eWhile developing a web application for a friend of mine, I ran into a Visual Studio error message I hadn\u0026rsquo;t seen before: \u003cem\u003eError connecting to undo manager of source file \u0026lsquo;D:DevelopmentSomeWeb ApplicationDefault.master.designer.cs\u0026rsquo;.\u003c/em\u003e\u003c/p\u003e","title":"Error connecting to undo manager"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/enterprise-library/","section":"Tags","summary":"","title":"Enterprise Library"},{"content":"The EntLib Extensions to WSSF have gotten more and more attention lately. There now is a (very positive) announcement about the extensions on the WSSF site, and there is a complete article on MSDN explaining how to use the extensions. Check it out!\nLinks:\nEntLib Extensions to WSSF: https://www.codeplex.com/EntLibExtensionsWSSF\nMSDN article: https://msdn.microsoft.com/en-us/magazine/cc164250.aspx\nWSSF site: https://www.codeplex.com/servicefactory\n","date":"4 May 2008","permalink":"https://www.rickvandenbosch.net/blog/entlib-extensions-to-wssf-part-2/","section":"Blog","summary":"\u003cp\u003eThe \u003ca target=\"_blank\" href=\"https://www.codeplex.com/EntLibExtensionsWSSF\"\u003eEntLib Extensions to WSSF\u003c/a\u003e have gotten more and more attention lately. There now is a (very positive) announcement about the extensions on the \u003ca target=\"_blank\" href=\"https://www.codeplex.com/servicefactory\"\u003eWSSF site\u003c/a\u003e, and there is a complete \u003ca target=\"_blank\" href=\"https://msdn.microsoft.com/en-us/magazine/cc164250.aspx\"\u003earticle on MSDN\u003c/a\u003e explaining how to use the extensions. Check it out!\u003c/p\u003e","title":"EntLib Extensions to WSSF – Part 2"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/wssf/","section":"Tags","summary":"","title":"WSSF"},{"content":"It\u0026rsquo;s here: the Microsoft SharePoint Administration Toolkit. This first release contains two tools, both supported on WSS 3.0 and SharePoint Server 2007.\nBatch Site Manager\nFrom the “Move, Lock, and Delete Site Collections” page on Applications Management you can schedule bulk operations against site collections in the farm—including moving site collections between content databases (!!).\nstsadm extension: UpdateAlert\nThis command will refresh all alert URLs in a specific site collection, which is extremely important should you change the URL of a web application or after an upgrade.\nFor more information and links for downloads, have a look at the original article on MSDN: Announcing the First Release of the Microsoft SharePoint Administration Toolkit.\n","date":"1 May 2008","permalink":"https://www.rickvandenbosch.net/blog/first-release-microsoft-sharepoint-administration-toolkit/","section":"Blog","summary":"\u003cp\u003eIt\u0026rsquo;s here: the Microsoft SharePoint Administration Toolkit. This first release contains two tools, both supported on WSS 3.0 and SharePoint Server 2007.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e\u003cem\u003eBatch Site Manager\u003c/em\u003e\u003c/strong\u003e\u003cbr\u003e\nFrom the “Move, Lock, and Delete Site Collections” page on Applications Management you can schedule bulk operations against site collections in the farm—including moving site collections between content databases (!!).\u003c/p\u003e","title":"First release: Microsoft SharePoint Administration Toolkit"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/live/","section":"Tags","summary":"","title":"Live"},{"content":"This morning I found a mail in my inbox telling me I was invited to Live Mesh. That\u0026rsquo;s a nice start of the weekend, so thanks Jan! The Live Desktop user interface looks pretty cool, and it almost feels like a real desktop. But that part of Live Mesh is pretty much like Live SkyDrive: a big online disk for you to put stuff on. Lots of stuff. 5 Gigabytes worth of stuf\u0026hellip; 😉\nI immediately went to the installer for my machine, because that would make Mesh stand out from an online storage service like SkyDrive. But I was kinda surprised to get this message: \u0026lsquo;Product does not support running under elevated administrator account or with UAC disabled\u0026rsquo;.\nImage missing\nSay what? So Windows Vista enables me to disable User Account Control, but the Live Mesh notifier* will not install on a machine that has UAC disabled? That\u0026rsquo;s just wrong in my book, especially because the intial help info doesn\u0026rsquo;t explan why it should be enabled. But OK, it\u0026rsquo;s a preview. This might be modified before it goes all the way live 😉\nAfter some searching and digging through the help, I think I found the explanation of why UAC should be enabled. In short: The remote desktop functionality (!) of Live Mesh won\u0026rsquo;t work (correctly) without UAC enabled. Although the help suggests you can still use the Live Mesh notifier without having UAC enabled, you can\u0026rsquo;t install it. I\u0026rsquo;ve tried livemesh -help which is supposed to display command line options, but that doesn\u0026rsquo;t seem to work. Maybe because AUC is disabled\u0026hellip;?\nA cool thing over there is this nice little developers movie. It explains how Live Mesh works behind the scenes and how developers can make applications that benefit from the possibilities Live Mesh has to offer. Nice\u0026hellip;\nBesides that, channel 10 has a post that asks \u0026lsquo;Do you really get Live Mesh\u0026rsquo;? Because it has so many possibilities, you can\u0026rsquo;t explain it in an \u0026rsquo;elevator pitch\u0026rsquo;. They suggest watching this great movie, that sheds a light on what Live Mesh has to offer.\nJust wanted to add this screenshot: Live Mesh stops showing updates (and wasting bandwith) when you haven\u0026rsquo;t used the window for ten minutes. That\u0026rsquo;s kind smart, right 😉\nImage missing\n**Conclusion:\n** I can\u0026rsquo;t really conclude, because I haven\u0026rsquo;t enabled UAC to test adding my device. At least, not yet\u0026hellip; Watching all the movies, both provided by the Live Mesh team and by others, gives a pretty good idea though. I think Live Mesh might help change the way we use computers, the internet and data. The strong developer approach (there are already SDK\u0026rsquo;s available with Visual Studio code snippets and howto\u0026rsquo;s!) will drive the number of Mesh-enabled applications, which is probably one of the most important factors in the success of Live Mesh. Undoubtetly to be continued \u0026hellip;\nThe Live Mesh notifier is the gateway to the folders, devices, and news in your mesh. You can open the notifier by clicking the Live Mesh icon that appears in the notification area of your Windows taskbar on your device or in the lower right-hand corner of your Live Desktop (The online location where your Live Mesh folders are stored, so you can access them from the web.) Image missing\nTechnorati tags: Demos \u0026 betas,link,live,mesh ","date":"26 April 2008","permalink":"https://www.rickvandenbosch.net/blog/live-mesh-a-first-look/","section":"Blog","summary":"\u003cp\u003eThis morning I found a mail in my inbox telling me I was invited to \u003ca href=\"https://www.mesh.com\" target=\"_blank\"\u003eLive Mesh\u003c/a\u003e. That\u0026rsquo;s a nice start of the weekend, so thanks \u003ca href=\"https://weblogs.asp.net/jan\" target=\"_blank\"\u003eJan\u003c/a\u003e! The Live Desktop user interface looks pretty cool, and it almost feels like a real desktop. But that part of Live Mesh is pretty much like \u003ca href=\"https://skydrive.live.com\" target=\"_blank\"\u003eLive SkyDrive\u003c/a\u003e: a big online disk for you to put stuff on. Lots of stuff. 5 Gigabytes worth of stuf\u0026hellip; 😉\u003c/p\u003e","title":"Live Mesh, a first look"},{"content":"It\u0026rsquo;s been a while because I\u0026rsquo;ve been so busy lately, but the next (technical) step for my personal website is now online. When browsing to https://rickvandenbosch.net/blog/, the content of my blog here is displayed sort of mirrored over there. I used an OpenSource RSS component to read my private rss feed from blogging about, and display it from there.\nThere\u0026rsquo;s still a lot of work to be done (like styling!), but I\u0026rsquo;ll get there. Eventually\u0026hellip;. 😉\nIf you\u0026rsquo;re interested on the how and the what: I\u0026rsquo;ll post the source code online as soon as the entire website is \u0026lsquo;ready\u0026rsquo;. At this rate, it might take a while, so if you can\u0026rsquo;t wait: contact me\nTechnorati tags: personal,.net,link,blog ","date":"24 April 2008","permalink":"https://www.rickvandenbosch.net/blog/rick-van-den-bosch-net-part-ii/","section":"Blog","summary":"\u003cp\u003eIt\u0026rsquo;s been a while because I\u0026rsquo;ve been so busy lately, but the next (technical) step for my personal  website is now online. When browsing to \u003ca href=\"https://rickvandenbosch.net/blog/\" title=\"https://rickvandenbosch.net/blog/\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://rickvandenbosch.net/blog/\u003c/a\u003e, the content of my blog here is displayed sort of mirrored over there. I used an OpenSource RSS component to read my private rss feed from blogging about, and display it from there.\u003c/p\u003e","title":"Rick van den Bosch .net – part II"},{"content":"When roaming the MSDN forums for unanswered questions for me to answer, I come across a lot of questions about any of the following:\nIntellisense acting weird Intellisense not showing up at all Menu items that are all garbled up Missing buttons on toolbars Complete toolbars missing Keyboard shortcuts acting weird Keyboard shortcuts not working at all \u0026hellip; In most cases, resetting the Visual Studio settings to the default settings using devenv /resetsettings solves any problems that are in that list. But I can imagine you don\u0026rsquo;t want to go through the hassle of setting up Visual Studio exactly the way you want it again (and again, and\u0026hellip;). There\u0026rsquo;s a solution to that: define your own settings file to restore settings from.\nTo create a file with your settings, first install Visual Studio (if you hadn\u0026rsquo;t done so already) and adjust all settings to accomodate your needs. Next, select \u0026lsquo;Tools\u0026rsquo; and \u0026lsquo;Import and export settings\u0026rsquo;. This pops up an import export wizard, where you can choose the \u0026lsquo;Export selected environment settings\u0026rsquo; option to create your own settings file. On the next screen, select the settings you want to be able to reset later on. After pressing next, enter a filename to store the settings in and click finish. That\u0026rsquo;s it!\nRestoring your settings is as easy as exporting is: open up the wizard, choose if you want to backup the current settings, select the settingsfile you want to import, select the settings to restore and click finish.\nBesides using the import export wizard, you can also use the /resetsettings command line switch to reset to a specific set of settings in a file by specifying that file like so:\n_Devenv.exe /ResetSettings “C:My FilesMySettings.vssettings”\n_\nTechnorati tags: HowTo,Visual Studio ","date":"21 April 2008","permalink":"https://www.rickvandenbosch.net/blog/backing-up-and-restoring-visual-studio-settings/","section":"Blog","summary":"\u003cp\u003eWhen roaming the \u003ca href=\"https://forums.microsoft.com/msdn\" target=\"_blank\"\u003eMSDN forums\u003c/a\u003e for unanswered questions for me to answer, I come across a lot of questions about any of the following:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIntellisense acting weird\u003c/li\u003e\n\u003cli\u003eIntellisense not showing up at all\u003c/li\u003e\n\u003cli\u003eMenu items that are all garbled up\u003c/li\u003e\n\u003cli\u003eMissing buttons on toolbars\u003c/li\u003e\n\u003cli\u003eComplete toolbars missing\u003c/li\u003e\n\u003cli\u003eKeyboard shortcuts acting weird\u003c/li\u003e\n\u003cli\u003eKeyboard shortcuts not working at all\u003c/li\u003e\n\u003cli\u003e\u0026hellip;\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eIn most cases, resetting the Visual Studio settings to the default settings using \u003ca href=\"https://msdn2.microsoft.com/en-us/library/ms241273(VS.80).aspx\" target=\"_blank\"\u003edevenv /resetsettings\u003c/a\u003e solves any problems that are in that list. But I can imagine you don\u0026rsquo;t want to go through the hassle of setting up Visual Studio exactly the way you want it again (and again, and\u0026hellip;). There\u0026rsquo;s a solution to that: define your own settings file to restore settings from.\u003c/p\u003e","title":"Backing up and restoring Visual Studio settings"},{"content":"We probably all worked with dynamically generated controls on forms, ASP.NET pages or (user) controls. And I guess we\u0026rsquo;ve all written for-each statements to loop through the ControlCollection and filter out all the controls of a specific type, right? I wanted to do the same today, so I started by trying to use LINQ for this:\nImage missing This, as you can see, generated a compile time error:\nCould not find an implementation of the query pattern for source type \u0026lsquo;System.Web.UI.ControlCollection\u0026rsquo;. \u0026lsquo;Where\u0026rsquo; not found. Consider explicitly specifying the type of the range variable \u0026lsquo;control\u0026rsquo;.\nAs the error states, this is easily solved by explicitly specifying the type of the control variable. Because a ControlCollection can contain so many types, it is not strange the compiler asks you to be a bit more precise on the type you will be querying. That looks something like this:\nImage missing\nBut when I added the System.Linq namespace to my using section, I saw an extra method on the ControlCollection, called OfType\u0026lt;\u0026gt;. This method is one of the extension methods that can be applied to a collection that has a non-parameterized type like a ControlCollection or an ArrayList, because OfType\u0026lt;\u0026gt; extends the type IEnumerable.\nAnother one of those nice \u0026rsquo;native\u0026rsquo; Linq extension methods is the Cast\u0026lt;\u0026gt; method, which pretty much does the same but throws an exception if there are any objects in the collection that cannot be cast to the specified type. And yes, exceptions are sometimes wanted 😉\nFor more info on the OfType\u0026lt;\u0026gt; method, see: Enumerable.OfType Generic Method\nFor more info on the Cast\u0026lt;\u0026gt; method, see: Enumerable.Cast Generic Method\nTechnorati tags: .NET,Visual Studio,Linq ","date":"18 April 2008","permalink":"https://www.rickvandenbosch.net/blog/selecting-all-the-controls-of-a-specific-type-the-built-in-linq-way/","section":"Blog","summary":"\u003cp\u003eWe probably all worked with dynamically generated controls on forms, ASP.NET pages or (user) controls. And I guess we\u0026rsquo;ve all written for-each statements to loop through the ControlCollection and filter out all the controls of a specific type, right? I wanted to do the same today, so I started by trying to use LINQ for this:\u003cbr\u003e\n\u003cspan class=\"missing-image\" role=\"img\" aria-label=\"Image missing\"\u003eImage missing\u003c/span\u003e\nThis, as you can see, generated a compile time error:\u003cbr\u003e\n\u003cem\u003eCould not find an implementation of the query pattern for source type \u0026lsquo;System.Web.UI.ControlCollection\u0026rsquo;.  \u0026lsquo;Where\u0026rsquo; not found.  Consider explicitly specifying the type of the range variable \u0026lsquo;control\u0026rsquo;.\u003c/em\u003e\u003c/p\u003e","title":"Selecting all the controls of a specific type, the (built in!) LINQ way"},{"content":"Some of my (Dutch!) Avanade colleagues recently released \u0026lsquo;Entlib Extensions To WSSF\u0026rsquo; to CodePlex. Quite a cool addition to the already rich Enterprise Library.\nEntlib Extensions to WSSF (Web Service Software Factory) is an extension that enables WSSF to easily integrate with Enterprise Library. This extension allows you to very easily handle cross cutting concerns in WCF services like Validation, Exception Handling and Logging without much programming. The extension accomplishes this by using the policy injection application block of enterprise library.\nHave a look at it over at the CodePlex page: EntLib Extensions To WSSF\nOther info:\nWeb Service Software Factory\nEnterprise Library 3.1\nTechnorati tags: Enterprise library,.NET,WSSF,Avanade ","date":"14 April 2008","permalink":"https://www.rickvandenbosch.net/blog/entlib-extensions-to-wssf-released-to-codeplex/","section":"Blog","summary":"\u003cp\u003eSome of my (Dutch!) Avanade colleagues recently released \u0026lsquo;Entlib Extensions To WSSF\u0026rsquo; to CodePlex. Quite a cool addition to the already rich Enterprise Library.\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eEntlib Extensions to WSSF (Web Service Software Factory) is an extension that enables WSSF to easily integrate with Enterprise Library. This extension allows you to very easily handle cross cutting concerns in WCF services like Validation, Exception Handling and Logging without much programming. The extension accomplishes this by using the policy injection application block of enterprise library.\u003c/p\u003e","title":"‘EntLib Extensions To WSSF’ released to CodePlex"},{"content":"I\u0026rsquo;m not entirely sure about the article on Digitimes. One of the reasons is because it was posted on April first. Another reason is the way it is written. But if it turns out to be true, I\u0026rsquo;m going to have to get a Blu-Ray player for my Xbox 360\u0026hellip; 😉\nA quote from the article:\nLite-On IT is developing built-in Blu-ray Disc-(BD) ROM drives for the Microsoft Xbox 360 game console, according to industry sources. Lite-On declined to comment, citing client confidentiality.\nLite-On\u0026rsquo;s shipments of the BD ROMs to Microsoft will start in the second half of 2008, the sources added. Lite-On is currently one of the suppliers of Xbox 360-use internal DVD-ROM drives.\nRead the entire article over here (you be the judge\u0026hellip;): Lite-On developing BD-ROM drives for Xbox 360, sources say\n_Update:\n_ Microsoft has denied that Lite-On is developing blu-ray drives for the Xbox. And I guess that makes the Digitimes article just another rumour about blu-ray and Xbox 360. But\u0026hellip; they are not denying they\u0026rsquo;re coming with a blu-ray drive 😉\nThe article starts out with:\nMicrosoft has insisted that Lite-on will not be making Blu-ray drives for its Xbox 360, despite widespread internet rumours to the contrary.\nRead the full article at TechRadar: Microsoft: Lite-On NOT making Blu-ray drive{.}.\n","date":"2 April 2008","permalink":"https://www.rickvandenbosch.net/blog/blu-ray-coming-to-the-xbox-360/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;m not entirely sure about the article on \u003cA href=\"https://www.digitimes.com/\" target=\"_blank\"\u003eDigitimes\u003c/A\u003e. One of the reasons is because it was posted on \u003cem\u003eApril first\u003c/em\u003e. Another reason is the way it is written. But if it turns out to be true, I\u0026rsquo;m going to have to get a Blu-Ray player for my Xbox 360\u0026hellip; 😉\u003c/p\u003e","title":"Blu-Ray coming to the Xbox 360?"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/xbox-360/","section":"Tags","summary":"","title":"Xbox 360"},{"content":"When you dynamically generate a LinkButton in code that will be placed inside an UpdatePanel, you\u0026rsquo;ll experience that the Click event for the LinkButton results in a full postback in stead of the UpdatePanel being triggered. There\u0026rsquo;s a rather simpel solution to this problem\u0026hellip;\nFirst, let\u0026rsquo;s take a look at the scenario. Consider this HTML:\nImage missing There\u0026rsquo;s a literal control outside of the UpdatePanel. There\u0026rsquo;s a second literal control inside the UpdatePanel. Besides that, there is a PlaceHolder inside the UpdatePanel, where the generated LinkButton will be placed. The parent control doesn\u0026rsquo;t have to be a PlaceHolder, it can also be a repeater or something like that.\nNext, consider this code:\nImage missing As you can see, a LinkButton is generated and added to the PlaceHolder in every PageLoad. In the same PageLoad, the literal outside of the UpdatePanel is updated. The literal inside the UpdatePanel is only updated when the LinkButton is clicked. This makes for something like this for the first time the page loads:\nImage missing and something like this after the LinkButton is clicked:\nImage missing Because the LinkButton is inside the UpdatePanel, you would think hitting it would trigger the UpdatePanel so only the literal control inside the UpdatePanel gets updated. The fact that the two literals have the same time on it in the \u0026lsquo;after LinkButton clicked\u0026rsquo; image, shows that the entire page was posted back.\nThe problem here is in the fact that the ID for the LinkButton is not set in the code. Weird thing is that when you change the code to generate a normal ASP.NET Button (with or without an ID), the problem doesn\u0026rsquo;t occur. This has something to do with the fact that both the input rendered for the button and the link rendered for the linkbutton have no ID, but the input control does have a name that can be used to relate events/postbacks to. The link doesn\u0026rsquo;t have that either, so I\u0026rsquo;m guessing it has something to do with that.\nSo the solution is rather simple. Add a line in code where the ID for the control is set (like linkButton.ID = “TestLinkButton”;) After clicking the linkbutton in my example, only the literal in the UpdatePanel is updated. Hooray! 😉\nImage missing\nImage missing\nTechnorati tags: .NET,Ajax,HowTo ","date":"2 April 2008","permalink":"https://www.rickvandenbosch.net/blog/linkbutton-inside-updatepanel-results-in-full-postback-updatepanel-not-triggered/","section":"Blog","summary":"\u003cp\u003eWhen you dynamically generate a LinkButton in code that will be placed inside an UpdatePanel, you\u0026rsquo;ll experience that the Click event for the LinkButton results in a full postback in stead of the UpdatePanel being triggered. There\u0026rsquo;s a rather simpel solution to this problem\u0026hellip;\u003c/p\u003e","title":"LinkButton inside UpdatePanel results in full postback, UpdatePanel not triggered"},{"content":"The error I\u0026rsquo;m getting when setting up an OleDB connection to an Access database* via the Server Explorer in Visual Studio 2008 is:\nImage missing\n\u0026lsquo;Format of the initialization string does not conform to specification starting at index 0\u0026rsquo;. The screen doesn\u0026rsquo;t display the way it should be displayed, as you can see in the missing screenshot.\nThere is a possible fix at svenM\u0026rsquo;s blog (it\u0026rsquo;s about checking the existence of a key in the registry called \u0026lsquo;ProgID\u0026rsquo; and the default value, as you can read in this article), but this doesn\u0026rsquo;t seem to work for my situation.\nIt took me some time trying lots of \u0026lsquo;possible fixes\u0026rsquo; (like the registry change, attempts to (re-)install mdac, uninstalling and installing Visual Studio, and so on) . None of them helped. I even went through all four pages of this lengthy thread, but to no avail. The only thing I haven\u0026rsquo;t tried yet is the most rigorous solution: format the disk and start with a fresh install.\nI\u0026rsquo;m getting annoyed over here\u0026hellip;, if you have any tips: let me know.\nI won\u0026rsquo;t go in to whether an Access file is or is not a database ;). And although I generally wouldn\u0026rsquo;t consider Access as the database solution for an important business application, I do think it does have its pro\u0026rsquo;s in specific scenarios, like for a relative small web application. ","date":"27 March 2008","permalink":"https://www.rickvandenbosch.net/blog/error-adding-an-oledb-data-connection-to-visual-studio-server-explorer/","section":"Blog","summary":"\u003cp\u003eThe error I\u0026rsquo;m getting when setting up an OleDB connection to an Access database* via the Server Explorer in Visual Studio 2008 is:\u003c/p\u003e\n\u003cp\u003e\u003cspan class=\"missing-image\" role=\"img\" aria-label=\"Image missing\"\u003eImage missing\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003e\u0026lsquo;Format of the initialization string does not conform to specification starting at index 0\u0026rsquo;. The screen doesn\u0026rsquo;t display the way it should be displayed, as you can see in the missing screenshot.\u003c/p\u003e","title":"Error adding an OleDb Data Connection to Visual Studio Server Explorer"},{"content":"A week ago I had a nice page that was hosted in SharePoint and, among others, contained an updatepanel with a dropdownlist in it. Everything worked, and all was well. Because our testers had found some issues we had delivered two newer versions to our development environment. In the last version they found an issue that wasn\u0026rsquo;t there before: selecting a different value in the dropdown did not only update the updatepanel, but resulted in a complete postback. My first idea was: that\u0026rsquo;s an easy one, I\u0026rsquo;ll check the triggers. Boy, was I wrong\u0026hellip;\nA few hours later, we had everything working again. But rebuilding the entire usercontrol didn\u0026rsquo;t solve the issue, and neither did changeing all available settings for all controls ;). Weird thing was it did work when outside of a SharePoint environment. After some extensive searching, I found a post on Brian H. Madsen\u0026rsquo;s blog, called Using DropDownList with an UpdatePanel in MOSS 2007. As it turns out, SP1 introduces a bug for working with dropdownlists, making that the SelectedIndexChanged event isn\u0026rsquo;t captured by the update panel. Brian\u0026rsquo;s post contains the code below which, if placed in the page_load, solves this issue:\nif (this.Page.Form != null)\n{\nif (this.Page.Form.Attributes[“onsubmit”] == “return _spFormOnSubmitWrapper();”)\n{\nthis.Page.Form.Attributes[“onsubmit”] = “_spFormOnSubmitWrapper();”;\n}\n}\nScriptManager.RegisterStartupScript(this, this.GetType(), “UpdatePanelFixup”,\n“_spOriginalFormAction = document.forms[0].action;_spSuppressFormOnSubmitWrapper=true;”, true);\n","date":"21 March 2008","permalink":"https://www.rickvandenbosch.net/blog/dropdownlist-selectedindexchanged-doesnt-trigger-updatepanel-in-sharepoint-2007-sp1/","section":"Blog","summary":"\u003cp\u003eA week ago I had a nice page that was hosted in SharePoint and, among others, contained an updatepanel with a dropdownlist in it. Everything worked, and all was well. Because our testers had found some issues we had delivered two newer versions to our development environment. In the last version they found an issue that wasn\u0026rsquo;t there before: selecting a different value in the dropdown did not only update the updatepanel, but resulted in a complete postback. My first idea was: that\u0026rsquo;s an easy one, I\u0026rsquo;ll check the triggers. Boy, was I wrong\u0026hellip;\u003c/p\u003e","title":"DropDownList SelectedIndexChanged doesn’t trigger UpdatePanel in SharePoint 2007 SP1"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/modalpopupextender/","section":"Tags","summary":"","title":"ModalPopupExtender"},{"content":"As I said earlier, we didn\u0026rsquo;t test our solution to using the ModalPopupExtender in SharePoint in all situations. Today we made a start to do so. To indicate our successrate: we now use window.showModalDialog with some extra pages\u0026hellip;\nLets go through some of the problems we encountered.\nPlacing an UpdatePanel around the entire UserControl (with default settings) makes that the entire UserControl is posted back, even when it is a control inside a nested UpdatePanel that posts back. The ASP.NET controls have no problem with this, but the SharePoint InputFormTextBox set to RichText does. The toolbars are not rendered, and the entire HTML is shown. Setting ChildrenAsTriggers would disable this behaviour (it does with default ASP.NET controls), because in that case only the nested UpdatePanel is posted back. Unfortunately we didn\u0026rsquo;t get to test that. The SharePoint page layout doesn\u0026rsquo;t render properly when using the XHTML Transitional doctype. Probably nothing a redesign of the masterpage (and maybe some controls) can\u0026rsquo;t handle, but it seems you need time and budget for that. 😉 The background wasn\u0026rsquo;t always completely grayed out using the BackgroundCssClass. Sometimes a ribbon of say 10 pixels was shown normal, sometimes the entire background was displayed normal. And clickable! That\u0026rsquo;s not what we would like to use a modal popup for. Especially the last problem made us eventually switch back to an oldskool JavaScript solution, although we did mix it with some UpdatePanels. The Ajax modal popup sometimes did its job, but not all of the time. We couldn\u0026rsquo;t quite put our finger on it. When a solution doesn\u0026rsquo;t feel stable and there isn\u0026rsquo;t much time, you should / sometimes have to revert to proven technology. The problems we encountered are solvable, or at least I think so. We didn\u0026rsquo;t have time to prove they are. At least not this time\u0026hellip; 😉\n","date":"15 March 2008","permalink":"https://www.rickvandenbosch.net/blog/modalpopupextender-in-sharepoint-part-ii/","section":"Blog","summary":"\u003cp\u003eAs I \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2008/03/14/getting-the-modalpopupextender-to-work-in-sharepoint-2007.aspx\" target=\"_blank\"\u003esaid earlier\u003c/a\u003e, we didn\u0026rsquo;t test our solution to using the ModalPopupExtender in SharePoint in all situations. Today we made a start to do so. To indicate our successrate: we now use \u003ca href=\"https://msdn2.microsoft.com/en-us/library/ms536759(VS.85).aspx\" target=\"_blank\"\u003ewindow.showModalDialog\u003c/a\u003e with some extra pages\u0026hellip;\u003c/p\u003e","title":"ModalPopupExtender in SharePoint – part II"},{"content":"Getting the ModalPopupExtender from the Ajax Control Toolkit to work (decently) in SharePoint was not exactly a walk in the park. With a default SharePoint installation, the modal popup is partly positioned \u0026lsquo;outside\u0026rsquo; of the page (you only see the bottom right part of the popup in the top left corner of the browser). Postbacks are not executed or executed poorly and the page gets garbled up. A possible solution for the positioning of the popup is to set the X and Y property of the ModalPopupExtender. Downside is you never know (for sure) if the popup is positioned inside the visible part of the browser because of things like non-maximized browser, different resolutions and so on.\nToday we seem to have solved our issues with the ModalPopupExtender in SharePoint. We haven’t tested it in all scenario’s yet, but we’ll get to that. At this point everything looks the way it is supposed to. And it seems to work, too… ;).\nThe extra steps we took to make these two play together the way we wanted them to, besides the usual steps to make Ajax work in ASP.NET 2.0, are:\nInstall Windows SharePoint Services 3.0 Service Pack 1\nInstall The 2007 Microsoft Office Servers Service Pack 1\nAlter the masterpage: add a DOCTYPE tag (we used XHTML 1.0 Transitional)\nAlways show the modal popup from code (*)\nPut an updatepanel around everything inside the usercontrol (**)\nBecause of our setup with close-images that postback (because we have to clear controls and that sort of stuff) and more, we couldn’t use the TargetControlID property for the ModalPopupExtender. Well, we could, but that would result in the background not being displayed properly half the time ;). This can be solved by setting the TargetControlID to a dummy control (like a hidden one) and showing the popup from code.\n** We have a usercontrol with several usercontrols in it. This one usercontrol (the parent) was added to a page. The normal (postback) controls on the usercontrols didn’t work after one of the modal popups was shown. And I can image neither would any other \u0026rsquo;normal\u0026rsquo; controls on the page, but we didn\u0026rsquo;t encounter this scenario. The problem was the page would freeze with a message in the taskbar stating ‘The page is busy submitting data to the server’ directly after an Ajax postback. The controls that performed a \u0026rsquo;normal\u0026rsquo; postback did nothing: the serverside code just was not executed. We solved this by putting an updatepanel around everything inside the usercontrol. That way the normal controls would postback in an ajaxy way too, apparently solving the \u0026lsquo;The page is busy\u0026rsquo; message.\nWe\u0026rsquo;ll be testing this solution over the next few days. If any problems pop up, I\u0026rsquo;ll keep you posted.\n","date":"14 March 2008","permalink":"https://www.rickvandenbosch.net/blog/getting-the-modalpopupextender-to-work-in-sharepoint-2007/","section":"Blog","summary":"\u003cp\u003eGetting the ModalPopupExtender from the Ajax Control Toolkit to work (decently) in SharePoint was not exactly a walk in the park. With a default SharePoint installation, the modal popup is partly positioned \u0026lsquo;outside\u0026rsquo; of the page (you only see the bottom right part of the popup in the top left corner of the browser). Postbacks are not executed or executed poorly and the page gets garbled up. A possible solution for the positioning of the popup is to set the X and Y property of the ModalPopupExtender. Downside is you never know (for sure) if the popup is positioned inside the visible part of the browser because of things like non-maximized browser, different resolutions and so on.\u003cbr\u003e\nToday we seem to have solved our issues with the ModalPopupExtender in SharePoint. We haven’t tested it in all scenario’s yet, but we’ll get to that. At this point everything looks the way it is supposed to. And it seems to work, too… ;).\u003c/p\u003e","title":"Getting the ModalPopupExtender to work in SharePoint 2007"},{"content":"It is now possible to get updates from this blog through e-mail (nice feature, feedburner{.}). Updates will be sent once a day, but only when new items are available.\nCurious? Subscribe here!\n","date":"12 March 2008","permalink":"https://www.rickvandenbosch.net/blog/new-feature-subscription-by-e-mail/","section":"Blog","summary":"\u003cp\u003eIt is now possible to get updates from this blog through e-mail (nice feature, \u003ca href=\"https://www.feedburner.com/\" target=\"_blank\" rel=\"noreferrer\"\u003efeedburner\u003c/a\u003e{.}). Updates will be sent once a day, but only when new items are available.\u003c/p\u003e\n\u003cp\u003eCurious? Subscribe \u003cA class=\"\" href=\"https://www.feedburner.com/fb/a/emailverifySubmit?feedId=1375367\u0026loc=en_US\" target=\"_blank\"\u003ehere\u003c/A\u003e!\u003c/p\u003e","title":"New feature: subscription by e-mail"},{"content":"One of my colleagues pointed out the new Fine-grained password policy feature in Windows Server 2008. As you can see in this post at The Sean Blog, some values have to be entered in the I8 format, which isn\u0026rsquo;t very user friendly. Because of that, he asked me if I could whip up a tool that converts days, hours, minutes and seconds to the I8 format. I quickly put together this small tool for him. It hasn\u0026rsquo;t been tested extensively, but I think it might be of some use to some of you.\nFor example, I used longs to store the info. When wanting to calculate huge values, this won\u0026rsquo;t work of course. This could be improved by using the multipliers divided by for instance 10,000,000 and add the appropriate amount of zeros (7) to the string after calculation, so the numerical value stays a lot smaller. Still, I think it does what it should do at this point. You can find the sourcecode [over here][2], or if you would like te change anything: be my guest. Let me know if you find bugs or add cool features: I would like to know.\nInfo taken from Technet:\nWhen you use the ldifde command to create PSOs, you must enter the values of these attributes in I8 format, which stores time in the intervals of -100 nanoseconds. (Schema: attributeSyntax = 2.5.5.16 (I8).) Windows Server 2003 Default Domain Policy employs this exact time unit for its corresponding time-related attributes. To set these attributes to appropriate values, convert time values in minutes, hours, or days to time values in the intervals of 100 nanoseconds, and then precede the resultant values with a negative sign.\n**Links\n** Tool: https://www.rickvandenbosch.net/downloads/I8Converter.zip\nSource: \u0026lt;https://www.rickvandenbosch.net/downloads/I8Converter Sourcecode.zip\u0026gt;\n**Update\n** Because of a hosting shift, the tool is no longer available from the above locations. When interested: [drop me a line][3]. I\u0026rsquo;ll see if I still have the app/sourcecode floating around somewhere.\n[2]: https://www.rickvandenbosch.net/downloads/I8Converter sourcecode.zip [3]: /blogs/rick/contact.aspx\n","date":"9 March 2008","permalink":"https://www.rickvandenbosch.net/blog/i8-converter-download-sourcecode-available/","section":"Blog","summary":"\u003cp\u003eOne of my colleagues pointed out the new Fine-grained password policy feature in Windows Server 2008. As you can see in \u003ca target=\"_blank\" href=\"https://blogs.technet.com/seanearp/archive/2007/10/06/windows-server-2008-fine-grained-password-policy-walkthrough.aspx\"\u003ethis post\u003c/a\u003e at The Sean Blog, some values have to be entered in the I8 format, which isn\u0026rsquo;t very user friendly. Because of that, he asked me if I could whip up a tool that converts days, hours, minutes and seconds to the I8 format. I quickly put together \u003ca href=\"https://www.rickvandenbosch.net/downloads/I8Converter.zip\" target=\"_blank\" rel=\"noreferrer\"\u003ethis small tool\u003c/a\u003e for him. It hasn\u0026rsquo;t been tested extensively, but I think it might be of some use to some of you.\u003cbr\u003e\nFor example, I used longs to store the info. When wanting to calculate huge values, this won\u0026rsquo;t work of course. This could be improved by using the multipliers divided by for instance 10,000,000 and add the appropriate amount of zeros (7) to the string after calculation, so the numerical value stays a lot smaller. Still, I think it does what it should do at this point. You can find the sourcecode [over here][2], or if you would like te change anything: be my guest. Let me know if you find bugs or add cool features: I would like to know.\u003c/p\u003e","title":"I8 converter – Download (sourcecode available)"},{"content":"As a reaction to this article at Peter Ritchie\u0026rsquo;s MVP Blog, I thought I\u0026rsquo;d give my two cents on having a single exit point for methods. Here we go\u0026hellip;\nWhen writing code, I always create only one exit point except for the occasional throwing of an exception. Most important for me is to always know where your code (really) stops. In case of long and complex methods there\u0026rsquo;s a chance you\u0026rsquo;re going to miss a return statement when scanning through a method. That way you could end up studying code not even applicable to the situation, while missing the real point. I do think there is no real reason to hold on to creating methods with a single exit point other than personal favoritism. This feels the same like using curly brackets with an if-statement that is followed by only one statement. I always use curly brackets, but there are lots of developers who don\u0026rsquo;t.\nTo answer the questions at the end of Peter\u0026rsquo;s post: Yes, I do generally follow the Single Point of Exit From Methods Principle, and I do ignore it for exceptions.\nBTW: the SESE version of the first method in Peter\u0026rsquo;s post could be a little less (cyclomatic) complex:\npublic static int CountCommas(string text)\n{\nint result = 0;\nif (!string.IsNullOrEmpty(text))\n{\nint index = text.IndexOf(\u0026rsquo;,\u0026rsquo;, 0);\nwhile (index \u0026gt; 0)\n{\nresult++;\nindex = text.IndexOf(\u0026rsquo;,\u0026rsquo;, index);\n}\n}\nreturn result;\n}\n","date":"8 March 2008","permalink":"https://www.rickvandenbosch.net/blog/single-entry-single-exit-my-2-cents/","section":"Blog","summary":"\u003cp\u003eAs a reaction to \u003ca href=\"https://msmvps.com/blogs/peterritchie/archive/2008/03/07/single-entry-single-exit-should-it-still-be-applicable-in-object-oriented-languages.aspx\" target=\"_blank\"\u003ethis article\u003c/a\u003e at \u003ca href=\"https://msmvps.com/blogs/peterritchie/default.aspx\" target=\"_blank\"\u003ePeter Ritchie\u0026rsquo;s MVP Blog\u003c/a\u003e, I thought I\u0026rsquo;d give my two cents on having a single exit point for methods. Here we go\u0026hellip;\u003c/p\u003e\n\u003cp\u003eWhen writing code, I always create only one exit point except for the occasional throwing of an exception. Most important for me is to always know where your code (really) stops. In case of long and complex methods there\u0026rsquo;s a chance you\u0026rsquo;re going to miss a return statement when scanning through a method. That way you could end up studying code not even applicable to the situation, while missing the real point. I do think there is no real reason to hold on to creating methods with a single exit point other than personal favoritism. This feels the same like using curly brackets with an if-statement that is followed by only one statement. I always use curly brackets, but there are lots of developers who don\u0026rsquo;t.\u003c/p\u003e","title":"(Single-Entry, ) Single-Exit, my 2 cents"},{"content":"One of the most annoying things in Visual Studio (to me) was the fact that complete solutions (solution folders, projects, regulare folder) would be expanded upon opening. And with big solutions, that isn\u0026rsquo;t too much fun. There are macros available online, but the ones i found were pretty slow. This is only one of the things that the PowerCommands for Visual Studio 2008 solves for you. But there is more. Much more!\nA quick top five of my favorite functions:\n\u0026lt;DIV\u0026gt; Collapse projects \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Copy \u0026amp; paste references \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Open Command Prompt (at the location of the file you execute it on) \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Remove and Sort Usings (for all classes in a C# project) \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Close All (on a tab) \u0026lt;/DIV\u0026gt; To get the PowerCommands for Visual Studio 2008, or to learn more about all the features in there, visit them over here{.}.\nBy the way: this fairly new website (the Visual Studio gallery{.}) was released quite silently by Microsoft. It contains lots of products that aid developers while working in Visual Studio, together with some Extensibility stuff. Have a look over there! Another tip: the VSX team blog{.}. It might be a nice one to keep track of new releases of new Extensibility products. There\u0026rsquo;s a post{.} over there about the PowerCommands, too.\nEnjoy!\n","date":"8 March 2008","permalink":"https://www.rickvandenbosch.net/blog/now-available-powercommands-for-visual-studio-2008/","section":"Blog","summary":"\u003cp\u003eOne of the most annoying things in Visual Studio (to me) was the fact that complete solutions (solution folders, projects, regulare folder)  would be expanded upon opening. And with big solutions, that isn\u0026rsquo;t too much fun. There are macros available online, but the ones i found were pretty slow. This is only one of the things that the PowerCommands for Visual Studio 2008 solves for you. But there is more. Much more!\u003c/p\u003e","title":"Now available: PowerCommands for Visual Studio 2008"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/vsx/","section":"Tags","summary":"","title":"VSX"},{"content":"This weekend we got back from a skiing trip we went on with the school my girlfriend works at. We had a great time! The kids were great, and so were the teachers and the Huski people who were there to teach the kids how to ski and snowboard. If they need an extra pair of hands next year, I hope they\u0026rsquo;ll consider me: I\u0026rsquo;d be happy to join them.\nImage missing\nI ordered my new phone{.} this weekend. I arrived home 10 minutes ago, and the postman had beaten me to it: there was a note saying they will try delivering my phone again tomorrow. I hope they\u0026rsquo;ll come when I\u0026rsquo;m at home, so I can go ahead and play with it. Boys will be boys, right? And then there\u0026rsquo;s the combination boys \u0026amp; toys\u0026hellip;. 😉\nMy \u0026lsquo;old\u0026rsquo; phone is going to my girlfriend, because some m*\\**erf***ers broke in and stole lots of stuff, like our laptop and her PDA phone. I can\u0026rsquo;t understand why people do such a thing, why they just take something of someone else. I guess some people don\u0026rsquo;t have a bit of decency in them\u0026hellip; ( \u0026lt;/angry mode\u0026gt; )\nWe will be looking for a new laptop, any tips are welcome. And, of course, I\u0026rsquo;m open for buzzing / WOMM{.} 😉\n","date":"5 March 2008","permalink":"https://www.rickvandenbosch.net/blog/short-personal-update-march-2008/","section":"Blog","summary":"\u003cp\u003eThis weekend we got back from a skiing trip we went on with the school my girlfriend works at. We had a great time! The kids were great, and so were the teachers and the Huski people who were there to teach the kids how to ski and snowboard. If they need an extra pair of hands next year, I hope they\u0026rsquo;ll consider me: I\u0026rsquo;d be happy to join them.\u003c/p\u003e","title":"Short personal update – March 2008"},{"content":"I won\u0026rsquo;t be blogging for the next week. Tomorrow evening, we are going on a ski vacation! I was invited to join the skicamp my girlfriend is going on with her work. A nice opportunity to brush up my skiing skills. Let\u0026rsquo;s hope we\u0026rsquo;ll come back in one piece, but I\u0026rsquo;m counting on it 😉\nI\u0026rsquo;ll catch you guys later.\n","date":"24 February 2008","permalink":"https://www.rickvandenbosch.net/blog/upcoming-holiday/","section":"Blog","summary":"\u003cp\u003eI won\u0026rsquo;t be blogging for the next week. Tomorrow evening, we are going on a ski vacation! I was invited to join the skicamp my girlfriend is going on with her work. A nice opportunity to brush up my skiing skills. Let\u0026rsquo;s hope we\u0026rsquo;ll come back in one piece, but I\u0026rsquo;m counting on it 😉\u003c/p\u003e","title":"Upcoming: holiday!"},{"content":"Just a quick post: Windows Live SkyDrive is now available. It left the beta stage yesterday. You can now store 5Gb of data online, choose who has access to each folder you create and more. There is a maximum filesize of 50Mb.\nInterested? Have a look at https://skydrive.live.com/\n","date":"22 February 2008","permalink":"https://www.rickvandenbosch.net/blog/windows-live-skydrive-now-available/","section":"Blog","summary":"\u003cp\u003eJust a quick post: Windows Live SkyDrive is now available. It left the beta stage yesterday. You can now store 5Gb of data online, choose who has access to each folder you create and more. There is a maximum filesize of 50Mb.\u003c/p\u003e","title":"Windows Live SkyDrive now available"},{"content":"In a quick AJAX demo I had to create today, I ran into a (somewhat cryptic) PageRequestManagerServerErrorException. I needed a simple form of the Cascading Dropdown{.}, one that doesn\u0026rsquo;t use a (web)service for its data, but gets it from a simple method. Here\u0026rsquo;s the setup, and the cause\u0026hellip;\nLets start with the exact error message:\nMicrosoft JScript runtime error: Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 500\nI needed 2 DropDownLists working together to enable users to first select a month, and then select a day. Of course, you want the second DropDownList to only display days available for the chosen month. Because of that I had two dropdownlists in an updatepanel, and set the first one to AutoPostback so it would trigger the updatepanel. The first one had items set to something like this: , January, February, March, and so on. The second one got its items from a method, based on the selected value in the first. This worked like a charm, and all was well. When I wanted to check every scenario, I found that selecting didn\u0026rsquo;t clear DropDownList2 like I coded it to, but it threw the Exception. What caused this?\nWhen setting items throught the IDE, this HTML is generated:\n\u0026laquo;/FONT\u0026gt;asp:ListItem\u0026gt;\u0026laquo;/FONT\u0026gt;select item\u0026gt;\u0026lt;/asp:ListItem\u0026gt;\u0026laquo;/FONT\u0026gt;asp:ListItem\u0026gt;First item\u0026lt;/asp:ListItem\u0026gt;\u0026laquo;/FONT\u0026gt;asp:ListItem\u0026gt;Second one\u0026lt;/asp:ListItem\u0026gt;Because the value property for the items wasn\u0026rsquo;t set explicitly, it is generated (or should we say substracted?) from the information that was entered. Therefore, the Value property of the first item was \u0026lsquo;\u0026rsquo;. I can imagine how something like that can mess up a JavaScript environment. 😉 I opened up the items for the first DropDownList, and set the value properties for each item explicitly (although setting it to a decent value for the first item did the trick). That resulted in this HTML:\n\u0026laquo;/FONT\u0026gt;asp:ListItem Value=”0″\u0026gt;\u0026laquo;/FONT\u0026gt;select item\u0026gt;\u0026lt;/asp:ListItem\u0026gt;\u0026laquo;/FONT\u0026gt;asp:ListItem Value=”1″\u0026gt;First item\u0026lt;/asp:ListItem\u0026gt;\u0026laquo;/FONT\u0026gt;asp:ListItem Value=”2″\u0026gt;Second one\u0026lt;/asp:ListItem\u0026gt;Notice the Value attribute in the ListItem tag? That\u0026rsquo;s the one that will keep your project from throwing a PageRequestManagerServerErrorException.\n","date":"20 February 2008","permalink":"https://www.rickvandenbosch.net/blog/pagerequestmanagerservererrorexception-status-code-500/","section":"Blog","summary":"\u003cp\u003eIn a quick AJAX demo I had to create today, I ran into a (somewhat cryptic) PageRequestManagerServerErrorException. I needed a simple form of the \u003ca href=\"https://www.asp.net/AJAX/AjaxControlToolkit/Samples/CascadingDropDown/CascadingDropDown.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eCascading Dropdown\u003c/a\u003e{.}, one that doesn\u0026rsquo;t use a (web)service for its data, but gets it from a simple method. Here\u0026rsquo;s the setup, and the cause\u0026hellip;\u003c/p\u003e","title":"PageRequestManagerServerErrorException (status code 500)"},{"content":"With the official release of Visual Studio 2008 coming closer and its release on MSDN last november, there are more and more people asking what the impact of migrating from VS2005 to VS2008 will be and if it will have as big an impact as switching from VS2003 to VS2005 had. The answer is pretty simple: no it won\u0026rsquo;t. Let\u0026rsquo;s see why, and what impact it will have.\nVS2003 \u0026gt; VS2005\nVS2003 was the development environment for developing applications based on version 1.1 of the .NET framework. With this came a CLR specific to that version of the .NET framework (version 1.1.4322). When Visual Studio 2005 was released, the .NET framework 2.0 came with it. Because of several architectural changes, like for instance Generics, this version of the framework got it\u0026rsquo;s own CLR too (version 2.0.50727.42). Knowing this, it is logical that taking an application that was built for version 1.1 of the framework (and CLR) would have to be modified to be able to run on the new version 2.0.\nVS2005 \u0026gt; VS2008\nVS2008 is the first member of the Visual Studio family that enables multi-targeting{.}. You can have an application target the 2.0, 3.0 or 3.5 version of the .NET framework. That is pretty different from VS2002 (.NET 1.0) and VS2003 (.NET 1.1) that were bound to their specific versions of the .NET framework. The reason it can do that is the same reason switching from VS2005 to VS2008 will not be too hard: these versions of the .NET framework all use the same version of the CLR (version 2.0.50727.42). Although version 3.5 installs Service Pack 1 for .NET 2.0, which adds some methods and properties required for features like LINQ, these changes do not affect applications written for version 2.0 of the .NET Framework.\nImpact\nSwitching to Visual Studio 2008 will not require you to recode parts of your application, but it does have some implications to switch. VS2008 changes your .sln file, rendering it unreadable for VS2005. The projectfiles however are not touched, or at least not in such a way that VS2005 won\u0026rsquo;t understand them.***** The odd one out here is the Web Application Project, which might give some trouble in a multi-VS-development-environment. Have a look at this post{.} at Steven Harman\u0026rsquo;s blog to see how to work around that.\nLanguage features\nWorking on a .NET 2.0 project from VS2008 does give you quite some extras, next to the fact that the IDE itself has been greatly improved.****** A nice example is from someone who posted this question on the MSDN forums:\n(..) while creating properties when I used the code-snippet (\u0026hellip;), to my surprise VS 2008 created automatic property. (\u0026hellip;) I double-checked the target version by opening project properties and it still showed .NET Framework 2.0. I used this new class in the web page, and it worked fine. How is this possible? Is there a bug in VS 2008 and this code will fail if deployed in production where only .NET 2.0 is available, or did I do something wrong?\nThe thing here is that automatic properties are not so much a feature of the .NET framework, but of the compiler. So go switch to VS2008, and enjoy.\nHappy developing!\n*** TIP**: If you need to edit a .NET 2.0 solution from both VS2008 and VS2005, create two different solutions, one for both. This way, you will be able to open the solution from both versions of Visual Studio. Do be advised! When working in VS2008, you might be tempted to use new syntax that won\u0026rsquo;t work in VS2005. 😉\n****** Found a cool new feature or a nice improvement in Visual Studio 2008? Add it to my list{.} @ Listas!\n","date":"9 February 2008","permalink":"https://www.rickvandenbosch.net/blog/net-framework-versioning-or-the-impact-of-switching-from-visual-studio-2005-to-2008/","section":"Blog","summary":"\u003cp\u003eWith the official release of Visual Studio 2008 coming closer and its release on MSDN last november, there are more and more people asking what the impact of migrating from VS2005 to VS2008 will be and if it will have as big an impact as switching from VS2003 to VS2005 had. The answer is pretty simple: no it won\u0026rsquo;t. Let\u0026rsquo;s see why, and what impact it \u003cem\u003ewill\u003c/em\u003e have.\u003c/p\u003e","title":".NET Framework versioning, or The impact of switching from Visual Studio 2005 to 2008"},{"content":"Until the Zune is available in Europe (when will that be, if ever\u0026hellip;), I\u0026rsquo;m using an iPod. To be honest, I\u0026rsquo;m pretty satisfied with the product although iTunes still doesn\u0026rsquo;t feel like a solid piece of software\u0026hellip; (understatement anyone?)\nAfter lots of hours playtime the original earphones of my iPod died, or at least the right one did. I went through the Apple store and found the \u0026lsquo;original\u0026rsquo; earphones over there. Because of the annoying squeaky sound the cord makes in the inside of the lower part of the earphone, I wanted to try different ones. I ended up choosing the newer (and more expensive!) Apple iPod in-ear headphones.\nSome of the features:\n– nicer, sleeker design\n– no more squeaking\n– feels better in the ears\n– lousy sound quality!\nAfter having used the new earphones for 3 minutes, I put them back in the box they came in and I haven\u0026rsquo;t touched them since. It might be me, but the sound that came from those earphones didn\u0026rsquo;t even resemble the music they were supposed to be playing. I tried virtually every equalizer setting on my iPod, but none of them could make it better. For now I\u0026rsquo;ve switched back to old school earphones that came with my discman (!) years ago. I guess I\u0026rsquo;ll be selecting new ones, again.\n","date":"5 February 2008","permalink":"https://www.rickvandenbosch.net/blog/earphones-gone-bad/","section":"Blog","summary":"\u003cp\u003eUntil the Zune is available in Europe (\u003ca href=\"https://www.google.com/search?hl=en\u0026amp;q=zune\u0026#43;europe\" target=\"_blank\" rel=\"noreferrer\"\u003ewhen will that be\u003c/a\u003e, if ever\u0026hellip;), I\u0026rsquo;m using an iPod. To be honest, I\u0026rsquo;m pretty satisfied with the product although iTunes still doesn\u0026rsquo;t feel like a solid piece of software\u0026hellip; \u003cFONT size=\"1\"\u003e(understatement anyone?)\u003c/FONT\u003e\u003c/p\u003e","title":"Earphones gone bad"},{"content":"There are several steps to creating a custom web service to be hosted in SharePoint. The MSDN library{.} has a walkthrough on creating a custom web service{.}. After having followed this walkthrough thoroughly, I though my web service was good to go. Unfortunately all I saw was an error: “Could not load type \u0026lsquo;ThisAndThat\u0026rsquo; from assembly \u0026lsquo;SoAndSo\u0026rsquo;”. Just as I was about to search for an answer somewhere online, I remembered that the MSDN library features the Community content for little over a year now{.} (hooray!).\nAt the bottom of the walkthrough were some community additions to this specific walkthrough. Some have been incorporated in the main article, others are there to be found for guys (and girls!) like you and I. One of them exactly described my problem. In that same community content item another user had added this comment:\nHI – I resolved this issue with a VB.net service by prefixing the class name in the .asmx file with the assembly namespace\nAnd that was it! The WebService works like a charm, hosted in SharePoint. (hooray!)\nSo there you have it: that\u0026rsquo;s the power of [wikipedia:web 2.0] for you. Users benefit from the fact that they are now able to add to the otherwise pretty static information in something like the MSDN library. 😉\n","date":"1 February 2008","permalink":"https://www.rickvandenbosch.net/blog/hooray-x-2-for-msdn-library-community-content/","section":"Blog","summary":"\u003cp\u003eThere are several steps to creating a custom web service to be hosted in SharePoint. The \u003ca href=\"https://msdn2.microsoft.com/en-us/library\" target=\"_blank\" rel=\"noreferrer\"\u003eMSDN library\u003c/a\u003e{.} has a walkthrough on \u003ca href=\"https://msdn2.microsoft.com/en-us/library/ms464040.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ecreating a custom web service\u003c/a\u003e{.}. After having followed this walkthrough thoroughly, I though my web service was good to go. Unfortunately all I saw was an error: “Could not load type \u0026lsquo;ThisAndThat\u0026rsquo; from assembly \u0026lsquo;SoAndSo\u0026rsquo;”. Just as I was about to search for an answer somewhere online, I remembered that the MSDN library features the Community content for \u003ca href=\"https://blogs.msdn.com/msdnwiki/archive/2007/12/10/community-content-is-1-year-old.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003elittle over a year now\u003c/a\u003e{.} (hooray!).\u003c/p\u003e","title":"Hooray (x 2) for MSDN library Community content"},{"content":"So that\u0026rsquo;s part 1: www.rickvandenbosch.net is now online. There\u0026rsquo;s nothing to be found over there yet, but the domain has been delivered. Oh, and there\u0026rsquo;s an easy redirect to my blog, so that goes back here ;). From now on, you can also use rickvandenbosch.net/blog as the url to find my blog. I\u0026rsquo;m currently talking to the bloggingabout.net admin to mirror my content over there, for now it\u0026rsquo;s just a redirect. Keep posted for more updates on the new domain.\n","date":"24 January 2008","permalink":"https://www.rickvandenbosch.net/blog/rick-van-den-bosch-net-part-1/","section":"Blog","summary":"\u003cp\u003eSo that\u0026rsquo;s part 1: \u003ca href=\"https://www.rickvandenbosch.net/\" target=\"_blank\" rel=\"noreferrer\"\u003ewww.rickvandenbosch.net\u003c/a\u003e is now online. There\u0026rsquo;s nothing to be found over there yet, but the domain has been delivered. Oh, and there\u0026rsquo;s an easy redirect to my blog, so that goes back here ;). From now on, you can also use rickvandenbosch.net/blog as the url to find my blog. I\u0026rsquo;m currently talking to the bloggingabout.net admin to mirror my content over there, for now it\u0026rsquo;s just a redirect. Keep posted for more updates on the new domain.\u003c/p\u003e","title":"rick van den bosch .net – part 1"},{"content":"As stated on ScottGu\u0026rsquo;s blog{.} in his latest post{.}, the .NET Framework Library Source Code is now available. A detailed blog post about the steps to follow to enable .NET Framework source access in Visual Studio 2008 can be found at Shawn Burke\u0026rsquo;s blog in this post{.}.\nTaken from Scott\u0026rsquo;s post:\nOnce you follow the configuration steps in Shawn’s post above, you’ll be able to dynamically load the debug symbols for .NET Framework libraries and step into the source code. VS 2008 will download both the symbols and source files on demand from the MSDN reference servers as you debug throughout the framework code.\n","date":"17 January 2008","permalink":"https://www.rickvandenbosch.net/blog/net-framework-source-code-now-available/","section":"Blog","summary":"\u003cp\u003eAs stated on \u003ca href=\"https://weblogs.asp.net/scottgu\" target=\"_blank\" rel=\"noreferrer\"\u003eScottGu\u0026rsquo;s blog\u003c/a\u003e{.} in \u003ca href=\"https://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ehis latest post\u003c/a\u003e{.}, the .NET Framework Library Source Code is now available. A detailed blog post about the steps to follow to enable .NET Framework source access in Visual Studio 2008 can be found at Shawn Burke\u0026rsquo;s blog \u003ca href=\"https://blogs.msdn.com/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ein this post\u003c/a\u003e{.}.\u003c/p\u003e","title":".NET framework source code now available"},{"content":"The last weeks have been filled with holidays and introductional days at my new employer{.}. Because of that, I haven\u0026rsquo;t had the time to realy dive into Visual Studio 2008, although I have played around with it since the RTM version was available. Since this week I\u0026rsquo;ve been writing some serious code in VS2008 for my new personal site (more about this later!). I can only agree with what Pieter de Bruin said in his post about the new line of developer tools and additions: “If you are building .NET 2.0 applications, you really should take a look at all of the above”.\nI\u0026rsquo;m already loving working with VS 2008. There have been numerous \u0026lsquo;big\u0026rsquo; additions and changes which make a developers life so much easier. But how about all the little ones? The ability to run a unittest from the contextmenu of the code editor, the \u0026lsquo;remove unused usings\u0026rsquo; possibility (finally!), the enhanced properties form for project properties and so on. All those changes are great! I\u0026rsquo;m curious what you think are the best additions/changes in Visual Studio 2008. Care to share? Add your favorite at my \u0026lsquo;Best Visual Studio 2008 enhancements{.}\u0026rsquo; list at Listas{.}.\n","date":"10 January 2008","permalink":"https://www.rickvandenbosch.net/blog/finally-getting-some-coding-done/","section":"Blog","summary":"\u003cp\u003eThe last weeks have been filled with holidays and introductional days at \u003ca href=\"https://www.avanade.nl/\" target=\"_blank\" rel=\"noreferrer\"\u003emy new employer\u003c/a\u003e{.}. Because of that, I haven\u0026rsquo;t had the time to realy dive into Visual Studio 2008, although I have played around with it since the RTM version was available. Since this week I\u0026rsquo;ve been writing some serious code in VS2008 for my new personal site (more about this later!). I can only agree with what \u003cA class=\"\" href=\"https://www.pieterdebruin.net/\" target=\"_blank\"\u003ePieter de Bruin\u003c/A\u003e said in his post about the new line of developer tools and additions: “If you are building .NET 2.0 applications, you really should take a look at all of the above”.\u003c/p\u003e","title":"Finally getting some coding done"},{"content":"Dennis already blogged about it: we had some problems with the availability of BloggingAbout since last night. The error was fixed this afternoon, so everything should be back to normal. If you\u0026rsquo;re experiencing any difficulties, please let me know through the contact form, or mail me at rick.van.den.bosch[at]bloggingabout.net.\n","date":"9 January 2008","permalink":"https://www.rickvandenbosch.net/blog/bloggingabout-were-back/","section":"Blog","summary":"\u003cp\u003eDennis already \u003ca href=\"https://bloggingabout.net/blogs/dennis/archive/2008/01/09/problems-with-server-solved.aspx\" target=\"_blank\"\u003eblogged about it\u003c/a\u003e: we had some problems with the availability of BloggingAbout since last night. The error was fixed this afternoon, so everything should be back to normal. If you\u0026rsquo;re experiencing any difficulties, please let me know through the \u003ca href=\"https://bloggingabout.net/blogs/rick/contact.aspx\" target=\"_blank\"\u003econtact form\u003c/a\u003e, or mail me at \u003ca href=\"mailto:rick.van.den.bosch@bloggingabout.net\"\u003erick.van.den.bosch[at]bloggingabout.net\u003c/a\u003e.\u003c/p\u003e","title":"BloggingAbout: we’re back"},{"content":"Today was the first of two introduction days at Avanade{.}. Maybe you missed it, but I started there today{.}. And that\u0026rsquo;s why I\u0026rsquo;m writing this blogpost from a hotel in Almere, using my new Avanade laptop. 😉\nI\u0026rsquo;m sure there will be lots of stuff to blog about, so stay tuned for more\u0026hellip;\n","date":"2 January 2008","permalink":"https://www.rickvandenbosch.net/blog/blogging-almere/","section":"Blog","summary":"\u003cp\u003eToday was the first of two introduction days at \u003ca href=\"https://www.avanade.nl/\" target=\"_blank\" rel=\"noreferrer\"\u003eAvanade\u003c/a\u003e{.}. Maybe you missed it, but \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2007/11/14/010108-a-new-challenge.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eI started there today\u003c/a\u003e{.}. And that\u0026rsquo;s why I\u0026rsquo;m writing this blogpost from a hotel in Almere, using my new Avanade laptop. 😉\u003c/p\u003e","title":"Blogging @ Almere"},{"content":"All the best for the year 2008!\nI hope we will be hearing/reading a lot of each other this year 😉\n","date":"1 January 2008","permalink":"https://www.rickvandenbosch.net/blog/best-wishes/","section":"Blog","summary":"\u003cp\u003eAll the best for the year 2008!\u003cbr\u003e\nI hope we will be hearing/reading a lot of each other this year 😉\u003c/p\u003e","title":"Best wishes"},{"content":"I\u0026rsquo;m thinking of hosting a blog myself. Most important reason would be that bloggingabout.net doesn\u0026rsquo;t allow some stuff like scripts, embedding flash and links to things like the \u0026lsquo;connect with me\u0026rsquo; button and so on. Which is completely understandable by the way. What I\u0026rsquo;m not sure about is which software to use. Do you guys have any tips on which blogging software to use? Or maybe even on if I should or shouldn\u0026rsquo;t host it for myself? If you do, let me know.\nTechnorati tags: blog, software, blogging ","date":"19 December 2007","permalink":"https://www.rickvandenbosch.net/blog/which-blog-software-to-use/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;m thinking of hosting a blog myself. Most important reason would be that bloggingabout.net doesn\u0026rsquo;t allow some stuff like scripts, embedding flash and links to things like the \u003ca href=\"https://www.gowindowslive.com/Messenger/Button/Default.aspx\" target=\"_blank\"\u003e\u0026lsquo;connect with me\u0026rsquo; button\u003c/a\u003e and so on. Which is completely understandable by the way. What I\u0026rsquo;m not sure about is which software to use. Do you guys have any tips on which blogging software to use? Or maybe even on if I should or shouldn\u0026rsquo;t host it for myself? If you do, let me know.\u003c/p\u003e","title":"Which blog software to use …"},{"content":"A Dutch web site, made in SharePoint, uses a specific ActiveX.\nOnly the name of that control is not really specific:\nImage missing\nThe MSDN forums haven\u0026rsquo;t been available the last couple of hours.\nThe message isn\u0026rsquo;t so pretty:\nImage missing\nTechnorati tags: error, funny ","date":"12 December 2007","permalink":"https://www.rickvandenbosch.net/blog/two-more-weird-messages-mess-ups/","section":"Blog","summary":"\u003cp\u003eA Dutch web site, made in SharePoint, uses a specific ActiveX.\u003cbr\u003e\nOnly the name of that control is not really specific:\u003cbr\u003e\n\u003cspan class=\"missing-image\" role=\"img\" aria-label=\"Image missing\"\u003eImage missing\u003c/span\u003e\u003c/p\u003e\n\u003chr\u003e\n\u003cp\u003eThe MSDN forums haven\u0026rsquo;t been available the last couple of hours.\u003cbr\u003e\nThe message isn\u0026rsquo;t so pretty:\u003cbr\u003e\n\u003cspan class=\"missing-image\" role=\"img\" aria-label=\"Image missing\"\u003eImage missing\u003c/span\u003e\u003c/p\u003e","title":"Two more weird messages / mess-ups …"},{"content":"Next to the message in the subject, one of the symptoms we encountered is that although the solution contains some test projects the \u0026lsquo;Create private accessor\u0026rsquo; menu has disappeared. Also, selecting \u0026lsquo;Create unit tests\u0026hellip;\u0026rsquo; produces an error. And when editing a testrun config and selecting the \u0026lsquo;Code coverage\u0026rsquo; option, the settings dialog simply closes, without any message.\nAll these (and probably more) symptoms can occur because of a corrupt solution file. In our case the nested projects section was corrupted. Chances are this is because of some project or solution folder not being removed the way it should have been. Anyway, I tried fixing the solution file by hand but because of too many projects and solution folders this wasn\u0026rsquo;t the way to go. Those GUIDs don\u0026rsquo;t make a file very readable\u0026hellip; I made a new solution file, containing the same solution folder structure, and added the existing projects. I overwrote the existing solution file, and that was that. So when you\u0026rsquo;re experiencing any or all of the above symptoms, try building up a new solution file.\nHope this helps.\nTechnorati tags: Visual Studio, error, .net, solution ","date":"6 December 2007","permalink":"https://www.rickvandenbosch.net/blog/some-of-the-properties-associated-with-the-solution-could-not-be-read/","section":"Blog","summary":"\u003cp\u003eNext to the message in the subject, one of the symptoms we encountered is that although the solution contains some test projects the \u0026lsquo;Create private accessor\u0026rsquo; menu has disappeared. Also, selecting \u0026lsquo;Create unit tests\u0026hellip;\u0026rsquo; produces an error. And when editing a testrun config and selecting the \u0026lsquo;Code coverage\u0026rsquo; option, the settings dialog simply closes, without any message.\u003c/p\u003e","title":"“Some of the properties associated with the solution could not be read”"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/methodology/","section":"Tags","summary":"","title":"Methodology"},{"content":"Image missing\nA [wikipedia:RUP] project consists of 4 different phases. The elaboration phase (the second phase in the RUP project lifecycle) is normally done with a small team. One of the important reasons for this is that you want to define the basic form of your architecture. This means you think about concepts, elaborate on them, develop proof of concepts and select the ones that work best for your specific project.\nIf there is one thing you can not use (early) in an elaboration phase of a project, it\u0026rsquo;s having too many team members. There\u0026rsquo;s probably not enough work to go round. Because of that the members who do not or can not contribute to defining the architecture or developing the proof of concepts will eventually end up being assigned production (or construction) tasks.\nThat\u0026rsquo;s where things go wrong: in an elaboration phase the architecture is designed and takes its basic form, but in construction the architecture should be stable and proven. In elaboration you define the standards and guidelines, while construction needs those things to be available. Tasks in elaboration take some time because they have to \u0026lsquo;grow\u0026rsquo;. Because of this they are harder to plan, while tasks in construction have a hard deadline. And as one of the \u0026rsquo;elaborators\u0026rsquo;, it\u0026rsquo;s pretty darn annoying when one of the \u0026lsquo;constructors\u0026rsquo; comes up to your desk every two hours to ask if the part they are waiting on is ready. That kinda kills the whole goal of the elaboration phase\u0026hellip;\n","date":"5 December 2007","permalink":"https://www.rickvandenbosch.net/blog/why-elaboration-should-be-done-with-a-small-team/","section":"Blog","summary":"\u003cp\u003e\u003cspan class=\"missing-image\" role=\"img\" aria-label=\"Image missing\"\u003eImage missing\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003eA [wikipedia:RUP] project consists of 4 different phases. The \u003ca href=\"https://en.wikipedia.org/wiki/Rup#Elaboration_phase\" target=\"_blank\"\u003eelaboration phase\u003c/a\u003e (the second phase in the RUP \u003ca href=\"https://en.wikipedia.org/wiki/Rup#Project_lifecycle\" target=\"_blank\"\u003eproject lifecycle\u003c/a\u003e) is normally done with a small team. One of the important reasons for this is that you want to define the basic form of your architecture. This means you think about concepts, elaborate on them, develop proof of concepts and select the ones that work best for your specific project.\u003c/p\u003e","title":"Why elaboration should be done with a SMALL team"},{"content":"Have a look at this article at Worse Than Failure. That\u0026rsquo;s pretty funny. Or actually, pretty scary\u0026hellip; 😐\nOh and, by the way, the Rick in the article is not me ;).\nTechnorati tags: Funny, Link ","date":"29 November 2007","permalink":"https://www.rickvandenbosch.net/blog/notepad-translation-error/","section":"Blog","summary":"\u003cp\u003eHave a look at \u003ca href=\"https://worsethanfailure.com/Articles/Notepad-Translation-Error.aspx\" target=\"_blank\"\u003ethis article\u003c/a\u003e at \u003ca href=\"https://worsethanfailure.com\" target=\"_blank\"\u003eWorse Than Failure\u003c/a\u003e. That\u0026rsquo;s pretty funny. Or actually, pretty scary\u0026hellip; 😐\u003c/p\u003e\n\u003cp\u003eOh and, by the way, the Rick in the article is not me ;).\u003c/p\u003e\n\u003cdiv class=\"wlWriterSmartContent\" id=\"scid:0767317B-992E-4b12-91E0-4F059A8CECA8:54fc80f3-798d-445d-b5aa-ffd38da0b1aa\" style=\"padding-right: 0px;padding-left: 0px;float: none;padding-bottom: 0px;margin: 0px;padding-top: 0px\"\u003e\n  Technorati tags: \u003ca href=\"https://technorati.com/tags/Funny\" rel=\"tag\"\u003eFunny\u003c/a\u003e, \u003ca href=\"https://technorati.com/tags/Link\" rel=\"tag\"\u003eLink\u003c/a\u003e\n\u003c/div\u003e","title":"Notepad translation error?"},{"content":"Today I received a mail from Microsoft with an invitation for an Expert session. As you can see, sometimes even the experts at Microsoft let a glitch through\u0026hellip;\nImage missing (Translation of the text inside the circle: Dear sir, madam [personalize],)\n","date":"29 November 2007","permalink":"https://www.rickvandenbosch.net/blog/sometimes-even-experts-mess-up/","section":"Blog","summary":"\u003cp\u003eToday I received a mail from Microsoft with an invitation for an Expert session. As you can see, sometimes even the experts at Microsoft let a glitch through\u0026hellip;\u003c/p\u003e\n\u003cp\u003e\u003cspan class=\"missing-image\" role=\"img\" aria-label=\"Image missing\"\u003eImage missing\u003c/span\u003e\n(Translation of the text inside the circle: Dear sir, madam [personalize],)\u003c/p\u003e","title":"Sometimes even experts mess up"},{"content":"Recently I put up a list of my Xbox 360 games. I\u0026rsquo;ll try to keep it up to date. I must say it\u0026rsquo;s difficult to choose which game to get next. There are so many good titles out! Assassins Creed, Need for Speed ProStreet, Call of Duty 4 Modern warfare, and more\u0026hellip;\nWant to join me when gaming online? My gamertag is OZGump (see my gamercard).\nTechnorati tags: games, xbox 360 ","date":"27 November 2007","permalink":"https://www.rickvandenbosch.net/blog/my-games-list/","section":"Blog","summary":"\u003cp\u003eRecently I put up a \u003ca href=\"https://bloggingabout.net/blogs/rick/pages/my-xbox-360-games.aspx\" target=\"_blank\"\u003elist of my Xbox 360 games\u003c/a\u003e. I\u0026rsquo;ll try to keep it up to date. I must say it\u0026rsquo;s difficult to choose which game to get next. There are so many good titles out! Assassins Creed, Need for Speed ProStreet, Call of Duty 4 Modern warfare, and more\u0026hellip;\u003c/p\u003e","title":"My games list"},{"content":"When asked about my point of view about a guideline concerning code coverage, my answer always is: go for 100% code coverage. 100%, unless\u0026hellip; Here is why.\nWhen the guideline for code coverage is 80% (not an uncommon guideline) the devil is in the details. Or in the 20% which is not covered to be exact. When a developer \u0026lsquo;only\u0026rsquo; needs to cover 80% of his code, you can expect him (or her) to start with the easiest scenario\u0026rsquo;s, and work his way towards the more difficult scenario\u0026rsquo;s until the coverage guideline has been met. This way, the scenario\u0026rsquo;s which are the most difficult to realize as a test aren\u0026rsquo;t hit. And, more important, the developer didn\u0026rsquo;t think about the most difficult scenario\u0026rsquo;s and how to test them. In that case the remaining 20% is completely unknown*. I know several testers and I can assure you: they don\u0026rsquo;t like that.\nIn case developers need to come up with 100% code coverage, or a good reason why they can\u0026rsquo;t get there (with a reasonable amount of effort), all code paths have been seen and analyzed. When a certain part if the code is not covered you can assert the risk, assess how much effort is needed to get the code coverage up to par, and make a weighed decision to do so, or not. In the last case you have an entry for the \u0026lsquo;unless\u0026rsquo; category.\nSure, sometimes the tooling doesn\u0026rsquo;t allow us to achieve a clean 100% code coverage. Visual Studio 2005 for instance sometimes skips a closing curly bracket, so you only come near the 100% for a specific method. That is one in the \u0026lsquo;unless\u0026rsquo; category. The risk of not making the 100% has been asserted, the reason for it has been identified and a decision has been actively made.\nNotes:\n– You should not only look at the code coverage numbers. The quality of the asserts is pretty important too, as I mentioned earlier.\n– When using \\[wikipedia:Test Driven Development\\] (strictly), these situations should be rare. Normally you start out with test cases, and then write code to make the test pass. Some even think that every line of code should add to a test case passing and that, when a line of code doesn\u0026rsquo;t do so, you shouldn\u0026rsquo;t have written it.\n\u0026lsquo;Completely unknown\u0026rsquo; is a bit heavy on the drama, but it adds to the story, don\u0026rsquo;t you think so? 😉 Technorati tags: test, methodology, code coverage, unittest ","date":"26 November 2007","permalink":"https://www.rickvandenbosch.net/blog/100-code-coverage-unless/","section":"Blog","summary":"\u003cp\u003eWhen asked about my point of view about a guideline concerning code coverage, my answer always is: go for 100% code coverage. 100%, unless\u0026hellip; Here is why.\u003c/p\u003e\n\u003cp\u003eWhen the guideline for code coverage is 80% (not an uncommon guideline) the devil is in the details. Or in the 20% which is not covered to be exact. When a developer \u0026lsquo;only\u0026rsquo; needs to cover 80% of his code, you can expect him (or her) to start with the easiest scenario\u0026rsquo;s, and work his way towards the more difficult scenario\u0026rsquo;s until the coverage guideline has been met. This way, the scenario\u0026rsquo;s which are the most difficult to realize as a test aren\u0026rsquo;t hit. And, more important, the developer didn\u0026rsquo;t think about the most difficult scenario\u0026rsquo;s and how to test them. In that case the remaining 20% is completely unknown*. I know several testers and I can assure you: they don\u0026rsquo;t like that.\u003c/p\u003e","title":"‘100% code coverage, unless…’"},{"content":"The last two weeks or so, my blog has been hit by a wave of comment spam. Every morning there are 20-something comments like \u0026lsquo;Nice\u0026rsquo; or \u0026lsquo;Sorry :(\u0026rsquo; to be deleted. Fairly pointless posts\u0026hellip; The only link they contain seems to be in the URL field, and not in the message like they used to. Do they really think a blogger would see that kind of rubbish as a serious comment?\nI recall Dennis posting something about filtering out one-word-comments, but I can\u0026rsquo;t find the exact post. Maybe I\u0026rsquo;ll just have to try playing with the spam score setting for marking comments as spam\u0026hellip;\n","date":"24 November 2007","permalink":"https://www.rickvandenbosch.net/blog/spam-frenzy/","section":"Blog","summary":"\u003cp\u003eThe last two weeks or so, my blog has been hit by a wave of comment spam. Every morning there are 20-something comments like \u0026lsquo;Nice\u0026rsquo; or \u0026lsquo;Sorry :(\u0026rsquo; to be deleted. Fairly pointless posts\u0026hellip; The only link they contain seems to be in the URL field, and not in the message like they used to. Do they really think a blogger would see that kind of rubbish as a serious comment?\u003c/p\u003e","title":"Spam frenzy"},{"content":"At my current project we made a project template for Visual Studio for our testers. We added all the references, folders and files a tester needs to add a new system tests project. One of the testers (!) extended our XML generator, which generated XML testcases based on data entered in Excel, to now generate a complete C# test class. Making (system) tests which are automatically run during the nightly build now really is just as simple as entering data in Excel.\nIn the project template, we added a default namespace followed by $safeprojectname$ in the RootNamespace tag and in the AssemblyName tag. For example, the RootNamespace and the AssemlyName tag contain the following: Namespace.SubNamespace.$safeprojectname$. When you create a project based on the template, named TestProject, the default namespace is filled in accordingly: Namespace.SubNamespace.TestProject. The AssemblyName however, only contains TestProject.\nMaybe I\u0026rsquo;m missing a step where the (entire) AssemblyName is overwritten with the $safeprojectname$ value, but if it is, why isn\u0026rsquo;t that happening to the RootNamespace tag? These two fields look the same, but act differently. Today I didn\u0026rsquo;t have any time to discover why this happens, but I\u0026rsquo;m going to look for the reason. And if I find anything, I\u0026rsquo;ll let you know.\nBy the way, I\u0026rsquo;ll be checking this in Visual Studio 2008 asap.\n_Edit 21-11-2007 @ 18:07\n_ The MSDN forums have done their job and brought me an answer{.} about this issue and Visual Studio 2005. There is a workaround (see link in the MSDN forums post, or click here{.}). Unfortunately, that involved developing a Guidance Package, which we don\u0026rsquo;t have time for at the moment. We already instructed our testers to copy the default namespace, and paste it as the assemblyname. That\u0026rsquo;s [wikipedia:pragmatism] for you 😉\nTechnorati tags: .NET, Visual Studio ","date":"20 November 2007","permalink":"https://www.rickvandenbosch.net/blog/project-template-doesnt-understand-assemblyname-tag/","section":"Blog","summary":"\u003cp\u003eAt my current project we made a project template for Visual Studio for our testers. We added all the references, folders and files a tester needs to add a new system tests project. One of the testers (!) extended our XML generator, which generated XML testcases based on data entered in Excel, to now generate a complete C# test class. Making (system) tests which are automatically run during the nightly build now really is just as simple as entering data in Excel.\u003c/p\u003e","title":"Project template doesn’t understand AssemblyName tag?"},{"content":"I have lots of games for my Xbox 360 I still need to / want to finish, like The Orange Box and Bioshock. And despite this, I\u0026rsquo;ve been working \u0026rsquo;non-stop\u0026rsquo; behind my laptop for the last two evenings to prepare it for Visual Studio 2008, and to download and install it. It\u0026rsquo;s almost time\u0026hellip; 😉\nI can\u0026rsquo;t wait to get busy with the final version of Visual Studio 2008 and stuff like LINQ, extension methods, anonymous types, lambda expressions and so on. Let\u0026rsquo;s do this!\n","date":"20 November 2007","permalink":"https://www.rickvandenbosch.net/blog/nerd-alert/","section":"Blog","summary":"\u003cp\u003eI have lots of games for my Xbox 360 I still need to / want to finish, like The Orange Box and Bioshock. And despite this, I\u0026rsquo;ve been working \u0026rsquo;non-stop\u0026rsquo; behind my laptop for the last two evenings to prepare it for Visual Studio 2008, and to download and install it. It\u0026rsquo;s almost time\u0026hellip; 😉\u003c/p\u003e","title":"Nerd alert?"},{"content":"As of 01-01-2008, I\u0026rsquo;m joining Avanade. You might have heard Avanade opened an office in the south of The Netherlands the first of November. I\u0026rsquo;ll be joining the ranks over there (Eindhoven!) and I am exited to get started.\nI spent the past years at LogicaCMG. I had a lot of fun and, even more important, I learned a lot. I\u0026rsquo;ll miss the guys (and girls!) I worked with, but I\u0026rsquo;m sure I will keep in touch with some of them. Thanks for having me. And of course: it\u0026rsquo;s a small world, so we\u0026rsquo;ll meet again\u0026hellip;\nTechnorati tags: personal, work, Avanade ","date":"14 November 2007","permalink":"https://www.rickvandenbosch.net/blog/010108-a-new-challenge/","section":"Blog","summary":"\u003cp\u003eAs of 01-01-2008, I\u0026rsquo;m joining \u003ca href=\"https://www.avanade.com\" target=\"_blank\"\u003eAvanade\u003c/a\u003e. You might have heard Avanade opened an \u003ca href=\"https://www.avanade.com/nl/about/news/pressdetail.aspx?id=158\" target=\"_blank\"\u003eoffice in the south of The Netherlands\u003c/a\u003e the first of November. I\u0026rsquo;ll be joining the ranks over there (Eindhoven!) and I am exited to get started.\u003c/p\u003e","title":"010108: a new challenge"},{"content":"Test Driven Development is hot, just like unit testing your software and any other kinds of (automated) testing. And as we all know: sometimes stuff that\u0026rsquo;s hot is misinterpreted, explained wrong or just simply used in a really bad way. Unfortunately, testing is no exception to this rule\u0026hellip;\nNot too long ago I had a discussion with a project manager who told me the code in his project had a code coverage close to 100%. Because of that, so he felt, his software would be darn close to perfect. I then asked him if testers had validated the unit tests his developers had made. The answer was no, but he didn\u0026rsquo;t see the need for that because “the code coverage was so high”. I\u0026rsquo;ll spare you the details of the discussion, but let\u0026rsquo;s say it led to a few new insights for at least one of us ;).\nI\u0026rsquo;l try to make my point over here with some examples. Let\u0026rsquo;s first make a very simple (trivial) method.\npublic static string LowercaseConcatenateStrings(string first, string second)\n{\nstring result;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; result = first.ToLower();\n\u0026nbsp;\u0026nbsp;\u0026nbsp; result += second.ToLower(); \u0026nbsp;\u0026nbsp;\u0026nbsp; return result;\n}\nAs you can see this is a simple method which converts both input parameters to lowercase and concatenates them. Now let's see a unittest which will result in 100% code coverage: [TestMethod]\npublic void TestLowercaseConcatenate()\n{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; string result = UnitTestSample.LowercaseConcatenateStrings(\u0026#8220;test1\u0026#8221;, \u0026#8220;test2\u0026#8221;);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; Assert.IsNotNull(result, \u0026#8220;Returnvalue is null!\u0026#8221;);\n}\nThis unittest does result in 100% code coverage, but does not test all the scenario's applicable to the method. A null value for one of either parameters results in an unhandled exception. It doesn't even check if the value of the returned string is anything like it should be! These tests (and the code) are far from perfect, even though the coverage is 100%. This is a simple example where it's easy to determine the flaws, but you can imagine a more complex method would require an expert's eye to ensure the quality of the asserts is up to par. A method of 20 lines with lots of calculations and object modifications, cannot be asserted with a check to see if the object merely exists.\nOf course, and this should come as no surprise, testers are able to look at a piece of code or software a little bit different than developers do, so why not use their expertise. In short: check the quality of your assertions! Technorati tags: .NET, methodology, test, unittest, code coverage ","date":"5 November 2007","permalink":"https://www.rickvandenbosch.net/blog/this-is-not-a-test/","section":"Blog","summary":"\u003cp\u003eTest Driven Development is hot, just like unit testing your software and any other kinds of (automated) testing. And as we all know: sometimes stuff that\u0026rsquo;s hot is misinterpreted, explained wrong or just simply used in a really bad way. Unfortunately, testing is no exception to this rule\u0026hellip;\u003c/p\u003e","title":"This is NOT a test."},{"content":"The MasterPage doesn\u0026rsquo;t have a property for setting the Theme at design time. Despite this, I wanted to set the Theme for a MasterPage, so I decided to set it from code. I was aware of the possibility to set the Theme through the web.config, but that wasn\u0026rsquo;t the way I wanted to set it. One of the reasons being it would result in the theme being applied to the entire website.\nI tried to use the Page_Load, but that resulted in the error “The \u0026lsquo;Theme\u0026rsquo; property can only be set in or before the \u0026lsquo;Page_PreInit\u0026rsquo; event.”. That sounds logical, because the Theme makes the Page render in a specific way. So I added a Page_PreInit method with the right parameters, but that didn\u0026rsquo;t do anything. As it turns out, the Master Page doesn\u0026rsquo;t have a Page_PreInit\u0026hellip;\nTo be able to set the Theme for a MasterPage from code, follow these steps:\nAdd a class with the name ThemeModule (or any other name) Let the class inherit from IHttpModule Implement the init method as follows: public void Init(HttpApplication context)\n{\ncontext.PreRequestHandlerExecute += HandlePreRequest;\n} void HandlePreRequest (object sender, EventArgs e)\n{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; Page page = HttpContext.Current.CurrentHandler as Page;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; if (page != null)\n\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; page.PreInit += delegate\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; page.Theme = DetermineTheme();\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; };\n\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n}\nAdd the HttpModule to your web application through the web.config:\n\u0026laquo;/span\u0026gt;httpModules\u0026gt;\n\u0026laquo;/span\u0026gt;add name=“ThemeModule“ type=“Howtos.ThemeModule“/\u0026gt;\n\u0026lt;/httpModules\u0026gt; That\u0026rsquo;s it! Hope this helps.\nA week ago I came up with this solution together with a good friend of mine. The code was on his machine, so he said I had to add a \u0026rsquo;thanks to\u0026rsquo; in this post. Well, here it is: thanks 2 Sander van Kemenade! 😉\n","date":"20 October 2007","permalink":"https://www.rickvandenbosch.net/blog/howto-set-the-theme-for-a-masterpage-from-code/","section":"Blog","summary":"\u003cp\u003eThe MasterPage doesn\u0026rsquo;t have a property for setting the Theme at design time. Despite this, I wanted to set the Theme for a MasterPage, so I decided to set it from code. I was aware of the possibility to \u003ca href=\"https://msdn2.microsoft.com/en-us/library/0yy5hxdk.aspx\" target=\"_blank\"\u003eset the Theme through the web.config\u003c/a\u003e, but that wasn\u0026rsquo;t the way I wanted to set it. One of the reasons being it would result in the theme being applied to the entire website.\u003c/p\u003e","title":"HowTo: Set the Theme for a MasterPage (from code)"},{"content":"Back in July, Barry Goffe (Director Windows Vista Ultimate) mentioned that the missing Extras identified in January would be released at the end of the summer. I just got a bit curious about when these Extras would finally be released, so I visited windowsultimate.com again. And there it was: DreamScene was released recently (September 25th). And although I\u0026rsquo;m not quite sure if I\u0026rsquo;ll use this ever day, it\u0026rsquo;s kind of a cool feature. Isn\u0026rsquo;t it?\nOn the other hand: I\u0026rsquo;m still waiting for more Ultimate Extras. The ones Barry Goffe talks about are only Windows DreamScene and the remaining 20 Language Packs. But Microsoft made us believe there would be so many more. I can imagine the extras were a reason for a people to choose Ultimate. Let\u0026rsquo;s see if Microsoft will “ship a collection of additional Windows Ultimate Extras over the next couple years that we are confident will delight our passionate Windows Vista Ultimate customers“. According to the blogpost, “once we ship Windows DreamScene and the remaining Language Packs, we will provide more information about the next Extras“. We\u0026rsquo;ll see.\n","date":"5 October 2007","permalink":"https://www.rickvandenbosch.net/blog/dreamscene-is-here-but-what-happened-to-the-other-windows-vista-ultimate-extras/","section":"Blog","summary":"\u003cp\u003eBack in July, Barry Goffe (Director Windows Vista Ultimate) \u003ca href=\"https://windowsultimate.com/blogs/announcements/archive/2007/07/02/update-on-the-windows-ultimate-extras.aspx\" target=\"_blank\"\u003ementioned\u003c/a\u003e that the missing Extras identified in January would be released at the end of the summer. I just got a bit curious about when these Extras would finally be released, so I visited \u003ca href=\"https://www.windowsultimate.com\" target=\"_blank\"\u003ewindowsultimate.com\u003c/a\u003e again. And there it was: \u003ca href=\"https://windowsultimate.com/blogs/announcements/archive/2007/09/25/windows-dreamscene-released.aspx\" target=\"_blank\"\u003eDreamScene was released\u003c/a\u003e recently (September 25th). And although I\u0026rsquo;m not quite sure if I\u0026rsquo;ll use this ever day, it\u0026rsquo;s kind of a cool feature. Isn\u0026rsquo;t it?\u003c/p\u003e","title":"DreamScene is here! But what happened to the other Windows Vista Ultimate Extras?"},{"content":"WOW\nThe single player mode feels like a multiplayer game, with excellent gameplay. Certain parts of the game are pretty creepy, and I like it that there are some surprising elements in there. Sometimes you expect something to happen, which doesn\u0026rsquo;t. And when you least expect it\u0026hellip;. So the (story in the) game is original. That makes a game interesting to play. One of the things I like a lot is that you can use almost everything your opponents use, like vehicles and weapons\nThe multiplayer part is just great. I played online with some friends this weekend, and we had a blast!\nMe like \u0026hellip; !\nBy the way: I somehow lost my saved game. I already reached the sixth level, but when I started playing yesterday, the only option I had was \u0026lsquo;Start solo game\u0026rsquo; in stead of \u0026lsquo;Continue solo game\u0026rsquo;. I\u0026rsquo;m in level three again, but that kinda sucks. Maybe it has something to do with my Xbox freezing up when I used it as a media center extender. On the other hand, that might be odd, because Halo wasn\u0026rsquo;t even running at that point.\n","date":"1 October 2007","permalink":"https://www.rickvandenbosch.net/blog/halo-3-my-first-2-cents/","section":"Blog","summary":"\u003cp\u003eWOW\u003cbr\u003e\nThe single player mode feels like a multiplayer game, with excellent gameplay. Certain parts of the game are pretty creepy, and I like it that there are some surprising elements in there. Sometimes you expect something to happen, which doesn\u0026rsquo;t. And when you least expect it\u0026hellip;. So the (story in the) game is original. That makes a game interesting to play. One of the things I like a lot is that you can use almost everything your opponents use, like vehicles and weapons\u003cbr\u003e\nThe multiplayer part is just great. I played online with some friends this weekend, and we had a blast!\u003c/p\u003e","title":"HALO 3: my (first) 2 cents"},{"content":"Thanks to the MSDN forums{.} (and specifically one Hua Chen), I found a way{.} to disable specific code analysis rules for a team build. In this post I\u0026rsquo;ll combine the steps I followed earlier with the description given at the MSDN forum. I\u0026rsquo;ll start out with some steps earlier on in the process: how to quickly get a list of all the code analysis rules you want to disable (without having to type it all yourself 😉 ).\n\u0026lt;DIV\u0026gt; Start Visual Studio and create a new project \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Open the properties for the project and navigate to the 'Code Analysis' tab \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Set the code analysis rules the way you want them, and save the project (you don't have to enable code analysis: the settings are saved anyway) \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Close the project/solution \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Open the .csproj file in a text editor like Notepad or UltraEdit \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Find the tag named CodeAnalysisRules and copy the value of that tag, which looks something like this: \u0026lt;BR /\u0026gt;\u0026lt;CodeAnalysisRules\u0026gt;-Microsoft.Globalization#CA1301;-Microsoft.Naming#CA1709;-Microsoft.Usage#CA2208\u0026lt;/CodeAnalysisRules\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;You now have a list containing all the rules you do not want enforced. \u0026lt;/DIV\u0026gt; Now for the real deal: how to disable specific code analysis rules for a team build.\n\u0026lt;DIV\u0026gt; Open the TFSBuild.proj file in a text editor (double clicking the file from the source control explorer\u0026amp;nbsp;will open it in Visual Studio, which works fine as an editor) \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Find the PropertyGroup tag containing the RunCodeAnalysis tag \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Set the RunCodeAnalysis tag to an \u0026lt;A class=\u0026quot;\u0026quot; href=\u0026quot;https://blogs.msdn.com/manishagarwal/archive/2005/07/14/438807.aspx\u0026quot;\u0026gt;appropriate value\u0026lt;/A\u0026gt; (I used Always to override individual project settings) \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Add a tag named CodeAnalysisRules, and paste the rules you copied in the steps numbered 1 to 6 above \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Find the Microsoft.TeamFoundation.Build.targets file at the Team Build Server. It is typically\u0026amp;nbsp;located in C:Program FilesMSBuildMicrosoftVisualStudiov8.0TeamBuild \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Open the .targets file, find the CoreCompile target and\u0026amp;nbsp;copy the entire\u0026amp;nbsp;target \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Paste the CoreCompile target in the TFSBuild.proj at the end of the project file, before the\u0026amp;nbsp;\u0026lt;/Project\u0026gt; tag \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Find the following task in the CoreCompile target, this is the second task from the end of the CoreCompile target\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;!\u0026amp;#8211; Build using MSBuild task \u0026amp;#8211;\u0026gt;\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;MSBuild\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; Condition=\u0026amp;#8221; '@(SolutionToBuild)'!=\u0026amp;#8221; \u0026amp;#8220;\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; Projects=\u0026amp;#8221;@(SolutionToBuild)\u0026amp;#8221;\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; Properties=\u0026amp;#8221;Configuration=%(ConfigurationToBuild.FlavorToBuild);Platform=%(ConfigurationToBuild.PlatformToBuild);SkipInvalidConfigurations=true;VCBuildOverride=$(MSBuildProjectDirectory)TFSBuild.vsprops;FxCopDir=$(FxCopDir);OutDir=$(OutDir);ReferencePath=$(ReferencePath);TeamBuildConstants=$(TeamBuildConstants);$(CodeAnalysisOption)\u0026amp;#8221;\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; Targets=\u0026amp;#8221;Build\u0026amp;#8221; /\u0026gt;\u0026lt;BR /\u0026gt; \u0026lt;/DIV\u0026gt; \u0026lt;DIV\u0026gt; Import your CodeAnalysisRules to the task in the Properties attribute (see the red part):\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;!\u0026amp;#8211; Build using MSBuild task \u0026amp;#8211;\u0026gt;\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;MSBuild\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; Condition=\u0026amp;#8221; '@(SolutionToBuild)'!=\u0026amp;#8221; \u0026amp;#8220;\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; Projects=\u0026amp;#8221;@(SolutionToBuild)\u0026amp;#8221;\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; Properties=\u0026amp;#8221;Configuration=%(ConfigurationToBuild.FlavorToBuild);Platform=% (ConfigurationToBuild.PlatformToBuild); SkipInvalidConfigurations=true;VCBuildOverride=$(MSBuildProjectDirectory)TFSBuild.vsprops;FxCopDir=$(FxCopDir);OutDir=$(OutDir);ReferencePath=$(ReferencePath); TeamBuildConstants=$(TeamBuildConstants);$(CodeAnalysisOption)\u0026lt;FONT color=\u0026quot;red\u0026quot;\u0026gt;;CodeAnalysisRules=$(CodeAnalysisRules)\u0026lt;/FONT\u0026gt;\u0026amp;#8220;\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; Targets=\u0026amp;#8221;Build\u0026amp;#8221; /\u0026gt; \u0026lt;/DIV\u0026gt; That\u0026rsquo;s all of it. The rules you selected not to run (and pasted in the CodeAnalysisRules tag) will not be executed during the next build. Hope this helps!\n","date":"4 September 2007","permalink":"https://www.rickvandenbosch.net/blog/howto-disable-specific-code-analysis-rules-for-a-team-build/","section":"Blog","summary":"\u003cp\u003eThanks to the \u003ca href=\"https://forums.microsoft.com/MSDN/\" target=\"_blank\" rel=\"noreferrer\"\u003eMSDN forums\u003c/a\u003e{.} (and specifically one Hua Chen), I found \u003ca href=\"https://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2093517\" target=\"_blank\" rel=\"noreferrer\"\u003ea way\u003c/a\u003e{.} to disable specific code analysis rules for a team build. In this post I\u0026rsquo;ll combine the steps I followed earlier with the description given at the MSDN forum. I\u0026rsquo;ll start out with some steps earlier on in the process: \u003cstrong\u003e\u003cem\u003ehow to quickly get a list of all the code analysis rules you want to disable\u003c/em\u003e\u003c/strong\u003e (without having to type it all yourself 😉 ).\u003c/p\u003e","title":"HowTo: Disable specific Code Analysis rules for a Team Build"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/ms-build/","section":"Tags","summary":"","title":"MS Build"},{"content":"Sure, we\u0026rsquo;re still a bit in the holiday season. But the last few months it seems to get quieter in the [wikipedia:blogosphere], and specifically the technical part of it. Maybe I\u0026rsquo;m just imagining it, but it feels like blogging isn\u0026rsquo;t as popular as it used to be. How are you guys experiencing this?\n","date":"3 September 2007","permalink":"https://www.rickvandenbosch.net/blog/blog-silence-is-blogging-getting-less-popular/","section":"Blog","summary":"\u003cp\u003eSure, we\u0026rsquo;re still a bit in the holiday season. But the last few months it seems to get quieter in the [wikipedia:blogosphere], and specifically the technical part of it. Maybe I\u0026rsquo;m just imagining it, but it feels like blogging isn\u0026rsquo;t as popular as it used to be. How are you guys experiencing this?\u003c/p\u003e","title":"Blog silence – Is blogging getting less popular?"},{"content":"After searching a bit, I found a way to disable specific Code Analysis rules for a team build. Or at least I thought so\u0026hellip; The RunCodeAnalysis tag in my build.proj file is set to \u0026lsquo;Always\u0026rsquo; to override the individual project settings, and I added the \u0026lsquo;CodeAnalysisRules\u0026rsquo; tag to exclude some rules as a test. (See below for a part of the build.proj file.) I ran a few builds, but the tag doesn\u0026rsquo;t seem to do what is supposed to. But when you use that tag in a project file, Visual Studio does recognize it as a valid tag\u0026hellip; Unfortunately the build seems to execute all the rules, including the ones I tried to exclude by putting them in the CodeAnalysisRules tag with a \u0026lsquo;-\u0026rsquo; before them. I\u0026rsquo;m trying to find out if it is possible to exclude specific rules through the build file. I know it is possible to do so by putting the stuff in the CodeAnalysisRules tag my project file, but with a solution of 98 projects, this is not realy an option. 😉\nI\u0026rsquo;ll keep you posted. And, as always, if you have any idea: drop me a line{.}.\nSnippet build.proj file:\nAlways\n-Microsoft.Globalization#CA1301;-Microsoft.Globalization#CA1302;\n**Edit 1\n** I tried Jan\u0026rsquo;s suggestion (see the comments{.}) and moved the \u0026lsquo;-\u0026rsquo; sign from in front if the Microsoft name to behind the #. This did not result in any rules being ignored either. So, unfortunately, our build still checks all rules, including the ones we don\u0026rsquo;t want it to check.\nBy the way, I know I can set Code Analysis rules as a check-in policy, and migrate those settings to the solution, but at this point it\u0026rsquo;s not possible to check out al of the 98 projects: several colleagues have projects checked out, and we\u0026rsquo;re working towards a deadline, so \u0026hellip;\n**Edit 2\n** I also tried the suggestion David Kean posted over here{.}, but to no avail. This might work for a project, but does not when entered in a TFS Build project. It looks like I will have to change the code analysis for all projects separately, in stead of being able to set it once for all projects in a build/solution. 🙁\n","date":"31 August 2007","permalink":"https://www.rickvandenbosch.net/blog/disable-specific-code-analysis-rules-for-a-team-build/","section":"Blog","summary":"\u003cp\u003eAfter searching a bit, I found a way to disable specific Code Analysis rules for a team build. Or at least I thought so\u0026hellip; The RunCodeAnalysis tag in my build.proj file is set to \u0026lsquo;Always\u0026rsquo; to override the individual project settings, and I added the \u0026lsquo;CodeAnalysisRules\u0026rsquo; tag to exclude some rules as a test. (See below for a part of the build.proj file.) I ran a few builds, but the tag doesn\u0026rsquo;t seem to do what is supposed to. But when you use that tag in a project file, Visual Studio does recognize it as a valid tag\u0026hellip; \u003c/p\u003e","title":"Disable specific Code Analysis rules for a Team Build"},{"content":"So, after some relaxing at home and a very cool holiday in Spain, I\u0026rsquo;m about to go to work again next monday. And with that, I\u0026rsquo;ll be picking up all my \u0026rsquo;normal day\u0026rsquo; hobbies and stuff. So, I\u0026rsquo;ll try and pick up blogging (and taking pictures) again, just for you guys ;). Stay tuned \u0026hellip; !\nHey! Ho! Let\u0026rsquo;s Go ..\n","date":"18 August 2007","permalink":"https://www.rickvandenbosch.net/blog/im-baaack/","section":"Blog","summary":"\u003cp\u003eSo, after some relaxing at home and a very cool holiday in Spain, I\u0026rsquo;m about to go to work again next monday. And with that, I\u0026rsquo;ll be picking up all my \u0026rsquo;normal day\u0026rsquo; hobbies and stuff. So, I\u0026rsquo;ll try and pick up blogging (and taking pictures) again, just for you guys ;). Stay tuned \u0026hellip; !\u003c/p\u003e","title":"I’m baaack …"},{"content":"I ordered some stuff through the internet a week ago. The packet was sent through the Dutch postal service. They have a track and trace website, that shows where your parcel is at that moment, and where it has been. And that website made me realise the postal service is much like a service bus. I\u0026rsquo;ll compare it to a single service, to emphasise the differences. Let\u0026rsquo;s have a look, shall we \u0026hellip; ?\nSingle service: a courier\nJust like with a single service, sending a parcel with a courier makes it pretty obvious what route the parcel will travel. You tell the courier where the packet should go in their own terms, by filling in their specific form for sending a packet (comparable to a WSDL). You also know the courier will put the parcel in his car, and drive directly to the destination you entered. There are no stops in between and nothing is translated into internal codes to process the parcel.\n**Service bus: the postal service\n** When sending a packet through the postal service, you drop it of at the nearest postal office, or even a mailbox. You put the address where the parcel is supposed to go on the envelope (again with the SOAP), but you don\u0026rsquo;t do that in a way that is specific to the postal service you would like to use. You do use the normal address conventions (which you could compare to the SOAP protocol). You don\u0026rsquo;t know which stops it will make, and where it will go. I saw my parcel first went to a sorting centre in the far east in our country where it was stamped for internal processing. Those stamps don\u0026rsquo;t mean anything outside their company, because it is only used for internal routing. Next, it was sent to the south-west for another round of sorting and internal handling. From there, it went to the third and final sorting centre, close to where I live in the centre south of The Netherlands. It probably was stored there for the night. The next day, the parcel was put in the truck of the driver who eventually brought it to my house. The sender doesn\u0026rsquo;t know where the parcel went, but they know it was delivered. As will the next\u0026hellip;\nI used WebServices/SOAP/XML to make comparisons because I know something about them. I could have used other protocols or standards also, but I wanted to stick to one.\nI know not all couriers work the way I described them nor does each and every postal services. And yes, traffic can be of influence to the route the parcel travels. But I had to dramatize to get my point across, ok? 😉\nTechnorati tags: service bus, single service, webservice, analogy ","date":"23 July 2007","permalink":"https://www.rickvandenbosch.net/blog/our-postal-service-is-like-a-service-bus/","section":"Blog","summary":"\u003cp\u003eI ordered \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2007/07/19/just-in-new-toys.aspx\" target=\"_blank\"\u003esome stuff\u003c/a\u003e through the internet a week ago. The packet was sent through the Dutch postal service. They have a track and trace website, that shows where your parcel is at that moment, and where it has been. And that website made me realise the postal service is much like a service bus. I\u0026rsquo;ll compare it to a single service, to emphasise the differences. Let\u0026rsquo;s have a look, shall we \u0026hellip; ?\u003c/p\u003e","title":"Our postal service is like a service bus"},{"content":"As you may know, I started out at blogger. I haven\u0026rsquo;t used that blog over there for the last two years, but now it is up and running again{.}! This time, I\u0026rsquo;m using it as my photo blog. I recently got my new camera, and I didn\u0026rsquo;t want to mix picture-posts with my software development related posts over here. So if you\u0026rsquo;re interested, go take a look over there. Next to the link earlier in this post, you can find a link @ the news section of this site, in the left sidebar.\n","date":"23 July 2007","permalink":"https://www.rickvandenbosch.net/blog/opened-a-photo-blog/","section":"Blog","summary":"\u003cp\u003eAs you \u003cA href=\"https://bloggingabout.net/blogs/rick/about.aspx\" target=\"_blank\"\u003emay know\u003c/A\u003e, I started out at blogger. I haven\u0026rsquo;t used that blog over there for the last two years, but now it is \u003ca href=\"https://ricodasilva.blogspot.com/2007/07/here-we-go-again.html\" target=\"_blank\" rel=\"noreferrer\"\u003eup and running again\u003c/a\u003e{.}! This time, I\u0026rsquo;m using it as \u003cA href=\"https://ricodasilva.blogspot.com/\" target=\"_blank\"\u003emy photo blog\u003c/A\u003e. I recently got my new camera, and I didn\u0026rsquo;t want to mix picture-posts with my software development related posts over here. So if you\u0026rsquo;re interested, go take a look over there. Next to the link earlier in this post, you can find a link @ the news section of this site, in the left sidebar.\u003c/p\u003e","title":"Opened a photo blog"},{"content":"Last tuesday evening I ordered them, and just over an hour ago they came in: my new toys. I\u0026rsquo;m talking about my brandnew Canon EOS 400D!!! I started out with the kit lens (18-55), and I\u0026rsquo;ll get going with that, trying some stuff with this lens. And I just might order another in the future, but you have to start somewhere, right 😉\nI immediately made some shots, and I\u0026rsquo;m glad I bought the camera already. Maybe I\u0026rsquo;ll post some pics I make in the future. And by the way: if anyone has any tips on some good (online) photography courses, let me know, or drop a line in the comments. 😉\nUpdate:\nI remembered I had a tripod laying around here somewhere. I asked for it a couple of years ago, to use with my Sony DSC S85. I never used it extensively, but that\u0026rsquo;s gonna change now my new friend is here! For those of you who are interested: I have a Giottos VT-808 tripod. I added a picture on the right.\nHappy (photo) snapping!\n","date":"19 July 2007","permalink":"https://www.rickvandenbosch.net/blog/just-in-new-toys/","section":"Blog","summary":"\u003cp\u003eLast tuesday evening I ordered them, and just over an hour ago they came in: my new toys. I\u0026rsquo;m talking about my brandnew \u003ca href=\"https://www.canon-europe.com/For_Home/Product_Finder/Cameras/Digital_SLR/EOS_400D/index.asp\" target=\"_blank\" rel=\"noreferrer\"\u003eCanon EOS 400D\u003c/a\u003e!!! I started out with the kit lens (18-55), and I\u0026rsquo;ll get going with that, trying some stuff with this lens. And I just might order another in the future, but you have to start somewhere, right 😉\u003c/p\u003e","title":"Just in: new toys!"},{"content":"The TED website actually explains for me why you should watch Stephen Lawler\u0026rsquo;s talk on Virtual Earth{.}:\nWhy you should listen to him:\nMicrosoft\u0026rsquo;s Stephen Lawler offers a tour of Virtual Earth that not only reveals the power and potential of the software itself, but also gives a global glimpse of the new virtual frontier of digital globes, the 3D Web and the metaverse.\nLawler also explores the enormous effort it takes to create the fluid blending and shifting between the multiple views and resolutions of Virtual Earth. From the satellites and airplanes that gather photo data for a top-down view to the ground vehicles and headgear-wearing pedestrians who canvas the ground for an eye-level perspective — all of it represents a monumental effort of logistics and mechanics.\nI think one of the things this talk makes clear is that there are lots of neat things coming our way. And the innovations that are being revealed now have probably been in development for the last couple of years. Imagine what great stuff is being thought up right now\u0026hellip; Exciting times. 😉\n","date":"9 July 2007","permalink":"https://www.rickvandenbosch.net/blog/stephen-lawler-on-microsofts-virtual-earth-ted-com/","section":"Blog","summary":"\u003cp\u003eThe \u003ca href=\"https://www.ted.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eTED website\u003c/a\u003e actually explains for me why you should watch \u003ca href=\"https://www.ted.com/index.php/talks/view/id/139\" target=\"_blank\" rel=\"noreferrer\"\u003eStephen Lawler\u0026rsquo;s talk on Virtual Earth\u003c/a\u003e{.}:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003c/blockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003eWhy you should listen to him:\u003c/p\u003e\n\u003cp\u003eMicrosoft\u0026rsquo;s Stephen Lawler offers a tour of \u003ca href=\"https://local.live.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eVirtual Earth\u003c/a\u003e that not only reveals the power and potential of the software itself, but also gives a global glimpse of \u003cstrong\u003ethe new virtual frontier of digital globes\u003c/strong\u003e, the 3D Web and the metaverse.\u003cbr\u003e\nLawler also explores \u003cstrong\u003ethe enormous effort it takes to create the fluid blending and shifting between the multiple view\u003c/strong\u003es and resolutions of Virtual Earth. From the satellites and airplanes that gather photo data for a top-down view to the ground vehicles and headgear-wearing pedestrians who canvas the ground for an eye-level perspective — all of it represents a monumental effort of logistics and mechanics.\u003c/p\u003e","title":"Stephen Lawler on Microsoft’s Virtual Earth @ TED.com"},{"content":"Last week we had a meeting with our contact at the department that will be maintaining the software we\u0026rsquo;re going to be developing in our upcoming project. Normally, these kinds of meetings take place in the end of a project, sometimes even under some (release) stress. At least, that was the case for all the previous projects I was involved in at the customer I\u0026rsquo;m currently at. Most of the time this is because people want to start developing the software instead of thinking about things that are not necessarily their area of expertise.\nFor this project we did things a bit differently. This is because the rough outline of our project is pretty clear, but the business analysts are still working on some (pretty important) details. Because of that we had the time to get a pretty good idea of when we will be done, and to for instance make a proposal for the deployment model for our solution. We made a diagram, took this to our contact and asked his opinion. Because of his expertise, he asked us some questions which normally would be forgotten up until the moment the solution was going to be released, or would never be asked at all. He also gave us some pointers, and a few whishes out of a maintenance point of view. Because of this we can help maintenance by taking their hints and making the software easier to maintain.\nI already have the idea this is a better way to work. It might be because of the fact that it\u0026rsquo;s easier to “get things done” from maintenance (there\u0026rsquo;s lots of time before it has to be done?). But I\u0026rsquo;m absolutely sure it is because the software was thought through from different viewpoints. Not only the testers and developers have had something to do with it, but the people who have to keep it running did too.\n","date":"4 July 2007","permalink":"https://www.rickvandenbosch.net/blog/get-maintenance-involved-in-your-project-early/","section":"Blog","summary":"\u003cp\u003eLast week we had a meeting with our contact at the department that will be maintaining the software we\u0026rsquo;re going to be developing in our upcoming project. Normally, these kinds of meetings take place in the end of a project, sometimes even under some (release) stress. At least, that was the case for all the previous projects I was involved in at the customer I\u0026rsquo;m currently at. Most of the time this is because people want to start developing the software instead of thinking about things that are not necessarily their area of expertise.\u003c/p\u003e","title":"Get maintenance involved in your project. Early."},{"content":"A while ago I wrote about my laptop not wanting{.} to connect to the internet or an Exchange Server. Two days later, I thought I found{.} the updates which were the cause of all this. It wasn\u0026rsquo;t exactly true, but in the end everything worked\u0026hellip; Because of that, I let it go for a few days. But after a while, I couldn\u0026rsquo;t help myself: I had to know the real reason for the problem. So after thinking long and hard about the (configuration) differences between my laptop and my \u0026rsquo;normal machine\u0026rsquo;, I could think of only one which could be big enough to have this kind of impact. My laptop has had (the trial version of) Norton Internet Security installed, and my \u0026rsquo;normal machine\u0026rsquo; did not.\nI tried some installing, uninstalling and re-installing this weekend, and it seems like Internet Security was indeed the troublemaker. Eventually I uninstalled it, restored all updates for my laptop, installed all of them, and there you had it: my laptop was (still) working like a charm and I was a happy camper.\nI had a rough start with Norton years ago, back when I occasionally repaired computers in case the technical service department got too busy. I can\u0026rsquo;t even remember what or why it was, but somehow I ended up with this image of Norton as being software that wanted to do stuff other software was capable of doing, but in a buggier less stable way. I still have that idea, and normally I don\u0026rsquo;t even install their software. So I\u0026rsquo;m not quite sure why I missed it was installed on my laptop. Maybe I didn\u0026rsquo;t want to see it. Or maybe I thought to myself “It must be better by now”. Unfortunately, this does not seem to be the case\u0026hellip;\n","date":"2 July 2007","permalink":"https://www.rickvandenbosch.net/blog/so-those-updates-werent-the-problem-or-at-least-not-the-real-problem/","section":"Blog","summary":"\u003cp\u003eA while ago I wrote about my laptop \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2007/06/16/of-windows-live-writer-beta-2-and-crippling-windows-updates.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003enot wanting\u003c/a\u003e{.} to connect to the internet or an Exchange Server. Two days later, I thought I \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2007/06/18/found-em.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003efound\u003c/a\u003e{.} the updates which were the cause of all this. It wasn\u0026rsquo;t exactly true, but in the end everything worked\u0026hellip; Because of that, I let it go for a few days. But after a while, I couldn\u0026rsquo;t help myself: I had to know the real reason for the problem. So after thinking long and hard about the (configuration) differences between my laptop and my \u0026rsquo;normal machine\u0026rsquo;, I could think of only one which could be big enough to have this kind of impact. My laptop \u003cSTRIKE\u003ehas\u003c/STRIKE\u003e had (the trial version of) Norton Internet Security installed, and my \u0026rsquo;normal machine\u0026rsquo; did not.\u003c/p\u003e","title":"So… those updates weren’t the problem. Or at least, not the REAL problem."},{"content":"Because of (a movie on) Microsofts cool new projects SeaDragon{.} and PhotoSynth{.} (which doesn\u0026rsquo;t seem to run from behind the firewall over here), I found the TED (Technology, Entertainment, Design) Conference website{.}. There are some pretty impressive talks to be found there. And some are plain hilarious. There\u0026rsquo;s one I enjoyed a lot: Amazon.com founder Jeff Bezos\u0026rsquo; talk “After the gold rush, there\u0026rsquo;s innovation ahead{.}“. In this talk he compares the internet hype to the 1849 Gold Rush, but goes even further by using more analogies to explain the current state of the internet. Have a look around the TED website, and see if there\u0026rsquo;s something for you\u0026hellip;\n","date":"27 June 2007","permalink":"https://www.rickvandenbosch.net/blog/technology-entertainment-design/","section":"Blog","summary":"\u003cp\u003eBecause of (a movie on) Microsofts cool new projects \u003ca href=\"https://labs.live.com/seadragon.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eSeaDragon\u003c/a\u003e{.} and \u003ca href=\"https://labs.live.com/photosynth\" target=\"_blank\" rel=\"noreferrer\"\u003ePhotoSynth\u003c/a\u003e{.} (which doesn\u0026rsquo;t seem to run from behind the firewall over here), I found the TED (Technology, Entertainment, Design) Conference \u003ca href=\"https://www.ted.com/\" target=\"_blank\" rel=\"noreferrer\"\u003ewebsite\u003c/a\u003e{.}. There are some pretty impressive talks to be found there. And some are plain hilarious. There\u0026rsquo;s one I enjoyed a lot: Amazon.com founder Jeff Bezos\u0026rsquo; talk “\u003ca href=\"https://www.ted.com/index.php/talks/view/id/105\" target=\"_blank\" rel=\"noreferrer\"\u003eAfter the gold rush, there\u0026rsquo;s innovation ahead\u003c/a\u003e{.}“. In this talk he compares the internet hype to the 1849 Gold Rush, but goes even further by using more analogies to explain the current state of the internet. Have a look around the TED website, and see if there\u0026rsquo;s something for you\u0026hellip;\u003c/p\u003e","title":"Technology, Entertainment, Design"},{"content":"","date":null,"permalink":"https://www.rickvandenbosch.net/tags/uncategorized/","section":"Tags","summary":"","title":"Uncategorized"},{"content":"I already stated it at Paul Gielens\u0026rsquo; post about the SQL Server 2008 CTP: software (development) is about to hit puberty, if it hasn\u0026rsquo;t done so already. Looking at the rate (big!) new things are coming our way, you have to agree we\u0026rsquo;re entering a new level in software (development). Take a look at things like AJAX, the upcoming entity framework combined with SQL Server 2008, Acropolis, the upcoming versions of the .NET framework, Microsoft Surface and many, many more. Probably just like lots of you out there, I\u0026rsquo;m just happy to be in this business at these (exciting) times.\nA bit more on Surface: the Surface website does not only illustrate the power of the table (through the videos), it illustrates the power of the concept (have a look at origins – future).\n“As form factors continue to evolve, surface computing will be in any number of environments – schools, businesses, homes and any number of form factors – part of the countertop, the wall or the refrigerator”\nImagine coming home from the supermarket, touching your fridge with the groceries and getting numerous recipies accompanied by instruction videos on how to make a lovely dinner with your new groceries, combined with what you have in the fridge\u0026hellip;\nI\u0026rsquo;ll just repeat what Paul said: exciting times! 😉\n","date":"22 June 2007","permalink":"https://www.rickvandenbosch.net/blog/were-entering-puberty/","section":"Blog","summary":"\u003cp\u003eI already stated it at Paul Gielens\u0026rsquo; \u003ca href=\"https://weblogs.asp.net/pgielens/archive/2007/06/05/sql-server-2008-ctp-announced.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003epost\u003c/a\u003e about the SQL Server 2008 CTP: software (development) is about to hit puberty, if it hasn\u0026rsquo;t done so already. Looking at the rate (big!) new things are coming our way, you have to agree we\u0026rsquo;re entering a new level in software (development). Take a look at things like AJAX, the upcoming entity framework combined with SQL Server 2008, \u003ca href=\"https://windowsclient.net/Acropolis/\" target=\"_blank\" rel=\"noreferrer\"\u003eAcropolis\u003c/a\u003e, the upcoming versions of the .NET framework, \u003ca href=\"https://www.microsoft.com/surface\" target=\"_blank\" rel=\"noreferrer\"\u003eMicrosoft Surface\u003c/a\u003e and many, many more. Probably just like lots of you out there, I\u0026rsquo;m just happy to be in this business at these (exciting) times.\u003c/p\u003e","title":"We’re entering puberty …"},{"content":"I found the two updates which crippled{.} my laptop\u0026rsquo;s Windows installation. After uninstalling and re-installing lots of updates, it seems that these two updates caused the problem:\n– Update for Windows Vista (KB936825) This wasn\u0026rsquo;t the one. The problem was back this morning. 🙁 I\u0026rsquo;ll be checking this out later today.\n– Update for Outlook 2007 (KB933493)\nRe-installing them causes the same problems to occur: Outlook can\u0026rsquo;t connect to Exchange and IE7 can\u0026rsquo;t display any webpages. The weird thing is these updates were installed on my regular machine, and didn\u0026rsquo;t cause any trouble there. On our laptop, the problems act up. Weird stuff\u0026hellip; I\u0026rsquo;ve hidden the updates on the laptop, so I think the problem will not come back.\n—————————\nUpdate 2: OK, this is weird. I mentioned the problem returned this morning. So when I came back fom work today I removed a different update and rebooted, and the internet connection was fixed again. So, to be sure, I re-installed the update and restarted again. And now the internet connection keeps working, even after numerous restarts :S. Creepy stuff, but the connection works perfectly now. So I guess I\u0026rsquo;ll have to accept I won\u0026rsquo;t be sure what the problem was.\n","date":"18 June 2007","permalink":"https://www.rickvandenbosch.net/blog/found-em/","section":"Blog","summary":"\u003cp\u003eI found the two updates which \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2007/06/16/of-windows-live-writer-beta-2-and-crippling-windows-updates.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ecrippled\u003c/a\u003e{.} my laptop\u0026rsquo;s Windows installation. After uninstalling and re-installing lots of updates, it seems that these two updates caused the problem:\u003cbr\u003e\n– \u003cSTRIKE\u003eUpdate for Windows Vista (KB936825)\u003c/STRIKE\u003e This wasn\u0026rsquo;t the one. The problem was back this morning. 🙁 I\u0026rsquo;ll be checking this out later today.\u003cbr\u003e\n– Update for Outlook 2007 (KB933493)\u003c/p\u003e","title":"Found ’em!"},{"content":"This is my first post using Windows Live Writer Beta 2. I must say, it looks nicer than the first beta (having a Windows Vista-proof UI), but that\u0026rsquo;s not all\u0026hellip; Some of the features that were added are pretty darn cool (auto-ping on post, table editing) or just plain good (use the same window for multiple posts, finally!). I am missing the spelling checker though\u0026hellip; My first feeling: this is a pretty big step ahead for Windows Live Writer.\n**And now for something completely different\u0026hellip;\n** My laptop stopped working properly yesterday. I think one of the Windows Updates has crippled my laptop\u0026rsquo;s Windows installation. Although I can take over the Exchange Server through Remote Desktop Connection, my Outlook can\u0026rsquo;t reach it. And while Windows Live Messenger is up and running (and connected of course 😉 ), my IE7 \u0026lsquo;cannot display\u0026rsquo; any webpages. I\u0026rsquo;ve already uninstalled an update which I thought would be the culprit, but that didn\u0026rsquo;t turn this for the better. I guess I\u0026rsquo;ll be trying to solve this one this weekend\u0026hellip; If someone has a clue what could be the problem: let me know!\nBTW\nI think for me this is the post feauturing the Most Capitals Insinde a Sentence!\n","date":"16 June 2007","permalink":"https://www.rickvandenbosch.net/blog/of-windows-live-writer-beta-2-and-crippling-windows-updates/","section":"Blog","summary":"\u003cp\u003eThis is my first post using \u003ca href=\"https://windowslivewriter.spaces.live.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eWindows Live Writer\u003c/a\u003e Beta 2. I must say, it looks nicer than the first beta (having a Windows Vista-proof UI), but that\u0026rsquo;s not all\u0026hellip; Some of the features that were added are pretty darn cool (auto-ping on post, table editing) or just plain good (use the same window for multiple posts, finally!). I am missing the spelling checker though\u0026hellip; My first feeling: this is a pretty big step ahead for Windows Live Writer.\u003c/p\u003e","title":"Of Windows Live Writer Beta 2 and crippling Windows updates"},{"content":"I took the test Adel blogged about. And guess what? I\u0026rsquo;m binary!\nDoes this mean I\u0026rsquo;m 1337? 😉\nWhich Programming Language are You?\n","date":"8 June 2007","permalink":"https://www.rickvandenbosch.net/blog/binary/","section":"Blog","summary":"\u003cp\u003eI took the test \u003ca href=\"https://bloggingabout.net/blogs/adelkhalil\" target=\"_blank\" rel=\"noreferrer\"\u003eAdel\u003c/a\u003e blogged about. And guess what? I\u0026rsquo;m \u003cem\u003e\u003cstrong\u003ebinary\u003c/strong\u003e\u003c/em\u003e!\u003cbr\u003e\nDoes this mean I\u0026rsquo;m 1337? 😉\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://www.bbspot.com/News/2006/08/language_quiz.php\" target=\"_blank\" rel=\"noreferrer\"\u003e\u003cIMG height=\"90\" alt=\"You are Binary.  You are not human and go to great lengths to prove it.  You always know where you are and how you got there, but no one else does, ever.\" src=\"https://i0.wp.com/www.bbspot.com/Images/News_Features/2006/08/language/binary.jpg?resize=300%2C90\" width=\"300\" border=\"0\" data-recalc-dims=\"1\" /\u003e\u003cbr\u003e\nWhich Programming Language are You?\u003c/a\u003e\u003c/p\u003e","title":"Binary"},{"content":"I ran into a nice little riddle on thinkgeek.com{.} today (in the shirts section).\nIf you enjoy silly humor: take a look over there.\nHow many people can read hex if only you and dead people can read hex?\nFor the answer, select the box below\u0026hellip;\n57006. (dead is 57005 in hex. Add 1 for you and there you are: 57006)\n","date":"7 June 2007","permalink":"https://www.rickvandenbosch.net/blog/riddle-me-this/","section":"Blog","summary":"\u003cp\u003eI ran into a nice little riddle on \u003ca href=\"https://www.thinkgeek.com/\" target=\"_blank\" rel=\"noreferrer\"\u003ethinkgeek.com\u003c/a\u003e{.} today (in the shirts section).\u003cbr\u003e\nIf you enjoy silly humor: take a look over there.\u003c/p\u003e\n\u003cp\u003eHow many people can read hex if only you and dead people can read hex?\u003c/p\u003e","title":"Riddle me this…"},{"content":"Yesterday, I posted about a problem with MSBuild building our solution. We solved it, so I wanted to let you in on the secret solution.\nWe use the Enterprise Library V1.2 in some of our projects. And because some of the projects are being re-used from other internal projects, not all the references in thos projects were checked for versions. As it turned out, another project had a reference to an enterprise library assembly with a runtime version of .NET 2.0. And allthough this project compiled succesfully, local and on the build server, it broke the build of one of the other projects. This project (the one with the wrong reference) didn\u0026rsquo;t need the EntLib reference, so it \u0026lsquo;disappeared\u0026rsquo; because of optimization. But reference resolving had resolved it, and pointed to EntLib 3.0. Later in the build the project which failed did need the EntLib file, and used the allready resolved assembly location.\nThe problem occured after EntLib 3.0 was installed on the build server. I think the problem is there because of breaking changes between EntLib 2.0 and 3.0, because you would think the assembly resolver would have found the EntLib 2.0 assembly earlier. I\u0026rsquo;ll be checking for that on monday. And if I\u0026rsquo;ll find anything weird, I\u0026rsquo;ll get back at you.\nBy the way, we solved this problem by using the verbose mode of MSBuild. This mode logs everything very extensively. Because of this, we could see the assembly reference resolving process, which lead us to the problem. You can make MSBuild more verbose by locating your build\u0026rsquo;s rsp file, and add /v:diagnostic to it. However: use this option with care. It made our buildlog 200+ Mb\u0026rsquo;s for a 71 project solution.\nTechnorati tags: MSBuild, Enterprise Library, EntLib ","date":"2 June 2007","permalink":"https://www.rickvandenbosch.net/blog/build-problem-solved/","section":"Blog","summary":"\u003cp\u003e\u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2007/06/01/tfs-compilation-error.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eYesterday\u003c/a\u003e, I posted about a problem with MSBuild building our solution. We solved it, so I wanted to let you in on the \u003cstrike\u003esecret\u003c/strike\u003e solution.\u003c/p\u003e\n\u003cp\u003eWe use the Enterprise Library V1.2 in some of our projects. And because some of the projects are being re-used from other internal projects, not all the references in thos projects were checked for versions. As it turned out, another project had a reference to an enterprise library assembly with a runtime version of .NET 2.0. And allthough this project compiled succesfully, local and on the build server, it broke the build of one of the other projects. This project (the one with the wrong reference) didn\u0026rsquo;t need the EntLib reference, so it \u0026lsquo;disappeared\u0026rsquo; because of optimization. But reference resolving had resolved it, and pointed to EntLib 3.0. Later in the build the project which failed did need the EntLib file, and used the allready resolved assembly location.\u003c/p\u003e","title":"Build problem – Solved"},{"content":"As I mentioned before, bloggingabout.net got a bit unstable recently. Our administrator saw this, and migrated us to a new host. All DNS servers should be updated by now, so the new host is fully operational. This should make us fully stable again. Together with this move, he also updated our community to Community Server 2007. And because we were into making changes, I updated the look of my blog (again\u0026hellip; 😉 ).\nI hope you enjoy bloggingabout.net even more now!\n","date":"2 June 2007","permalink":"https://www.rickvandenbosch.net/blog/changed-host/","section":"Blog","summary":"\u003cp\u003eAs I \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2007/05/21/blog-unstable.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ementioned before\u003c/a\u003e, bloggingabout.net got a bit unstable recently. Our administrator saw this, and migrated us to a new host. All DNS servers should be updated by now, so the new host is fully operational. This should make us fully stable again. Together with this move, he also updated our community to Community Server 2007. And because we were into making changes, I updated the look of my blog (again\u0026hellip; 😉 ).\u003c/p\u003e","title":"Changed host"},{"content":"Our current project uses the possibilities of MSBuild to have a daily build on a TFS server. This has been working up until yesterday somewhere around noon. Nobody knows what exactly happened, but it stopped working after our successful build of 11:42 am.\n_Our problem:\n_ Compilation of one project (of a total of 71 projects) is failing. The project builds successful on the local machines of all the developers. It references EnterpriseLibrary.Common and EnterpriseLibrary.Configuration (among other assemblies), both of EntLib 1.2. In the csproj file, both references have a hintpath which is relative, indicating the references in the project file are right. The references are made to an \u0026rsquo;external references\u0026rsquo; folder, where the entire EnterpriseLibrary can be found. This folder is also available in source control.\n(Part of) the statement which makes the build fail:\nCsc.exe /reference:”E:TFSBuildprojectname.DailyBinariesReleaseMicrosoft.Practices.EnterpriseLibrary.Common.dll” /reference:”\u0026hellip;.External ReferencesEntLib 1.2.0.0Microsoft.Practices.EnterpriseLibrary.Configuration.dll”\nMy main question is: what is making MSBuild pass one reference with a relative path, and one with an absolute one? And why to the binariesrelease folder? I tried cleaning up the project file, and I even made an entire new project and copied the files from the \u0026lsquo;old one\u0026rsquo; there. But all of this to no avail. We\u0026rsquo;re currently further investigating this issue, and a thread{.} has been started on the MSDN forums. I\u0026rsquo;ll keep you posted on any updates.\n","date":"1 June 2007","permalink":"https://www.rickvandenbosch.net/blog/msbuild-compilation-error/","section":"Blog","summary":"\u003cp\u003eOur current project uses the possibilities of MSBuild to have a daily build on a TFS server. This has been working up until yesterday somewhere around noon. Nobody knows what exactly happened, but it stopped working after our successful build of 11:42 am.\u003c/p\u003e","title":"MSBuild – Compilation error"},{"content":"At my current project we use Team Foundation Server together with the possibility to have a daily build through MSBuild. Over the weekend, the build failed. Because our \u0026lsquo;build master\u0026rsquo; called in sick this morning, I took it upon me to fix the build. But compiling the sources was no problem, because that finished without any errors. And there were no failing (unit)tests. Even better: there were no tests which had run at all! There were \u0026rsquo;no test results to display\u0026rsquo;. The only thing I found in the build log (which is pretty big in a 70+ project solution!) that could indicate a problem was a warning from MSBuild:\nMSBUILD : warning : Specified cast is not valid\nAnd, just below that line, the following one:\nThe previous error was converted to a warning because the task was called with ContinueOnError=true.\nAfter some searching and trying, I found out TFS / MSBuild doesn\u0026rsquo;t like it when your vsmdi file contains a list or sublist that doesn\u0026rsquo;t contain any tests to run. Somehow this feels like a bug, because parsing the testlist fails when it has no members. List != null \u0026amp;\u0026amp; List.Count \u0026gt; 0 anyone?\nTechnorati tags: MSBuild, .NET ","date":"21 May 2007","permalink":"https://www.rickvandenbosch.net/blog/msbuild-warning-specified-cast-is-not-valid/","section":"Blog","summary":"\u003cp\u003eAt my current project we use Team Foundation Server together with the possibility to have a daily build through MSBuild. Over the weekend, the build failed. Because our \u0026lsquo;build master\u0026rsquo; called in sick this morning, I took it upon me to fix the build. But compiling the sources was no problem, because that finished without any errors. And there were no failing (unit)tests. Even better: there were no tests which had run at all! There were \u0026rsquo;no test results to display\u0026rsquo;. The only thing I found in the build log (which is pretty big in a 70+ project solution!) that could indicate a problem was a warning from MSBuild:\u003c/p\u003e","title":"MSBUILD : warning : Specified cast is not valid"},{"content":"You\u0026rsquo;ve probably noticed it yourself. Bloggingabout.NET seems to be a bit unstable since a week or so. But it\u0026rsquo;s not just us: my rss reader indicates https://weblogs.asp.net has had some problems lately too. Is there any relation between these two sites? Do they happen to use the same database server? Or is it all just purely coincidence\u0026hellip;\nI don\u0026rsquo;t know what the problem exactly is, but I\u0026rsquo;m sure our administrator is working hard to get bloggingabout.net up and smoothly running as soon as possible again.\n","date":"21 May 2007","permalink":"https://www.rickvandenbosch.net/blog/blog-unstable/","section":"Blog","summary":"\u003cp\u003eYou\u0026rsquo;ve probably noticed it yourself. Bloggingabout.NET seems to be a bit unstable since a week or so. But it\u0026rsquo;s not just us: my rss reader indicates \u003ca href=\"https://weblogs.asp.net/\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://weblogs.asp.net\u003c/a\u003e has had some problems lately too. Is there any relation between these two sites? Do they happen to use the same database server? Or is it all just purely coincidence\u0026hellip;\u003c/p\u003e","title":"Blog unstable"},{"content":"A Halo 3 video has been posted at the Microsoft website, which can be found through the Bungie website. The article containing the link starts out with this next sentence:\nMaybe you\u0026rsquo;ve heard of him, maybe you haven\u0026rsquo;t\u0026hellip; but around Microsoft, Mr. Jukes has established a name for himself as a tireless, hardcore and fanatical player of Halo who isn\u0026rsquo;t too shabby in the video production department either.\nYou can find the complete article here. But most important: take a look at the video which is available here (right click, save target as). I think it displays great gameplay and nice image rendering. I know one thing for sure: that game will be mine as soon as it\u0026rsquo;s available. What a great time we live in ;).\nBy the way:\n_Before you check out Mr. Jukes\u0026rsquo; Halo 3 video debut, please keep in mind that this video was produced using the internal beta version of Halo 3. This means it\u0026rsquo;s a bit older than what the rest of the world will start playing in the next few days. It also means that it has all sorts of debug text all over it – this won\u0026rsquo;t be in the version you get your hands on. And, this was fully sanctioned and approved by Bungie – unlike some of those other “leaked” videos that have ended up online.\nTechnorati tags: Xbox 360, Games ","date":"11 May 2007","permalink":"https://www.rickvandenbosch.net/blog/halo-3-betalicious-video/","section":"Blog","summary":"\u003cp\u003eA Halo 3 video has been posted at the Microsoft website, which can be found through the \u003ca href=\"https://www.bungie.net/\" target=\"_blank\" rel=\"noreferrer\"\u003eBungie website\u003c/a\u003e. The article containing the link starts out with this next sentence:\u003c/p\u003e\n\u003cp\u003e\u003cem\u003eMaybe you\u0026rsquo;ve heard of him, maybe you haven\u0026rsquo;t\u0026hellip; but around Microsoft, Mr. Jukes has established a name for himself as a tireless, hardcore and fanatical player of Halo who isn\u0026rsquo;t too shabby in the video production department either.\u003c/em\u003e\u003c/p\u003e","title":"Halo 3 betalicious video"},{"content":"Thursday the 10th of May LogicaCMG The Netherlands organises an open house for ICT professionals. From 4 pm until 9 pm colleagues will be available to answer any and all questions you might have about (working at) LogicaCMG. People active in all of our competences will be present. The open house is hosted at some of our locations across the country. This time, the lucky locations are: Amstelveen, Arnhem, Eindhoven, Rotterdam and Rijswijk. I myself will be present at our location in Eindhoven. To sign up, just send me your info. Try to add your name, address, phonenumber, e-mail address and if possible your curriculum vitae. You can find more info at https://www.logicacmg.nl/openhuis (Dutch page).\nBy the way: in Eindhoven the open house is hosted at the 19th floor of our building. With clear weather, it offers a great view of Eindhoven and beyond\u0026hellip;\nImage missing ","date":"3 May 2007","permalink":"https://www.rickvandenbosch.net/blog/logicacmg-open-house-the-netherlands/","section":"Blog","summary":"\u003cp\u003eThursday the 10th of May LogicaCMG The Netherlands organises an open house for ICT professionals. From 4 pm until 9 pm colleagues will be available to answer any and all questions you might have about (working at) LogicaCMG. People active in all of our competences will be present. The open house is hosted at some of our locations across the country. This time, the lucky locations are: Amstelveen, Arnhem, Eindhoven, Rotterdam and Rijswijk. I myself will be present at our location in Eindhoven. To sign up, just send me your info. Try to add your name, address, phonenumber, e-mail address and if possible your curriculum vitae. You can find more info at \u003ca href=\"https://www.logicacmg.nl/openhuis\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://www.logicacmg.nl/openhuis\u003c/a\u003e (Dutch page).\u003c/p\u003e","title":"LogicaCMG open house (The Netherlands)"},{"content":"“Unit Test Adapter threw exception: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information..”\nThis error popped up at one of the testers of our project this morning. The unittests he selected worked fine on my machine, but all failed on his with the above message. After searching a bit we found that the only thing which was different between my testrunconfig and his was that he enabled code coverage for the assembly these unittests were pounding away at. As it turns out, this error appears when code coveraging (is that even a word?) a signed assembly without re-signing it.\nTo re-sing an assembly, open the testrunconfig you are using and go to the \u0026lsquo;code-coverage\u0026rsquo; element in the left pane. Locate the textbox \u0026rsquo;re-signing key file\u0026rsquo; and enter the path to the key file which should be used to re-sign the assembly (or browse for it, of course). Hit \u0026lsquo;Apply\u0026rsquo; and then hit \u0026lsquo;Close\u0026rsquo;. You\u0026rsquo;re done now! Happy unittesting\u0026hellip;.\nImage missing\n","date":"1 May 2007","permalink":"https://www.rickvandenbosch.net/blog/unit-test-adapter-threw-an-exception/","section":"Blog","summary":"\u003cp\u003e“Unit Test Adapter threw exception: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information..”\u003c/p\u003e\n\u003cp\u003eThis error popped up at one of the testers of our project this morning. The unittests he selected worked fine on my machine, but all failed on his with the above message. After searching a bit we found that the only thing which was different between my testrunconfig and his was that he enabled code coverage for the assembly these unittests were pounding away at. As it turns out, this error appears when code coveraging (is that even a word?) a signed assembly without re-signing it.\u003c/p\u003e","title":"Unit Test Adapter threw an exception"},{"content":"It took me a while, but in the end everything worked out and life\u0026rsquo;s good\u0026hellip; Most important changes are I have my very own server now, containing all the general stuff like mail, music, development stuff and that kind of data.\nMy workstation received a small update (I was able to upgrade based on the \u0026lsquo;old\u0026rsquo; machine of a friend) and is now running Vista quite smoothly. To be honest, I haven\u0026rsquo;t found any major issues yet.\nI\u0026rsquo;m currently reading up on Aspect-Oriented Programming / Software Development. Next to that I am trying to find the time to get a bit further with my .NET magazine article about reflection. To be honest I\u0026rsquo;m quite busy, so maybe I\u0026rsquo;ll ask the nice people at the magazine if it\u0026rsquo;s possible for my article to appear in the issue after the upcoming one. On the other hand, if I can find an inspired day I\u0026rsquo;ll probably be done\u0026hellip;\nAt my current project there\u0026rsquo;s lots of architecture-stuff to think about. We\u0026rsquo;re at a pretty abstract level, making it easier to think outside of the box. At least, that\u0026rsquo;s the way I experience it. I\u0026rsquo;m finding some of my co-workers don\u0026rsquo;t do so necessarily.\nLast but not least: yesterday I attended a course in presentation skills. The thing that struck me most was the metaphor \u0026lsquo;feedback is a gift\u0026rsquo;. You receive it, unpack it, look at it, and then it\u0026rsquo;s yours. So it\u0026rsquo;s also yours to do with it as you please. That\u0026rsquo;s a way of looking at feedback that makes it just a bit easier to receive (negative) feedback\u0026hellip;\n","date":"4 April 2007","permalink":"https://www.rickvandenbosch.net/blog/my-new-configs-and-more/","section":"Blog","summary":"\u003cp\u003eIt took me a while, but in the end everything worked out and life\u0026rsquo;s good\u0026hellip; Most important changes are I have my very own server now, containing all the general stuff like mail, music, development stuff and that kind of data.\u003cbr\u003e\nMy workstation received a small update (I was able to upgrade based on the \u0026lsquo;old\u0026rsquo; machine of a friend) and is now running Vista quite smoothly. To be honest, I haven\u0026rsquo;t found any major issues yet.\u003c/p\u003e","title":"My new configs, and more …"},{"content":"Last week I ran into a variable called @continue in the sourcecode of a project I\u0026rsquo;m reviewing. At first I had to think a bit before I knew what the @ was for. Of course I knew it\u0026rsquo;s an escape character when used in front of a string value. But when used in front of a variable name? In that case, it is an escape character also, but this time for the name of your variable. This way you can use a reserved word as a variable name.\nWhy would you do this? What\u0026rsquo;s so important about that exact name of the variable that it is not possible to think of a slightly different name which is not a reserved word? In this particular case, the boolean was used to indicate if the method it was declared in should continue parsing the next value in a foreach loop. I would call the variable \u0026lsquo;continueParsing\u0026rsquo; or \u0026lsquo;continueLooping\u0026rsquo; or something like that*. Those more clearly state the purpose of the variable, and don\u0026rsquo;t make you escape your variable name. Furthermore it doesn\u0026rsquo;t baffle 75% of the developers maintaining or reviewing your code because they don\u0026rsquo;t know why the variable starts with an @.\nMaybe I\u0026rsquo;m missing something. Maybe there are certain situations where this an absolute must. I can\u0026rsquo;t think of one right now though\u0026hellip;. can you?\n* By the way, the best way would probably be to use a break statement, but that\u0026rsquo;s not the reason I\u0026rsquo;m posting this for. 😉\n","date":"20 March 2007","permalink":"https://www.rickvandenbosch.net/blog/why-would-you/","section":"Blog","summary":"\u003cp\u003eLast week I ran into a variable called @continue in the sourcecode of a project I\u0026rsquo;m reviewing. At first I had to think a bit before I knew what the @ was for. Of course I knew it\u0026rsquo;s an escape character when used in front of a string value. But when used in front of a variable name? In that case, it is an escape character also, but this time for the name of your variable. This way you can use a reserved word as a variable name.\u003c/p\u003e","title":"Why would you?"},{"content":"It\u0026rsquo;s been a while since I blogged, because\u0026hellip;\n– I started a new (exciting but busy) project building a technical framework (and \u0026lsquo;proving\u0026rsquo; a reference architecture along the way).\n– it looks like I might become a published writer when I hand in my article for the Dutch .NET magazine anywhere in the next couple of weeks.\n– we had lot\u0026rsquo;s of meetings @ LogicaCMG lately, like the yearmeeting, an architect meeting, a funmeeting (bowling can be cool!), and so on.\n– I\u0026rsquo;m planning on doing more along the way of competence development for my team, so I have to do some research and come up with a plan on how to do so.\n– I was part of the orgnisation for the reunion of the musical I played in. We\u0026rsquo;re having it this saturday.\n– our house still needs some \u0026lsquo;home improvement\u0026rsquo; and I\u0026rsquo;m the guy to do it (preferably not \u0026lsquo;Tim Taylor\u0026rsquo; style).\n– I haven\u0026rsquo;t even had time to use my Xbox 360 the past couple of weeks!\nI\u0026rsquo;ll be coming up with some more posts in the near future, so stay tuned\u0026hellip;.. or bear with me 😉\n","date":"16 March 2007","permalink":"https://www.rickvandenbosch.net/blog/quickie/","section":"Blog","summary":"\u003cp\u003eIt\u0026rsquo;s been a while since I blogged, because\u0026hellip;\u003cbr\u003e\n– I started a new (exciting but busy) project building a technical framework (and \u0026lsquo;proving\u0026rsquo; a reference architecture along the way).\u003cbr\u003e\n– it looks like I might become a published writer when I hand in my article for the Dutch .NET magazine anywhere in the next couple of weeks.\u003cbr\u003e\n– we had lot\u0026rsquo;s of meetings @ \u003cA href=\"https://www.logicacmg.com\" target=\"_blank\"\u003eLogicaCMG\u003c/A\u003e lately, like the yearmeeting, an architect meeting, a funmeeting (bowling can be cool!), and so on.\u003cbr\u003e\n– I\u0026rsquo;m planning on doing more along the way of competence development for my team, so I have to do some research and come up with a plan on how to do so.\u003cbr\u003e\n– I was part of the orgnisation for the reunion of the musical I played in. We\u0026rsquo;re having it this saturday.\u003cbr\u003e\n– our house still needs some \u0026lsquo;home improvement\u0026rsquo; and I\u0026rsquo;m the guy to do it (preferably not \u0026lsquo;Tim Taylor\u0026rsquo; style).\u003cbr\u003e\n– I haven\u0026rsquo;t even had time to use my \u003ca href=\"/blogs/rick/archive/2007/01/02/xbox-360.aspx\"\u003eXbox 360\u003c/a\u003e the past couple of weeks!\u003c/p\u003e","title":"Quickie"},{"content":"As I posted earlier we had some trouble with upgrading the UIPAB to be used in a ASP.NET 2.0 Web Application Project. Eventually, we solved the problem and life was good. Almost a week ago I received a mail through my blog from someone looking for the solution. So here we go\u0026hellip;\nWe changed a few lines in the UIPAB WebFormViewManager. The problem was in determining the application path in the method \u0026lsquo;RedirectToNextView\u0026rsquo;. Here the applicationpath was all garbled up, which caused the redirect not to work. We implemented a property to return the right applicationpath:\n\u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;1\u0026lt;BR /\u0026gt;2\u0026lt;BR /\u0026gt;3\u0026lt;BR /\u0026gt;4\u0026lt;BR /\u0026gt;5\u0026lt;BR /\u0026gt;6\u0026lt;BR /\u0026gt;7\u0026lt;BR /\u0026gt;8\u0026lt;BR /\u0026gt;9\u0026lt;BR /\u0026gt;10\u0026lt;BR /\u0026gt;11\u0026lt;BR /\u0026gt;12\u0026lt;BR /\u0026gt;13\u0026lt;BR /\u0026gt;14\u0026lt;BR /\u0026gt;15\u0026lt;BR /\u0026gt;16\u0026lt;BR /\u0026gt;17\u0026lt;BR /\u0026gt;18\u0026lt;BR /\u0026gt;19\u0026lt;BR /\u0026gt;20\u0026lt;BR /\u0026gt;21\u0026lt;BR /\u0026gt;22\u0026lt;BR /\u0026gt;23\u0026lt;BR /\u0026gt;24\u0026lt;BR /\u0026gt;25\u0026lt;BR /\u0026gt;26\u0026lt;BR /\u0026gt;27\u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt; \u0026lt;FONT size=\u0026quot;2\u0026quot;\u0026gt;\u0026lt;SPAN\u0026gt;private\u0026lt;/SPAN\u0026gt; \u0026lt;SPAN\u0026gt;string\u0026lt;/SPAN\u0026gt; applicationPath = \u0026lt;SPAN\u0026gt;null\u0026lt;/SPAN\u0026gt;;\u0026lt;/FONT\u0026gt;\u0026lt;/PRE\u0026gt; \u0026lt;PRE\u0026gt;\u0026lt;FONT size=\u0026quot;2\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026lt;/PRE\u0026gt;\u0026lt;/FONT\u0026gt; /// /// Property returning the entire URL to the current request, /// excluding the page name but including the last slash (\u0026#8220;/\u0026#8221;) /// private string ApplicationPath { get { if (applicationPath == null) { if (HttpContext.Current.Request.UrlReferrer == null) { applicationPath = HttpContext.Current.Request.Url.ToString().Substring(0, HttpContext.Current.Request.Url.ToString().LastIndexOf(\u0026#8220;/\u0026#8221;) + 1); applicationPath += \u0026#8220;(S(\u0026#8220; + HttpContext.Current.Session.SessionID + \u0026#8220;))/\u0026#8221;; } else { applicationPath = HttpContext.Current.Request.UrlReferrer.AbsoluteUri; applicationPath = applicationPath.Substring(0, applicationPath.LastIndexOf(\u0026#8220;)/\u0026#8221;) + 2); } } return applicationPath; } } The above returns the path we need. It\u0026rsquo;s not a perfect example of defensive programming, but that\u0026rsquo;s not the intention of this post ;). We added the sessionstring because the application in which we used the UIPAB kept the session id in the URL. The RedirectToNextView method now looks like this:\n\u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;1\u0026lt;BR /\u0026gt;2\u0026lt;BR /\u0026gt;3\u0026lt;BR /\u0026gt;4\u0026lt;BR /\u0026gt;5\u0026lt;BR /\u0026gt;6\u0026lt;BR /\u0026gt;7\u0026lt;BR /\u0026gt;8\u0026lt;BR /\u0026gt;9\u0026lt;BR /\u0026gt;10\u0026lt;BR /\u0026gt;11\u0026lt;BR /\u0026gt;12\u0026lt;BR /\u0026gt;13\u0026lt;BR /\u0026gt;14\u0026lt;BR /\u0026gt;15\u0026lt;BR /\u0026gt;16\u0026lt;BR /\u0026gt;17\u0026lt;BR /\u0026gt; \u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;\u0026lt;SPAN\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026lt;SPAN\u0026gt;private\u0026lt;/SPAN\u0026gt; \u0026lt;SPAN\u0026gt;void\u0026lt;/SPAN\u0026gt; RedirectToNextView(\u0026lt;SPAN\u0026gt;string\u0026lt;/SPAN\u0026gt; previousView, ViewSettings viewSettings)\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;{\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;try\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;if\u0026lt;/SPAN\u0026gt; (previousView == \u0026lt;SPAN\u0026gt;null\u0026lt;/SPAN\u0026gt;)\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; HttpContext.Current.Response.Redirect(ApplicationPath \u0026lt;SPAN\u0026gt;+\u0026lt;/SPAN\u0026gt; viewSettings.Type, \u0026lt;SPAN\u0026gt;true\u0026lt;/SPAN\u0026gt;);\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;else\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; HttpContext.Current.Response.Redirect(ApplicationPath \u0026lt;SPAN\u0026gt;+\u0026lt;/SPAN\u0026gt; viewSettings.Type, \u0026lt;SPAN\u0026gt;false\u0026lt;/SPAN\u0026gt;);\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;catch\u0026lt;/SPAN\u0026gt; (System.Threading.ThreadAbortException)\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;}\u0026lt;/SPAN\u0026gt;\u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; And that's it! Looking back the problem seemed so big, but the solution seems/is so simple... 😉 ","date":"16 February 2007","permalink":"https://www.rickvandenbosch.net/blog/uipab-with-asp-net-2-0-our-solution/","section":"Blog","summary":"\u003cp\u003eAs I posted \u003ca href=\"/blogs/rick/archive/2006/11/28/UIPAB-trouble-upgrading-to-ASP.NET-2.0-Web-Application-Project.aspx\"\u003eearlier\u003c/a\u003e we had some trouble with upgrading the UIPAB to be used in a ASP.NET 2.0 Web Application Project. Eventually, we solved the problem and life was good. Almost a week ago I received a mail through my blog from someone looking for the solution. So here we go\u0026hellip;\u003c/p\u003e","title":"UIPAB with ASP.NET 2.0 – our solution"},{"content":"I encountered his error for the first time today. A Web Application Project I\u0026rsquo;ve been working on for the last months started throwing this error today almost every time I wanted to debug the project. The assembly info changed from time to time, but the error was the same. Most of the time I could \u0026lsquo;repair\u0026rsquo; it by closing the ASP.NET development server. But sometimes, even that didn\u0026rsquo;t work.\nAfter the first time it hit me today, I kept encountering this until I was fed up. I searched the internet, but there\u0026rsquo;s not much documented about this little bug. There are more people with the same problem but I didn\u0026rsquo;t find a solution at first. Then I found this page. That\u0026rsquo;s the exact error I\u0026rsquo;m getting! And now I think of it, I too always build my solution before I press F5 to debug. After searching based on that page, I found this post here. It seems there\u0026rsquo;s a web.config solution for this problem: adding to the system.web element of your web.config file. The \u0026lsquo;shadowCopyBinAssemblies\u0026rsquo; property is described as follows: Sets a Boolean value indicating whether the assemblies of an application in the Bin directory are shadow copied to the application\u0026rsquo;s ASP.NET Temporary Files directory.\nHope this helps.\n","date":"14 February 2007","permalink":"https://www.rickvandenbosch.net/blog/cannot-createshadow-copy-your-assembly-info-here-when-that-file-already-exists/","section":"Blog","summary":"\u003cp\u003eI encountered his error for the first time today. A Web Application Project I\u0026rsquo;ve been working on for the last months started throwing this error today almost every time I wanted to debug the project. The assembly info changed from time to time, but the error was the same. Most of the time I could \u0026lsquo;repair\u0026rsquo; it by closing the ASP.NET development server. But sometimes, even that didn\u0026rsquo;t work.\u003c/p\u003e","title":"Cannot create/shadow copy ‘your assembly info here’ when that file already exists"},{"content":"I signed up at technorati recently. Technorati uses ping to get the info from blogs. And BloggingAbout.NET (Community Server) supports that. Or it should\u0026hellip; Some posts just don\u0026rsquo;t show up over there! I\u0026rsquo;ve searched a little, and saw other people were having trouble with this too. I\u0026rsquo;ll see if I can find anything and if I do, I\u0026rsquo;ll forward it to our community administrator.\n","date":"11 February 2007","permalink":"https://www.rickvandenbosch.net/blog/ping-trouble/","section":"Blog","summary":"\u003cp\u003eI signed up at technorati \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2007/01/24/we-re-back.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003erecently\u003c/a\u003e. Technorati uses ping to get the info from blogs. And BloggingAbout.NET (Community Server) supports that. Or it should\u0026hellip; Some posts just don\u0026rsquo;t show up over \u003ca href=\"https://www.technorati.com/blogs/http%3A%2F%2Fbloggingabout.net%2Fblogs%2Frick\" target=\"_blank\" rel=\"noreferrer\"\u003ethere\u003c/a\u003e! I\u0026rsquo;ve searched a little, and saw other people were having trouble with this too. I\u0026rsquo;ll see if I can find anything and if I do, I\u0026rsquo;ll forward it to our community administrator.\u003c/p\u003e","title":"Ping trouble"},{"content":"We all encountered them in the field somewhere along the way: pieces of code that are based on assumptions. There\u0026rsquo;s something fundamentally wrong in assuming when writing code. I can understand that, looking at the big picture, you sometimes have to make an assumption when developing software. Some things you just can\u0026rsquo;t know for sure. This might concern something simple like the resolution of the targeted audience. But most of the time these kinds of assumptions are based on experience or plain old common sense. When these assumptions fail to be true, most of the time a mitigation strategy is at hand. And the software usually keeps running.\nWhen it comes to actually writing lines of code, I think you should always check and never assume. I tend to compare it to riding on a motorcycle. My instructor teached me to drive defensively. To \u0026lsquo;Expect the unexpected\u0026rsquo;. Sure, you can assume there won\u0026rsquo;t come a kid running from inbetween the two parked cars, but why take the risk? It\u0026rsquo;s better to anticipate a kid running across the street, so you can react accordingly when it does. And if it doesn\u0026rsquo;t? You at least didn\u0026rsquo;t take a chance \u0026hellip;\nSometimes, an assumption is obvious:\n\u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;1\u0026lt;BR /\u0026gt;2\u0026lt;BR /\u0026gt;3\u0026lt;BR /\u0026gt;4\u0026lt;BR /\u0026gt; \u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;\u0026lt;SPAN\u0026gt;\u0026lt;SPAN\u0026gt;public\u0026lt;/SPAN\u0026gt; \u0026lt;SPAN\u0026gt;string\u0026lt;/SPAN\u0026gt; ConvertObjectToString(\u0026lt;SPAN\u0026gt;object\u0026lt;/SPAN\u0026gt; objectToConvert)\u0026lt;BR /\u0026gt;{\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;return\u0026lt;/SPAN\u0026gt; objectToConvert.ToString();\u0026lt;BR /\u0026gt;}\u0026lt;/SPAN\u0026gt;\u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; Here, you assume the object which is passed in will always contain an actual object. But when a null reference is passed in, this method will throw an exception because objectToConvert is not set to an instance of an object and therefore you can\u0026rsquo;t invoke ToString(). When this method is written \u0026lsquo;defensively\u0026rsquo;, it looks something like this*:\n\u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;1\u0026lt;BR /\u0026gt;2\u0026lt;BR /\u0026gt;3\u0026lt;BR /\u0026gt;4\u0026lt;BR /\u0026gt;5\u0026lt;BR /\u0026gt;6\u0026lt;BR /\u0026gt;7\u0026lt;BR /\u0026gt;8\u0026lt;BR /\u0026gt;9\u0026lt;BR /\u0026gt;10\u0026lt;BR /\u0026gt;11\u0026lt;BR /\u0026gt;12\u0026lt;BR /\u0026gt;13\u0026lt;BR /\u0026gt;14\u0026lt;BR /\u0026gt;15\u0026lt;BR /\u0026gt; \u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;\u0026lt;SPAN\u0026gt;\u0026lt;SPAN\u0026gt;public\u0026lt;/SPAN\u0026gt; \u0026lt;SPAN\u0026gt;string\u0026lt;/SPAN\u0026gt; ConvertObjectToString(\u0026lt;SPAN\u0026gt;object\u0026lt;/SPAN\u0026gt; objectToConvert)\u0026lt;BR /\u0026gt;{\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;string\u0026lt;/SPAN\u0026gt; returnValue;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;if\u0026lt;/SPAN\u0026gt; (\u0026lt;SPAN\u0026gt;null\u0026lt;/SPAN\u0026gt; == objectToConvert)\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; returnValue \u0026lt;SPAN\u0026gt;=\u0026lt;/SPAN\u0026gt; \u0026lt;SPAN\u0026gt;string\u0026lt;/SPAN\u0026gt;.Empty;\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;else\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; returnValue \u0026lt;SPAN\u0026gt;=\u0026lt;/SPAN\u0026gt; objectToConvert.ToString();\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt;\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;return\u0026lt;/SPAN\u0026gt; returnValue;\u0026lt;BR /\u0026gt;}\u0026lt;/SPAN\u0026gt;\u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; That was an easy one. Sometimes, assumptions in code aren\u0026rsquo;t very transparent. Let\u0026rsquo;s take a look at this sample:\n\u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;1\u0026lt;BR /\u0026gt;2\u0026lt;BR /\u0026gt;3\u0026lt;BR /\u0026gt;4\u0026lt;BR /\u0026gt;5\u0026lt;BR /\u0026gt;6\u0026lt;BR /\u0026gt;7\u0026lt;BR /\u0026gt;8\u0026lt;BR /\u0026gt;9\u0026lt;BR /\u0026gt;10\u0026lt;BR /\u0026gt;11\u0026lt;BR /\u0026gt;12\u0026lt;BR /\u0026gt;13\u0026lt;BR /\u0026gt;14\u0026lt;BR /\u0026gt;15\u0026lt;BR /\u0026gt;16\u0026lt;BR /\u0026gt;17\u0026lt;BR /\u0026gt;18\u0026lt;BR /\u0026gt;19\u0026lt;BR /\u0026gt;20\u0026lt;BR /\u0026gt; \u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;\u0026lt;SPAN\u0026gt;\u0026lt;SPAN\u0026gt;/// \u0026lt;summary\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;/// Method that 'does something' to a Control.\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;/// \u0026lt;/summary\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;/// \u0026lt;param name=\u0026amp;#8221;controlToWorkOn\u0026amp;#8221;\u0026gt;Control on which 'someting will be done'\u0026lt;/param\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;/// \u0026lt;returns\u0026gt;A Control on which 'something has been done'\u0026lt;/returns\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;public\u0026lt;/SPAN\u0026gt; Control DoSomething(Control controlToWorkOn)\u0026lt;BR /\u0026gt;{\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;if\u0026lt;/SPAN\u0026gt; (\u0026lt;SPAN\u0026gt;null\u0026lt;/SPAN\u0026gt; !\u0026lt;SPAN\u0026gt;=\u0026lt;/SPAN\u0026gt; controlToWorkOn)\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;if\u0026lt;/SPAN\u0026gt; (controlToWorkOn \u0026lt;SPAN\u0026gt;is\u0026lt;/SPAN\u0026gt; TextBox)\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;//Do something important to a TextBox\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;else\u0026lt;/SPAN\u0026gt; \u0026lt;SPAN\u0026gt;if\u0026lt;/SPAN\u0026gt; (controlToWorkOn \u0026lt;SPAN\u0026gt;is\u0026lt;/SPAN\u0026gt; Button)\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;//Do something important to a Button\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;return\u0026lt;/SPAN\u0026gt; controlToWorkOn;\u0026lt;BR /\u0026gt;}\u0026lt;/SPAN\u0026gt;\u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; We will leave the \u0026lsquo;do something important to\u0026hellip;\u0026rsquo; parts out of this. The Control is checked for being null. The Control is typechecked so no wrong casts will be made. So nothing seems wrong, right? The problem here is the fact that you know this method only does something for a TextBox or a Button. But what happens if a year from now somebody gets the assignment to change the application, and he or she doesn\u0026rsquo;t know about the method only working for TextBoxes or Buttons? The method will return the Control unchanged, but the caller might think everything is OK. Often we write methods with certain constraints about the calls made to that method in the backs of our heads. And often without realy realizing it. But there might come a time that somebody who doesn\u0026rsquo;t know the constraints has to jump in.\nTo be sure passing in another type of Control will not give any problems, you might consider a solution like this one:\n\u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;1\u0026lt;BR /\u0026gt;2\u0026lt;BR /\u0026gt;3\u0026lt;BR /\u0026gt;4\u0026lt;BR /\u0026gt;5\u0026lt;BR /\u0026gt;6\u0026lt;BR /\u0026gt;7\u0026lt;BR /\u0026gt;8\u0026lt;BR /\u0026gt;9\u0026lt;BR /\u0026gt;10\u0026lt;BR /\u0026gt;11\u0026lt;BR /\u0026gt;12\u0026lt;BR /\u0026gt;13\u0026lt;BR /\u0026gt;14\u0026lt;BR /\u0026gt;15\u0026lt;BR /\u0026gt;16\u0026lt;BR /\u0026gt;17\u0026lt;BR /\u0026gt;18\u0026lt;BR /\u0026gt;19\u0026lt;BR /\u0026gt;20\u0026lt;BR /\u0026gt;21\u0026lt;BR /\u0026gt;22\u0026lt;BR /\u0026gt;23\u0026lt;BR /\u0026gt;24\u0026lt;BR /\u0026gt; \u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;TD\u0026gt; \u0026lt;PRE\u0026gt;\u0026lt;SPAN\u0026gt;\u0026lt;SPAN\u0026gt;/// \u0026lt;summary\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;/// Method that 'does something' to a Control.\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;/// \u0026lt;/summary\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;/// \u0026lt;param name=\u0026amp;#8221;controlToWorkOn\u0026amp;#8221;\u0026gt;Control on which 'someting will be done'\u0026lt;/param\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;/// \u0026lt;returns\u0026gt;A Control on which 'something has been done'\u0026lt;/returns\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt;\u0026lt;SPAN\u0026gt;public\u0026lt;/SPAN\u0026gt; Control DoSomething(Control controlToWorkOn)\u0026lt;BR /\u0026gt;{\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;if\u0026lt;/SPAN\u0026gt; (\u0026lt;SPAN\u0026gt;null\u0026lt;/SPAN\u0026gt; !\u0026lt;SPAN\u0026gt;=\u0026lt;/SPAN\u0026gt; controlToWorkOn)\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;if\u0026lt;/SPAN\u0026gt; (controlToWorkOn \u0026lt;SPAN\u0026gt;is\u0026lt;/SPAN\u0026gt; TextBox)\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;//Do something important to a TextBox\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;else\u0026lt;/SPAN\u0026gt; \u0026lt;SPAN\u0026gt;if\u0026lt;/SPAN\u0026gt; (controlToWorkOn \u0026lt;SPAN\u0026gt;is\u0026lt;/SPAN\u0026gt; Button)\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;//Do something important to a Button\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;else\u0026lt;/SPAN\u0026gt;\u0026lt;BR /\u0026gt; {\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;throw\u0026lt;/SPAN\u0026gt; \u0026lt;SPAN\u0026gt;new\u0026lt;/SPAN\u0026gt; NotSupportedException(\u0026lt;SPAN\u0026gt;\u0026amp;#8220;Control-type not supported in this method\u0026amp;#8221;\u0026lt;/SPAN\u0026gt;);\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; }\u0026lt;BR /\u0026gt; \u0026lt;SPAN\u0026gt;return\u0026lt;/SPAN\u0026gt; controlToWorkOn;\u0026lt;BR /\u0026gt;}\u0026lt;/SPAN\u0026gt;\u0026lt;/PRE\u0026gt; \u0026lt;/TD\u0026gt; Another way to solve this problem is to make the DoSomething method private and generate two public methods. One that takes a TextBox and one that takes a Button, both eventually calling the private DoSomething method. This would actually be the solution I would choose, because then the problem pops up compile time in stead of runtime. And I think it aids future developers better.\n\u0026lsquo;Defensive programming\u0026rsquo;. Writing software anticipating as many problems as possible to ensure correct functioning of the software. Even when the software is edited later by someone who doesn\u0026rsquo;t have your mindset.\nEdit: Wikipedia has an article on defensive programming.\nEdit2: Thanks Geraldo Hockx for your sharp eye! I changed the code samples: I made a few typo\u0026rsquo;s.\n* Yes, you could initialize the local parameter to string.Empty and only have an if-statement. And yes, you could use the conditional operator. And of course you could use two return statements. But this is my coding style (at the moment) so this is how I would do it right now ;).\n","date":"8 February 2007","permalink":"https://www.rickvandenbosch.net/blog/defensive-programming/","section":"Blog","summary":"\u003cp\u003eWe all encountered them in the field somewhere along the way: pieces of code that are based on assumptions. There\u0026rsquo;s something fundamentally wrong in assuming when writing code. I can understand that, looking at the big picture, you sometimes have to make an assumption when developing software. Some things you just can\u0026rsquo;t know for sure. This might concern something simple like the \u003cA href=\"https://www.imacfreak.com/abstract.jpg\" target=\"_blank\"\u003eresolution of the targeted audience\u003c/A\u003e. But most of the time these kinds of assumptions are based on experience or plain old common sense. When these assumptions fail to be true, most of the time a mitigation strategy is at hand. And the software usually keeps running.\u003c/p\u003e","title":"Defensive programming"},{"content":"Today I changed the appearance of my blog. The header has changed, and the content part is much wider. Because of the self-made banner I think this is a little more personal. Or a little less ordinary, whichever you prefer. If you have any feedback, please let me know. I think it\u0026rsquo;s pretty sweet, although this won\u0026rsquo;t show up pretty in a resolution below 1280 x 1024\u0026hellip; Ah well, I think most people in our line of work will meet this requirement.\nFollowing soon: a post on developing software as if you were riding a motorcycle\u0026hellip;\n","date":"7 February 2007","permalink":"https://www.rickvandenbosch.net/blog/changed-appearance/","section":"Blog","summary":"\u003cp\u003eToday I changed the appearance of my blog. The header has changed, and the content part is much wider. Because of the self-made banner I think this is a little more personal. Or a little less ordinary, whichever you prefer. If you have any feedback, please let me know. I think it\u0026rsquo;s pretty sweet, although this won\u0026rsquo;t show up pretty in a resolution below 1280 x 1024\u0026hellip; Ah well, I think most people in our line of work will meet this requirement.\u003c/p\u003e","title":"Changed appearance"},{"content":"Image missing\nIt seems there\u0026rsquo;s something to be celebrated today, so my girlfriend went and bought this little gem for me called the Gear4 HouseParty II. Its design is pretty cool, and I must say the quality of the sound comming out of that little box (approx. 25 cm wide) is pretty stunning! It comes with docks for all iPods (except for the shuffle) and even has its own remote, which lets you skip songs, change the volume and even use the iPod menu. Thanks Kaatje, for this pretty neat present!\n","date":"29 January 2007","permalink":"https://www.rickvandenbosch.net/blog/cool-present/","section":"Blog","summary":"\u003cp\u003e\u003cspan class=\"missing-image\" role=\"img\" aria-label=\"Image missing\"\u003eImage missing\u003c/span\u003e\u003c/p\u003e\n\u003cp\u003eIt seems there\u0026rsquo;s something to be celebrated today, so my girlfriend went and bought this little gem for me called the Gear4 HouseParty II. Its design is pretty cool, and I must say the quality of the sound comming out of that little box (approx. 25 cm wide) is pretty stunning! It comes with docks for all iPods (except for the shuffle) and even has its own remote, which lets you skip songs, change the volume and even use the iPod menu. Thanks Kaatje, for this pretty neat present!\u003c/p\u003e","title":"Cool present"},{"content":"After managing to dodge tags for quite some time, I\u0026rsquo;ve been tagged twice this week. Both PJ van de Sande and Marcel Boersma tagged me, so here we go\u0026hellip;\n**We named our cat after a dog\n** Our cat\u0026rsquo;s name is \u0026lsquo;Dribbel\u0026rsquo;, which is the Dutch name for the dog \u0026lsquo;Spot\u0026rsquo;. The most important reason for naming the cat like that, is because of a big white spot on its back and a smaller black spot on its nose. Next to that, \u0026lsquo;dribbelen\u0026rsquo; is Dutch for a certain way of walking which Dribbel does too\u0026hellip; And of course, we just liked the name ;).\n**I\u0026rsquo;m a Stephen King fan\n** Not only do I have 20+ Stephen Kings movies on DVD, I also have many of his books. Some of them in Dutch, but most of them in English because sometimes stuff gets lost in translation. And I like the original stuff better. At this point I still think Storm of the Century is the best film based on a Stephen King book. Especially because the movie takes you through more than 6 hours of suspense, without ever getting boring. Other great films based on a King book (in no particular order): The shining (Here\u0026rsquo;s Johnny!), Dreamcatcher, The green mile, The Shawshank redemption, etc\u0026hellip;\u0026hellip;.\n**I play in musicals\n** Currently I have played in three productions of the Veldhovense Revue (link to Dutch site). It\u0026rsquo;s a musical-kind-of-thing with a custom written story that references current affairs in Veldhoven, a village next to Eindhoven. It has been quite a lot of fun, so I\u0026rsquo;m looking in to doing a bit more than \u0026lsquo;only\u0026rsquo; play in the revue every 2 years. But because each revue has about 1 year of rehearsing, time\u0026rsquo;s kinda short. And yes, occasionaly I had to dance. Or \u0026lsquo;move\u0026rsquo; as I like to call it :D.\n**The origin of my nickname (Gump)\n** When I was in college, a friend of mine always called me \u0026lsquo;from the forrest\u0026rsquo;, as that is my last name roughly translated into English. It took my fellow students about 6 months to come up with the link to Forrest Gump. Since that day they started calling me Gump. After a few months I accepted it and started using it myself. I actually kinda like it\u0026hellip; 😉\n**I wanted to become a doctor\n** When I just started high school, I wanted to become a doctor. A children\u0026rsquo;s doctor to be precise. I was always fascinated with medical stuff, and I wanted to work with children. Becoming a children\u0026rsquo;s doctor seemed the perfect option combining the two. During high school my interests changed, and lots of things happened in my personal life that made me reconsider about what I wanted to become. Around that time, my brother attended technical college and had to program a Censim via our 486. That made me turn\u0026hellip; A few weeks later I had made my first program in Pascal. A couple of months later a career test pointed me towards software development. I have no regret whatsoever about the choice I made: I\u0026rsquo;m lovin\u0026rsquo; it! So there you have it. Five things you probably didn\u0026rsquo;t know about me. Or didn\u0026rsquo;t want to know ;). It\u0026rsquo;s pretty hard finding 5 people who haven\u0026rsquo;t been tagged yet. I\u0026rsquo;ll give it a try, but I might tag people who have been tagged already\u0026hellip;\nAnko Duizer\nCarlo Poli\nRene Schrieken\nJip Fens Adel Khalil\n","date":"26 January 2007","permalink":"https://www.rickvandenbosch.net/blog/tag-im-it/","section":"Blog","summary":"\u003cp\u003eAfter managing to dodge tags for quite some time, I\u0026rsquo;ve been tagged twice this week. Both \u003cA href=\"https://www.born2code.net\" target=\"_blank\"\u003ePJ van de Sande\u003c/A\u003e and \u003cA href=\"https://www.marcelboersma.com/\" target=\"_blank\"\u003eMarcel Boersma\u003c/A\u003e tagged me, so here we go\u0026hellip;\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e**We named our cat after a dog\u003cbr\u003e\n** Our cat\u0026rsquo;s name is \u0026lsquo;Dribbel\u0026rsquo;, which is the Dutch name for the dog \u0026lsquo;\u003cA href=\"https://en.wikipedia.org/wiki/Spot_the_Dog\" target=\"_blank\"\u003eSpot\u003c/A\u003e\u0026rsquo;. The most important reason for naming the cat like that, is because of a big white spot on its back and a smaller black spot on its nose. Next to that, \u0026lsquo;dribbelen\u0026rsquo; is Dutch for a certain way of walking which Dribbel does too\u0026hellip; And of course, we just liked the name ;).\u003c/p\u003e","title":"Tag, I’m it."},{"content":"Scott Guthrie announced it January 23rd: version 1.0 of the ASP.NET AJAX extensions has been released. Good news \u0026hellip; !\nScott also added a post containing Links to ASP.NET AJAX 1.0 resources, and answers to some common questions. A good read for people who would like to get started on AJAX. It catches some of the common problems you might encounter when you get started with the ASP.NET AJAX extensions. I liked the addition 2.0 (ASP.NET 2.0 AJAX extensions), but that\u0026rsquo;s not used everywhere. Probably because it\u0026rsquo;s kinda weird using two (different) version numbers in a single products\u0026rsquo; name after adding 1.0 for the version for the AJAX library\u0026hellip; (full \u0026amp; difficult productname used here.)\n","date":"25 January 2007","permalink":"https://www.rickvandenbosch.net/blog/asp-net-2-0-ajax-extensions-version-1-0-released/","section":"Blog","summary":"\u003cp\u003eScott Guthrie \u003ca href=\"https://weblogs.asp.net/scottgu/archive/2007/01/23/asp-net-ajax-1-0-released.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eannounced it\u003c/a\u003e January 23rd: version 1.0 of the \u003cem\u003eASP.NET AJAX extensions\u003c/em\u003e has been \u003ca href=\"https://www.microsoft.com/downloads/details.aspx?FamilyID=ca9d90fa-e8c9-42e3-aa19-08e2c027f5d6\u0026amp;displaylang=en\" target=\"_blank\" rel=\"noreferrer\"\u003ereleased\u003c/a\u003e. Good news \u0026hellip; !\u003c/p\u003e\n\u003cp\u003eScott also added \u003ca href=\"https://weblogs.asp.net/scottgu/archive/2007/01/25/links-to-asp-net-ajax-1-0-resources-and-answers-to-some-common-questions.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ea post\u003c/a\u003e containing \u003cem\u003eLinks to ASP.NET AJAX 1.0 resources, and answers to some common questions\u003c/em\u003e. A good read for people who would like to get started on AJAX. It catches some of the common problems you might encounter when you get started with the ASP.NET AJAX extensions. I liked the addition 2.0 (ASP.NET 2.0 AJAX extensions), but that\u0026rsquo;s not used everywhere. Probably because it\u0026rsquo;s kinda weird using two (different) version numbers in a single products\u0026rsquo; name after adding 1.0 for the version for the AJAX library\u0026hellip; (full \u0026amp; difficult productname used \u003ca href=\"https://ajax.asp.net/downloads/default.aspx?tabid=47\" target=\"_blank\" rel=\"noreferrer\"\u003ehere\u003c/a\u003e.)\u003c/p\u003e","title":"ASP.NET (2.0) AJAX extensions version 1.0 released"},{"content":"This morning we landed in Amsterdam at approximately 7.30 am. We had a great week in America, starting of with the great sessions at Microsoft for LEAP. Together with a colleague of mine (Ruud Campsteijn) I stayed for a few more days, so we got to see some more than just the inside of the Microsoft building, like an NBA game, the Boeing factory, Downtown Seattle and so on. You will be hearing more about the LEAP sessions in a little while. Right now, I\u0026rsquo;ve been awake for 24 30 hours straight, so it might be a good idea to go sleep now\u0026hellip;\nThe last thing I did today before I\u0026rsquo;ll be going to sleep in a minute (except for writing this blogpost) was sign up with technorati. I\u0026rsquo;m trying to find out how I can realy use it, but the first step has been made. Tomorow I\u0026rsquo;ll try to get the search and \u0026lsquo;view profile\u0026rsquo; links working. I\u0026rsquo;ll blog to you guys later. But first, let\u0026rsquo;s get some sleep \u0026hellip;\n","date":"24 January 2007","permalink":"https://www.rickvandenbosch.net/blog/were-back/","section":"Blog","summary":"\u003cp\u003eThis morning we landed in Amsterdam at approximately 7.30 am. We had a great week in America, starting of with the great sessions at Microsoft for LEAP. Together with a colleague of mine (\u003ca href=\"https://www.linkedin.com/pub/2/481/174\" target=\"_blank\" rel=\"noreferrer\"\u003eRuud Campsteijn\u003c/a\u003e) I stayed for a few more days, so we got to see some more than just the inside of the Microsoft building, like an NBA game, the Boeing factory, Downtown Seattle and so on. You will be hearing more about the LEAP sessions in a little while. Right now, I\u0026rsquo;ve been awake for \u003cSTRIKE\u003e24\u003c/STRIKE\u003e 30 hours straight, so it might be a good idea to go sleep now\u0026hellip;\u003c/p\u003e","title":"We’re back!"},{"content":"It\u0026rsquo;s almost here\u0026hellip; Next monday me and about 30 LogicaCMG colleagues will be heading to Redmond. I\u0026rsquo;m pretty excited: we\u0026rsquo;ll be attending some pretty cool sessions, and some of us will get the opportunity to take a look at Microsofts vision of the future home in their Microsoft Home. Besides that I\u0026rsquo;ll stay a few days longer, so I can see something of America. My first trip over there ever \u0026hellip; !\nLately there have been some big changes at our house. Because my girlfriend and I both played in a musical through December, most of the chores were ignored. The past week and a half we catched up on some of them. Or actually, on a lot of them. We closed two holes in walls which were there because of bathroom remoddeling, painted those walls, mounted our new TV to the wall in the bedroom, got two sidetables, ordered lamps for the dining area and much, much more. Our house is becoming a home more and more.\nI\u0026rsquo;m using my Xbox a lot. Now no longer as just a games console, but also as an extender for my Media Center*, as a means to keep in contact with friends and as part of my home cinema system. I think the HD-DVD player (is there an ETA for Europe?) and IPTV (Dutch article) will contribute to the further success of the Xbox. And of course, it\u0026rsquo;s a great games console. Gears of War anyone?\nLast but not least, I changed the look of this blog, as you might have noticed. Not really usefull information, but I thought it put it in here\u0026hellip; ;). I\u0026rsquo;ve picked up blogging again, so stay tuned for more howto\u0026rsquo;s, code snippets, solutions for problems and so on.\nI\u0026rsquo;m still looking for a way to transport the entire TV signal (all channels) through air or the electrical network in my house. Suggestions are welcome! ","date":"9 January 2007","permalink":"https://www.rickvandenbosch.net/blog/personal-update-january-2006/","section":"Blog","summary":"\u003cp\u003eIt\u0026rsquo;s almost here\u0026hellip; Next monday me and about 30 LogicaCMG colleagues will be heading to Redmond. I\u0026rsquo;m pretty excited: we\u0026rsquo;ll be attending some pretty cool sessions, and some of us will get the opportunity to take a look at Microsofts vision of the future home in their \u003cA href=\"https://seattletimes.nwsource.com/html/businesstechnology/2002048005_microsofthome28.html\" target=\"_blank\"\u003eMicrosoft Home\u003c/A\u003e. Besides that I\u0026rsquo;ll stay a few days longer, so I can see something of America. My first trip over there ever \u0026hellip; !\u003c/p\u003e","title":"Personal update – January 2006"},{"content":"The past weeks have been busy for me, but especially in the evenings, with the musical I played in and all that\u0026hellip; During the day, I had some spare time every now and again, and I wasted most of that on my Xbox 360. \u0026hellip; loving it 😉 \u0026hellip;\nXBox Live is getting more and more functionality. On top of that, more and more people are connecting\u0026hellip; I\u0026rsquo;m curious which bloggers/blog-readers game online with their Xbox 360 and which games are played. Maybe we can join sometime, to play games together? Gamertag: OZGump.\n","date":"2 January 2007","permalink":"https://www.rickvandenbosch.net/blog/xbox-360/","section":"Blog","summary":"\u003cp\u003eThe past weeks have been busy for me, but especially in the evenings, with the musical I played in and all that\u0026hellip; During the day, I had some spare time every now and again, and I wasted most of that on my Xbox 360. \u0026hellip; loving it 😉 \u0026hellip;\u003c/p\u003e","title":"Xbox 360"},{"content":"Maybe I mentioned it earlier: I play in a musical in the month December (Veldhovense Revue). We started rehearsing twice a week in March. Now, we\u0026rsquo;ve played 4 shows already, and we\u0026rsquo;ve got 10 more to go. We\u0026rsquo;ve been really busy the last couple of weeks to make it a great show, and I think we succeeded.\nAnyway, I just wanted to mention the reason for me not blogging so much lately. This will change in the new year. And if I don\u0026rsquo;t talk to you till then: have the best Christmas days ever and a beautiful new year.\n","date":"18 December 2006","permalink":"https://www.rickvandenbosch.net/blog/low-blogging-activity-again/","section":"Blog","summary":"\u003cp\u003eMaybe I mentioned it earlier: I play in a musical in the month December (\u003ca href=\"https://www.veldhovenserevue.nl/\" target=\"_blank\"\u003eVeldhovense Revue\u003c/a\u003e). We started rehearsing twice a week in March. Now, we\u0026rsquo;ve played 4 shows already, and we\u0026rsquo;ve got 10 more to go. We\u0026rsquo;ve been really busy the last couple of weeks to make it a great show, and I think we succeeded.\u003c/p\u003e","title":"Low blogging activity – again"},{"content":"We\u0026rsquo;re working to upgrade our current ASP.NET 1.1 project to an ASP.NET 2.0 Web Application project (so that\u0026rsquo;s not the new Visual Studio 2005 website model). We had some basic minor migration issues, which have all been addressed and are currently solved. The only problem we have right now is with the UIP Application Block. There are several people online stating they\u0026rsquo;ve got UIPAB working in a .NET 2.0 project. Unfortunately, we haven\u0026rsquo;t got it working\u0026hellip; yet 😉\nThe fact they\u0026rsquo;ve got it working might be in several things: are we using the UIPAB differently? Is the problem in the fact that we\u0026rsquo;re using the Web Application Project projecttype? And maybe others have got it working in WinForms apps, but not in WebApps? Anyway, we changed the UIPConfigSchema based on this thread to get it to \u0026lsquo;run\u0026rsquo; without generating runtime errors. At this point, everything compiles and runs without runtime errors\u0026hellip; What\u0026rsquo;s the problem, you ask? The UIPAB is supposed to redirect to the first page of the view as soon as a button is pressed, but doesn\u0026rsquo;t. Actually, it doesn\u0026rsquo;t do anything. After calling UIPManager.StartOpenNavigationTask, the code execution eventually stops in the WebformViewManager class at the RedirectToNextView method with a ThreadAbortException. This seems to be caused by the Response.Redirect, which natively causes this exception. When you use the override with the EndResponse boolean set to false, this should avoid the Response.End being called and so should stop exception from being thrown. The UIPAB uses this overload, but the exception is still thrown. I\u0026rsquo;m not sure if that is the problem, but it seems so at this point.\nWe\u0026rsquo;re looking in to this right now. If we find anything, I\u0026rsquo;ll keep you posted. On the other hand: if you have any pointers, I\u0026rsquo;m open to suggestions. Drop me a line.\n","date":"28 November 2006","permalink":"https://www.rickvandenbosch.net/blog/uipab-trouble-upgrading-to-asp-net-2-0-web-application-project/","section":"Blog","summary":"\u003cp\u003eWe\u0026rsquo;re working to upgrade our current ASP.NET 1.1 project to an ASP.NET 2.0 Web Application project (so that\u0026rsquo;s \u003cem\u003enot\u003c/em\u003e the new Visual Studio 2005 website model). We had some basic minor migration issues, which have all been addressed and are currently solved. The only problem we have right now is with the UIP Application Block. There are several people online stating they\u0026rsquo;ve got UIPAB working in a .NET 2.0 project. Unfortunately, we haven\u0026rsquo;t got it working\u0026hellip; yet 😉\u003c/p\u003e","title":"UIPAB trouble upgrading to ASP.NET 2.0 Web Application Project"},{"content":"I tried using Windows Live Writer as soon as it got out, but because of proxy settings at the company I was working publishing posts wasn\u0026rsquo;t possible. I only now got time to try it at home, because I\u0026rsquo;ve been at home ill the past days. I\u0026rsquo;m still not 100% well, but I\u0026rsquo;ll keep quiet to get well soon. So maybe it\u0026rsquo;s better if I go and rest now\u0026hellip;\nBy the way: nice writing software, Windows Live Writer!\n","date":"10 November 2006","permalink":"https://www.rickvandenbosch.net/blog/wlw-my-first-post/","section":"Blog","summary":"\u003cp\u003eI tried using Windows Live Writer as soon as it got out, but because of proxy settings at the company I was working publishing posts wasn\u0026rsquo;t possible. I only now got time to try it at home, because I\u0026rsquo;ve been at home ill the past days. I\u0026rsquo;m still not 100% well, but I\u0026rsquo;ll keep quiet to get well soon. So maybe it\u0026rsquo;s better if I go and rest now\u0026hellip;\u003c/p\u003e","title":"WLW – My first post"},{"content":"Sadly, I will not be attending the 2006 European developer Tech·Ed. Fortunately, the reason I won\u0026rsquo;t be there is quite nice: I am currently attending Microsoft\u0026rsquo;s \u0026lsquo;LEAP for aspiring architects\u0026rsquo; program, which enables me to visit Redmond next January! So although I will not be visiting Spain next week, America is whitin reach! I\u0026rsquo;m looking forward to visiting the Microsoft Campus. I\u0026rsquo;ll post all the interesting information over here \u0026hellip;\n","date":"2 November 2006","permalink":"https://www.rickvandenbosch.net/blog/teched-developers-2006/","section":"Blog","summary":"\u003cp\u003eSadly, I will not be attending the 2006 European developer Tech·Ed. Fortunately, the reason I won\u0026rsquo;t be there is quite nice: I am currently attending Microsoft\u0026rsquo;s \u0026lsquo;LEAP for aspiring architects\u0026rsquo; program, which enables me to visit Redmond next January! So although I will not be visiting Spain next week, America is whitin reach! I\u0026rsquo;m looking forward to visiting the Microsoft Campus. I\u0026rsquo;ll post all the interesting information over here \u0026hellip;\u003c/p\u003e","title":"Tech·Ed Developers 2006"},{"content":"I used to think we (people working in software development) were far behind when it came to testing. Due to a few experiences over hte last few weeks this has changed\u0026hellip; In waterfall projects, testing is at the end of the process, causing it to be the first thing to go when time gets short. In agile methods, test is evenly divided throughout the process. This combined with the popularity of agile methods make that test is getting more and more mature in software development. We all know we should test (although we do not always act upon the things we know), and we’re constantly trying to find ways to optimize our entire process. We are ahead of our times, I tell you.\nIt started out when we wanted to remodel our bathroom. After three visits to the contractor, everything was documented and sketched correct. We double checked everything, saw it was good and signed the order.\nFirst, the work we did to prepare for the contractor was not good enough. We followed the specs exactly, but it turned out they were no good. That can happen…\nNext there were several things that simple requirements testing could have prevented: the wrong tiles were placed on the front of the bath, the lights in the ceiling weren’t where they were supposed to be, the switches were not placed where we wanted them and the grouping of the lights was not the grouping we agreed upon in the order. The correct information on all of these ‘problems’ was documented in the order, but it was not tested before release.\nNext up: my car. Because of cruise control trouble, I had to bring it in. I picked it up the next day. A few minutes after I left the garage, I remembered the guys over there always turn my automatic lights to manual ‘off’, probably to make sure the car doesn’t turn its lights on inside the garage. I wanted to switch it back to ‘Auto’, but this option had disappeared from the switch. In stead, all I had was ‘Off’ (which is the Auto setting) and ‘On’. I had no way to disable the automatic switching of the lights of my car…!\nIn this situation, a simple regression test could have found this problem, making it possible for them to resolve it before release.\nIt seems the importance of testing hasn’t sunk in in (small) business \u0026amp; retail yet. With little effort these businesses can boost their service levels. There’s a chance it’s more cost-efficient too, because there’s less rework to be done after the ‘release’. Most importantly, customer satisfaction will increase, and as far as I know that’s what makes those businesses tick…\n","date":"13 October 2006","permalink":"https://www.rickvandenbosch.net/blog/theres-a-lot-to-be-taught-by-software-developers/","section":"Blog","summary":"\u003cp\u003eI used to think we (people working in software development) were far behind when it came to testing. Due to a few experiences over hte last few weeks this has changed\u0026hellip; In waterfall projects, testing is at the end of the process, causing it to be the first thing to go when time gets short. In agile methods, test is evenly divided throughout the process. This combined with the popularity of agile methods make that test is getting more and more mature in software development. We all know we should test (although we do not always act upon the things we know), and we’re constantly trying to find ways to optimize our entire process. We are ahead of our times, I tell you.\u003c/p\u003e","title":"There’s a lot to be taught by software developers"},{"content":"Google added another cool search to their labs: Google Code search. Find code written in almost any language, and under almost any license. Have a look at advanced code search and see the possibilities. If the codebase that is searched is big enough, this might be a good step into getting developers to use Google if they\u0026rsquo;re looking for a piece of code (when they\u0026rsquo;re that not doing that already\u0026hellip;).\n","date":"6 October 2006","permalink":"https://www.rickvandenbosch.net/blog/google-code-search/","section":"Blog","summary":"\u003cp\u003eGoogle added another cool search to their \u003cA href=\"https://labs.google.com/\" target=\"_blank\"\u003elabs\u003c/A\u003e: \u003cA href=\"https://www.google.com/codesearch\" target=\"_blank\"\u003eGoogle Code search\u003c/A\u003e. Find code written in almost any language, and under almost any license. Have a look at \u003cA href=\"https://www.google.com/codesearch/advanced_code_search\" target=\"_blank\"\u003eadvanced code search\u003c/A\u003e and see the possibilities. If the codebase that is searched is big enough, this might be a good step into getting developers to use Google if they\u0026rsquo;re looking for a piece of code (when they\u0026rsquo;re that not doing that already\u0026hellip;).\u003c/p\u003e","title":"Google code search"},{"content":"Because of a new way of working here at the customer I\u0026rsquo;m located at, two virtual machines will be deployed to each developer\u0026rsquo;s machine. These VM\u0026rsquo;s will be run using VMware player. The thing is, the VM\u0026rsquo;s should be able to access the network and all the \u0026rsquo;normal\u0026rsquo; resources. Because of this, all the VM\u0026rsquo;s should have unique (computer)names. But they have to be traceable to the host machine.\nThe wish the customer has at this point is to give the VM\u0026rsquo;s a computername based on the name of the machine the VM will be run on. Unfortunately, this doesn\u0026rsquo;t seem to be supported in VMware, other than using sysprep and asking the user to enter the host\u0026rsquo;s computername. At this point the \u0026lsquo;asking the user\u0026rsquo; option is being used, but we\u0026rsquo;re trying to find a way to get host\u0026rsquo;s name from within a VM without any user interaction. Nice challenge\u0026hellip; 😉\nThe VM\u0026rsquo;s are working like a charm. Dragging and dropping files between host and VM, supergood performance (of course, with a 2.16 GHz Core Duo 2Gb internal memory laptop\u0026hellip;.!) and seamless resizing of the entire VM desktop. My first impression tells me VMware player works smoother than Microsoft Virtual PC, but the comparison is uneven because of the state of the art hardware I\u0026rsquo;m running VMware on right now\u0026hellip; If I have any more info, I\u0026rsquo;ll keep you posted.\nBy the way, if you have any ideas about getting the host\u0026rsquo;s name, drop me a line.\n","date":"15 September 2006","permalink":"https://www.rickvandenbosch.net/blog/getting-the-computername-of-the-host-of-a-vmware-image/","section":"Blog","summary":"\u003cp\u003eBecause of a new way of working here at the customer I\u0026rsquo;m located at, two virtual machines will be deployed to each developer\u0026rsquo;s machine. These VM\u0026rsquo;s will be run using VMware player. The thing is, the VM\u0026rsquo;s should be able to access the network and all the \u0026rsquo;normal\u0026rsquo; resources. Because of this, all the VM\u0026rsquo;s should have unique (computer)names. But they have to be traceable to the host machine.\u003c/p\u003e","title":"Getting the computername of the host of a VMware image"},{"content":"Together with a colleague, I\u0026rsquo;m giving basic .NET training for colleagues at this moment. Not at THIS moment exactly, because they\u0026rsquo;re doing exercises right now. But today is the second day of four days of training in total. Currently we already have two weird things popping up.\nLast week we encountered significant inaccuracy when calculating values using doubles. For instance, when adding 0.1 to a double (instantiated at 0) several times, the value wondered off. After 3 or 4 times there was an inaccuracy of 2 or 3 in the last decimal. The difference is very very small, but it’s there… I knew there’s an inaccuracy in the representation of doubles, but I always thought it only occurred with difficult fractional values.\nVB6 DLL’s are not always imported as you would expect. Visual Studio (2005) automatically generates interop assemblies when you reference a non .NET assembly. Today one of the course takers did this, which resulted in classes that didn’t have all the properties defined in the old DLL. There were two string properties having the exact same coding placed in different classes, and only one of them showed up in the interop assembly. Also, some properties showed up as properties, some showed up as methods (set_PropertyName()) and some of them didn’t show up at all. I’m currently investigating why, but it’s kind of weird…\n","date":"12 September 2006","permalink":"https://www.rickvandenbosch.net/blog/basic-net-training/","section":"Blog","summary":"\u003cp\u003eTogether with a colleague, I\u0026rsquo;m giving basic .NET training for colleagues at this moment. Not at THIS moment exactly, because they\u0026rsquo;re doing exercises right now. But today is the second day of four days of training in total. Currently we already have two weird things popping up.\u003c/p\u003e","title":"Basic .NET training"},{"content":"I\u0026rsquo;m back again. The past four weeks I\u0026rsquo;ve been entertaining kids on a summer camp (one week) and we\u0026rsquo;ve moved into our new house! After lots of painting, demolition and other stuff, our new house is ready (enough) to live in. In the near future, our new furniture will arrive and our bathroom will be renewed. So: lots of upcoming milestones!\nA note on the serious side: bloggingabout.net is being spammed heavily. If it keeps going like this, I will be forced to disallow anonymous comments. At this point, I\u0026rsquo;m not there yet so you can still all comment on my posts\u0026hellip;\nPS this is should have been my first blogpost using Windows Live Writer, but somehow it won\u0026rsquo;t post from behind this firewall. I\u0026rsquo;ll see if I have better luck at home.\n","date":"30 August 2006","permalink":"https://www.rickvandenbosch.net/blog/and-so-were-back/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;m back again. The past four weeks I\u0026rsquo;ve been entertaining kids on a summer camp (one week) and we\u0026rsquo;ve moved into our new house! After lots of painting, demolition and other stuff, our new house is ready (enough) to live in. In the near future, our new furniture will arrive and our bathroom will be renewed. So: lots of upcoming milestones!\u003c/p\u003e","title":"And so we’re back …"},{"content":"The next couple of weeks there will be low activity on my blog. First, I\u0026rsquo;ll be guiding a total of almost 100 kids through a summercamp for a week (we\u0026rsquo;re leaving today), next we will start working on our new house! We get the key a week from monday, so that\u0026rsquo;s two days after we come back from camp. Two days of resting\u0026hellip;\u0026hellip; I hope 😉\nI might get back once in a while, maybe even publishing some pics about the \u0026lsquo;renovation\u0026rsquo;, but since this is a .NET blog I might have to post those elsewhere. If you\u0026rsquo;re interested, let me know.\nFor all those who have a holiday ahead of them: Have a nice one! I\u0026rsquo;ll be back somewhere around the end of August or the beginning of September. Happy coding.\n","date":"29 July 2006","permalink":"https://www.rickvandenbosch.net/blog/low-blogging-activity/","section":"Blog","summary":"\u003cp\u003eThe next couple of weeks there will be low activity on my blog. First, I\u0026rsquo;ll be guiding a total of almost 100 kids through a summercamp for a week (we\u0026rsquo;re leaving today), next we will start working on our new house! We get the key a week from monday, so that\u0026rsquo;s two days after we come back from camp. Two days of resting\u0026hellip;\u0026hellip; I hope 😉\u003c/p\u003e","title":"Low blogging activity"},{"content":"The Visual Studio servicing page is updated: VS 2005 SP1 will ship Q3 of this year. This date seems to have has slipped before, but at least it gives us an estimated time of shipping.\nTaken from that page:\n“The types of fixes you can expect to find in this service pack are:\nThe Hotfixes and General Distribution Release Updates (GDRs) released between RTM and the end of the Service Pack customer beta period.\nAny fixes addressing security issues categorized as MSRC “Critical”, “Important” or “Moderate”.\nFixes for product reliability and stability issues, including those reported by customers via the Product Feedback Center, and the crashes most frequently reported via Watson.\nFixes for common “eligible” functional issues reported by customers via the Product Feedback Center. “Eligible” functional issues are those that do not require breaking changes, architectural changes, or Design Change Request (DCR) level feature work, and that do not create unacceptable product quality risk and/or cost of implementation.\nFixes for the top customer and supportability issues as reported by PSS.“\n","date":"24 July 2006","permalink":"https://www.rickvandenbosch.net/blog/visual-studio-2005-sp1-to-ship-q3-of-this-year/","section":"Blog","summary":"\u003cp\u003eThe \u003ca href=\"https://msdn.microsoft.com/vstudio/support/servicing\" target=\"_blank\" rel=\"noreferrer\"\u003eVisual Studio servicing page\u003c/a\u003e is updated: VS 2005 SP1 will \u003ca href=\"https://msdn.microsoft.com/vstudio/support/servicing/sp1_vs05/default.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eship Q3 of this year\u003c/a\u003e. This date seems to have has slipped before, but at least it gives us an estimated time of shipping.\u003c/p\u003e","title":"Visual Studio 2005 SP1 to ship Q3 of this year"},{"content":"Jan Schreuder blogged about it earlier, and the buzz around Sandcastle is growing\u0026hellip;\nBrenton House posted about Sandcastle last friday, stating that it might have been the day Sandcastle would be released. Unfortunately it wasn\u0026rsquo;t, so the waiting does not stop yet. It even looks like we might be waiting a little longer:\n“In addition we plan to include Sandcastle in our August CTP release of Visual Studio SDK.” (taken from a thread on the MSDN Forums)\n","date":"24 July 2006","permalink":"https://www.rickvandenbosch.net/blog/microsoft-sandcastle-status-update/","section":"Blog","summary":"\u003cp\u003e\u003ca href=\"/blogs/jschreuder\"\u003eJan Schreuder\u003c/a\u003e blogged about it earlier, and the buzz around Sandcastle is growing\u0026hellip;\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://weblogs.asp.net/bhouse\" target=\"_blank\" rel=\"noreferrer\"\u003eBrenton House\u003c/a\u003e posted about Sandcastle \u003ca href=\"https://weblogs.asp.net/bhouse/archive/2006/07/21/Microsoft-Sandcastle-to-possibly-be-released-today.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003elast friday\u003c/a\u003e, stating that it might have been the day Sandcastle would be released. Unfortunately it wasn\u0026rsquo;t, so the waiting does not stop yet. It even looks like we might be waiting a little longer:\u003c/p\u003e","title":"Microsoft Sandcastle – status update"},{"content":"MSDN 2 Library has been online for a while now. When you visit the \u0026lsquo;old\u0026rsquo; MSDN library, you see the following text:\n“We’re upgrading the MSDN Library to a new publishing system which provides improved performance, better search relevance, XHTML compliance, URLs which don’t change after product releases, and more. During the next few months we’ll gradually move content over to the new site, although MSDN Search will work across both sites automatically. The first few levels of the Table of Contents (TOC) tree will be kept in sync across both sites; you can select the product/technology you want in the directory tree and we’ll redirect you to the correct library for that content.\nYou are currently viewing the “classic” MSDN Library located at https://msdn.microsoft.com/library. To go to the new MSDN Library, go to https://msdn2.microsoft.com/en-us/Library.\nIn the coming months, the documentation hosted in both libraries will be consolidated into a single MSDN Library.“\nThat last sentence is a nice one\u0026hellip;: Microsoft won\u0026rsquo;t be maintaining two different libraries, but they will be consolidated into a single library.\nWhen I visited the \u0026rsquo;new\u0026rsquo; MSDN Library for the first time, things looked pretty much the same to me. Maybe some links and functionality moved to another place on the screen, but the basics were still the same. After my first search, I saw something nifty: “[Got IE7? – get our search][3]“. Microsoft developed an IE7 search provider for the MSDN Library. This means you can use the search bar in IE7 to directly search the MSDN Library! It has saved me lots of time already\u0026hellip;\n[3]: //search.msdn.microsoft.com/search/opensearchdescription.aspx\u0026rsquo;)\n","date":"17 July 2006","permalink":"https://www.rickvandenbosch.net/blog/new-msdn-library-provides-ie7-search-provider/","section":"Blog","summary":"\u003cp\u003eMSDN 2 Library has been online for a while now. When you visit the \u0026lsquo;old\u0026rsquo; MSDN library, you see the following text:\u003c/p\u003e\n\u003cp\u003e“\u003cem\u003eWe’re upgrading the MSDN Library to a new publishing system which provides improved performance, better search relevance, XHTML compliance, URLs which don’t change after product releases, and more. During the next few months we’ll gradually move content over to the new site, although MSDN Search will work across both sites automatically. The first few levels of the Table of Contents (TOC) tree will be kept in sync across both sites; you can select the product/technology you want in the directory tree and we’ll redirect you to the correct library for that content.\u003c/em\u003e\u003c/p\u003e","title":"New MSDN Library provides IE7 Search provider"},{"content":"Since not too long ago, I joined the MSDN Forums. The MSDN Forums is a big community where lots of knowledge is passed around. I recommend joining.\nYesterday I ran into an interesting post. It\u0026rsquo;s about an overriding method that exactly seems to match the call, but doesn\u0026rsquo;t get called. In stead, the base method is called\u0026hellip; Apparently this is because of override-resolution starting at the base working its way up, and a method declaration that matches more than you would think it does.\nYou can find the thread here.\n","date":"30 June 2006","permalink":"https://www.rickvandenbosch.net/blog/unexpected-behaviour-when-calling-overriden-method/","section":"Blog","summary":"\u003cp\u003eSince not too long ago, I joined the \u003ca href=\"https://forums.microsoft.com/msdn/default.aspx?siteid=1\" target=\"_blank\" rel=\"noreferrer\"\u003eMSDN Forums\u003c/a\u003e. The MSDN Forums is a big community where lots of knowledge is passed around. I recommend joining.\u003c/p\u003e\n\u003cp\u003eYesterday I ran into an interesting post. It\u0026rsquo;s about an overriding method that exactly seems to match the call, but doesn\u0026rsquo;t get called. In stead, the base method is called\u0026hellip; Apparently this is because of override-resolution starting at the base working its way up, and a method declaration that matches more than you would think it does.\u003c/p\u003e","title":"Unexpected behaviour when calling overriden method"},{"content":"“Consolas is a monospaced font (like an old typewriter) and good for programmers setting code (its core purpose).”\nThe above quote is taken from the Microsoft Design website, and specifically the part about ClearType fonts. It states the main reason for developing the Consolas Font Pack (download here) is to develop a better font for \u0026lsquo;programmers setting code\u0026rsquo;. Because of this, I primarily tested Consolas in Visual Studio, my editor of choice when writing code 😉\nMy very first impression of the font was \u0026lsquo;Get this out of my editor!\u0026rsquo;. To be honest, I tried it for the first time at the end of a heavy week, without having optimal ClearType settings. That\u0026rsquo;s pretty important when using a font especially designed to be used with ClearType\u0026hellip;\nAfter tuning my ClearType settings (available as an online version and a powertoy download) I tried again and I tried longer, forcing myself to give it a proper chance. After a week I have Consolas installed on both my work and my private machine, and set as the default font in Visual Studio 2003, 2005 and notepad.\nI like the Consolas font, because\u0026hellip;\nIt is compact, making it possible to display more information in a smaller area\nAlthough compact, it\u0026rsquo;s readability is very good\nIt\u0026rsquo;s cleaner (less arches) than for instance Courier New\nThere\u0026rsquo;s a better difference between \u0026lsquo;O\u0026rsquo; and \u0026lsquo;0\u0026rsquo;\nIt\u0026rsquo;s closer to my handwriting than any other font \u0026hellip; 😉 The only thing I still have to get used to, is that the lines look like they are pretty close to one another. When there are lots of lines above each other, it tends to seem a bit \u0026lsquo;crowded\u0026rsquo;. Maybe that\u0026rsquo;s just something that takes some getting used to also\u0026hellip;\n","date":"27 June 2006","permalink":"https://www.rickvandenbosch.net/blog/consolas-font-my-2-cents/","section":"Blog","summary":"\u003cp\u003e“Consolas is a monospaced font (like an old typewriter) and good for programmers setting code (its core purpose).”\u003c/p\u003e\n\u003cp\u003eThe above quote is taken from the Microsoft Design \u003ca href=\"https://www.microsoft.com/resources/design\" target=\"_blank\" rel=\"noreferrer\"\u003ewebsite\u003c/a\u003e, and specifically the \u003ca href=\"https://www.microsoft.com/resources/design/ClearType.html\" target=\"_blank\" rel=\"noreferrer\"\u003epart\u003c/a\u003e about \u003ca href=\"https://www.microsoft.com/typography/ClearTypeInfo.mspx\" target=\"_blank\" rel=\"noreferrer\"\u003eClearType\u003c/a\u003e fonts. It states the main reason for developing the Consolas Font Pack (\u003ca href=\"https://www.microsoft.com/downloads/details.aspx?familyid=22e69ae4-7e40-4807-8a86-b3d36fab68d3\u0026amp;displaylang=en\" target=\"_blank\" rel=\"noreferrer\"\u003edownload here\u003c/a\u003e) is to develop a better font for \u0026lsquo;programmers setting code\u0026rsquo;. Because of this, I primarily tested Consolas in Visual Studio, my editor of choice when writing code 😉\u003c/p\u003e","title":"Consolas font – my 2 cents"},{"content":"Having a database management class called DatabaseManager, I wanted to make a property for this DatabaseManager in a BaseForm. This way, every form inheriting from BaseForm would be able to use the same instance of the DatabaseManager.\nBecause the DatabaseManager exposes functionality to interact with the database, I wanted it to be internal. The property for the DatabaseManager in the BaseForm would have to be internal and protected, so only derived forms would be able to use the property. And exactly there is where I had wrong expectations about what the .NET framework delivers, resulting in the error “Inconsistent accessibility: property type \u0026lsquo;x\u0026rsquo; is less accessible than property \u0026lsquo;y\u0026rsquo;.”\nDefining a property to be ‘protected internal‘ makes the property visible for internal classes OR classes which inherit from that class. And it’s actually pretty straight forward: the BaseForm was still public (default), making it inheritable for classes outside of the current assembly. Marking a property as ‘protected’ makes sure inheriting classes are able to see that property. And so ‘protected internal’ is protected OR internal, not AND.\nWhen you think about it the solution is as straight forward as the behaviour of the accessibility modifiers. The BaseForm should be internal, and the property should be protected. This way, no one is able to inherit from the BaseForm from outside the assembly. Inside the assembly, only BaseForm-inheriting forms are able to see the DatabaseManager property.\n","date":"26 June 2006","permalink":"https://www.rickvandenbosch.net/blog/protected-internal-protected-internal/","section":"Blog","summary":"\u003cp\u003eHaving a database management class called DatabaseManager, I wanted to make a property for this DatabaseManager in a BaseForm. This way, every form inheriting from BaseForm would be able to use the same instance of the DatabaseManager.\u003c/p\u003e","title":"‘protected internal’ != (‘protected’ \u0026 ‘internal’)"},{"content":"Recently I ran into the Microsoft Skills Assessment page. After singing in with your passport, you can take all kinds of skills assessments for various Microsoft products, from Visual Studio 2005 to Windows Storage Server 2003.\nBecause I\u0026rsquo;m looking in to getting an MCPD certification, I was curious about how I would score without even preparing for a test. It\u0026rsquo;s pretty neat to be scoring 80% on the first test I took: Microsoft® Windows®-based Client Development with Microsoft Visual Studio® 2005 and Microsoft Visual C#®. Especially because there were quite some questions about new Visual Studio 2005 functionality that I haven\u0026rsquo;t actually used yet. That\u0026rsquo;s a good stimulant for trying to achieve certification. 😉\nIf you\u0026rsquo;re thinking about getting certified, or when you\u0026rsquo;re just curious about how your knowledge connects to the different areas of software development (or tools, operating systems etc.), visit the Microsoft Skills Assessment page.\n","date":"21 June 2006","permalink":"https://www.rickvandenbosch.net/blog/assess-your-microsoft-skills/","section":"Blog","summary":"\u003cp\u003eRecently I ran into the \u003ca href=\"https://assessment.learning.microsoft.com/test/home.asp\" target=\"_blank\" rel=\"noreferrer\"\u003eMicrosoft Skills Assessment\u003c/a\u003e page. After singing in with your passport, you can take all kinds of skills assessments for various Microsoft products, from Visual Studio 2005 to Windows Storage Server 2003.\u003c/p\u003e","title":"Assess your Microsoft skills"},{"content":"Lots of stuff happened the past few months, so it\u0026rsquo;s time for a personal update. Here we go\u0026hellip;\nI\u0026rsquo;ll be attending an MSF4 Agile Masterclass @ Microsoft in July\nIn August my girlfriend and I will be the proud owners of a house in Grasrijk (a part of Eindhoven). We can\u0026rsquo;t wait \u0026hellip; !\nBecause of this, our apartment in Eindhoven is for sale right now (for pictures and info: www.rickje.nl – Dutch)\nI\u0026rsquo;m about to release the first version of some generic WebControls I developed\nThe second part of this year we will be giving a Basic training .NET for colleagues again. Maybe this time for colleagues from other locations too!\nI finally updated my linkedin profile and joined hyves (Dutch)\nI am currently reading ( recommended ):\n– Agile Software Development, Principles, Patterns, and Practices by Robert C. Martin\n– Applying Domain-Driven Design and Patterns : With Examples in C# and .NET by Jimmy Nilsson\nI\u0026rsquo;m participating in a musical (for the third time), which will be performed 14 times in December in De Schalm in Veldhoven (for info: www.veldhovenserevue.nl – Dutch)\nThat\u0026rsquo;s it for now. At least, if I don\u0026rsquo;t think of anything else soon\u0026hellip; 😉\n","date":"19 June 2006","permalink":"https://www.rickvandenbosch.net/blog/personal-update-2/","section":"Blog","summary":"\u003cp\u003eLots of stuff happened the past few months, so it\u0026rsquo;s time for a personal update. Here we go\u0026hellip;\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eI\u0026rsquo;ll be attending an MSF4 Agile Masterclass @ Microsoft in July\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn August my girlfriend and I will be the proud owners of a house in Grasrijk (a part of Eindhoven). We can\u0026rsquo;t wait \u0026hellip; !\u003c/p\u003e","title":"Personal update"},{"content":"BloggingAbout.NET was upgraded today! We are now CommunityServer 2.0 enabled. Because of this, I also changed the look and the description of my blog. Why not do everything at once 😉\nOne little extra piece of information: since the update it is no longer possible to reach a blog by typing in the url bloggingabout.net/username. This has been an extra service since blogginabout.net went to CommunityServer 1.1. Now, whit the upgrade to 2.0, it has been stripped of the feature list. So if you would like to reach a blog, just type bloggingabout.net/blogs/username.\n","date":"16 June 2006","permalink":"https://www.rickvandenbosch.net/blog/houston-we-have-an-upgrade/","section":"Blog","summary":"\u003cp\u003eBloggingAbout.NET was upgraded today! We are now CommunityServer 2.0 enabled. Because of this, I also changed the look and the description of my blog. Why not do everything at once 😉\u003c/p\u003e","title":"Houston, we have an upgrade…"},{"content":" Last night at eleven thirty, when I was taking a shower after playing volleyball for an hour and a half, I thought of a link between risk-based software development and\u0026hellip;.. a pop song*. Sometimes you think of stuff\u0026nbsp;at the weirdest moments.\nI\u0026rsquo;m a big fan of risk-based development. By addressing risks first, you are able to prove the feasibility of the project you are doing in an early stage. Also, by defining mitigation and contingency measures you do not only make sure you know how to minimize the chance the risk manifests itself. You know what to do when a risk manifests itself and\u0026nbsp;you reassure the team members and, not unimportant, the constituent.\n\u0026lt;p\u0026gt; \u0026lt;/span\u0026gt;\u0026lt;span lang=\u0026quot;EN-GB\u0026quot;\u0026gt;People tend to push difficult work back. I have to admit it can be more appealing to start out with a highly interesting or fun part of the work that needs to be done, in stead of doing the difficult stuff first. I\u0026amp;rsquo;ve done that myself in the past. But by doing that you enable \u0026lt;a href=\u0026quot;https://en.wikipedia.org/wiki/Murphy's_law\u0026quot;\u0026gt;Mr. Murphy\u0026lt;/a\u0026gt; to come and ruin your project. Especially when his visit occurs in the final phase of your project! If you start out eliminating risks and Mr. Murphy does show up, you have the possibility to inform the constituent about a postponed release \u0026lt;em\u0026gt;in time\u0026lt;/em\u0026gt;, get more developers to do the work, let the business make choices as to which features should be cut from the release, and so on. In short: in that case you\u0026amp;rsquo;re still able to do something about it.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;/span\u0026gt;\u0026lt;span lang=\u0026quot;EN-GB\u0026quot;\u0026gt;L\u0026lt;/span\u0026gt;\u0026lt;span lang=\u0026quot;EN-GB\u0026quot;\u0026gt;ast night, it was Madonna who pointed it out to me in a single way. Her song \u0026amp;lsquo;Get together\u0026amp;rsquo; contains that one sentence that summarises it all: \u0026lt;strong\u0026gt;\u0026amp;ldquo;If it\u0026amp;rsquo;s bitter at the start, then it\u0026amp;rsquo;s sweeter in the end.\u0026amp;rdquo;\u0026lt;/strong\u0026gt; I think there\u0026amp;rsquo;s nothing more to be said. It might be it\u0026amp;rsquo;s not so much fun to start out with, it will payback in the end\u0026amp;hellip;\u0026lt;br /\u0026gt; \u0026lt;/span\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;span lang=\u0026quot;EN-GB\u0026quot;\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;span lang=\u0026quot;EN-GB\u0026quot;\u0026gt;\u0026lt;/span\u0026gt;\u0026lt;span lang=\u0026quot;EN-GB\u0026quot;\u0026gt;\u0026lt;sub\u0026gt;*\u0026amp;nbsp;Whether or not Madonna can be classified as an artist making \u0026amp;lsquo;pop music\u0026amp;rsquo; is not the issue here. However, if you would like to discuss this: \u0026lt;a href=\u0026quot;https://bloggingabout.net/blogs/rick/contact.aspx\u0026quot;\u0026gt;drop me a line\u0026lt;/a\u0026gt; 😉\u0026lt;/sub\u0026gt;\u0026lt;/span\u0026gt; \u0026lt;/p\u0026gt; ","date":"7 June 2006","permalink":"https://www.rickvandenbosch.net/blog/on-risk-based-software-development-and-a-hint-of-madonna/","section":"Blog","summary":"\u003cp class=\"MsoNormal\"\u003e\n  \u003cspan lang=\"EN-GB\"\u003eLast night at \u003c/span\u003e\u003cspan lang=\"EN-GB\"\u003eeleven thirty\u003c/span\u003e\u003cspan lang=\"EN-GB\"\u003e, when I was taking a shower after playing volleyball for an hour and a half, I thought of a link between risk-based software development and\u0026hellip;.. a pop song*. Sometimes you think of stuff\u0026nbsp;at the weirdest moments.\u003c/p\u003e","title":"On Risk-based Software Development (and a hint of Madonna)"},{"content":"At our current project, we have an application which is deployed using No Touch Deployment. Because of some SEHException we got a few months back, we started our application in a separate thread using a launcher class which contains the Main() method for the application. Recently we added functionality to display HTML pages our application generates, so we added the ActiveX webbrowser (in AxSHDocVw.dll).\nStarting an application through IEExec makes that the STAThreadAttribute is ignored. Because of this we received the error \"Could not instantiate activex control 'xxxx-xxx' because the current thread is not in a single threaded apartment\" as soon as\u0026nbsp;we instantiated the webbrowser. Because we start our application in a seperated thread, the solution was simple: set the ApartmentState of the new thread. Code:\npublic static void Main()\n{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; Thread thread;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; ThreadStart threadStart;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; threadStart = new ThreadStart(StartMyApplication);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; thread = new Thread(threadStart);\n\u0026lt;p\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; thread.ApartmentState = ApartmentState.STA;\u0026lt;br /\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; thread.Start();\u0026lt;br /\u0026gt; }\u0026lt;/font\u0026gt; \u0026lt;/p\u0026gt; ","date":"1 June 2006","permalink":"https://www.rickvandenbosch.net/blog/error-could-not-instantiate-activex-control-xxxx-xxx-because-the-current-thread-is-not-in-a-single-threaded-apartment/","section":"Blog","summary":"\u003cp\u003eAt our current project, we have an application which is deployed using No Touch Deployment. Because of some \u003ca href=\"https://msdn2.microsoft.com/en-us/library/system.runtime.interopservices.sehexception.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eSEHException\u003c/a\u003e we got a few months back, we started our application in a separate thread using a launcher class which contains the Main() method for the application. Recently we added functionality to display HTML pages our application generates, so we added the ActiveX webbrowser (in \u003cfont size=\"2\"\u003eAxSHDocVw.dll).\u003c/p\u003e","title":"Error: Could not instantiate activex control ‘xxxx-xxx’ because the current thread is not in a single threaded apartment"},{"content":"ScottGu blogged about IIS 7.0 on the MSDN .NET show. He and Bill Staples did an interview on IIS 7.0, which will ship with Windows Vista Beta 2. As Scott said: IIS 7.0 is a major, major update and improvement to the overall Microsoft web platform stack. See it. You can find it here.\n","date":"21 May 2006","permalink":"https://www.rickvandenbosch.net/blog/iis-7-0-on-the-msdn-net-show/","section":"Blog","summary":"\u003cp\u003eScottGu \u003ca href=\"https://weblogs.asp.net/scottgu/archive/2006/05/20/IIS-7.0-on-the-MSDN-.NET-Show.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eblogged about\u003c/a\u003e IIS 7.0 on the MSDN .NET show. He and Bill Staples did an interview on IIS 7.0, which will ship with Windows Vista Beta 2. As Scott said: \u003cfont size=\"2\"\u003eIIS 7.0 is a major, major update and improvement to the overall Microsoft web platform stack. See it. You can find it \u003ca href=\"https://msdn.microsoft.com/theshow/episode.aspx?xml=theshow/en/Episode056/manifest.xml\"\u003ehere\u003c/a\u003e.\u003c/font\u003e\u003c/p\u003e","title":"IIS 7.0 on the MSDN .NET show"},{"content":"Sometimes when you\u0026rsquo;re inside a method you would like to know which method called it. Or even which object. For instance when you write a TraceListener, it might be pretty cool to make the TraceListener smart enough to find out what object called him and from which method. The StackTrace object in .NET makes this pretty easy. Here\u0026rsquo;s a howto\u0026hellip;\nFirst, we iterate through the stackframes that are available on the stack, looking for the one we need. This method returns such a StackFrame. We skip the first StackFrame by starting the variable count at 1, because this method is always called from the method GetCallingMethod() (see below).\nprivate StackFrame GetCallingStackFrame()\n{\nStackTrace stack;\nStackFrame stackFrame;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; stack = new StackTrace(true);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; // Initialize the StackFrame by creating a default one.\n\u0026nbsp;\u0026nbsp;\u0026nbsp; stackFrame = new StackFrame(\"ErrorDeterminingStackFrame\", 0, 0);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; for (int count = 1; count \u003c stack.FrameCount; count++)\n\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; //\u0026nbsp;At my current project I\u0026nbsp;skipped the StackFrame if\u0026nbsp;the calling method was 'WriteLine', because that's the WriteLine method in the TraceListener.\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if (!stack.GetFrame(count).GetMethod().Name.Equals(\"WriteLine\"))\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; stackFrame = stack.GetFrame(count);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; break;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp; return stackFrame;\n}\nNext, we can get our information from the StackFrame. There's lots of stuff on there, like the method,\u0026nbsp;the filename and even line- and columnnumbers. The method below returns a string containing CallingObject.CallingMethod.\nprotected string GetCallingMethod()\n{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; string methodName;\n\u0026lt;p\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; StackFrame stackFrame;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; stackFrame = GetCallingStackFrame();\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; methodName = stackFrame.GetMethod().DeclaringType.Name;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; methodName += \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#800080\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026quot;.\u0026quot;\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; + stackFrame.GetMethod().Name;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; return\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; methodName; \u0026lt;br /\u0026gt; }\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; I know there's some work in this code when it comes to defensive programming. For instance: who tells me GetMethod() will return anything containing a DeclaringType property. But that's not the issue in this post 😉\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt; \u0026lt;/p\u0026gt; ","date":"19 May 2006","permalink":"https://www.rickvandenbosch.net/blog/howto-determine-which-object-and-method-called-another-method/","section":"Blog","summary":"\u003cp\u003eSometimes when you\u0026rsquo;re inside a method you would like to know which method called it. Or even which object. For instance when you write a \u003ca href=\"https://msdn2.microsoft.com/en-US/library/system.diagnostics.tracelistener.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eTraceListener\u003c/a\u003e, it might be pretty cool to make the TraceListener smart enough to find out what object called him and from which method. The \u003ca href=\"https://msdn2.microsoft.com/en-US/library/system.diagnostics.stacktrace.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eStackTrace\u003c/a\u003e object in .NET makes this pretty easy. Here\u0026rsquo;s a howto\u0026hellip;\u003c/p\u003e","title":"HowTo: determine which object (and method) called another method"},{"content":"I\u0026rsquo;m not blogging about the wellknown song by the Dutch band Lucifer from the year 1975, but to let you know we (my girlfriend and me) have bought a new house! Somewhere in August of this year, we will be the proud owners of a house in \u0026lsquo;Grasrijk\u0026rsquo;, a new part of Eindhoven right next to Veldhoven. After three-somewhat years in our current home we are ready for the next step. And now we can\u0026rsquo;t wait \u0026hellip;. !\nIf you know someone who is interested in an appartment in Eindhoven (look here for more info), drop me a line or mail me at rick.van.den.bosch at bloggingabout dot net.\n","date":"7 May 2006","permalink":"https://www.rickvandenbosch.net/blog/house-for-sale/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;m not blogging about the wellknown song by the Dutch band \u003ca href=\"https://nl.wikipedia.org/wiki/Lucifer_%28popgroep%29\" target=\"_blank\" rel=\"noreferrer\"\u003eLucifer\u003c/a\u003e from the year 1975, but to let you know we (my girlfriend and me) have bought a new house! Somewhere in August of this year, we will be the proud owners of a house in \u0026lsquo;Grasrijk\u0026rsquo;, a new part of Eindhoven right next to Veldhoven. After three-somewhat years in our current home we are ready for the next step. And now we can\u0026rsquo;t wait \u0026hellip;. !\u003c/p\u003e","title":"House for sale!"},{"content":"A few days ago we ran into the error in the subject of this post at my current project. Because it wasn\u0026rsquo;t easy finding any usefull hints pointing towards a solution, I\u0026rsquo;ll post ours here.\nWe use reflection for flexible databinding, based on types and their attributes. One of the methods we wrote sets a value, passed in as an object, on a specific attribute of a specific class. The method knows nothing about the class and its properties. Not even which type the properties are.\nWe received the error on only 1 attribute, and only when setting its value. It was an sbyte property, which was bound to the SelectedIndex property of a ComboBox. The value passed in the method was a valid value: -1, 0 or 1. But on all possible values, we received the error. Eventually, after reading the QuickWatch in stead of watching it, I saw a small but important difference between the (type of) value I passed in and the (type of) value I wanted to set\u0026hellip;\nWe implemented a GetValue on our controls to return the value, which was used in the method to write it to the object. Because we wanted to bind to the SelectedIndex, the GetValue of the combo we were binding against, looked a bit like this:\nobject returnValue;\nreturnValue = SelectedIndex – 1;\nreturn returnValue;\nSee the problem? The GetValue returned an object, just the way my setter method wanted it. The value of my object was also valid: -1, 0 or 1. But the problem was not the value, neither the returntype of GetValue. The problem is a .NET object \u0026lsquo;knows\u0026rsquo; what type you have put in. So it \u0026lsquo;knows\u0026rsquo; what type it should get out\u0026hellip;.. (Sure, actually this goes a bit deeper, but for this high-level post, let\u0026rsquo;s leave it at this, OK?)\nBecause the (integer!) SelectedIndex was put in the returnValue object, the setter method tried to write an integer value to an sbyte property. And that doesn\u0026rsquo;t fit! The implicit cast used is not valid, which results in the above mentioned error. So although the value is correct, the type containing the value isn\u0026rsquo;t, and therefore it cannot be assigned to the sbyte property. Changing the GetValue method to put an sbyte into the object which was returned solved the problem.\n","date":"2 May 2006","permalink":"https://www.rickvandenbosch.net/blog/cannot-widen-from-target-type-to-primitive-type/","section":"Blog","summary":"\u003cp\u003eA few days ago we ran into the error in the subject of this post at my current project. Because it wasn\u0026rsquo;t easy finding any usefull hints pointing towards a solution, I\u0026rsquo;ll post ours here.\u003c/p\u003e","title":"Cannot widen from target type to primitive type."},{"content":"I\u0026rsquo;ve received lot\u0026rsquo;s of positive reactions on the post about organizing a bloggingabout.net meeting. I\u0026rsquo;ll try to squeeze in organizing a meeting in the near future. But see the near future somewhere between now and a few months. As you can image lot\u0026rsquo;s of stuff should be taken care of: a place to have the meeting, food \u0026amp; drinks, a decent agenda and maybe even guestspeakers. And to keep everything affordable for all the visitors: maybe we should consider finding a sponsor. But before we go there it\u0026rsquo;s important to make sure it\u0026rsquo;s possible.\nSo if you feel the need to take up this challenge with me: drop me a line. I\u0026rsquo;ll start out after next week, because then the deadline on my current project is come and gone.\n","date":"2 May 2006","permalink":"https://www.rickvandenbosch.net/blog/bloggingabout-net-meeting-part-2/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;ve received lot\u0026rsquo;s of positive reactions on the post about organizing a \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2006/04/20/12024.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ebloggingabout.net meeting\u003c/a\u003e. I\u0026rsquo;ll  try to squeeze in organizing a meeting in the near future. But see the near future somewhere between now and a few months. As you can image lot\u0026rsquo;s of stuff should be taken care of: a place to have the meeting, food \u0026amp; drinks, a decent agenda and maybe even guestspeakers. And to keep everything affordable for all the visitors: maybe we should consider finding a sponsor. But before we go there it\u0026rsquo;s important to make sure it\u0026rsquo;s possible.\u003c/p\u003e","title":"BloggingAbout .NET meeting? – Part 2"},{"content":"I\u0026rsquo;ve been thinking: would there be any interest for a bloggingabout .net meeting among the bloggers? We are all into .NET and most of us seem to enjoy a good discussion. Maybe we can organize a platform for those discussions in real life in stead of through posts and comments. It could be about anything, but has to have a predefined agenda to make sure the meeting has a goal.\nOf course you don\u0026rsquo;t do this kind of thing every week, but it might be interesting to share thoughts and ideas in real life now and then, and about something more than only the things we happen to blog about. I understand there are already lots of groups and meetings, and it might not have a lot extra to offer, but maybe there are more of you who could be interested in attending such a meeting?\nIt\u0026rsquo;s just something I wondered about. I\u0026rsquo;m looking forward to seeing your reactions\u0026hellip;..\n","date":"20 April 2006","permalink":"https://www.rickvandenbosch.net/blog/bloggingabout-net-meeting/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;ve been thinking: would there be any interest for a bloggingabout .net meeting among the bloggers? We are all into .NET and most of us seem to enjoy a good discussion. Maybe we can organize a platform for those discussions in real life in stead of through posts and comments. It could be about anything, but has to have a predefined agenda to make sure the meeting has a goal.\u003c/p\u003e","title":"BloggingAbout .NET meeting?"},{"content":"The exception mentioned in the title of this post was the one I encountered when using an ASP.NET control I had written.\n**How I encountered the exception:\n** Because I develop several websites, there\u0026rsquo;s a lot of functionality I need more than once. A possible solution for this is to write a control gallery containing the functionality I needed. And putting them in a seperate assembly makes it easy to dstribute them freely in the near future ;). I made the assembly (containing an image gallery and a download gallery) and used it in a website I am developing together with a good friend of mine. There were no problems and life seemed good. Until the day came we published the website. After putting the website online, one of the pages was not rendering correctly, displaying the message \u0026ldquo;Unhandled Exception: System.Security.SecurityException: That assembly does not allow partially trusted callers\u0026rdquo;.\nThe reason for the exception:\nLots of providers don\u0026rsquo;t run websites in Full Trust mode. Because of that some actions you can take inside a (referenced) assembly aren\u0026rsquo;t allowed. For me I\u0026rsquo;m not sure if the problem was the scanning of the hard drive or the fact I get embedded images from the assembly. One way or the other: there was stuff in there which wasn\u0026rsquo;t allowed ;).\nTaking care of the exeption:\nThe solution I used to solve this problem was pretty straight-forward: I added the AllowPartiallyTrustedCallersAttribute to the assembly. Another solution could have been to extract the controls from the seperate assembly and put them inside the website, but I didn\u0026rsquo;t prefer that. This article on the .NET security blog explains a bit more about the AllowPartiallyTrustedCallersAttribute\u0026hellip;\n","date":"7 April 2006","permalink":"https://www.rickvandenbosch.net/blog/securityexception-that-assembly-does-not-allow-partially-trusted-callers/","section":"Blog","summary":"\u003cp\u003eThe exception mentioned in the title of this post was the one I encountered when using an ASP.NET control I had written.\u003c/p\u003e\n\u003cp\u003e**How I encountered the exception:\u003c/p\u003e\n\u003cp\u003e** Because I develop several websites, there\u0026rsquo;s a lot of functionality I need more than once. A possible solution for this is to write a control gallery containing the functionality I needed. And putting them in a seperate assembly makes it easy to dstribute them freely in the near future ;). I made the assembly (containing an image gallery and a download gallery) and used it in a website I am developing together with a good friend of mine. There were no problems and life seemed good. Until the day came we published the website. After putting the website online, one of the pages was not rendering correctly, displaying the message \u0026ldquo;\u003cem\u003eUnhandled Exception: System.Security.SecurityException: That assembly does not allow partially trusted callers\u003c/em\u003e\u0026rdquo;.\u003c/p\u003e","title":"SecurityException: That assembly does not allow partially trusted callers."},{"content":"Yesterday we ran into a bug in the Visual Studio 2005 IDE. To be precise: in Intellisense when writing a web.sitemap file. The Intellisense tells you the attribute which indicates whether a site map provider filters site map nodes based on a user\u0026rsquo;s role is called securityTrimmingEnabled. But when you use this attribute and run the website, you receive an error stating there is an Unrecognized attribute \u0026lsquo;securityTrimmingEnabled\u0026rsquo;.\nWhen you look the attribute up in the help, it is called SecurityTrimmingEnabled. Notice it starts with a capital S in stead of a small one. Changing the attribute\u0026rsquo;s name seems to have fixed the problem, so it\u0026rsquo;s no biggy. But it is still a bug. As long as this is the biggest one in there, I\u0026rsquo;m happy ;).\n","date":"28 March 2006","permalink":"https://www.rickvandenbosch.net/blog/visual-studio-2005-ide-bug/","section":"Blog","summary":"\u003cp\u003eYesterday we ran into a bug in the Visual Studio 2005 IDE. To be precise: in Intellisense when writing a web.sitemap file. The Intellisense tells you the attribute which indicates whether a site map provider filters site map nodes based on a user\u0026rsquo;s role is called securityTrimmingEnabled. But when you use this attribute and run the website, you receive an error stating there is an \u003cem\u003eUnrecognized attribute \u0026lsquo;securityTrimmingEnabled\u0026rsquo;\u003c/em\u003e.\u003c/p\u003e","title":"Visual Studio 2005 IDE bug"},{"content":"Wednesday and thursday I attended the first part of a BizTalk 2006 course at Class-A. Next week I\u0026rsquo;ll be finishing the course (tuesday and wednesday). I have to say that the trainer/coach who gives the course (Astrid Hackenberg) really knows what she\u0026rsquo;s talking about. At this point the 12 (?) people attending the course have not yet come up with a question she couldn\u0026rsquo;t answer.\nThe first two days weren\u0026rsquo;t very difficult, I think because they were an introduction to the basics of BizTalk. This combined with the fact I already played around with BizTalk 2004 some time ago made that the first two days were easy to follow for me. On the other side, the understandable way things are presented helps. 😉\nI\u0026rsquo;m looking forward to learning more about the possibilities of BizTalk 2006 next week. If I encounter shocking stuff, I\u0026rsquo;ll let you know.\n","date":"24 March 2006","permalink":"https://www.rickvandenbosch.net/blog/biztalk-2006-course/","section":"Blog","summary":"\u003cp\u003eWednesday and thursday I attended the first part of a BizTalk 2006 course at \u003ca href=\"https://www.class-a.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eClass-A\u003c/a\u003e. Next week I\u0026rsquo;ll be finishing the course (tuesday and wednesday). I have to say that the trainer/coach who gives the course (Astrid Hackenberg) really knows what she\u0026rsquo;s talking about. At this point the 12 (?) people attending the course have not yet come up with a question she couldn\u0026rsquo;t answer.\u003c/p\u003e","title":"BizTalk 2006 course"},{"content":"After years of loyal service, I\u0026rsquo;m going to sell my current digital camera. I\u0026rsquo;m interested in buying an even better one (7.1 MP), although the Sony DSC-S85 I have now (4.1 MP) has brought me lots of great pictures.\nIt accompanied me on several holidays and events. I\u0026rsquo;ve got a few Gb of images to show for it\u0026hellip;. 😉\nIf anyone\u0026rsquo;s interested in buying it: drop me a line or visit the advert on markplaats.\n","date":"24 March 2006","permalink":"https://www.rickvandenbosch.net/blog/thank-you-my-friend/","section":"Blog","summary":"\u003cp\u003eAfter years of loyal service, I\u0026rsquo;m going to sell my current digital camera. I\u0026rsquo;m interested in buying an even better one (7.1 MP), although the \u003ca href=\"https://www.dpreview.com/reviews/sonydscs85/\" target=\"_blank\" rel=\"noreferrer\"\u003eSony DSC-S85\u003c/a\u003e I have now (4.1 MP) has brought me lots of great  pictures.\u003c/p\u003e","title":"Thank you, my friend …"},{"content":"I attended the DevDays 2006 and my overall impression was: cool. Allthough some of the sessions I attended weren\u0026rsquo;t good (or actually, were very bad), the overall feeling is good and I picked up on some great stuff. Meeting up with some smart people is also a good addition to attending the sessions.\nThe most impressive session I attended was Scott Guthrie on Atlas. Microsoft is doing its best in making the life of developers easier. My guess is they are getting there pretty fast. The AJAX framework they are developing, called Atlas, makes it possible for you to AJAX-enable your site within a few minutes. There\u0026rsquo;s a dummy-proof implementation which takes almost no knowledge of JavaScript or whatever to AJAX enable your site. But there also are possibilities to take it to the next level and write lots of complex code and JavaScript to take even more advantage of AJAX.\nAnother great session was Anko Duizer on MSF. I think that because of the movement IBM is making with RUP (gradually pulling it more and more to Java), Microsoft has brought their way of developing software to market supported by the Team System/Team Foudation suite. Anko talked about MSF and the rules used to ensure a good software development process. That was interesting stuff\u0026hellip;\nFor those who attended: the best rule I heard was \u0026ldquo;Don\u0026rsquo;t shake the Jell-O\u0026rdquo;.\n","date":"9 March 2006","permalink":"https://www.rickvandenbosch.net/blog/devdays-2006/","section":"Blog","summary":"\u003cp\u003eI attended the DevDays 2006 and my overall impression was: cool. Allthough some of the sessions I attended weren\u0026rsquo;t good (or actually, were very bad), the overall feeling is good and I picked up on some great stuff. Meeting up with some smart people is also a good addition to attending the sessions.\u003c/p\u003e","title":"DevDays 2006"},{"content":"Last week a book I requested arrived: Agile Software Development, Principles, Patterns, and Practices by Robert C. Martin. I haven\u0026rsquo;t had the time to dive in to it, but my first impression is this book is a good one. Nice quote I ran into on the first page, as one of the principles agile development follows:\nSimplicity – The art of maximizing the amount of work not done.\n","date":"9 February 2006","permalink":"https://www.rickvandenbosch.net/blog/agile-software-development-principles-patterns-and-practices/","section":"Blog","summary":"\u003cp\u003eLast week a book I requested arrived: \u003ca href=\"https://www.amazon.com/gp/product/0135974445/103-3533944-6738255?v=glance\u0026amp;n=283155\" target=\"_blank\" rel=\"noreferrer\"\u003eAgile Software Development, Principles, Patterns, and Practices\u003c/a\u003e by Robert C. Martin. I haven\u0026rsquo;t had the time to dive in to it, but my first impression is this book is a good one. Nice quote I ran into on the first page, as one of the principles agile development follows:\u003c/p\u003e","title":"Agile Software Development, Principles, Patterns, and Practices"},{"content":"Earlier I posted about reading a configfile when using no-touch deployment. Several people have contacted me to post the code, so here it is.\nprivate static bool InitializeRemoting()\n{\nstring configFile;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; configFile = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; try\n\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; //try to read the configfile without tricks first\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; RemotingConfiguration.Configure(configFile);\n\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp; catch (RemotingException)\n\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; //When 'normal' reading fails, try it our special way.\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; string tempDir;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; WebClient webClient;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; //Get the location of the\u0026nbsp;application data folder\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; tempDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; tempDir += @\"ApplicationName\";\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; if (!Directory.Exists(tempDir))\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; //Add a folder for our own application\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; Directory.CreateDirectory(tempDir);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; try\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; //Download the configfile to the new folder and use it to configure Remoting\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; webClient = new WebClient();\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; webClient.DownloadFile(configFile, tempDir + \"ApplicationName.exe.config\");\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; RemotingConfiguration.Configure(tempDir + \"ApplicationName.exe.config\");\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; catch\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; return false;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp; return true;\n} ","date":"16 January 2006","permalink":"https://www.rickvandenbosch.net/blog/howto-read-your-configfile-when-using-no-touch-deployment/","section":"Blog","summary":"\u003cp\u003eEarlier I posted about reading a configfile when using no-touch deployment. Several people have contacted me to post the code, so here it is.\u003c/p\u003e\n\u003cp\u003e\u003cfont color=\"#0000ff\" size=\"2\"\u003eprivate\u003c/font\u003e \u003cfont size=\"2\"\u003e\u003c/font\u003e\u003cfont color=\"#0000ff\" size=\"2\"\u003estatic\u003c/font\u003e \u003cfont size=\"2\"\u003e\u003c/font\u003e\u003cfont color=\"#0000ff\" size=\"2\"\u003ebool\u003c/font\u003e \u003cfont size=\"2\"\u003eInitializeRemoting()\u003cbr /\u003e {\u003cbr /\u003e \u003c/font\u003e\u003cfont color=\"#0000ff\" size=\"2\"\u003e    string\u003c/font\u003e \u003cfont size=\"2\"\u003econfigFile;\u003c/p\u003e","title":"HowTo: read your configfile when using no-touch deployment"},{"content":"Sometimes things aren\u0026rsquo;t as difficult as they seem\u0026hellip;\nAfter some extra reading, and searching on gathering.tweakers.net, I found that everything I had done was correct. The only uncertainty was my graphics card. I went out and bought me a faster one (a Radeon 9550) and everything works well! As I am typing this, the same machine is playing a sweet K\u0026rsquo;s Choice song and recording a TV show, while displaying media center on my TV without any problems. Me likey.\nI\u0026rsquo;m glad I got this thing to work within my holiday. I don\u0026rsquo;t wanna think what could have happened if it didn\u0026rsquo;t work and I had to go back to work again\u0026hellip; 😉\n","date":"30 December 2005","permalink":"https://www.rickvandenbosch.net/blog/media-center-trouble-gone/","section":"Blog","summary":"\u003cp\u003eSometimes things aren\u0026rsquo;t as difficult as they seem\u0026hellip;\u003c/p\u003e\n\u003cp\u003eAfter some extra reading, and searching on \u003ca href=\"https://gathering.tweakers.net\" target=\"_blank\" rel=\"noreferrer\"\u003egathering.tweakers.net\u003c/a\u003e, I found that everything I had done was correct. The only uncertainty was my graphics card. I went out and bought me a faster one (a Radeon 9550) and everything works well! As I am typing this, the same machine is playing a sweet K\u0026rsquo;s Choice song and recording a TV show, while displaying media center on my TV without any problems. Me likey.\u003c/p\u003e","title":"Media Center Trouble – Gone!"},{"content":"Ramon\u0026rsquo;s tips helped me a bit further, because they enabled me to test some of the settings and try where the problem is.\nI now encounter a very nice but weird phenomenon: when I use DualView on my NVidia card, I can drag Media Center to my TV. This works and shows up properly. When I maximize Media Center the image is all garbled up. But: when I open another window (this can be anything: notepad, display properties or the DirectX Control Panel (By the way: thanks for that one Ramon!)) and give this other window the focus, my Media Center display perfect. As soon as Media Center gets the focus, its image garbles up.\nSo: when it doesn\u0026rsquo;t have focus, it displays properly but I can\u0026rsquo;t use it. When it has focus, I can use it, but I can\u0026rsquo;t see what I\u0026rsquo;m doing\u0026hellip; Nice.\nI\u0026rsquo;l keep on going till this thing works!\n","date":"30 December 2005","permalink":"https://www.rickvandenbosch.net/blog/media-center-trouble-part-2/","section":"Blog","summary":"\u003cp\u003eRamon\u0026rsquo;s tips helped me a bit further, because they enabled me to test some of the settings and try where the problem is.\u003c/p\u003e\n\u003cp\u003eI now encounter a very nice but weird phenomenon: when I use DualView on my NVidia card, I can drag Media Center to my TV. This works and shows up properly. When I maximize Media Center the image is all garbled up. But: when I open another window (this can be anything: notepad, display properties or the DirectX Control Panel (By the way: thanks for that one Ramon!)) and give this \u003cem\u003eother window\u003c/em\u003e the focus, my Media Center display perfect. As soon as Media Center gets the focus, its image garbles up.\u003c/p\u003e","title":"Media Center Trouble – Part 2"},{"content":"It\u0026rsquo;s been a while since I\u0026rsquo;ve been blogging, because my project has been extremely hectic. Now I\u0026rsquo;m enjoying a week off, so I\u0026rsquo;ve got time for toys now\u0026hellip; 😉\nOne of these toys was going to be Windows XP Media Center Edition. I installed it, bought a compatible TV card together with a MCE remote and yep: everything is working fine. At least, as long as I am watching it on my monitor. As soon as I switch to TV (through the TV Out on my GeForce Ti4800 SE) there\u0026rsquo;s trouble. I found that when Media Center is not maximized, it shows up on my TV. But when I try to maximize it, it garbles up the image up to a point where you cannot even recognize Media Center in it. It feels like the TV doesn\u0026rsquo;t support the refresh rate or something, but I can\u0026rsquo;t alter that in my NVidia driver.\nI\u0026rsquo;ve tried a different TV format, DualView, SingleView on the TV only, Clone, but every time Media Center is maximized on the TV, it\u0026rsquo;s bye bye sharp image. I\u0026rsquo;m thinking the not-so-new TV I\u0026rsquo;ve got might be the problem, or maybe the TV Out on my GeForce is not up to par. Anyway: I still got a few days to figure this out, and when I do I\u0026rsquo;ll let you know. If you\u0026rsquo;ve got some pointers: let me know.\n[EDIT]\nRamon asked me what kind of connection I\u0026rsquo;m using: I use an s-video cable to connect my PC to my TV. The Media Center is set to use this kind of connection.\n","date":"29 December 2005","permalink":"https://www.rickvandenbosch.net/blog/media-center-edition-trouble/","section":"Blog","summary":"\u003cp\u003eIt\u0026rsquo;s been a while since I\u0026rsquo;ve been blogging, because my project has been extremely hectic. Now I\u0026rsquo;m enjoying a week off, so I\u0026rsquo;ve got time for toys now\u0026hellip; 😉\u003c/p\u003e\n\u003cp\u003eOne of these toys was going to be Windows XP Media Center Edition. I installed it, bought a compatible TV card together with a MCE remote and yep: everything is working fine. At least, as long as I am watching it on my monitor. As soon as I switch to TV (through the TV Out on my GeForce Ti4800 SE) there\u0026rsquo;s trouble. I found that when Media Center is not maximized, it shows up on my TV. But when I try to maximize it, it garbles up the image up to a point where you cannot even recognize Media Center in it. It feels like the TV doesn\u0026rsquo;t support the refresh rate or something, but I can\u0026rsquo;t alter that in my NVidia driver.\u003c/p\u003e","title":"Media Center Edition trouble"},{"content":"I ran in to something strange today\u0026hellip;\nThe ASP.NET 2.0 Menu control renders differently in a browser and in the W3 validator. Loading the page in a browser results in the usage of the correct attribute \u0026lsquo;vertical-align\u0026rsquo; for the image which is used to indicate a menu has subitems. I checked this in IE and FireFox and both browsers rendered correct XHTML. When you copy the source of the rendered page and paste it in the validator-textbox at W3.org, it validates the XHTML. When you check the page directly by entering a URL, the menu renders using the non-correct attribute \u0026lsquo;valign\u0026rsquo;, causing my page to fail validation. But the copied source passes validation!\nI\u0026rsquo;ll investigate this strange behaviour and get back at you when I find something. If you know where this is comming from: drop me a line in the comments.\n","date":"24 November 2005","permalink":"https://www.rickvandenbosch.net/blog/asp-net-2-0-menu-rendering-differently-in-browser-and-at-w3-org-validator/","section":"Blog","summary":"\u003cp\u003eI ran in to something strange today\u0026hellip;\u003c/p\u003e\n\u003cp\u003eThe ASP.NET 2.0 Menu control renders differently in a browser and in the \u003ca href=\"https://validator.w3.org\" target=\"_blank\" rel=\"noreferrer\"\u003eW3 validator\u003c/a\u003e. Loading the page in a browser results in the usage of the correct attribute \u0026lsquo;vertical-align\u0026rsquo; for the image which is used to indicate a menu has subitems. I checked this in IE and FireFox and both browsers rendered correct XHTML. When you copy the source of the rendered page and paste it in the validator-textbox at W3.org, it validates the XHTML. When you check the page directly by entering a URL, the menu renders using the non-correct attribute \u0026lsquo;valign\u0026rsquo;, causing my page to fail validation.  But the copied source passes validation!\u003c/p\u003e","title":"ASP.NET 2.0 menu rendering differently in browser and at w3.org validator"},{"content":"As a follow-up to my previous post..\nEventually a colleague of mine pointed me in the right direction. The System.Runtime.Remoting part of a configfile can also contain a tag. Setting it to \u0026ldquo;Off\u0026rdquo; made that I got the expected exception. Thanks Jasper!\n","date":"24 November 2005","permalink":"https://www.rickvandenbosch.net/blog/binary-net-remoting-over-http-throwing-errors-serverside/","section":"Blog","summary":"\u003cp\u003eAs a follow-up to my \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2005/11/23/10361.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eprevious post\u003c/a\u003e..\u003c/p\u003e\n\u003cp\u003eEventually a colleague of mine pointed me in the right direction. The \u003ca href=\"https://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpgenref/html/gnconcustomerrorselement.asp\" target=\"_blank\" rel=\"noreferrer\"\u003eSystem.Runtime.Remoting part of a configfile\u003c/a\u003e can also contain a \u003ccustomErrors\u003e tag. Setting it to \u0026ldquo;Off\u0026rdquo; made that I got the expected exception. Thanks Jasper!\u003c/p\u003e","title":"Binary .NET remoting over https: throwing errors serverside"},{"content":"We are using binary .NET remoting over http for a client-server application. At the server, we have implemented custom error handling which results in the Service Interface (the facade layer) to throw a decent exception, with lots of information. The problem we encounter now is that most of the time the client displays these exceptions as BinaryFormatter exceptions, in stead of the ApplicationException or the normal Exception we throw serverside.\nDoes anyone have experience with this? How do we keep our rich exception when we travel to our client? Please drop me a line in the comments.\n","date":"23 November 2005","permalink":"https://www.rickvandenbosch.net/blog/net-remoting-http-binary-passing-custom-errors/","section":"Blog","summary":"\u003cp\u003eWe are using binary .NET remoting over http for a client-server application. At the server, we have implemented custom error handling which results in the Service Interface (the facade layer) to throw a decent exception, with lots of information. The problem we encounter now is that most of the time the client displays these exceptions as BinaryFormatter exceptions, in stead of the ApplicationException or the normal Exception we throw serverside.\u003c/p\u003e","title":".NET remoting (http binary): passing (custom) errors"},{"content":"When you use No-touch deployment, reading your config file might cause some problems.\nI experienced this when I received a \u0026lsquo;No message was deserialized prior to calling the DispatchChannelSink\u0026rsquo; error last week. It took me quite some time before I found the problem, because of the strange error. After a while I thought about the way my app was starting: I started a separate thread which configured a remoting interface based on the config file: RemotingConfiguration.Configure(). This because of the non-standard binary formatter that was used. The thread didn\u0026rsquo;t throw an exception (I know, bad programming, but it was a proof-of-concept 😉 ) and so the app tried to communicate with the remoted object\u0026hellip;.. which resulted in the error above.\nAdding a try..catch to the code in my thread gave me the next error: \u0026lsquo;.Config file https://domain/app.exe.config can not be read successfully due to exception System.ArgumentException: URI formats are not supported\u0026rsquo;. This was a decent error and challenged me to solve it. That didn\u0026rsquo;t take too long 😉\nThe steps I coded to tackle this problem:\nTry reading the config file from the current location\nIf an exception occurs, download the file to the ApplicationData folder (make an app-specific folder for it)\nRead the file from the downloadlocation\nThe code I wrote for this is on my other computer. If someone\u0026rsquo;s interested: let me know.\n","date":"8 November 2005","permalink":"https://www.rickvandenbosch.net/blog/no-touch-deployment-reading-your-config-file/","section":"Blog","summary":"\u003cp\u003eWhen you use \u003ca href=\"https://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchno-touchdeploymentinnetframework.asp\" target=\"_blank\" rel=\"noreferrer\"\u003eNo-touch deployment\u003c/a\u003e, reading your config file might cause some problems.\u003c/p\u003e\n\u003cp\u003eI experienced this when I received a \u0026lsquo;No message was deserialized prior to calling the DispatchChannelSink\u0026rsquo; error last week. It took me quite some time before I found the problem, because of the strange error. After a while I thought about the way my app was starting: I started a separate thread which configured a remoting interface based on the config file: \u003ca href=\"https://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemruntimeremotingremotingconfigurationclassconfiguretopic.asp\" target=\"_blank\" rel=\"noreferrer\"\u003eRemotingConfiguration.Configure()\u003c/a\u003e. This because of the non-standard binary formatter that was used. The thread didn\u0026rsquo;t throw an exception (I know, bad programming, but it was a proof-of-concept 😉 ) and so the app tried to communicate with the remoted object\u0026hellip;.. which resulted in the error above.\u003c/p\u003e","title":"No-touch deployment \u0026 reading your config file"},{"content":"Last week I played with VS2005 a little. My first overall impression is: sweet! Partial classes, nullable types, generics, master pages, new controls, great extra debug info\u0026hellip; they all make our life a little easier.\nStill, some things are rather funny. For instance: why can\u0026rsquo;t you see webpage-events any more, but do you have to write them yourself combined with auto event wireup? On one hand, I could imagine that the use of (too many) page events is not the right thing to do, and that\u0026rsquo;s the reason they made it a bit harder. On the other hand: everything is made easier in this VS release, so why not this?\nMaybe I overlooked something, maybe there\u0026rsquo;s a good explanation. To be honest: I don\u0026rsquo;t care. I just wanna play with VS2005.\n","date":"5 November 2005","permalink":"https://www.rickvandenbosch.net/blog/vs2005-a-first-look/","section":"Blog","summary":"\u003cp\u003eLast week I played with VS2005 a little. My first overall impression is: \u003cstrong\u003esweet\u003c/strong\u003e! Partial classes, nullable types, generics, master pages, new controls, great extra debug info\u0026hellip; they all make our life a little easier.\u003c/p\u003e","title":"VS2005, a first look"},{"content":"I\u0026rsquo;m having a good weekendstart today: I took an exam for Rational Unified Process this afternoon, and passed with a score of 91%! I am now an IBM certified Rational Unified Process professional. Sweet.\n","date":"28 October 2005","permalink":"https://www.rickvandenbosch.net/blog/ibm-certified-rational-unified-process/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;m having a good weekendstart today: I took an exam for Rational Unified Process this afternoon, and passed with a score of 91%! I am now an IBM certified Rational Unified Process professional. Sweet.\u003c/p\u003e","title":"IBM certified: Rational Unified Process"},{"content":"If you would like to (for example) make sure all the jpegs on your site are displayed including a copyright text or something like that, you could use the example I posted before. But it would be easier to write a custom httpHandler. Here\u0026rsquo;s a small howto:\nAdd a class to a WebApplication, and give it a decent name. Mine is customHandler.\nHave the class implement the IHttpHandler interface (found in the System.Web namespace)\nImplement the right methods\nUse \u0026lsquo;ProcessRequest\u0026rsquo; to process the request the way you want to\nRegister the handler in the web.config\n\u0026lsquo;Register\u0026rsquo; the handler in IIS\nYou\u0026rsquo;re good to go!\nNow for some exampe-code. Steps 1 to 4 can be found here:\npublic class customHandler : IHttpHandler\n{\npublic customHandler()\n{\n}\n\u0026nbsp;\u0026nbsp;\u0026nbsp; public void ProcessRequest(HttpContext context)\n\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; Image image;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; string plaatje;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; Graphics graphics;\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; plaatje = context.Request.PhysicalPath;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; image = Image.FromFile(plaatje);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; graphics = Graphics.FromImage(image); \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; //TODO: add dynamic calculation of the drawstring location\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; graphics.DrawString(\"bloggingabout.net\", new Font(\"Verdana\", 14, FontStyle.Bold), new SolidBrush(Color.White), 10, 280);\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; graphics.Dispose();\n\u0026lt;p\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; context.Response.ContentType = \u0026quot;image/jpeg\u0026quot;;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; image.Save(context.Response.OutputStream, ImageFormat.Jpeg);\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; context.Response.End();\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;}\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; public\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;bool\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; IsReusable\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;br /\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; get\u0026lt;br /\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;br /\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; return\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;true\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;br /\u0026gt; }\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Step 5 looks a little bit like this: \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026lt;\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#800000\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;httpHandlers\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#800000\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;add\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#ff00ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#ff0000\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;verb\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;=\u0026quot;*\u0026quot;\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#ff00ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#ff0000\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;path\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;=\u0026quot;*.jpg\u0026quot;\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#ff00ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#ff0000\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;type\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;=\u0026quot;handlerTest.customHandler, handlerTest\u0026quot;/\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026lt;/\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#800000\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;httpHandlers\u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;font color=\u0026quot;#000000\u0026quot;\u0026gt;Step 6 is a little bit tricky. You will have to open the Internet Information Services manager and open the properties for the the website you want the handler to work for. Om the first tab page, open up configuration. Now, first select a file extension which is served by ASP.NET, like .asax or .aspx and click edit. Copy the file that's used over there (it should be\u0026amp;nbsp;C:WINDOWSMicrosoft.NETFrameworkv1.1.4322aspnet_isapi.dll). Close the dialog and click to add a new one. Here, put the copied value in the right textbox and fill in .jpg as the extension you want to be handled. Next close all open boxes by clicking OK and you should be ready to go.\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; The image it produced with my code:\u0026lt;br /\u0026gt; \u0026lt;span class=\u0026quot;missing-image\u0026quot; role=\u0026quot;img\u0026quot; aria-label=\u0026quot;Image missing\u0026quot;\u0026gt;Image missing\u0026lt;/span\u0026gt;\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt; \u0026lt;/p\u0026gt; ","date":"27 October 2005","permalink":"https://www.rickvandenbosch.net/blog/howto-create-a-custom-httphandler/","section":"Blog","summary":"\u003cp\u003eIf you would like to (for example) make sure all the jpegs on your site are displayed including a copyright text or something like that, you could use the example I posted \u003ca href=\"https://bloggingabout.net/blogs/rick/archive/2005/05/12/3849.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ebefore\u003c/a\u003e. But it would be easier to write a custom httpHandler. Here\u0026rsquo;s a small howto:\u003c/p\u003e","title":"Howto: create a custom httpHandler"},{"content":"Today I stumbled upon the Dutch Microsoft blogs and found an interesting post at the blog of Robert Fransen: the IE Developer Toolbar beta is available! The Toolbar offers you lots of handy features:\nExplore and modify the document object model (DOM) of a web page. Locate and select specific elements on a web page through a variety of techniques. Selectively disable Internet Explorer settings. View HTML object class names, ID\u0026rsquo;s, and details such as link paths, tab index values, and access keys. Outline tables, table cells, images, or selected tags. Validate HTML, CSS, WAI, and RSS web feed links. Display image dimensions, file sizes, path information, and alternate (ALT) text. Immediately resize the browser window to 800×600 or a custom size. Selectively clear the browser cache and saved cookies. Choose from all objects or those associated with a given domain. Choose direct links to W3C specification references, the Internet Explorer team weblog (blog), and other resources. Display a fully featured design ruler to help accurately align objects on your pages. Find the original (Dutch) post of Robert Fransen here, the IEBlog post here and the download here.\n","date":"16 October 2005","permalink":"https://www.rickvandenbosch.net/blog/internet-explorer-developer-toolbar-beta/","section":"Blog","summary":"\u003cp\u003eToday I stumbled upon the \u003ca href=\"https://blogs.microsoft.nl\" target=\"_blank\" rel=\"noreferrer\"\u003eDutch Microsoft blogs\u003c/a\u003e and found an interesting post at the blog of Robert Fransen: the IE Developer Toolbar beta is available! The Toolbar offers you lots of handy features:\u003c/p\u003e","title":"Internet Explorer Developer Toolbar (Beta)"},{"content":"\nSometimes you\u0026nbsp;need a sorted list. You\u0026nbsp;would think in that case\u0026nbsp;the SortedList class would help out, but unfortunately this one only sorts based on the key, while most of the time you would like to sort based on the value.\u0026nbsp;\nNow I can almost hear you think: \"Why not switch key and value then?\" Well, let\u0026rsquo;s say the key you would like to use is the username for a software program or a website. The value is the full name of the user. It is possible two different users have the same full name (John Smith), but have different usernames (j.smith and johns). In that case, switching keys and values won\u0026rsquo;t help you, because keys need to be unique in a SortedList. To implement your own \u0026lsquo;sorted list\u0026rsquo; which sorts based on the value, first create a class (or a struct) to hold the data for the key and the value you would like to retain in the list. Make sure you implement the IComparable interface, because you will need this to be able to sort the class/struct. For this example I implemented both key and value as a string: public struct KeyValuePair : IComparable\n{ \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;private string\u0026lt;/font\u0026gt; theKey;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;private string\u0026lt;/font\u0026gt; theValue;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;public string\u0026lt;/font\u0026gt; Key\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;get\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;return\u0026lt;/font\u0026gt; theKey;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;public string\u0026lt;/font\u0026gt; Value\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;get\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;return\u0026lt;/font\u0026gt; theValue;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;public\u0026lt;/font\u0026gt; KeyValuePair(\u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;string\u0026lt;/font\u0026gt; key, \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;string\u0026lt;/font\u0026gt; value)\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; theKey = key;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; theValue = value;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;public int\u0026lt;/font\u0026gt; CompareTo(\u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;object\u0026lt;/font\u0026gt; obj)\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;if\u0026lt;/font\u0026gt; (obj == \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;null\u0026lt;/font\u0026gt;)\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;return\u0026lt;/font\u0026gt; 1;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;else\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; KeyValuePair check = (KeyValuePair)obj;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;return\u0026lt;/font\u0026gt; Value.CompareTo(check.Value);\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;}\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026amp;nbsp; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; Now when you want a value-sorted list, you can simply create an \u0026lt;a href=\u0026quot;https://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemcollectionsarraylistclasstopic.asp\u0026quot;\u0026gt;ArrayList\u0026lt;/a\u0026gt;, add KeyValuePairs to the ArrayList, call the Sort() method (which calls the CompareTo() method for each of the objects that exist in the ArrayList)\u0026amp;nbsp;and see that the items in your ArrayList are sorted based on the values of all KeyValuePairs!!!\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; Sample: \u0026lt;/p\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; ArrayList arrayList;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; arrayList = \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;new\u0026lt;/font\u0026gt; ArrayList();\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; arrayList.Add(\u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;new\u0026lt;/font\u0026gt; KeyValuePair(\u0026lt;font color=\u0026quot;#800080\u0026quot;\u0026gt;\u0026quot;1\u0026quot;\u0026lt;/font\u0026gt;, \u0026lt;font color=\u0026quot;#800080\u0026quot;\u0026gt;\u0026quot;bbb\u0026quot;\u0026lt;/font\u0026gt;));\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; arrayList.Add(\u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;new\u0026lt;/font\u0026gt; KeyValuePair(\u0026lt;font color=\u0026quot;#800080\u0026quot;\u0026gt;\u0026quot;2\u0026quot;\u0026lt;/font\u0026gt;, \u0026lt;font color=\u0026quot;#800080\u0026quot;\u0026gt;\u0026quot;ccc\u0026quot;\u0026lt;/font\u0026gt;));\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; arrayList.Add(\u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;new\u0026lt;/font\u0026gt; KeyValuePair(\u0026lt;font color=\u0026quot;#800080\u0026quot;\u0026gt;\u0026quot;3\u0026quot;\u0026lt;/font\u0026gt;, \u0026lt;font color=\u0026quot;#800080\u0026quot;\u0026gt;\u0026quot;aaa\u0026quot;\u0026lt;/font\u0026gt;));\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; arrayList.Sort();\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;foreach\u0026lt;/font\u0026gt; (KeyValuePair keyValuePair \u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;in\u0026lt;/font\u0026gt; arrayList)\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; proofTextBox.Text += keyValuePair.Key + \u0026lt;font color=\u0026quot;#800080\u0026quot;\u0026gt;\u0026quot; : \u0026quot;\u0026lt;/font\u0026gt; + keyValuePair.Value + Environment.NewLine;\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;div\u0026gt; \u0026lt;font face=\u0026quot;Courier New\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/font\u0026gt; \u0026lt;/div\u0026gt; \u0026lt;p\u0026gt; \u0026lt;/span\u0026gt; \u0026lt;/p\u0026gt; ","date":"4 October 2005","permalink":"https://www.rickvandenbosch.net/blog/howto-implement-a-list-that-sorts-based-on-value-not-key/","section":"Blog","summary":"\u003cp\u003e\u003cspan\u003e\u003c/p\u003e\u003c/p\u003e\n\u003cdiv\u003e\n  Sometimes you\u0026nbsp;need a sorted list. You\u0026nbsp;would think in that case\u0026nbsp;the \u003ca href=\"https://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemcollectionssortedlistclasstopic.asp\"\u003eSortedList\u003c/a\u003e class would help out, but unfortunately this one only sorts based on the key, while most of the time you would like to sort based on the value.\u0026nbsp;\u003c/p\u003e","title":"HowTo: implement a list that sorts based on value ( not key ! )"},{"content":"Normally, if you would like a singleton implementation of a class, you would go about it a little bit like this:\npublic class BloggingAbout\n{\n\u0026nbsp;\u0026nbsp;\u0026nbsp; private static BloggingAbout bloggingAbout;\n\u0026nbsp;\u0026nbsp;\u0026nbsp; \u0026nbsp;\u0026nbsp;\u0026nbsp; private BloggingAbout()\n\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp; public static BloggingAbout BloggingAboutInstance\n\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; get\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; if (bloggingAbout == null) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; {\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; bloggingAbout = new BloggingAbout();\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; return bloggingAbout; \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n\u0026nbsp;\u0026nbsp;\u0026nbsp; }\n}\n\u0026lt;p\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt;The trouble here is that\u0026amp;nbsp;this implementation\u0026amp;nbsp;is not thread safe. The reason I post this is I recently ran into some code of\u0026amp;nbsp;an old colleague\u0026amp;nbsp;of mine (from my former employee)\u0026amp;nbsp;and some tests showed his singleton class was instantiated several times when the application was stressed with requests\u0026amp;nbsp;from the start, which caused unwanted lag in the application. Apparently him not implementing the Singleton pattern thread safe caused this, so I fixed it.\u0026lt;br /\u0026gt; It's not thread safe because two different threads could both\u0026amp;nbsp;evaluate\u0026amp;nbsp;\u0026lt;font color=\u0026quot;#0000ff\u0026quot;\u0026gt;if\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; (bloggingAbout == \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;null\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;)\u0026amp;nbsp;\u0026lt;/font\u0026gt;and find it to be true and create an\u0026amp;nbsp;instance, which violates the singleton pattern. To make sure this doesn't happen, you could use \u0026lt;a href=\u0026quot;https://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrflockstatement.asp\u0026quot; target=\u0026quot;_blank\u0026quot;\u0026gt;locking\u0026lt;/a\u0026gt; which would result in this code: \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;public\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;class\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; BloggingAbout\u0026lt;br /\u0026gt; {\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;private\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;static\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; BloggingAbout bloggingAbout;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;private\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;static\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;object\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; lockObject = \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;new\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;object\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;();\u0026lt;/font\u0026gt;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;private\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; BloggingAbout()\u0026lt;br /\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; public\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;static\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; BloggingAbout BloggingAboutInstance\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;get\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;{\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;lock\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;(lockObject)\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;/font\u0026gt;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;if\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; (bloggingAbout == \u0026lt;/font\u0026gt;\u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;null\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt;) \u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; {\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; bloggingAbout = \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;new\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; BloggingAbout();\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; \u0026lt;font color=\u0026quot;#0000ff\u0026quot; size=\u0026quot;2\u0026quot;\u0026gt;return\u0026lt;/font\u0026gt;\u0026lt;font size=\u0026quot;2\u0026quot;\u0026gt; bloggingAbout;\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;br /\u0026gt; \u0026amp;nbsp;\u0026amp;nbsp;\u0026amp;nbsp; }\u0026lt;br /\u0026gt; }\u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; The lock statement ensures that one thread does not enter a critical section of code while another thread is in that critical section. If another thread attempts to enter a locked section of code, it will wait (block) until the object is released. This is the reason the lockObject has to exist even before calling the static property BloggingAboutInstance.\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;/font\u0026gt;\u0026lt;/font\u0026gt; \u0026lt;/p\u0026gt; \u0026lt;p\u0026gt; \u0026lt;/font\u0026gt; \u0026lt;/p\u0026gt; ","date":"21 September 2005","permalink":"https://www.rickvandenbosch.net/blog/howto-thread-safe-singleton-implementation-of-a-class/","section":"Blog","summary":"\u003cp\u003eNormally, if you would like a singleton implementation of a class, you would go about it a little bit like this:\u003c/p\u003e\n\u003cp\u003e\u003cfont size=\"2\"\u003e\u003c/p\u003e\u003c/p\u003e\n\u003cp\u003e\n  \u003cfont color=\"#0000ff\" size=\"2\"\u003epublic\u003c/font\u003e\u003cfont size=\"2\"\u003e \u003c/font\u003e\u003cfont color=\"#0000ff\" size=\"2\"\u003eclass\u003c/font\u003e\u003cfont size=\"2\"\u003e BloggingAbout\u003cbr /\u003e {\u003cbr /\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp; \u003c/font\u003e\u003cfont color=\"#0000ff\" size=\"2\"\u003eprivate\u003c/font\u003e\u003cfont size=\"2\"\u003e \u003c/font\u003e\u003cfont color=\"#0000ff\" size=\"2\"\u003estatic\u003c/font\u003e\u003cfont size=\"2\"\u003e BloggingAbout bloggingAbout;\u003cbr /\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cbr /\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp; \u003cfont color=\"#0000ff\" size=\"2\"\u003eprivate\u003c/font\u003e\u003cfont size=\"2\"\u003e BloggingAbout()\u003cbr /\u003e \u003c/font\u003e\u003c/font\u003e\u003cfont size=\"2\"\u003e\u003cfont size=\"2\"\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp; {\u003cbr /\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp; }\u003c/p\u003e","title":"HowTo: Thread safe singleton implementation of a class"},{"content":"At my current project, I’m trying to bring some structure in our visual Studio projects. But I’m finding myself not sure about how far I should go. Maybe you should know I tend to be something of a purist. At the moment, we created a project with a single class, because it didn’t belong anywhere else. So we created a client specific ‘Common’ project and put the one file there.\nOn one hand it is how it should be: the file had nothing to do in any of the other projects, so it should be in a separate project. On the other: it’s about one file! A class with only four properties. Isn’t it some kind of overkill putting it in a separate project?\nI think this is the way it should be, mostly because things should be where they need to be, not where they end up because of developer laziness or something like that. And besides, other classes will probably follow soon. People might think putting a single (simple) class in a separate project is one step too far…\nI’m curious what you guys think. Drop me a line in the comments.\n","date":"16 September 2005","permalink":"https://www.rickvandenbosch.net/blog/structuring-your-projects/","section":"Blog","summary":"\u003cp\u003eAt my current project, I’m trying to bring some structure in our visual Studio projects. But I’m finding myself not sure about how far I should go. Maybe you should know I tend to be something of a purist. At the moment, we created a project with a single class, because it didn’t belong anywhere else. So we created a client specific ‘Common’ project and put the one file there.\u003c/p\u003e","title":"Structuring your projects"},{"content":"I couldn\u0026rsquo;t come up with a decent title for this post, so I just spit out some keywords.\nWe got an error today, stating the Controller of some object we wanted to put on CallContext needed to be serializable. Not thinking about the weird content of this error, we tried what would happen if we made the controller serializable. We now got a different error, which was even more weird:\nUnhandled Exception: System.Security.SecurityException:\nType System.DelegateSerializationHolder and the types derived from it (such as System.DelegateSerializationHolder) are not permitted to be deserialized at this security level.\nThis error occured when I tried to put some object on the CallContext by calling CallContext.SetData. We remembered the controller needing to be serializable, while it wasn\u0026rsquo;t remoted or anything. After some investigation, I found the problem. When you put an object on CallContext, be sure it doesn\u0026rsquo;t have any other objects attached to it through events. Because these events kind of \u0026lsquo;bind\u0026rsquo; the objects together, so the object which subscribed to the event is sent also! We implemented ICloneable and put the clone on the CallContext: this solved the problem.\nOh yeah: MemberwiseClone copies the events and their handlers also. So this is NOT the way to implement the Clone() method. You will have to set each property individually on a new instantiation of the class. We\u0026rsquo;re working on a reflection-implementation which will take away the need to copy each property individually in code, but to let a method do this for you. If this turns out to be interesting, I\u0026rsquo;ll post it here.\n","date":"15 September 2005","permalink":"https://www.rickvandenbosch.net/blog/remoting-serialization-error-callcontext-clone/","section":"Blog","summary":"\u003cp\u003eI couldn\u0026rsquo;t come up with a decent title for this post, so I just spit out some keywords.\u003c/p\u003e\n\u003cp\u003eWe got an error today, stating the Controller of some object we wanted to put on CallContext needed to be serializable. Not thinking about the weird content of this error, we tried what would happen if we made the controller serializable. We now got a different error, which was even more weird:\u003c/p\u003e","title":"Remoting, serialization error, CallContext, Clone()"},{"content":"I saw a presentation monday to explain the basics of .NET to some starting developers. In that presentation, I saw a piece of code design I don\u0026rsquo;t think should be showed. Ever. Especially to people who are about to enter the .NET world. In one cs-file, I saw a base class, two inheriting classes and then again two classes which inherited from on of the former mentioned classes. So there were 5 public classes in one file. A shiver ran down my back \u0026hellip;\nThe internal Microsoft Codeing Guidelines I blogged about earlier clearly state: \u0026lsquo;Source files should contain only one public type\u0026rsquo; and I strongly agree. If you need some internal classes, that\u0026rsquo;s fine. But multiple public classes in one file? That\u0026rsquo;s not done\u0026hellip; At least, I think so. What do you think?\n","date":"14 September 2005","permalink":"https://www.rickvandenbosch.net/blog/design-guidelines-again/","section":"Blog","summary":"\u003cp\u003eI saw a presentation monday to explain the basics of .NET to some starting developers. In that presentation, I saw a piece of code design I don\u0026rsquo;t think should be showed. Ever. Especially to people who are about to enter the .NET world. In one cs-file, I saw a base class, two inheriting classes and then again two classes which inherited from on of the former mentioned classes. So there were 5 public classes in one file. A shiver ran down my back \u0026hellip;\u003c/p\u003e","title":"Design guidelines – again"},{"content":"For my current project I\u0026rsquo;m trying to implement a factory pattern using remoting. This seems to be more difficult than I imagined. I\u0026rsquo;ve done the following:\n– Create an Interfaces project containing an IProductFactory and an IProduct.\n– Create a Class Library which implements Product and ProductFactory and is hosted in IIS through a web.config.\n– Create a project which makes a ProductFactory and uses this to create a product, all based on the interfaces.\nEverything seems to be ok: the ProductFactory is instantiated perfect, and properties and methods with \u0026rsquo;normal\u0026rsquo; returntypes can be accessed, untill I try to use the ProductFactory to create a Product. I receive a message stating there is \u0026ldquo;No assembly associated with XML key\u0026rdquo;. In that same message, there\u0026rsquo;s a link to the key (I guess) starting with \u0026ldquo;https://schemas.microsoft.com/clr/nsassem/\". I tried to set TypeFilterLevel to \u0026ldquo;Full\u0026rdquo; but that didn\u0026rsquo;t solve anything. I\u0026rsquo;ll try to find an answer, and when I do I will keep you posted. If you have any idea, will you drop me a line?\nP.S. writing my own (de)serilization seems to do the trick, but I would like to do without that\u0026hellip;\nEdit: apparently, classes which are instantiated by remoted classes, have to inherit MarshalByRefObject because they are remoted also. This means not the entire object is sent over the line, but only the interface. And that means that every call to a property or a method goes to the server component in stead of happening on the client. This kind of \u0026lsquo;chatty\u0026rsquo; interface is not what I intended. As a solution, I\u0026rsquo;ll probably use the Updater Application Block to keep all the clients in sync with the objects on the server automaticaly.\n","date":"5 September 2005","permalink":"https://www.rickvandenbosch.net/blog/advanced-remoting-no-assembly-associated-with-xml-key/","section":"Blog","summary":"\u003cp\u003eFor my current project I\u0026rsquo;m trying to implement a factory pattern using remoting. This seems to be more difficult than I imagined. I\u0026rsquo;ve done the following:\u003c/p\u003e\n\u003cp\u003e– Create an \u003cem\u003eInterfaces\u003c/em\u003e project containing an IProductFactory and an IProduct.\u003c/p\u003e","title":"Advanced remoting – “No assembly associated with XML key”"},{"content":"We landed in Eindhoven this morning after a great holiday in Turkey. I\u0026rsquo;ve done some resting, got a tan and I\u0026rsquo;m ready to go for the rest of this year\u0026hellip; And not only at my job: I\u0026rsquo;ll also pick up on blogging about .NET again.\nWhile on holiday I had a strange encounter: we were looking at the window of a jewelery when one of the people who worked there came out and started a conversation. We talked about lots of stuff, and somehow we ended up telling the guy our professions. As soon as he heared I did something which involved computers, he started asking me questions about e-mail, spam and that kind of stuff! You know that familiy and friends sometimes ask you for advice or help concerning their computer, but I thought this was a bit odd\u0026hellip;.\nAnyway, enough about my holiday: let\u0026rsquo;s get back on the .NET track!\n","date":"22 August 2005","permalink":"https://www.rickvandenbosch.net/blog/here-we-go-summer-2005-edition/","section":"Blog","summary":"\u003cp\u003eWe landed in Eindhoven this morning after a great holiday in Turkey. I\u0026rsquo;ve done some resting, got a tan and I\u0026rsquo;m ready to go for the rest of this year\u0026hellip; And not only at my job: I\u0026rsquo;ll also pick up on blogging about .NET again.\u003c/p\u003e","title":"Here we go – summer 2005 edition"},{"content":"I\u0026rsquo;m leaving for a 2-week holiday next sunday. Or actually, I\u0026rsquo;m going to a childrens camp as group leader for a week first, and after that I\u0026rsquo;m in need of a holiday ;). So then I\u0026rsquo;ll be leaving for 8 days of sun in Turkey. I\u0026rsquo;ll be back august twentysecond, but the two days after that are filled up with some in-house training, so my blog might be kinda quiet the next few weeks. But don\u0026rsquo;t worry: I\u0026rsquo;ll be back blogging my ass of before you know it 😉\nMaybe I\u0026rsquo;ll bring you guys some nice things (or pics) from Turkey.\n","date":"3 August 2005","permalink":"https://www.rickvandenbosch.net/blog/leaving-on-a-jetplain/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;m leaving for a 2-week holiday next sunday. Or actually, I\u0026rsquo;m going to a childrens camp as group leader for a week first, and after that I\u0026rsquo;m in need of a holiday ;). So then I\u0026rsquo;ll be leaving for 8 days of sun in Turkey. I\u0026rsquo;ll be back august twentysecond, but the two days after that are filled up with some in-house training, so my blog might be kinda quiet the next few weeks. But don\u0026rsquo;t worry: I\u0026rsquo;ll be back blogging my ass of before you know it 😉\u003c/p\u003e","title":"Leaving on a jetplain…"},{"content":"Dennis blogged about it earlier today, and as soon as I saw that I couldn\u0026rsquo;t help myself: I had to try out ReSharper 2.0! Little did I know about the consequences\u0026hellip;\nI love ReSharper 1. There are some small weird things, but overall I just love it, despite its little quirks. So 2.0 had to be even better! Unfortunately, it doesn\u0026rsquo;t seem that way. Visual Studio now takes forever to start, the second project I opened made ReSharper crash hard (VS had to be restarted to get life back into it), assembly-parsing is still done in a modal dialog in stead of in the promised background process, it keeps annoying me with two windows I definitely don\u0026rsquo;t want to see and last but not least: the bar next to the scrollbar now displays an ugly 3D-attempted square.\nMy first impression of ReSharper 2.0 is not too good. I\u0026rsquo;m testing it for the rest of the day, but when this feeling stays I will be switching back to my previous installed version\u0026hellip;\n","date":"21 July 2005","permalink":"https://www.rickvandenbosch.net/blog/jetbrains-resharper-2-0-first-impression/","section":"Blog","summary":"\u003cp\u003eDennis \u003ca href=\"https://bloggingabout.net/blogs/dennis/archive/2005/07/21/8629.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eblogged\u003c/a\u003e about it earlier today, and as soon as I saw that I couldn\u0026rsquo;t help myself: I had to try out ReSharper 2.0! Little did I know about the consequences\u0026hellip;\u003c/p\u003e","title":"JetBrains ReSharper 2.0 – First impression"},{"content":"Holding down the SHIFT key when you click a link in the Visual Studio help (using external help) opens the topic in a new tab in the help browser. So that\u0026rsquo;s a form of tabbed browsing. Sweet.\nAnd pretty helpful when you would like to keep open the previous help topic you were in\u0026hellip;\n","date":"20 July 2005","permalink":"https://www.rickvandenbosch.net/blog/did-you-know-visual-studio-help-tabbed-browsing/","section":"Blog","summary":"\u003cp\u003eHolding down the SHIFT key when you click a link in the Visual Studio help (using external help) opens the topic in a new tab in the help browser. So that\u0026rsquo;s a form of tabbed browsing. Sweet.\u003c/p\u003e","title":"Did you know: Visual Studio help ‘tabbed browsing’"},{"content":"Every now and again I see a piece of code where the author has used the conditional operator ? : . It might be my tidyness or it might take some getting used to, but I don\u0026rsquo;t like it. I don\u0026rsquo;t like it at all! My gut feeling says it\u0026rsquo;s nasty, because it\u0026rsquo;s not easy readable code. Lets look at an example. Imagine you have a property getter for the count of a collection. When the ArrayList you use internally is null, you want to return 0, else you want to return the count of the internal ArrayList. With the conditional operator, this looks like this:\nreturn (myArrayList == null) ? 0 : myArrayList.Count;\nwhere \u0026lsquo;complete\u0026rsquo; code writing would look like this, maybe even with an extra variable for the return value and just one return statement. (notice the brackets which you should always use imho):\nif (myArrayList == null)\n{\nreturn 0;\n}\nelse\n{\nreturn myArrayList.Count;\n}\nAlthough the first code sample is much shorter, you also loose a lot of clarity by using the conditional operator. The second code sample explains what is being evaluated and when what value is returned. In short: I think the conditional operator needs two or three times reading to be sure what is being returned when, where the other sample doesn\u0026rsquo;t.\nSure, in this case the code might be simple to understand, but what happens when the expression being evaluated gets larger and more complex?\n","date":"19 July 2005","permalink":"https://www.rickvandenbosch.net/blog/the-conditional-operator/","section":"Blog","summary":"\u003cp\u003eEvery now and again I see a piece of code where the author has used the conditional operator \u003cstrong\u003e? :\u003c/strong\u003e . It might be my tidyness or it might take some getting used to, but I don\u0026rsquo;t like it. I don\u0026rsquo;t like it at all! My gut feeling says it\u0026rsquo;s nasty, because it\u0026rsquo;s not easy readable code. Lets look at an example. Imagine you have a property getter for the count of a collection. When the ArrayList you use internally is null, you want to return 0, else you want to return the count of the internal ArrayList. With the conditional operator, this looks like this:\u003c/p\u003e","title":"The conditional operator (? :)"},{"content":"Since we upgraded to Community Server, visitors are now able to rate posts. This way you can let the bloggers here at bloggingabout.net know what you think about the things they post. Give it a go!\nFind a post you would like to rate, open the comments of that post and then click \u0026lsquo;Rate\u0026rsquo;.\n","date":"18 July 2005","permalink":"https://www.rickvandenbosch.net/blog/new-post-rating/","section":"Blog","summary":"\u003cp\u003eSince we upgraded to Community Server, visitors are now able to rate posts. This way you can let the bloggers here at bloggingabout.net know what you think about the things they post. Give it a go!\u003c/p\u003e","title":"New: post rating"},{"content":" Should I choose datasets or will classes do the trick? This is a question each developer probably asks himself (or herself) at the beginning of a project. And maybe even along the way… If I had to answer that question, I wouldn’t now what to say because I think it depends on a lot of things which of the two will be better. Both of them have pros and cons. DataSets for instance are very easy to persist in a database. Classes on the other hand can enforce business rules more easily.Barry Gervin started out with a list why datasets are so good, but in the comments there’s a big discussion going on about when to use datasets and when to use custom entities. I for one like datasets and classes. And I think we can use them both, even within the same system. On the other hand, that might get a bit complex.Is Udi Dahan's comment\u0026nbsp;right? Should dataset only be used in one-off situations, or can they belong in the center of a system’s architecture?I don’t have a particular preference, although I seem to be inclined to start with classes more often. Do you have a preference? If so, drop me a line in the comments! ","date":"18 July 2005","permalink":"https://www.rickvandenbosch.net/blog/datasets-vs-classes/","section":"Blog","summary":"\u003cP class=\"MsoNormal\"\u003e\n  \u003cSPAN lang=\"EN-US\"\u003eShould I choose datasets or will classes do the trick? This is a question each developer probably asks himself (or herself) at the beginning of a project. And maybe even along the way…\u003c/SPAN\u003e\n\u003c/P\u003e\n\u003cP class=\"MsoNormal\"\u003e\n  \u003cSPAN lang=\"EN-US\"\u003eIf I had to answer that question, I wouldn’t now what to say because I think it depends on a lot of things which of the two will be better. Both of them have pros and cons. DataSets for instance are very easy to persist in a database. Classes on the other hand can enforce business rules more easily.\u003cBR /\u003e\u003cBR /\u003e\u003c/SPAN\u003e\u003cSPAN lang=\"EN-US\"\u003eBarry Gervin started out with \u003cA href=\"https://objectsharp.com/Blogs/barry/archive/2004/02/10/273.aspx\"\u003ea list\u003c/A\u003e why datasets are so good, but in the comments there’s a big discussion going on about when to use datasets and when to use custom entities. I for one like datasets and classes. And I think we can use them both, even within the same system. On the other hand, that might get a bit complex.\u003cBR /\u003e\u003cBR /\u003e\u003c/SPAN\u003e\u003cSPAN lang=\"EN-US\"\u003eIs \u003cA href=\"https://udidahan.weblogs.us/\"\u003eUdi Dahan\u003c/A\u003e's comment\u0026nbsp;right? Should dataset only be used in one-off situations, or can they belong in the center of a system’s architecture?\u003cBR /\u003e\u003cBR /\u003e\u003c/SPAN\u003e\u003cSPAN lang=\"EN-US\"\u003eI don’t have a particular preference, although I seem to be inclined to start with classes more often. Do you have a preference? If so, drop me a line in the comments!\u003cFONT face=\"Arial\"\u003e\u003cFONT size=\"2\"\u003e\u003c/FONT\u003e\u003c/FONT\u003e\u003c/SPAN\u003e\n\u003c/P\u003e","title":"DataSets vs Classes"},{"content":" We programmers know about bugs. We fight them now and then, create them sometimes but most of all try to keep them out of our software. At least, I hope you do too ;). Trend Micro has been the victim of a bug, and this had some nasty consequences for them. April 23rd this year, Trend Micro offered the update 'Official Pattern Release 2.594.00' on their website. This update allocated almost all system memory, making it impossible to work with the computer. Within two hours (!) a new version of the update was placed on the website and the erroneous one was removed. That two hours cost Trend Micro 8 million dollars! Tens of thousands of computers were 'infected' by the bug, more than 28000 customers called the callcenter that was rapidly put together.I think this illustrates\u0026nbsp;the importance of a few things I think every release in a software development project must go through: \u0026#8211; Unit testing\u0026#8211; Testing new features\u0026#8211; Testing old features\u0026#8211; Testing the influence of changes\u0026#8211; Regression testing\u0026#8211; TESTING!Although testing is beginning to get more important in software development, I think a lot of companies are not up to par in that department. Where design and development of software have reached maturity puberty, testing seems to be strugling to\u0026nbsp;get out of\u0026nbsp;its\u0026nbsp;diapers. Of course, there’s someone who is pushing the buttons and looking at the results, but that’s not enough. These days, software is very important. Like with Trend Micro, errors in software can cost you lots of money. I think the problem is that people don’t like to spend money for something\u0026nbsp;when it’s hard to see if it pays off.Maybe the problem is that good testing doesn’t show itself. When an error is found in a system through testing, that’s what the test was there for. But there’s no (easy) way to estimate what the influence (or the cost) of that error would have been if it wouldn’t have been found. Maybe what happened to Trend Micro was a good thing, because it illustrates the importance of testing.I mean: it’s better to spend thousands of dollars more on testing than 8 million on repairing the trail of a bug later on, right? ","date":"14 July 2005","permalink":"https://www.rickvandenbosch.net/blog/the-importance-of-testing-or-the-influence-of-a-bug/","section":"Blog","summary":"\u003cP class=\"MsoNormal\"\u003e\n  \u003cSPAN lang=\"EN-GB\"\u003eWe programmers know about bugs. We fight them now and then, create them sometimes but most of all try to keep them out of our software. At least, I hope you do too ;). Trend Micro has been the victim of a bug, and this had some nasty consequences for them. April 23rd this year, Trend Micro offered the update 'Official Pattern Release 2.594.00' on their website. This update allocated almost all system memory, making it impossible to work with the computer. Within two hours (!) a new version of the update was placed on the website and the erroneous one was removed. That two hours cost Trend Micro 8 million dollars! Tens of thousands of computers were 'infected' by the bug, more than 28000 customers called the callcenter that was rapidly put together.\u003cBR /\u003e\u003cBR /\u003eI think this illustrates\u0026nbsp;the importance of a few things I think every release in a software development project must go through:\u003c/SPAN\u003e\n\u003c/P\u003e\n\u003cP class=\"MsoNormal\"\u003e\n  \u003cSPAN lang=\"EN-GB\"\u003e\u0026#8211; Unit testing\u003cBR /\u003e\u0026#8211; Testing new features\u003cBR /\u003e\u0026#8211; Testing old features\u003cBR /\u003e\u0026#8211; Testing the influence of changes\u003cBR /\u003e\u0026#8211; Regression testing\u003cBR /\u003e\u003c/SPAN\u003e\u003cSPAN lang=\"EN-GB\"\u003e\u0026#8211; TESTING!\u003cBR /\u003e\u003cBR /\u003eAlthough testing is beginning to get more important in software development, I think a lot of companies are not up to par in that department. Where design and development of software have reached \u003cS\u003ematurity\u003c/S\u003e puberty, testing seems to be strugling to\u0026nbsp;get out of\u0026nbsp;its\u0026nbsp;diapers. Of course, there’s someone who is pushing the buttons and looking at the results, but that’s not enough. These days, software is very important. Like with Trend Micro, errors in software can cost you lots of money. I think the problem is that people don’t like to spend money for something\u0026nbsp;when it’s hard to see if it pays off.\u003cBR /\u003e\u003cBR /\u003e\u003c/SPAN\u003e\u003cSPAN lang=\"EN-GB\"\u003eMaybe the problem is that good testing doesn’t show itself. When an error is found in a system through testing, that’s what the test was there for. But there’s no (easy) way to estimate what the influence (or the cost) of that error would have been if it wouldn’t have been found. Maybe what happened to Trend Micro was a good thing, because it illustrates the importance of testing.\u003cBR /\u003e\u003cBR /\u003e\u003c/SPAN\u003e\u003cSPAN lang=\"EN-GB\"\u003eI mean: it’s better to spend thousands of dollars more on testing than 8 million on repairing the trail of a bug later on, right?\u003c/SPAN\u003e\n\u003c/P\u003e","title":"The importance of testing (or: The influence of a bug …)"},{"content":"If you\u0026rsquo;re interested in Visual Studio 2005, and especially ASP.NET 2.0, visit this site: https://beta.asp.net/ It\u0026rsquo;s an official Microsoft beta site running ASP.NET 2.0. Including forum, a control gallery, tutorials, starter kits and many more!\n","date":"13 July 2005","permalink":"https://www.rickvandenbosch.net/blog/asp-net-2-0-2/","section":"Blog","summary":"\u003cp\u003eIf you\u0026rsquo;re interested in Visual Studio 2005, and especially ASP.NET 2.0, visit this site: \u003ca href=\"https://beta.asp.net/\" target=\"_blank\" rel=\"noreferrer\"\u003ehttps://beta.asp.net/\u003c/a\u003e It\u0026rsquo;s an official Microsoft beta site running ASP.NET 2.0. Including forum, a control gallery, tutorials, starter kits and many more!\u003c/p\u003e","title":"ASP.NET 2.0"},{"content":"We finally made the change to Community Server here at bloggingabout.net. Because of this, some stuff will change. One of them is the appearance of all the blogs. And I\u0026rsquo;m not entirely happy with the way my blog is looking right now. I guess it takes some getting used to. Maybe I\u0026rsquo;ll switch a little the next days. If you think I should keep a certain skin (or loose it!): drop me a comment\u0026hellip;\n","date":"12 July 2005","permalink":"https://www.rickvandenbosch.net/blog/trying-to-find-the-right-new-look/","section":"Blog","summary":"\u003cp\u003eWe finally made the change to Community Server here at bloggingabout.net. Because of this, some stuff will change. One of them is the appearance of all the blogs. And I\u0026rsquo;m not entirely happy with the way my blog is looking right now. I guess it takes some getting used to. Maybe I\u0026rsquo;ll switch a little the next days. If you think I should keep a certain skin (or loose it!): drop me a comment\u0026hellip;\u003c/p\u003e","title":"Trying to find the right new look"},{"content":" Microsoft's CLRProfiler is\u0026nbsp;a tool\u0026nbsp;you can use to analyze the behavior of your managed applications. I've used it a number of times and it can be pretty helpfull in profiling your apps. According to Microsoft, these are its strengths and weaknesses:Highlights CLRProfiler is a tool that is focused on analyzing what is going on in the garbage collector heap:\n\u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Which methods allocate which types of objects?\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Which objects survive?\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;What is on the heap?\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;What keeps objects alive?\u0026lt;/SPAN\u0026gt; \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Additionally:\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;UL type=\u0026quot;circle\u0026quot;\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The call graph feature lets you see who is calling whom how often.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Which methods, classes, modules get pulled in by whom\u0026lt;/SPAN\u0026gt; \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The tool can profile applications, services, and ASP\u0026lt;/SPAN\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;.NET\u0026lt;/SPAN\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt; pages.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The tool can control profiling:\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;UL type=\u0026quot;circle\u0026quot;\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;You can add comments that can also serve as time markers.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;You can turn allocation and call logging on or off.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;You can trigger a heap dump.\u0026lt;/SPAN\u0026gt; \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The log files produced are self-contained – you do not need to save symbol files and the like to later analyze the log file.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;There is also a command-line interface allowing log files to be produced in batch mode.\u0026lt;/SPAN\u0026gt; \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;P class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;A name=\u0026quot;_Toc54579204\u0026quot;\u0026gt;\u0026lt;STRONG\u0026gt;Lowlights\u0026lt;/STRONG\u0026gt;\u0026lt;/A\u0026gt;\u0026lt;/SPAN\u0026gt; \u0026lt;/P\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;UL type=\u0026quot;disc\u0026quot;\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;CLRProfiler is an intrusive tool; seeing a 10 to 100x slowdown in the application being profiled is not unusual. Therefore, it is not the right tool to find out where time is spent – use other profilers for that.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Log files can get huge. By default, every allocation and every call is logged, which can consume gigabytes of disk space. However, allocation and call logging can be turned on and off selectively either by the application or in the CLRProfiler UI.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;CLRProfiler cannot “attach” to an application that is already running.\u0026lt;/SPAN\u0026gt; \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;P class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;A name=\u0026quot;_Toc54579205\u0026quot;\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;STRONG\u0026gt;Internals overview\u0026lt;/STRONG\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;/A\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;/P\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;UL type=\u0026quot;disc\u0026quot;\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The tool uses the public profiling interfaces that the CLR exposes. These work by loading a COM component that then gets called whenever a significant event happens – a method gets called, an object gets allocated, a garbage collection gets triggered, and so on. \u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The COM component writes information about these events into a log file (such as “C:WINDOWSTemppipe_1636.log”).\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The GUI (Windows Forms application) analyzes the log file and displays various views.\u0026lt;/SPAN\u0026gt; \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt; \u0026lt;br /\u0026gt; \u0026lt;P class=\u0026quot;MsoNormal\u0026quot;\u0026gt; \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;I also found \u0026lt;A href=\u0026quot;https://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20030729CLRGN/manifest.xml\u0026quot;\u0026gt;this video\u0026lt;/A\u0026gt; about the CLRProfiler, but I haven't had time to watch it yet...\u0026lt;/SPAN\u0026gt;\u0026lt;/SPAN\u0026gt; \u0026lt;/P\u0026gt;\u0026lt;/p\u0026gt; ","date":"12 July 2005","permalink":"https://www.rickvandenbosch.net/blog/cooltoollist-addclrprofiler/","section":"Blog","summary":"\u003cP class=\"MsoNormal\"\u003e\n  \u003cSPAN lang=\"EN-US\"\u003eMicrosoft's \u003cA href=\"https://www.microsoft.com/downloads/details.aspx?FamilyId=86CE6052-D7F4-4AEB-9B7A-94635BEEBDDA\u0026displaylang=en\"\u003eCLRProfiler\u003c/A\u003e is\u0026nbsp;a tool\u0026nbsp;you can use to analyze the behavior of your managed applications. I've used it a number of times and it can be pretty helpfull in profiling your apps. According to Microsoft, these are its strengths and weaknesses:\u003cBR /\u003e\u003cBR /\u003e\u003c/SPAN\u003e\u003cA name=\"_Toc54579203\"\u003e\u003cSPAN lang=\"EN-US\"\u003e\u003cSTRONG\u003eHighlights\u003c/STRONG\u003e\u003c/SPAN\u003e\u003c/A\u003e\u003cSPAN lang=\"EN-US\"\u003e\u003c/SPAN\u003e\n\u003c/P\u003e\n\u003cUL type=\"disc\"\u003e\n  \u003cbr /\u003e \n  \u003cLI class=\"MsoNormal\"\u003e\n    \u003cSPAN lang=\"EN-US\"\u003eCLRProfiler is a tool that is focused on analyzing what is going on in the garbage collector heap:\u003c/SPAN\u003e\u003cbr /\u003e \u003cUL type=\"circle\"\u003e\n      \u003cbr /\u003e \n\u003cpre\u003e\u003ccode\u003e  \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n    \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Which methods allocate which types of objects?\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n      \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Which objects survive?\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n        \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;What is on the heap?\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n          \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;What keeps objects alive?\u0026lt;/SPAN\u0026gt;\n        \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt;\n        \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n          \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Additionally:\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;UL type=\u0026quot;circle\u0026quot;\u0026gt;\n            \u0026lt;br /\u0026gt; \n            \n            \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n              \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The call graph feature lets you see who is calling whom how often.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Which methods, classes, modules get pulled in by whom\u0026lt;/SPAN\u0026gt;\n              \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt;\n              \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The tool can profile applications, services, and ASP\u0026lt;/SPAN\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;.NET\u0026lt;/SPAN\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt; pages.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                  \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The tool can control profiling:\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;UL type=\u0026quot;circle\u0026quot;\u0026gt;\n                    \u0026lt;br /\u0026gt; \n                    \n                    \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                      \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;You can add comments that can also serve as time markers.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                        \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;You can turn allocation and call logging on or off.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                          \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;You can trigger a heap dump.\u0026lt;/SPAN\u0026gt;\n                        \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt;\n                        \u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                          \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The log files produced are self-contained – you do not need to save symbol files and the like to later analyze the log file.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                            \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;There is also a command-line interface allowing log files to be produced in batch mode.\u0026lt;/SPAN\u0026gt;\n                          \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt;\n                          \u0026lt;br /\u0026gt; \u0026lt;P class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                            \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;A name=\u0026quot;_Toc54579204\u0026quot;\u0026gt;\u0026lt;STRONG\u0026gt;Lowlights\u0026lt;/STRONG\u0026gt;\u0026lt;/A\u0026gt;\u0026lt;/SPAN\u0026gt;\n                          \u0026lt;/P\u0026gt;\n                          \n                          \u0026lt;br /\u0026gt; \u0026lt;UL type=\u0026quot;disc\u0026quot;\u0026gt;\n                            \u0026lt;br /\u0026gt; \n                            \n                            \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                              \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;CLRProfiler is an intrusive tool; seeing a 10 to 100x slowdown in the application being profiled is not unusual. Therefore, it is not the right tool to find out where time is spent – use other profilers for that.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                                \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;Log files can get huge. By default, every allocation and every call is logged, which can consume gigabytes of disk space. However, allocation and call logging can be turned on and off selectively either by the application or in the CLRProfiler UI.\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                                  \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;CLRProfiler cannot “attach” to an application that is already running.\u0026lt;/SPAN\u0026gt;\n                                \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt;\n                                \u0026lt;br /\u0026gt; \u0026lt;P class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                                  \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;A name=\u0026quot;_Toc54579205\u0026quot;\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;STRONG\u0026gt;Internals overview\u0026lt;/STRONG\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;/A\u0026gt;\u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;\u0026lt;/SPAN\u0026gt;\u0026lt;/P\u0026gt;\u0026lt;br /\u0026gt; \n                                  \n                                  \u0026lt;UL type=\u0026quot;disc\u0026quot;\u0026gt;\n                                    \u0026lt;br /\u0026gt; \n                                    \n                                    \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                                      \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The tool uses the public profiling interfaces that the CLR exposes. These work by loading a COM component that then gets called whenever a significant event happens – a method gets called, an object gets allocated, a garbage collection gets triggered, and so on. \u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                                        \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The COM component writes information about these events into a log file (such as “C:WINDOWSTemppipe_1636.log”).\u0026lt;/SPAN\u0026gt;\u0026lt;br /\u0026gt; \u0026lt;LI class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                                          \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;The GUI (Windows Forms application) analyzes the log file and displays various views.\u0026lt;/SPAN\u0026gt;\n                                        \u0026lt;/LI\u0026gt;\u0026lt;/UL\u0026gt;\n                                        \u0026lt;br /\u0026gt; \u0026lt;P class=\u0026quot;MsoNormal\u0026quot;\u0026gt;\n                                          \u0026lt;SPAN lang=\u0026quot;EN-US\u0026quot;\u0026gt;I also found \u0026lt;A href=\u0026quot;https://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20030729CLRGN/manifest.xml\u0026quot;\u0026gt;this video\u0026lt;/A\u0026gt; about the CLRProfiler, but I haven't had time to watch it yet...\u0026lt;/SPAN\u0026gt;\u0026lt;/SPAN\u0026gt;\n                                        \u0026lt;/P\u0026gt;\u0026lt;/p\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e","title":"CoolToolList.Add(CLRProfiler);"},{"content":"Last weekend I went to see the musical Hair at the Stadsschouwburg in Eindhoven. It was played by an allmost all American cast: only the male lead was a Dutch guy, if I understood correctly. (Normally the female lead was Dutch too, but that role was played by someone else last saturday.) And I have to say: it was really great! Unbelievable vocals, great play and a pretty cool way to bring all those long forgotten beautiful songs back to life (Aquariuuuuus). Unfortunately last sunday was the last performance, so I would say \u0026lsquo;go see it\u0026rsquo; but that\u0026rsquo;s not possible. It was their last performance in The Netherlands last sunday.\nTo the entire cast: great show guys!\n","date":"10 July 2005","permalink":"https://www.rickvandenbosch.net/blog/hair/","section":"Blog","summary":"\u003cp\u003eLast weekend I went to see the musical Hair at the Stadsschouwburg in Eindhoven. It was played by an allmost all American cast: only the male lead was a Dutch guy, if I understood correctly. (Normally the female lead was Dutch too, but that role was played by someone else last saturday.) And I have to say: it was really great! Unbelievable vocals, great play and a pretty cool way to bring all those long forgotten beautiful songs back to life (Aquariuuuuus). Unfortunately last sunday was the last performance, so I would say \u0026lsquo;go see it\u0026rsquo; but that\u0026rsquo;s not possible. It was their last performance in The Netherlands last sunday.\u003c/p\u003e","title":"Hair"},{"content":"This one is actually quite simple: Crystal Reports supports exporting to a PDF. Exporting can be done to disk, or to a stream. And a stream can be written to the Repsonse property of a page. And there you go 😉\n// Variable declaration CrystalTest crystalTest; MemoryStream memoryStream;// Create a new instance of the report you want to display as a PDF crystalTest = new CrystalTest();// TODO: Add some stuff here to fill the report with data// Export the report to a stream with the PDF format memoryStream = (MemoryStream)crystalTest.ExportToStream(ExportFormatType.PortableDocFormat);// Set the ContentType to pdf, add a header for the length // and write the contents of the memorystream to the response Response.ContentType = “application/pdf”; Response.AddHeader(“content-length”, Convert.ToString(memoryStream.Length)); Response.BinaryWrite(memoryStream.ToArray());//End the response Response.End(); ","date":"8 July 2005","permalink":"https://www.rickvandenbosch.net/blog/howto-present-a-crystal-reports-report-as-a-pdf-in-an-asp-net-web-application-without-using-temporary-files/","section":"Blog","summary":"\u003cp\u003eThis one is actually quite simple: Crystal Reports supports exporting to a PDF. Exporting can be done to disk, or to a stream. And a stream can be written to the Repsonse property of a page. And there you go 😉\u003c/p\u003e","title":"Howto: present a Crystal Reports report as a PDF in an ASP.NET web application (without using temporary files)"},{"content":"View the interview Channel 9 had with Microsoft\u0026rsquo;s CEO: Steve Ballmer. The interview in short:\n_Why does Microsoft care about developers?\n01:11 Why does Microsoft have an evangelism team?\n01:48 What is your call to action for developers right now?\n02:44 Microsoft is a leader in transparency and blogging. Why did you allow blogging?\n03:38 Time for some tough questions. On the blogs there are those that say that Microsoft doesn\u0026rsquo;t innovate, can you give us some examples of where Microsoft is innovating?\n05:42 Coming up with tough questions for you is hard. If you were in my position what tough questions would you ask Microsoft\u0026rsquo;s CEO?\n07:22 Since a lot of Microsoft employees watch Channel 9, what would you say to all the Microsoft employees around the world?\n08:48 What do you want to be remembered as?\n_ And of course \u0026hellip;\u0026hellip;.. DEVELOPERS!\n","date":"8 July 2005","permalink":"https://www.rickvandenbosch.net/blog/developers-steve-ballmer-on-channel-9/","section":"Blog","summary":"\u003cp\u003eView the \u003ca href=\"https://channel9.msdn.com/ShowPost.aspx?PostID=85529#85529\" target=\"_blank\" rel=\"noreferrer\"\u003einterview\u003c/a\u003e Channel 9 had with Microsoft\u0026rsquo;s CEO: Steve Ballmer. The interview in short:\u003c/p\u003e\n\u003cp\u003e_Why does Microsoft care about developers?\u003cbr\u003e\n01:11 Why does Microsoft have an evangelism team?\u003cbr\u003e\n01:48 What is your call to action for developers right now?\u003cbr\u003e\n02:44 Microsoft is a leader in transparency and blogging. Why did you allow blogging?\u003cbr\u003e\n03:38 Time for some tough questions. On the blogs there are those that say that Microsoft doesn\u0026rsquo;t innovate, can you give us some examples of where Microsoft is innovating?\u003cbr\u003e\n05:42 Coming up with tough questions for you is hard. If you were in my position what tough questions would you ask Microsoft\u0026rsquo;s CEO?\u003cbr\u003e\n07:22 Since a lot of Microsoft employees watch Channel 9, what would you say to all the Microsoft employees around the world?\u003cbr\u003e\n08:48 What do you want to be remembered as?\u003c/p\u003e","title":"Developers! – Steve Ballmer on channel 9"},{"content":"This Microsoft sites makes it possible to enable ClearType fonts in Windwos XP from a web interface (using Internet Explorer). Neat! There\u0026rsquo;s a powertoy available also\u0026hellip;\nClearType is a special way of displaying fonts that makes fonts stand out more on LCD screens. It\u0026rsquo;s almost as if you\u0026rsquo;re looking at a piece of paper with the words printed on it. Click here for more information on ClearType.\n","date":"8 July 2005","permalink":"https://www.rickvandenbosch.net/blog/online-cleartype-tuner/","section":"Blog","summary":"\u003cp\u003e\u003ca href=\"https://www.microsoft.com/typography/ClearType/tuner/Step1.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eThis\u003c/a\u003e Microsoft sites makes it possible to enable ClearType fonts in Windwos XP from a web interface (using Internet Explorer). Neat! There\u0026rsquo;s a \u003ca href=\"https://www.microsoft.com/typography/ClearTypePowerToy.mspx\" target=\"_blank\" rel=\"noreferrer\"\u003epowertoy\u003c/a\u003e available also\u0026hellip;\u003c/p\u003e\n\u003cp\u003eClearType is a special way of displaying fonts that makes fonts stand out more on LCD screens. It\u0026rsquo;s almost as if you\u0026rsquo;re looking at a piece of paper with the words printed on it. Click \u003ca href=\"https://www.microsoft.com/typography/ClearTypeInfo.mspx\" target=\"_blank\" rel=\"noreferrer\"\u003ehere\u003c/a\u003e for more information on ClearType.\u003c/p\u003e","title":"Online ClearType tuner"},{"content":"My last message was about this strange error I received. Today I got it again, which led me to believe a hardware failure was not the reason. So after some more investigation I found out Index Server was to blaim. Taken from support.microsoft.com (click here for full article):\nIf you run Index Server (Cisvc.exe), then Index Server may rescan the Temporary ASP.NET Files directory while it requests a Microsoft ASP.NET page. Cisvc.exe then holds a lock on the Temporary ASP.NET Files directory for one to five minutes. The length of time of the lock depends on the size of the directory that causes the Aspnet_wp.exeprocess (or W3wp.exe process for applications that run on Microsoft Internet Information Services [IIS] 6.0) to not load the particular DLL.\n","date":"7 July 2005","permalink":"https://www.rickvandenbosch.net/blog/asp-net-configuration-error-parser-error-message-access-is-denied-somename-dll/","section":"Blog","summary":"\u003cp\u003eMy last message was about this strange error I received. Today I got it again, which led me to believe a hardware failure was not the reason. So after some more investigation I found out Index Server was to blaim. Taken from support.microsoft.com (click \u003ca href=\"https://support.microsoft.com/default.aspx?scid=kb;en-us;329065\" target=\"_blank\" rel=\"noreferrer\"\u003ehere\u003c/a\u003e for full article):\u003c/p\u003e","title":"ASP.NET – Configuration error. Parser Error Message: Access is denied: somename.dll"},{"content":"I\u0026rsquo;ve been using skmmenu for quite a while now, and I think it\u0026rsquo;s great! But last Friday I was fooling around in Visual Studio, trying to make some fun stuff in ASP.NET, when I got a strange error about a reference. The information part:\n_ === Pre-bind state information ===\nLOG: DisplayName = skmmenu\n(Partial)\nLOG: Appbase = file:///c:/inetpub/wwwroot/Site\nLOG: Initial PrivatePath = bin\nCalling assembly : (Unknown).\n===_\nLOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).\nLOG: Post-policy reference: skmmenu\nLOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/site/5dd0cccf/c5f19367/skmmenu.DLL.\nLOG: Attempting download of new URL file:///C:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/Temporary ASP.NET Files/site/5dd0cccf/c5f19367/skmmenu/skmmenu.DLL.\nLOG: Attempting download of new URL file:///c:/inetpub/wwwroot/Site/bin/skmmenu.DLL.\nLOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).\nLOG: Post-policy reference: skmMenu, Version=2.2.1882.16908, Culture=neutral, PublicKeyToken=null\nI tried a lot of things: iisreset, rebooting the machine, throwing away controls from pages, but to no avail. When I tried to clear my Temporary ASP.NET Files, all the directories seamed to be willing to be deleted, except for the one I was having trouble with. Even after a reboot and closing down IIS it was not removable. Explorer kept saying it couldn\u0026rsquo;t read from the source\u0026hellip; Finally, I ran a diskcheck on my hard drive, and it looked like that solved my problem! I\u0026rsquo;m guessing it had bad sectors.\nI don\u0026rsquo;t want to go so far as to say Visual Studio or the .NET framework mashed up my hard drive: that seems a bit much 😉 But: when receiving errors you can\u0026rsquo;t trace to (your) software, you should consider the source of the error may be somewhere in the hardware\u0026hellip;\n","date":"4 July 2005","permalink":"https://www.rickvandenbosch.net/blog/asp-net-error-concerning-referenced-dll/","section":"Blog","summary":"\u003cp\u003eI\u0026rsquo;ve been using \u003ca href=\"https://www.skmmenu.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eskmmenu\u003c/a\u003e for quite a while now, and I think it\u0026rsquo;s great! But last Friday I was fooling around in Visual Studio, trying to make some fun stuff in ASP.NET, when I got a strange error about a reference. The information part:\u003c/p\u003e","title":"ASP.NET error concerning referenced DLL"},{"content":"Soon bloggingabout.net will switch to new (and better) blogging software. Because of this, the URL to my blog (and any other blog at bloggingabout.net) will change. In stead of bloggingabout.net/username, all blogs will become available through URLs like bloggingabout.net/blogs/username. Don\u0026rsquo;t worry if you can\u0026rsquo;t remember: the old URL will keep working for a while: it will redirect to the new one. I\u0026rsquo;ll keep you posted when the change is going to be done.\n","date":"29 June 2005","permalink":"https://www.rickvandenbosch.net/blog/upcoming-change/","section":"Blog","summary":"\u003cp\u003eSoon bloggingabout.net will switch to new (and better) blogging software. Because of this, the URL to my blog (and any other blog at bloggingabout.net) will change. In stead of \u003cem\u003ebloggingabout.net/username\u003c/em\u003e, all blogs will become available through URLs like \u003cstrong\u003e\u003cem\u003ebloggingabout.net/blogs/username\u003c/em\u003e\u003c/strong\u003e. Don\u0026rsquo;t worry if you can\u0026rsquo;t remember: the old URL will keep working for a while: it will redirect to the new one. I\u0026rsquo;ll keep you posted when the change is going to be done.\u003c/p\u003e","title":"Upcoming change"},{"content":"Although we\u0026rsquo;re not using SourceSafe at my current project (yet), I found out about a cool feature recently: Keyword Expansion. It enables you to get information about the revision, date, author and so on of the version of the file you are looking at inside the file itself. This way you can see version information in the comments of your code-file, without even starting SourceSafe.\nTaken from an MSDN entry about VS2k5:\nVisual SourceSafe supports keyword expansion, a process that enhances with version-specific information certain keywords that you place in your text and HTML files. When you add or check in a file that contains these keywords, in comments, Visual SourceSafe looks for the keywords and automatically places relevant version-specific information after them. For example, the string $Revision: $ tells Visual SourceSafe to expand the Revision keyword automatically with the current file version number.\nRead this entry (SourceSafe 6 also supported) for more information and a howto\u0026hellip;\n","date":"27 June 2005","permalink":"https://www.rickvandenbosch.net/blog/did-you-know-visual-sourcesafe-keyword-expansion-support/","section":"Blog","summary":"\u003cp\u003eAlthough we\u0026rsquo;re not using SourceSafe at my current project (yet), I found out about a cool feature recently: Keyword Expansion. It enables you to get information about the revision, date, author and so on of the version of the file you are looking at \u003cstrong\u003e\u003cem\u003einside the file itself\u003c/em\u003e\u003c/strong\u003e. This way you can see version information in the comments of your code-file, without even starting SourceSafe.\u003c/p\u003e","title":"Did you know… Visual SourceSafe “Keyword Expansion Support”"},{"content":"The default ComboBox has some weird characteristics\u0026hellip;\nWe created our own control which derives from the ComboBox because we wanted to create a ComboBox where the user could type (parts of) the value he or she wants to select, but would not be able to type something that was not in the list. So that\u0026rsquo;s kind of a combination between the DropDownStyles DropDown and DropDownList. The basics weren\u0026rsquo;t that complicated, so we created the controls pretty fast. But then came the next step: fine-tuning.\nFor instance: when you change the selected index of a ComboBox in code while it is dropped down and then set DroppedDown to false, the index is not the value to which you set it in code. But the text is set to the text of the item you set the index of! Because of this, the control shows the right text, but when you read that property, you get a different value. All of this while the Selected Index Changed event fires when you set the index in code\u0026hellip;\nSo in stead of setting the selected index while the ComboBox is DroppedDown, you should set DroppedDown to false, change the selected index and then set DroppedDown to true again (if necessary). We encountered some more of this weird stuff, like this:\nSetting the selected index to -1 doesn\u0026rsquo;t always reset your ComboBox. When you set the selected index to -1 twice, it works\u0026hellip; :SAlso see this post on MSDN Library about that.\nHave you got some weird stuff about the .NET ComboBox? Drop a line in the comments.\n","date":"23 June 2005","permalink":"https://www.rickvandenbosch.net/blog/combobox-trouble/","section":"Blog","summary":"\u003cp\u003e\u003cSPAN lang=\"EN-GB\"\u003eThe default ComboBox has some weird characteristics\u0026hellip;\u003cbr /\u003e\u003c/p\u003e\n\u003cP\u003e\n\u003c/P\u003e\u003c/SPAN\u003e\n\u003cp\u003e\u003cSPAN lang=\"EN-GB\"\u003e\u003c/SPAN\u003e\u003c/p\u003e\n\u003cp\u003e\u003cSPAN lang=\"EN-GB\"\u003eWe created our own control which derives from the ComboBox because we wanted to create a ComboBox where the user could type (parts of) the value he or she wants to select, but would not be able to type something that was not in the list. So that\u0026rsquo;s kind of a combination between the DropDownStyles \u003cEM\u003eDropDown\u003c/EM\u003e and \u003cEM\u003eDropDownList\u003c/EM\u003e. The basics weren\u0026rsquo;t that complicated, so we created the controls pretty fast. But then came the next step: fine-tuning.\u003cbr /\u003e\u003c/p\u003e","title":"ComboBox trouble"},{"content":"You might want to be able to let your assembly show up in the Add Reference window in Visual Studio without the user having to browse for it. When you install your assembly in the GAC, it doesn\u0026rsquo;t automatically show up in the Add Reference window, because it doesn\u0026rsquo;t enumerate all assemblies in the GAC. Installing in the GAC only eliminates the need to copy assemblies localy when referencing them. Microsoft doesn\u0026rsquo;t recommend putting assemblies in the GAC by the way\u0026hellip;\nYou can add your assembly to the Add Reference window by editing the registry. First, make a new key (name not important, I\u0026rsquo;ll use \u0026lsquo;GumpsBlog\u0026rsquo;) in the following subkey:\nHKCU – SOFTWARE – Microsoft – .NETFramework – AssemblyFolders\nThen, in the key you created, let the default value point to the location where your assemblies can be found. This should look something like this (sorry for the Dutch interface, click to enlarge):\nImage missing Next, restart Visual Studio and see your assemblies in the Add Reference window!\nBy the way, placing this registry key under the HKLM makes the assemblies in the specified folder available to any user, not just the current one\u0026hellip;\n","date":"17 June 2005","permalink":"https://www.rickvandenbosch.net/blog/howto-display-your-assembly-add-reference/","section":"Blog","summary":"\u003cp\u003eYou might want to be able to let your assembly show up in the Add Reference window in Visual Studio without the user having to browse for it. When you install your assembly in the GAC, it doesn\u0026rsquo;t automatically show up in the Add Reference window, because it doesn\u0026rsquo;t enumerate all assemblies in the GAC. Installing in the GAC only eliminates the need to copy assemblies localy when referencing them. Microsoft doesn\u0026rsquo;t recommend putting assemblies in the GAC by the way\u0026hellip;\u003c/p\u003e","title":"HOWTO: display your assembly @ Add Reference"},{"content":"We received the above error for the resx file of a form in our project today. So we checked the existence of the resx file it concerned, and it was there. So maybe the file was corrupt? We deleted the file, removed it from the project and let Visual Studio re-create it by editing the form in the designer. Building the solution gave the same error\u0026hellip; again the file was right where it was supposed to be.\nNext we deleted the file and then built the solution: this worked! But why? And would it still work when we edited the form in the VS designer? The answer to that last question is: nope. As soon as the file was created by the designer the build error popped up again.\nSearching MSDN Library did give me this topic, but that doesn\u0026rsquo;t give a satisfying answer because it only describes the error. So, I \u0026lsquo;Google grouped\u0026rsquo; it. Eventually, this lead me to this post. In short it says:\nThe limit to project names (including their fully qualified path) in VS.NET is 258 characters. (\u0026hellip;) I suspect, however, that you are running into a name length issue. The 258 character limit on the length of path names is something we\u0026rsquo;ve received feedback on before (\u0026hellip;). As a result, we are looking into this problem for fixing in the future.\nThanks,\nAllen (VS Core Team)\nI tested some stuff and found out that building a solution which is in a 218 character directory structure and includes a form called \u0026lsquo;form1\u0026rsquo; builds ok in debug configuration, but not in release configuration. Shortening the directory structure with one character solves the problem there. Form1.resx counts 10 characters. Add this to the 217 we had for the directory and you get 227. So that might be the magic number. But that doesn\u0026rsquo;t explain why building debug works, while building release doesn\u0026rsquo;t. Of course, release is a longer word than debug, but the error occurs on the resx file in the application root which is not influenced by the configuration of the build you are making. Maybe VS creates temporary files and these break the build process?\nAnyway: keep away from 200+ directory structures (and ridiculously long filenames) and you will be fine\u0026hellip;\n","date":"15 June 2005","permalink":"https://www.rickvandenbosch.net/blog/a-failure-occurred-writing-to-the-resources-file-the-system-could-not-find-the-file-specified/","section":"Blog","summary":"\u003cp\u003eWe received the above error for the resx file of a form in our project today. So we checked the existence of the resx file it concerned, and it was there. So maybe the file was corrupt? We deleted the file, removed it from the project and let Visual Studio re-create it by editing the form in the designer. Building the solution gave the same error\u0026hellip; again the file was right where it was supposed to be.\u003c/p\u003e","title":"A failure occurred writing to the resources file. The system could not find the file specified."},{"content":"Microsoft has released a beta for the program codenamed \u0026lsquo;Acrylic\u0026rsquo;. According to some people this might be Microsofts attempt to compete with Adobe, because it is said the program is the ideal combination of vector based graphics (Illustrator) and pixel based graphics (Photoshop). Is this Microsofts answer to the domination of Adobe in the graphics department?\nI downloaded (free) and installed it today, but I haven\u0026rsquo;t had time to check it out. I have seen it supports all major formats for opening and exporting. You can find the Acrylic site here. Tell me what you think about it \u0026hellip;\n","date":"11 June 2005","permalink":"https://www.rickvandenbosch.net/blog/microsoft-releases-acrylic-beta/","section":"Blog","summary":"\u003cp\u003eMicrosoft has released a beta for the program codenamed \u0026lsquo;Acrylic\u0026rsquo;. According to some people this might be Microsofts attempt to compete with Adobe, because it is said the program is the ideal combination of vector based graphics (Illustrator) and pixel based graphics (Photoshop). Is this Microsofts answer to the domination of Adobe in the graphics department?\u003c/p\u003e","title":"Microsoft releases ‘Acrylic’ beta"},{"content":"Today we had a problem on the project I am working on. To be more precise: I had a problem, the other team members did not.\nQuick explanation: We have a server component which uses a web service for some of the functionality we need. Other functionality can be found in a different system which is reachable through IBM WebSphere MQ. The server component is available through remoting, the objects are hosted in IIS. To get decent SOAP errors someone on the team created a custom SOAPFaultHandler and included it in the web.config of the server component. So far so good.\nWhen trying to request a typed DataSet at the front end application all the way from the web service (so through the remoting objects of the server) I got a \u0026lsquo;reference not set to an instance of an object\u0026rsquo; error. Strange, because nobody on the team mentioned anything about this and it concerned key functionality. Stepping though code I found that the web service worked decently: the typed dataset was returned successfully to the server. Stepping further, the server component looked OK also: the dataset was available everywhere up to the Service Interface layer (facade layer). But still I got that same error at the client application\u0026hellip;\nFinally, after some intense debugging, I got to the SOAPFaultHandler and decided to attach that to the aspnet_wp process to see if that might cause the problem. And it did! There was a check on the existence of the header, but it was not checked for items: the first item was read without checking for existence. That caused my version of this complete system to break.\nI corrected the error and things were fine, but I couldn\u0026rsquo;t find a reason for this weird behaviour. Why did I have the problem but no one else? I think I figured it out when I found out everybody had WSE 2.0 installed, except me. It looks like WSE 2.0 fixes something around SOAP errors so there aren\u0026rsquo;t any when they are not necessary, or the ones that are there are complete ones. We had a deadline today, so I didn\u0026rsquo;t investigate any further. But I think I\u0026rsquo;ll try to find the real reason the following week. And when I find the true reason, I\u0026rsquo;ll keep you posted.\n","date":"10 June 2005","permalink":"https://www.rickvandenbosch.net/blog/a-custom-soap-fault-handler-and-a-reference-not-set-to-an-instance-of-an-object-error/","section":"Blog","summary":"\u003cp\u003eToday we had a problem on the project I am working on. To be more precise: I had a problem, the other team members did not.\u003c/p\u003e\n\u003cp\u003eQuick explanation: We have a server component which uses a web service for some of the functionality we need. Other functionality can be found in a different system which is reachable through IBM WebSphere MQ. The server component is available through remoting, the objects are hosted in IIS. To get decent SOAP errors someone on the team created a custom SOAPFaultHandler and included it in the web.config of the server component. So far so good.\u003c/p\u003e","title":"A custom SOAP fault handler and a ‘Reference not set to an instance of an object’ error …"},{"content":"Although I don\u0026rsquo;t like Internet Explorer toolbars at all, I\u0026rsquo;m thinking about installing one. MSN toolbar V1.2 now gives your IE5.1+ browser the cool feature of tabbed browsing. This IE7 preview kind of thing is available for download together with Windows Desktop Search functionality and some more stuff. Read about the functionality here, or just get it.\n","date":"9 June 2005","permalink":"https://www.rickvandenbosch.net/blog/tabbed-browsing-in-ie6/","section":"Blog","summary":"\u003cp\u003eAlthough I don\u0026rsquo;t like Internet Explorer toolbars at all, I\u0026rsquo;m thinking about installing one. \u003ca href=\"https://toolbar.msn.com/\" target=\"_blank\" rel=\"noreferrer\"\u003eMSN toolbar V1.2\u003c/a\u003e now gives your IE5.1+ browser the cool feature of tabbed browsing. This IE7 preview kind of thing is available for download together with Windows Desktop Search functionality and some more stuff. Read about the functionality \u003ca href=\"https://search.msn.com/docs/toolbar.aspx?t=MSNTbar_CONC_AboutMSNToolbarSuite.htm\u0026amp;FORM=ATSP\u0026amp;v=02.00.00\" target=\"_blank\" rel=\"noreferrer\"\u003ehere\u003c/a\u003e, or just \u003ca href=\"https://g.msn.com/8SEURL/enusDownloadSuiteURLbdy_tbarhome\" target=\"_blank\" rel=\"noreferrer\"\u003eget it\u003c/a\u003e.\u003c/p\u003e","title":"Tabbed browsing in IE6"},{"content":"Have you ever made an install for your application with Visual Studio and sent it out into the world, only to get complaints of people that your software wouldn\u0026rsquo;t run?\n\u0026ldquo;Have you got the Microsoft .NET framework installed?\u0026rdquo;\n\u0026ldquo;The what?\u0026rdquo;\n\u0026ldquo;Go look in control panel, \u0026hellip;\u0026hellip; \u0026hellip;\u0026hellip;\u0026rdquo;\n\u0026ldquo;Ow, yeah, I got that\u0026rdquo;\n\u0026ldquo;Hmmm\u0026hellip;.\u0026rdquo;\n\u0026ldquo;So ehm\u0026hellip;.\u0026rdquo;\n\u0026ldquo;What version is it?\u0026rdquo;\n\u0026ldquo;Version? \u0026hellip;. wait \u0026hellip;. it\u0026rsquo;s 1.0\u0026rdquo;\n\u0026ldquo;Darn, download it and \u0026hellip;\u0026rdquo;\nAnd so on and so forth. And that is not cool. That\u0026rsquo;s why some people have made the Visual Studio bootstrapper. Read about and get it here, install it and enjoy\u0026hellip;\n","date":"6 June 2005","permalink":"https://www.rickvandenbosch.net/blog/visual-studio-net-bootstrapper/","section":"Blog","summary":"\u003cp\u003eHave you ever made an install for your application with Visual Studio and sent it out into the world, only to get complaints of people that your software wouldn\u0026rsquo;t run?\u003c/p\u003e","title":"Visual Studio .NET Bootstrapper"},{"content":"We recently ran into the problem mentioned in the title of this post at work. Microsoft has a knowledgebase article (kbid 842706) for this bug. The hotfix is not to be distributed freely, but I already spoke to some people who have contacted Microsoft and got the fix for free. It will be e-mailed to you.\nAs you can read in the comments of this post at dotnetjunkies, there are some people who found no more problems after installing hotfixes KB841870 and KB841767-X86\u0026hellip; I think that\u0026rsquo;s weird (but I\u0026rsquo;m not arguing!) because these two articles are about Crystal Reports and the rearrangement of controls, not the removal of them. But hey, we\u0026rsquo;ll give it a try!\nThere is a more easy solution, however. Most of the time, this kind of behaviour is common for user controls which reside in the same solution as the rest of the project. By removing the user control from the main solution and placing them in their own separate solution, the problem can often be resolved. Just add a reference to the output of the project in the separate solution, and most of the times your control will stay where it\u0026rsquo;s supposed to stay. If that doesn\u0026rsquo;t help: try contacting Microsoft for a hotfix\u0026hellip;\n","date":"6 June 2005","permalink":"https://www.rickvandenbosch.net/blog/controls-disappear-from-the-windows-forms-designer-in-vs2k3/","section":"Blog","summary":"\u003cp\u003eWe recently ran into the problem mentioned in the title of this post at work. Microsoft has a \u003ca href=\"https://support.microsoft.com/?kbid=842706\" target=\"_blank\" rel=\"noreferrer\"\u003eknowledgebase article\u003c/a\u003e (kbid 842706) for this bug. The hotfix is not to be distributed freely, but I already spoke to some people who have contacted Microsoft and got the fix for free. It will be e-mailed to you.\u003c/p\u003e","title":"Controls disappear from the Windows Forms Designer in VS2k3"},{"content":"Sorry I\u0026rsquo;ve been away for a while, but there was hardly enough time between work, friends, birthdays and deadlines for me to blog\u0026hellip; I\u0026rsquo;ll try and make up for lost time.\nLast sunday my girlfriend turned 25: we had a killer party! Almost 40 people visited our apartment in Eindhoven, so it was pretty crowded in out otherwise quiet home. Thanks to all of you.\nAnd then there\u0026rsquo;s been the project I\u0026rsquo;ve been working on: the first delivery is next thursday, so I\u0026rsquo;ve spent quite some time there. There are a million things to blog about there, but I\u0026rsquo;ll start one at a time, beginning today\u0026hellip; See my next post!\n","date":"31 May 2005","permalink":"https://www.rickvandenbosch.net/blog/update/","section":"Blog","summary":"\u003cp\u003eSorry I\u0026rsquo;ve been away for a while, but there was hardly enough time between work, friends, birthdays and deadlines for me to blog\u0026hellip; I\u0026rsquo;ll try and make up for lost time.\u003c/p\u003e","title":"Update"},{"content":"The following method returns the MD5 hash for any given string. For instance for a password. It might be of some assistance when you\u0026rsquo;re trying to validate user credentials but you don\u0026rsquo;t want to store the password readable in the database.\nFor this method, you\u0026rsquo;ll need the following using statements:\nusing System; using System.Text; using System.Security.Cryptography; [...] public string EncodePassword(string originalPassword) { //Declarations Byte[] originalBytes; Byte[] encodedBytes; MD5 md5; //Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash (encoded password) md5 = new MD5CryptoServiceProvider(); originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword); encodedBytes = md5.ComputeHash(originalBytes); //Convert encoded bytes back to a ‘readable’ string return BitConverter.ToString(encodedBytes); } Hmmm\u0026hellip; I do seem to write comments when I\u0026rsquo;m trying to explain something 😉\n","date":"18 May 2005","permalink":"https://www.rickvandenbosch.net/blog/howto-encode-a-password-using-md5-in-c-or-howto-calculate-the-md5-hash-for-a-string/","section":"Blog","summary":"\u003cp\u003eThe following method returns the MD5 hash for any given string. For instance for a password. It might be of some assistance when you\u0026rsquo;re trying to validate user credentials but you don\u0026rsquo;t want to store the password readable in the database.\u003c/p\u003e","title":"HOWTO: Encode a password using MD5 in C# (or: howto calculate the MD5 hash for a string)"},{"content":"As Ernst put it in the comments: we opened a can of worms here!\nIn my previous post about Commenting your code, I stated you should not comment your code. Of course, this is nonsense. The reason I stated that, however, isn\u0026rsquo;t. And I didn\u0026rsquo;t only say that because I would get some attention 😉\nToo many times, I see complete useless naming of variables, classes, methods and so on. Because of this incomprehensible naming the developer who wrote the code then has to place enormous amounts of comments between his code to keep it even remotely understandable, even to himself. This way it becomes a completely unreadable mess. So I started out by saying: don\u0026rsquo;t comment. This is because I think it\u0026rsquo;s the first thing you have to keep in mind: write your code so it will be completely readable without any comments.\nMy next statement about commenting would be: pick comment-spots carefully. Sometimes you can\u0026rsquo;t choose method names, or that what you are trying to do is not easily readable from your code, whatever name you give to the diverse participants. Then and only then are you allowed to place comments in your code. This way, you minimize the amount of (useless) comments someone has to wrestle to, because in 80 percent of the time, your code will do the talking. The last 20 percent can be taken care of by comments, which you carefully added\u0026hellip;\n","date":"17 May 2005","permalink":"https://www.rickvandenbosch.net/blog/commenting-your-code-the-sequel/","section":"Blog","summary":"\u003cp\u003eAs Ernst put it in the comments: we opened a can of worms here!\u003cbr\u003e\nIn my previous post about \u003ca href=\"blog/commenting-your-code/\"\u003eCommenting your code\u003c/a\u003e, I stated you should not comment your code. Of course, this is nonsense. The reason I stated that, however, isn\u0026rsquo;t. And I didn\u0026rsquo;t only say that because I would get some attention 😉\u003c/p\u003e","title":"Commenting your code – The sequel"},{"content":"There are several ways to comment your code. There\u0026rsquo;s the style where you place comments on the same line as the code. This might get less readable, because there\u0026rsquo;s some horizontal scrolling involved when your statements get longer. An example:\nstring s; //Declare string s = e.Message; //Assign exception message to string s Another way to place comments in your code is to place every comment on its own line. This is less readable when you get long methods, because your methods will get twice as long because of the comments! An example:\n//Declare string string s; //Assign exception message to string s s = e.Message; My thoughts about commenting are: don\u0026rsquo;t. I think naming should be so readable that every line of code makes sense. Use the C# \u0026rsquo;three-slashes-comment-block\u0026rsquo; to explain what a method does which parameters it takes and, if necessary, what it returns. The above given code example would look like this:\nstring exceptionMessage; exceptionMessage = exception.Message; This piece of code doesn\u0026rsquo;t really move mountains, so it\u0026rsquo;s kind of hard to find a good descriptive piece of text for it. I\u0026rsquo;ll leave that up to your own imagination ;).\nYou see that, by naming the Exception exception instead of e, it is instantly much clearer what it contains. The string is now called exceptionMessage which leaves very little place for argument as to what this variable would contain. Therefore the line where the exception message is assigned to the string doesn\u0026rsquo;t need any comments. This eliminates all comment within your code, except for maybe the occasional exotic function you call, where you need to specify why or how you\u0026rsquo;re calling it\u0026hellip;\n","date":"17 May 2005","permalink":"https://www.rickvandenbosch.net/blog/commenting-your-code/","section":"Blog","summary":"\u003cp\u003eThere are several ways to comment your code. There\u0026rsquo;s the style where you place comments on the same line as the code. This might get less readable, because there\u0026rsquo;s some horizontal scrolling involved when your statements get longer. An example:\u003c/p\u003e","title":"Commenting your code"},{"content":"The AdRotator .NET provides can be used to show a different image each time a page is visited. You could write a webpage which does this for you, but it’s probably not very useful. Although you need to change the XML file when changing the images to be showed when you use an AdRotator, but that\u0026rsquo;s not the issue here.\nSomething .NET doesn’t deliver is a control to add your own text to an image when it is displayed on a webpage. And that’s exactly what we will be doing in this HowTo.\nBelow is the code I placed inside the page load of a webpage called showimg.aspx. To display images with the text I want to print on them, you don’t use \u0026lt;IMG src=”test.jpg”/\u0026gt;, but instead you use \u0026lt;IMG src=”showimg.aspx?image=test.jpg”/\u0026gt;.\nPlease note: this code is illustrative. Normally you would perform a number of checks. For instance check if the querystring is filled, if the image exists, if the text will fit the image, and so on…\n//Const declarations const string outtext = “bloggingabout.net/rick”; //Variable declarations string img; Image image; Graphics graphics; Font font; SizeF textSize; SolidBrush brush; //Set font \u0026amp; brush and get image from QueryString img = Request.QueryString[“image”]; font = new Font(“Verdana”, 9); brush = new SolidBrush(Color.Black); //Opening the specified image from the images folder image = Image.FromFile(Server.MapPath(“images/” + img)); //Create graphics object for painting graphics = Graphics.FromImage(image); //Get the size the text will be with the defined font textSize = graphics.MeasureString(outtext, font); //Set SmoothingMode to AntiAlias graphics.SmoothingMode = SmoothingMode.AntiAlias; //Draw the string in the lower right corner of the image graphics.DrawString(outtext, font, brush, image.Width – textSize.Width, image.Height – textSize.Height); //Dispose used objects graphics.Dispose(); font.Dispose(); brush.Dispose(); //Writing the image to the browser as the response: //Set contenttype to image Response.ContentType = “image/jpeg”; //Save the changed image to response image.Save(Response.OutputStream, ImageFormat.Jpeg); //End repsone: it’s done 😉 Response.End(); //Dispose the image object image.Dispose(); ","date":"11 May 2005","permalink":"https://www.rickvandenbosch.net/blog/howto-draw-your-own-string-url-copyright-on-each-displayed-picture-in-an-asp-net-website/","section":"Blog","summary":"\u003cp\u003eThe AdRotator .NET provides can be used to show a different image each time a page is visited. You could write a webpage which does this for you, but it’s probably not very useful. Although you need to change the XML file when changing the images to be showed when you use an AdRotator, but that\u0026rsquo;s not the issue here.\u003cbr\u003e\nSomething .NET doesn’t deliver is a control to add your own text to an image when it is displayed on a webpage. And that’s exactly what we will be doing in this HowTo.\u003c/p\u003e","title":"HOWTO: Draw your own string (URL, copyright) on each displayed picture in an ASP.NET website"},{"content":".NET does not give you possibilities to create animated GIFs through GDI+. At least 1.1 doesn\u0026rsquo;t, they might incorporate it in 2.0. But there are ways to make them! This solution is one I used myself, and I\u0026rsquo;m very pleased!\n//Variable declaration StringCollection stringCollection; MemoryStream memoryStream; BinaryWriter binaryWriter; Image image; Byte[] buf1; Byte[] buf2; Byte[] buf3; //Variable declaration stringCollection = a_StringCollection_containing_images; Response.ContentType = “Image/gif”; memoryStream = new MemoryStream(); buf2 = new Byte[19]; buf3 = new Byte[8]; buf2[0] = 33; //extension introducer buf2[1] = 255; //application extension buf2[2] = 11; //size of block buf2[3] = 78; //N buf2[4] = 69; //E buf2[5] = 84; //T buf2[6] = 83; //S buf2[7] = 67; //C buf2[8] = 65; //A buf2[9] = 80; //P buf2[10] = 69; //E buf2[11] = 50; //2 buf2[12] = 46; //. buf2[13] = 48; //0 buf2[14] = 3; //Size of block buf2[15] = 1; // buf2[16] = 0; // buf2[17] = 0; // buf2[18] = 0; //Block terminator buf3[0] = 33; //Extension introducer buf3[1] = 249; //Graphic control extension buf3[2] = 4; //Size of block buf3[3] = 9; //Flags: reserved, disposal method, user input, transparent color buf3[4] = 10; //Delay time low byte buf3[5] = 3; //Delay time high byte buf3[6] = 255; //Transparent color index buf3[7] = 0; //Block terminator binaryWriter = new BinaryWriter(Response.OutputStream); for (int picCount = 0; picCount \u0026lt; stringCollection.Count; picCount++) { image = Bitmap.FromFile(stringCollection[picCount]); image.Save(memoryStream, ImageFormat.Gif); buf1 = memoryStream.ToArray(); if (picCount == 0) { //only write these the first time…. binaryWriter.Write(buf1, 0, 781); //Header \u0026amp; global color table binaryWriter.Write(buf2, 0, 19); //Application extension } binaryWriter.Write(buf3, 0, 8); //Graphic extension binaryWriter.Write(buf1, 789, buf1.Length – 790); //Image data if (picCount == stringCollection.Count – 1) { //only write this one the last time…. binaryWriter.Write(“;”); //Image terminator } memoryStream.SetLength(0); } binaryWriter.Close(); Response.End(); Edit:\nDamn you Paint.NET! I make a test-image: looks great. I save it as a GIF: still looks great. Use it in my anigif-code: no more greatness. I reopen the file in Paint.NET: then it\u0026rsquo;s fubar! Creating the testfiles in oldskool Paint solves this (because you only have GIF-supported colors in your toolbar)\u0026hellip;\nWhen you are converting a file to a GIF, old Paint warns you because you might be losing color information, Paint.NET does not. Paint reloads the file the way you saved it so you see what remains. Paint.NET does not. These are two wannahaves on Paint.NET for me!\nEdit 2:\nThanks to Dennis for pointing out a small glitch in my type-work.\nIt should have been picCount == stringCollection.Count - 1.\n","date":"10 May 2005","permalink":"https://www.rickvandenbosch.net/blog/howto-create-an-animated-gif-using-net-c/","section":"Blog","summary":"\u003cp\u003e.NET does not give you possibilities to create animated GIFs through GDI+. At least 1.1 doesn\u0026rsquo;t, they might incorporate it in 2.0. But there are ways to make them! This solution is one I used myself, and I\u0026rsquo;m very pleased!\u003c/p\u003e","title":"HOWTO: create an animated GIF using .NET (C#)"},{"content":"They don\u0026rsquo;t want your money, they want your voice\u0026hellip;\nTake ONE minute today to sign the ONE declaration and lend us your voice in the fight against global AIDS and extreme poverty.\nClick here to visit one.org\n","date":"3 May 2005","permalink":"https://www.rickvandenbosch.net/blog/visit-www-one-org/","section":"Blog","summary":"\u003cp\u003eThey don\u0026rsquo;t want your money, they want your voice\u0026hellip;\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eTake ONE minute today to sign the ONE declaration and lend us your voice in the fight against global AIDS and extreme poverty.\u003c/p\u003e","title":"Visit www.one.org"},{"content":"The title isn\u0026rsquo;t descriptive enough for this post, but it will have to do. Today I was trying to get an ASP.NET application to allow me to define two different login levels. What I was trying to do was the following:\nThere\u0026rsquo;s a main ASP.NET application, which is allowed to be accessed by anyone (\u0026lt;allow users=\u0026quot;*\u0026quot;\u0026gt; at https://www.domain.com/)\nThere\u0026rsquo;s a customer part where a login is required. (https://www.domain.com/customers/)\nThere\u0026rsquo;s a maintenance part where a different login is required. (https://www.domain.com/maintenance/)\nBecause I didn\u0026rsquo;t want to share my DAL between two applications and I wanted to keep everything within one solution (one project even) I was searching for a way to make sure only the maintenance user would be able to login to the maintenance part but both the maintenance user as well as all the customers would be able to login to the customer part. Especially for these kind of wishes, the \u0026lt;location\u0026gt; element in web.config seems to have been invented. I finally solved the case by defining my web.config as follows:\n\u0026lt;configuration\u0026gt; \u0026lt;!–Default settings for the application (snipped some stuff here)–\u0026gt; \u0026lt;system.web\u0026gt; \u0026lt;authentication mode=”Forms”\u0026gt; \u0026lt;forms name=”UniqueCookieName” loginUrl=”login.aspx” /\u0026gt; \u0026lt;/authentication\u0026gt; \u0026lt;authorization\u0026gt; \u0026lt;allow users=”*” /\u0026gt; \u0026lt;/authorization\u0026gt; \u0026lt;/system.web\u0026gt; \u0026lt;!–Settings for the maintenance part–\u0026gt; \u0026lt;location path=”maintenance”\u0026gt; \u0026lt;system.web\u0026gt; \u0026lt;authorization\u0026gt; \u0026lt;allow users=”maintenance_user” /\u0026gt; \u0026lt;deny users=”*” /\u0026gt; \u0026lt;/authorization\u0026gt; \u0026lt;/system.web\u0026gt; \u0026lt;/location\u0026gt; \u0026lt;!–Settings for the customers part–\u0026gt; \u0026lt;location path=”customers”\u0026gt; \u0026lt;system.web\u0026gt; \u0026lt;authorization\u0026gt; \u0026lt;deny users=”?” /\u0026gt; \u0026lt;/authorization\u0026gt; \u0026lt;/system.web\u0026gt; \u0026lt;/location\u0026gt; \u0026lt;/configuration\u0026gt; As you can see, I\u0026rsquo;ve configured the application so that the maintenance-user is the only user that is allowed inside the \u0026lsquo;maintenance\u0026rsquo; folder. All other users are denied access. By the way, allowing the maintenance user must happen before denying all the others, or else no-one has rights there.\nWithin the customers location, anyone who logs in is allowed. So everybody who\u0026rsquo;s unknown is not allowed to do anything.\nThis was my fairly simple solution to what I thought would be something of a challenge\u0026hellip;\n","date":"29 April 2005","permalink":"https://www.rickvandenbosch.net/blog/configuring-an-asp-net-app-for-multiple-login-locations-with-forms-authentication/","section":"Blog","summary":"\u003cp\u003eThe title isn\u0026rsquo;t descriptive enough for this post, but it will have to do. Today I was trying to get an ASP.NET application to allow me to define two different login levels. What I was trying to do was the following:\u003c/p\u003e","title":"Configuring an ASP.NET app for multiple login locations with forms authentication"},{"content":"I stumbled upon a great workspace at GotDotNet: Visual Studio Core Community Powertoys. Here you can find some pretty neat powertoys for the Visual Studio IDE. For example:\nGo Back Visual Studio Add-In\nThe Go Back Add-in provides a Navigate Backward functionality that is different than the normal Navigate Backward functionality. (Which does some neat things like close a file if you happened to have opened it while navigating forward)\nVSMouseBindings\nYou have a 5 button mouse, why not be able to assign all five mouse buttons to commands within visual studio?\nRead Blogs Without Leaving Visual Studio\nThis open source plugin ships as part of SharpTools 2.0 and is a full-featured RSS / Blog aggregator which integrates into the familiar dockable panes of the Visual Studio.NET IDE.\nSo, are you interested in using (or making!) Visual Studio Add-Ins? Check out the Visual Studio Core Community Powertoys workspace at GotDotNet.\n","date":"28 April 2005","permalink":"https://www.rickvandenbosch.net/blog/visual-studio-powertoys/","section":"Blog","summary":"\u003cp\u003eI stumbled upon a \u003ca href=\"https://www.gotdotnet.com/team/ide/\" target=\"_blank\" rel=\"noreferrer\"\u003egreat workspace\u003c/a\u003e at GotDotNet: \u003cstrong\u003eVisual Studio Core Community Powertoys\u003c/strong\u003e. Here you can find some pretty neat powertoys for the Visual Studio IDE. For example:\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eGo Back Visual Studio Add-In\u003c/strong\u003e\u003cbr\u003e\n\u003cem\u003eThe Go Back Add-in provides a Navigate Backward functionality that is different than the normal Navigate Backward functionality. (Which does some neat things like close a file if you happened to have opened it while navigating forward)\u003c/em\u003e\u003c/p\u003e","title":"Visual Studio Powertoys!"},{"content":"At the Powertoys Weblog, Sara Ford posted about a very cool tool which is available at gotdotnet: Regex Builder.\nAt gotdotnet it is described as follows:\nA tool for building and testing Regular Expressions. It allows you to manipulate the expression and your source text, and shows you a tree with all of the Matches, Groups, and Captures found in the text.\nI think this tool is easier to use for RegEx beginners than for instance The Regulator, because its GUI is pretty simple and there\u0026rsquo;s some standard information available at startup. The Regulator might scare you off by offering a fairly complex GUI. For more experienced users I\u0026rsquo;d recommend The Regulator. With this tool you can even search RegexLib.com.\nA few other cool features The Regulator offers: code generation and the possibility to compile your regular expression(s) to an assembly!\n","date":"26 April 2005","permalink":"https://www.rickvandenbosch.net/blog/regular-expression-tools/","section":"Blog","summary":"\u003cp\u003eAt the \u003ca href=\"https://blogs.msdn.com/powertoys/default.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003ePowertoys Weblog\u003c/a\u003e, Sara Ford posted about a very cool tool which is available at gotdotnet: \u003ca href=\"https://www.gotdotnet.com/Workspaces/Workspace.aspx?id=9e33c395-8275-4906-8a09-0bff41fdc1d6\" target=\"_blank\" rel=\"noreferrer\"\u003eRegex Builder\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eAt gotdotnet it is described as follows:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eA tool for building and testing Regular Expressions. It allows you to manipulate the expression and your source text, and shows you a tree with all of the Matches, Groups, and Captures found in the text.\u003c/p\u003e","title":"Regular expression tools"},{"content":"Last friday Chris Wilton posted about IE7 Beta on the Microsoft Internet Explorer Weblog (IEBlog). The two most important features for IE 7:\nSupport for the alpha channel in PNG images. CSS standards compliance! Furthermore, it\u0026rsquo;s nice to know not only Visual Studio 2005 will be released this summer\u0026hellip;\n\u0026hellip; when we release the first beta of IE7 this summer.\n","date":"24 April 2005","permalink":"https://www.rickvandenbosch.net/blog/internet-explorer-7-beta/","section":"Blog","summary":"\u003cp\u003eLast friday Chris Wilton \u003ca href=\"https://blogs.msdn.com/ie/archive/2005/04/22/410963.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eposted about IE7 Beta\u003c/a\u003e on the Microsoft Internet Explorer Weblog (\u003ca href=\"https://blogs.msdn.com/ie/default.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eIEBlog\u003c/a\u003e). The two most important features for IE 7:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eSupport for the alpha channel in PNG images.\u003c/li\u003e\n\u003cli\u003eCSS standards compliance!\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFurthermore, it\u0026rsquo;s nice to know not only Visual Studio 2005 will be released this summer\u0026hellip;\u003c/p\u003e","title":"Internet Explorer 7 – Beta"},{"content":"Questa star-listed me on his blog (together with Frans Bouma!). He wrote:\nDe blog van Gump is nog jong, maar tot nu toe voor mij in iedergeval al de meest gelezen weblog\nWhich roughly translates to Gump\u0026rsquo;s blog is still young, but is the blog I recently read most.\nI\u0026rsquo;m flattered Questa: thanks! I\u0026rsquo;ll try to keep up the good work and live up to my star status. 😉\n","date":"19 April 2005","permalink":"https://www.rickvandenbosch.net/blog/wanna-see-my-star/","section":"Blog","summary":"\u003cp\u003eQuesta \u003ca href=\"https://questa.blogspot.com/2005/04/must-read.html\" target=\"_blank\" rel=\"noreferrer\"\u003estar-listed\u003c/a\u003e me on \u003ca href=\"https://questa.blogspot.com/\" target=\"_blank\" rel=\"noreferrer\"\u003ehis blog\u003c/a\u003e (together with Frans Bouma!). He wrote:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eDe blog van Gump is nog jong, maar tot nu toe voor mij in iedergeval al de meest gelezen weblog\u003c/p\u003e","title":"I got starred!"},{"content":"The last couple of years I\u0026rsquo;ve had small Visual Studio crashes, where Visual Studio stopped and asked me if I wanted to restart and reopen the current project. These crashes never meant a loss of work. Today I had the first BIG VS2K3 crash and this time it did cost me. A lot\u0026hellip;\nI\u0026rsquo;m wondering why VS stopped responding completely. The network here at our client isn\u0026rsquo;t that fast this morning, but I can not imagine this being the problem. I installed ReSharper a couple of days ago, but I would think a lot of people use this. So I don\u0026rsquo;t think that\u0026rsquo;s it either, because I couldn\u0026rsquo;t find anything on their site (only for (much) older versions). Then what was it? A hardware failure? A rare VS bug / feature? Too many heavy apps opened? I don\u0026rsquo;t know. But I do know I will be CTRL-S\u0026rsquo;ing more often\u0026hellip;\nUpdate:\nIt does seem to be a bug. The problem occured again, at exactly the same place it did half an hour ago. There\u0026rsquo;s one method in my Workflow which (ReSharper) Intellisense does not like too much. And when I complete the method call without Intellisense I don\u0026rsquo;t have Intellisense at all for the workflow object. When I reboot Visual Studio after saving the method that caused this problem, all\u0026rsquo;s well and I can continue my work\u0026hellip;. Strange stuff.\n","date":"19 April 2005","permalink":"https://www.rickvandenbosch.net/blog/my-first-big-visual-studio-2003-crash-update/","section":"Blog","summary":"\u003cp\u003eThe last couple of years I\u0026rsquo;ve had small Visual Studio crashes, where Visual Studio stopped and asked me if I wanted to restart and reopen the current project. These crashes never meant a loss of work. Today I had the first BIG VS2K3 crash and this time it did cost me. A lot\u0026hellip;\u003c/p\u003e","title":"My first BIG Visual Studio 2003 crash – Update"},{"content":"Sure, I\u0026rsquo;m not the first one to blog about it. But I still didn\u0026rsquo;t want it to go unnoticed\u0026hellip; Visual Studio .NET 2005 Beta 2 is out now. (Available for people with MSDN subscriptions)\nFor those of you who don\u0026rsquo;t have an MSDN subscription, the Express Editions can give an idea of the power .NET 2.0 will bring to you.\nThe first impressions of people around me are good. Better yet, those first impressions are VERY good. I\u0026rsquo;ll be installing beta 2 on my Virtual PC shortly and will come back to you with more info\u0026hellip;\n","date":"18 April 2005","permalink":"https://www.rickvandenbosch.net/blog/visual-studio-net-2005-beta-2/","section":"Blog","summary":"\u003cp\u003eSure, I\u0026rsquo;m not the first one to blog about it. But I still didn\u0026rsquo;t want it to go unnoticed\u0026hellip; Visual Studio .NET 2005 Beta 2 is \u003ca href=\"https://msdn.microsoft.com/subscriptions/\" target=\"_blank\" rel=\"noreferrer\"\u003eout now\u003c/a\u003e. (Available for people with MSDN subscriptions)\u003cbr\u003e\nFor those of you who don\u0026rsquo;t have an MSDN subscription, the \u003ca href=\"https://lab.msdn.microsoft.com/express/\" target=\"_blank\" rel=\"noreferrer\"\u003eExpress Editions\u003c/a\u003e can give an idea of the power .NET 2.0 will bring to you.\u003c/p\u003e","title":"Visual Studio .NET 2005 – Beta 2"},{"content":"Most of you probably know about the refactoring options Visual Studio 2005 will deliver to us. For those of you who would like to experience what refactoring, using optimization, partial code generation and more feels like without waiting for VS2K5, you should try JetBrains\u0026rsquo; ReSharper. I installed it yesterday (after having downloaded it a few weeks ago) and it\u0026rsquo;s a great addition to the Visual Studio development environment.\nAnd having experienced this, I want VS2K5 to come out even sooner\u0026hellip;.\n","date":"15 April 2005","permalink":"https://www.rickvandenbosch.net/blog/net-refactoring/","section":"Blog","summary":"\u003cp\u003eMost of you probably know about the refactoring options Visual Studio 2005 will deliver to us. For those of you who would like to experience what refactoring, using optimization, partial code generation and more feels like without waiting for VS2K5, you should try JetBrains\u0026rsquo; \u003ca href=\"https://www.jetbrains.com/resharper\" target=\"_blank\" rel=\"noreferrer\"\u003eReSharper\u003c/a\u003e. I installed it yesterday (after having downloaded it a few weeks ago) and it\u0026rsquo;s a great addition to the Visual Studio development environment.\u003c/p\u003e","title":".NET Refactoring"},{"content":"Dino Esposito wrote an excellent article on the new and improved DataGridView control in .NET 2.0 in the .NET magazine of April this year. It explains the possibilities the newly built gridcontrol gives you. Finally a decent grid control\u0026hellip;\nCurious what .NET 2.0 will bring you? This is a must read!\n","date":"9 April 2005","permalink":"https://www.rickvandenbosch.net/blog/datagrid-revised/","section":"Blog","summary":"\u003cp\u003eDino Esposito wrote an \u003ca href=\"https://msdn.microsoft.com/data/default.aspx?pull=/msdnmag/issues/05/04/cuttingedge/default.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003eexcellent article\u003c/a\u003e on the new and improved DataGridView control in .NET 2.0 in the .NET magazine of April this year. It explains the possibilities the \u003cstrong\u003enewly built\u003c/strong\u003e gridcontrol gives you. Finally a decent grid control\u0026hellip;\u003c/p\u003e","title":"Datagrid revised"},{"content":"Read on my favourite forum today, in someone\u0026rsquo;s signature:\nIn a perfect world\u0026hellip; spammers would get caught, go to jail, and share a cell with many men who have enlarged their penisses, taken Viagra and are looking for a new relationship.\n","date":"8 April 2005","permalink":"https://www.rickvandenbosch.net/blog/funny-signature/","section":"Blog","summary":"\u003cp\u003eRead on my favourite forum today, in someone\u0026rsquo;s signature:\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003eIn a perfect world\u0026hellip; spammers would get caught, go to jail, and share a cell with many men who have enlarged their penisses, taken Viagra and are looking for a new relationship.\u003c/p\u003e","title":"Funny signature"},{"content":"If you\u0026rsquo;ve ever worked with Access XP or earlier in combination with SourceSafe 6 and are now using Access 2003, you might miss the SourceSafe capabilities in Access. Out of the box, Access 2003 did not support putting your Access stuff in Sourcesafe. Microsoft has now released an Access 2003 add-in for this! So, if you would like your Access 2003 program to be taken into source code control: it now can. The add-in can be found here.\n","date":"8 April 2005","permalink":"https://www.rickvandenbosch.net/blog/access-2003-now-sourcesafe-enabled/","section":"Blog","summary":"\u003cp\u003eIf you\u0026rsquo;ve ever worked with Access XP or earlier in combination with SourceSafe 6 and are now using Access 2003, you might miss the SourceSafe capabilities in Access. Out of the box, Access 2003 did not support putting your Access stuff in Sourcesafe. Microsoft has now released an Access 2003 add-in for this! So, if you would like your Access 2003 program to be taken into source code control: it now can. The add-in can be found \u003ca href=\"https://www.microsoft.com/downloads/details.aspx?familyid=2ea45ff4-a916-48c5-8f84-44b91fa774bc\u0026amp;displaylang=en\" target=\"_blank\" rel=\"noreferrer\"\u003ehere\u003c/a\u003e.\u003c/p\u003e","title":"Access 2003 now SourceSafe enabled"},{"content":"The hype surrounding Visual Studio 2005 almost makes you not notice all the other upcoming Microsoft developer products which will accompany VS2K5. One of these products is the new source code control system. This January at the ASP.NET 2.0 roadshow in Amsterdam, Scott Guthrie (leading engineer on the ASP.NET 2.0 team) described the new source code control system as \u0026lsquo;SourceSafe done right\u0026rsquo;.\nMicrosoft will be delivering Team Foundation which not only will allow you to add source control to your solutions, but also makes it easier to track work items as their status is available at all time. Integration with common Office applications like Project and Excel make it easy to get an overview of the current status for a project. A quote, taken from \u0026ldquo;Visual Studio 2005 Team System: Enterprise-Class Source Control and Work Item Tracking\u0026rdquo; (link):\nVisual Studio Team Foundation includes an enterprise-class source control provider that picks up where Visual SourceSafe leaves off. It is reliable, scalable, fast, more securable, extensible, and includes almost all of the easy to use Visual SourceSafe features with which you and your team are already familiar.\nThe Visual Studio Team Foundation source control provider ships as a standalone SCM application or as an integrated change management component in Visual Studio 2005 Team System. Inside Visual Studio, the Team Foundation source control plug-in reduces the complexity of source control by making it an extension of project file management. Developers can perform all source control operations without ever leaving the integrated development environment (IDE) or opening another application.\nInside or outside Visual Studio, the Team Foundation source control provider seamlessly integrates with other Team System components such as work item tracking and reporting.\nSource Control Provider Description\nImplemented as an ASP.NET Web service, the Visual Studio Team Foundation source control provider enables you to access and manage your source-controlled configuration items from anywhere on the Internet.\nSource files and project metadata are stored in a Microsoft SQL Server database. Source control operations are performed in an atomic and transactional way. This architecture has the following advantages:\nScalability: Given sufficient hardware, your source control repository can contain over a terabyte of data. Team Foundation supports between five and 500 users. Integrity and Reliability: The types of data integrity issues associated with file-based source control applications are practically eliminated. Speed: Depending on the operation requested, Team Foundation is orders of magnitude faster than Visual SourceSafe. But what about SourceSafe? I use that at home!\nMicrosoft is updating the version control technology of Visual SourceSafe. A new product release with a continued focus on version control, Visual SourceSafe 2005, will update and improve this popular system. For individual developers or small teams who need a lightweight, client-only, file server application for source code control only, Microsoft will continue to enhance and support Visual SourceSafe. Visual SourceSafe 2005 will include enhancements such as remote web access over HTTP, LAN performance booster, Unicode and XML support, and regional time zones and languages.\n","date":"8 April 2005","permalink":"https://www.rickvandenbosch.net/blog/source-code-control-for-visual-studio-2005/","section":"Blog","summary":"\u003cp\u003eThe hype surrounding Visual Studio 2005 almost makes you not notice all the other upcoming Microsoft developer products which will accompany VS2K5. One of these products is the new source code control system. This January at the ASP.NET 2.0 roadshow in Amsterdam, Scott Guthrie (leading engineer on the ASP.NET 2.0 team) described the new source code control system as \u0026lsquo;SourceSafe done right\u0026rsquo;.\u003c/p\u003e","title":"Source code control for Visual Studio 2005"},{"content":"Brad Abrams posted the internal MS Coding guidelines on his blog earlier this year.\nInteresting reading stuff!\nI tested my own code against these guidelines. I think I would pass\u0026hellip;. 😉\n","date":"6 April 2005","permalink":"https://www.rickvandenbosch.net/blog/internal-ms-coding-guidelines/","section":"Blog","summary":"\u003cp\u003eBrad Abrams posted the \u003ca href=\"https://blogs.msdn.com/brada/articles/361363.aspx\" target=\"_blank\" rel=\"noreferrer\"\u003einternal MS Coding guidelines\u003c/a\u003e on \u003ca href=\"https://blogs.msdn.com/brada\" target=\"_blank\" rel=\"noreferrer\"\u003ehis blog\u003c/a\u003e earlier this year.\u003cbr\u003e\nInteresting reading stuff!\u003c/p\u003e\n\u003cp\u003eI tested my own code against these guidelines. I think I would pass\u0026hellip;. 😉\u003c/p\u003e","title":"Internal MS coding guidelines"},{"content":"Questa posted a very usefull piece of code\u0026hellip;\nIt\u0026rsquo;s possible to convert a string representation of an enum back to an enum!\nprivate enum MyEnumeration { FooBar, Foo, Bar } ... MyEnum foo = MyEnum.Foo; foobar = foo.ToString(); MyEnum bar = (MyEnum)Enum.Parse(typeof(MyEnum), foobar); At the end of this code, the variable bar has the MyEnum value Foo, just the way it\u0026rsquo;s supposed to be\u0026hellip;\n","date":"6 April 2005","permalink":"https://www.rickvandenbosch.net/blog/converting-string-to-enumeration-value/","section":"Blog","summary":"\u003cp\u003eQuesta posted a \u003ca href=\"https://questa.blogspot.com/2005/03/string-converteren-naar-een-enum.html\" target=\"_blank\" rel=\"noreferrer\"\u003every usefull\u003c/a\u003e piece of code\u0026hellip;\u003cbr\u003e\nIt\u0026rsquo;s possible to convert a string representation of an enum back to an enum!\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-csharp\" data-lang=\"csharp\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kd\"\u003eprivate\u003c/span\u003e \u003cspan class=\"kd\"\u003eenum\u003c/span\u003e \u003cspan class=\"n\"\u003eMyEnumeration\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFooBar\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"n\"\u003eBar\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"p\"\u003e...\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eMyEnum\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eMyEnum\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eFoo\u003c/span\u003e\u003cspan class=\"p\"\u003e;\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003efoobar\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efoo\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eToString\u003c/span\u003e\u003cspan class=\"p\"\u003e();\u003c/span\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"n\"\u003eMyEnum\u003c/span\u003e \u003cspan class=\"n\"\u003ebar\u003c/span\u003e \u003cspan class=\"p\"\u003e=\u003c/span\u003e \u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eMyEnum\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\u003cspan class=\"n\"\u003eEnum\u003c/span\u003e\u003cspan class=\"p\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eParse\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"k\"\u003etypeof\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eMyEnum\u003c/span\u003e\u003cspan class=\"p\"\u003e),\u003c/span\u003e \u003cspan class=\"n\"\u003efoobar\u003c/span\u003e\u003cspan class=\"p\"\u003e);\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003eAt the end of this code, the variable \u003ccode\u003ebar\u003c/code\u003e has the \u003ccode\u003eMyEnum\u003c/code\u003e value \u003ccode\u003eFoo\u003c/code\u003e, just the way it\u0026rsquo;s supposed to be\u0026hellip;\u003c/p\u003e","title":"Converting string to Enum value"},{"content":"Actually, the cause for this error is very small and simple. But because the error doesn\u0026rsquo;t clearly state what\u0026rsquo;s wrong and there\u0026rsquo;s not a lot to be found about this, I\u0026rsquo;ll post it here anyway\u0026hellip; Otherwise, you might be looking for this for a while, while it\u0026rsquo;s so easy!\nWhen you are loading an assembly using reflection and you want to call a method from the class that\u0026rsquo;s in the loaded assembly, you might get the error Object does not match target type. Even when the method is void and takes no parameters this error can occur. In that case: make sure the methods in the assembly you loaded are static.\nYes, I did have this error myself and yes, I found out the static-part myself eventually. But it took me half an hour. Let\u0026rsquo;s just say it was at the end of a very, very long day\u0026hellip;.. 😉\n","date":"6 April 2005","permalink":"https://www.rickvandenbosch.net/blog/object-does-not-match-target-type-error-calling-a-method-on-an-assembly-loaded-using-reflection/","section":"Blog","summary":"\u003cp\u003eActually, the cause for this error is very small and simple. But because the error doesn\u0026rsquo;t clearly state what\u0026rsquo;s wrong and there\u0026rsquo;s not a lot to be found about this, I\u0026rsquo;ll post it here anyway\u0026hellip; Otherwise, you might be looking for this for a while, while it\u0026rsquo;s so easy!\u003c/p\u003e","title":"“Object does not match target type” error calling a method on an assembly loaded using reflection"},{"content":"After promising you a post on using delegates to create events several times, I\u0026rsquo;m now using my break to post it. Because it will be a while if I wait until I can find the time\u0026hellip; 😉\nAs I mentioned earlier a delegate can be seen as an interface for a method. Because you don\u0026rsquo;t know what the method that will handle an event on your user control will look like, delegates are a great way to provide your user control with events. (For the basics on delegates see my post on them earlier).\nFirst, you will have to declare the delegate that will be used to call the event. This is no different from the regular delegate declaration.\npublic delegate void OnLabelTextChanged(object sender, EventArgs e); Next, you will have to declare a local variable to hold the method that handles your event. This way you can check if the eventhandler was implemented by the calling application. If it was, you can trigger the event. If it wasn\u0026rsquo;t, don\u0026rsquo;t 😉\n//Declare local variable of delegate type private OnLabelTextChanged ltcDelegate; The last step is to add the event to the available events for the user control. You do this by declaring a public virtual event of the type you named your delegate. The text between the brackets places this event in the category “property changed” with the description “Text was changed”.\n//Declare public event of delegate type [Category(“Property changed”), Description(“Text was changed”)] public virtual event OnLabelTextChanged LabelTextChanged { //point event to local delegate variable add { ltcDelegate += value; } remove { ltcDelegate -= value; } } This way, the local variable (ltcDelegate in this example) will be null if the eventhandler was not implemented. If the eventhandler was implemented, you can call the eventhandler. In this example the eventhandler is triggered when the text for a label changes. This is the code in the property for the text:\n[Category(“Appearance”), DefaultValue(“”)] public string LabelText { get { return _lbltxt; } set { _lbltxt = value; lblDelTest.Text = _lbltxt; //if eventhandler is implemented, trigger it if (ltcDelegate != null) { ltcDelegate(this, EventArgs.Empty); } } } That\u0026rsquo;s how easy it is to use delegates to create an event for your user control! If you have any questions: contact me through the contact page, or drop a line in the comments.\n","date":"21 March 2005","permalink":"https://www.rickvandenbosch.net/blog/creating-events-using-delegates/","section":"Blog","summary":"\u003cp\u003eAfter promising you a post on using delegates to create events several times, I\u0026rsquo;m now using my break to post it. Because it will be a while if I wait until I can find the time\u0026hellip; 😉\u003c/p\u003e","title":"Creating events using delegates"},{"content":"Stored Procedures rule, because they facilitate manipulating the dataset you get from a database or the way you are inserting or deleting data in a database without changing your application. Or your business layer for that matter. But you can\u0026rsquo;t always use stored procedures for the actions you would like your application to take. Or maybe your database doesn\u0026rsquo;t support stored procedures. In that case it\u0026rsquo;s back to queries for you! And that\u0026rsquo;s what I would like to talk about\u0026hellip; queries. And how to protect them.\nPlease note: I\u0026rsquo;m not posting actual code. Normally, I would check the existence of querystring values, check if the ID is actually an integer and so on, but this is just a sample to get my point across. And believe me; I\u0026rsquo;ve seen pages constructed like this, or worse.\nLet\u0026rsquo;s assume we\u0026rsquo;re writing a very simple webpage where we want to show the details for a customer. We pass the customer ID in the querystring. That way we can show the customer\u0026rsquo;s data. An example of such a URL:\nURL: bloggingabout.net/rick/custinfo.aspx?custid=12 In the page called custinfo.aspx will be logic to grab the customer ID from the querystring and query the database for the data for this customer. Here\u0026rsquo;s where the interesting part begins. Let\u0026rsquo;s assume the query for the customer data is constructed as follows:\nSqlClient.SqlCommand cmd = new SqlClient.SqlCommand(); cmd.CommandText = \u0026#34;Select * from customers where customers.customerID = \u0026#34; + Request.QueryString[\u0026#34;custid\u0026#34;]; This works like a charm, as long as you have other pages redirecting to this page using only valid customer ID\u0026rsquo;s. Now think about what will happen when the visitor of a site sees this URL, and decides to change it to this:\nURL: bloggingabout.net/rick/custinfo.aspx?custid=12;Delete from customers query: Select * from customers where customers.customerID = 12;Delete from customers You can imagine the impact of this query: first all data for customer with id 12 will be fetched. Next, your customers table will be emptied. And by changing everything after the semicolon the visitor is able to manipulate the entire database! This should never be possible. One of the ways to protect your (web) application from SQL injection is using parameterized queries:\nSqlClient.SqlCommand cmd = \u0026lt;FONT color=\u0026#34;#0000ff\u0026#34;\u0026gt;new \u0026lt;/FONT\u0026gt;SqlClient.SqlCommand(); cmd.CommandText = \u0026#34;Select * from customers where customers.customerID = @custid\u0026#34;; cmd.Parameters.Add(\u0026#34;@custid\u0026#34;, int.Parse(Request.QueryString[\u0026#34;custid\u0026#34;])); No matter what is inserted in the querystring, the parameterized query sees the entire value as the value that should be assigned to the parameter and makes sure it gets it all.\nFYI: in this example there would be an error (FormatException) when the user enters the wrong value for the querystring, because int.Parse wouldn\u0026rsquo;t be able to parse the querystring to an integer. Unfortunately you can\u0026rsquo;t rely on this kind of errors to stop all SQL injection so parameterized queries would be the way to go. 😉\n","date":"21 March 2005","permalink":"https://www.rickvandenbosch.net/blog/parameterized-queries/","section":"Blog","summary":"\u003cp\u003eStored Procedures rule, because they facilitate manipulating the dataset you get from a database or the way you are inserting or deleting data in a database without changing your application. Or your business layer for that matter. But you can\u0026rsquo;t always use stored procedures for the actions you would like your application to take. Or maybe your database doesn\u0026rsquo;t support stored procedures. In that case it\u0026rsquo;s back to queries for you! And that\u0026rsquo;s what I would like to talk about\u0026hellip; queries. And how to protect them.\u003c/p\u003e","title":"Creating events using delegates"},{"content":"They stole my leather jacket this weekend, containing my wallet and my keys. Assholes. First thing I learned as a kid: leave other people\u0026rsquo;s stuff alone!\nWhy is it some people simply don\u0026rsquo;t have the decency to work for the things they want? I do\u0026hellip; Just like all of my friends. And although you might not be able to buy everything you like, it feels pretty good when you are, for instance, finally able to order the phone you\u0026rsquo;ve wanted for months. I hope they catch the bastard who did this, but I fear they won\u0026rsquo;t.\n","date":"21 March 2005","permalink":"https://www.rickvandenbosch.net/blog/aholes/","section":"Blog","summary":"\u003cp\u003eThey stole my leather jacket this weekend, containing my wallet and my keys. Assholes. First thing I learned as a kid: leave other people\u0026rsquo;s stuff alone!\u003c/p\u003e\n\u003cp\u003eWhy is it some people simply don\u0026rsquo;t have the decency to work for the things they want? I do\u0026hellip; Just like all of my friends. And although you might not be able to buy everything you like, it feels pretty good when you are, for instance, finally able to \u003ca href=\"/blog/new-phone-on-the-way\"\u003eorder the phone\u003c/a\u003e you\u0026rsquo;ve wanted for months. I hope they catch the bastard who did this, but I fear they won\u0026rsquo;t.\u003c/p\u003e","title":"A*%holes"},{"content":"My new phone is on the way! I ordered it yesterday, and faxed all of the necessary info today. So if all goes well, I\u0026rsquo;ll be calling you using this baby next week!\nThis is the MDA III, provided by T-Mobile. It\u0026rsquo;s actually the QTek 9090, but T-Mobile placed their own logo on it. It has integrated wireless networking, bluetooth, and many more!\nI could even develop my own software for it. And if I do, I\u0026rsquo;ll let you know\u0026hellip;.\n","date":"18 March 2005","permalink":"https://www.rickvandenbosch.net/blog/new-phone-on-the-way/","section":"Blog","summary":"\u003cp\u003eMy new phone is on the way! I ordered it yesterday, and faxed all of the necessary info today. So if all goes well, I\u0026rsquo;ll be calling you using this baby next week!\u003c/p\u003e","title":"New phone on the way …"},{"content":"Just a quick personal update:\nmy carchoice has been approved and the car is currently on it\u0026rsquo;s way. Just a few more weeks\u0026hellip; I sold my bike, but will be looking for another one! we had a wedding last friday, very good party! the company party was great! the bottom shelve of the cupboard in our kitchen broke: most of our muds and scales have crashed\u0026hellip; 🙁 tonight we\u0026rsquo;re having a company yearmeeting! As you can see, mostly positive news. I\u0026rsquo;ll be posting my story on how to use delegates for events in C# shortly.\n","date":"16 March 2005","permalink":"https://www.rickvandenbosch.net/blog/personal-update/","section":"Blog","summary":"\u003cp\u003eJust a quick personal update:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003emy carchoice has been approved and the car is currently on it\u0026rsquo;s way. Just a few more weeks\u0026hellip;\u003c/li\u003e\n\u003cli\u003eI sold my bike, but will be looking for another one!\u003c/li\u003e\n\u003cli\u003ewe had a wedding last friday, very good party!\u003c/li\u003e\n\u003cli\u003ethe company party was great!\u003c/li\u003e\n\u003cli\u003ethe bottom shelve of the cupboard in our kitchen broke: most of our muds and scales have crashed\u0026hellip; 🙁\u003c/li\u003e\n\u003cli\u003etonight we\u0026rsquo;re having a company yearmeeting!\u003c/UL\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eAs you can see, mostly positive news. I\u0026rsquo;ll be posting my story on how to use delegates for events in C# shortly.\u003c/p\u003e","title":"Personal update"},{"content":"All I wanted to do was check if my application was running in debug-mode or in release-mode. Searching MSDN library and Google (groups) both did not deliver the solution to me. I was about to let go when, out of the blue, a webpage showed up in my browser telling me the following:\nVisual Studio automatically generates a pre-processor directive called DEBUG which is linked to the mode you run your application in. Beware: these directives are case sensitive\u0026hellip;\nThis meant an easy solution for my \u0026lsquo;problem\u0026rsquo;!\nPre-processor directives can be defined using #define (making the directive true) and #undef (making it false) in C#. When you check one of these directives using an #if ... #else ... #endif statement Visual Studio even greys out the code that will not be compiled, because of the directives. This gives you a pretty good idea which code will and which code will not be compiled into the final assembly.\nBecause of the pre-processor directive behaviour, you can easily create cross-platform applications by simply changing one directive. Changing that one directive may change complete pieces of code in your application.\nThe answer to my question was simple:\n#if (DEBUG) imgPath = GetDirectoryName(Application.ExecutablePath); #else imgPath = GetDirectoryName(Application.ExecutablePath) + \u0026#34;\\images\\\u0026#34;; #endif ","date":"10 March 2005","permalink":"https://www.rickvandenbosch.net/blog/is-my-c-application-running-in-debug-mode-or-about-pre-processor-directives/","section":"Blog","summary":"\u003cp\u003eAll I wanted to do was check if my application was running in debug-mode or in release-mode. Searching MSDN library and Google (groups) both did not deliver the solution to me. I was about to let go when, out of the blue, a webpage showed up in my browser telling me the following:\u003c/p\u003e","title":"Is my C# application running in debug mode? or: About pre-processor directives"},{"content":"It\u0026rsquo;s almost like playing Need for Speed: “Please select your car.”\nBut this time it was real! Last saturday I had two testdrives and I selected my future car. It is going to be the Citroën C4. I ordered it today and, when all goes well, I\u0026rsquo;ll be receiving it within just a few weeks! That is if my director accepts the order.\nI can hardly wait \u0026hellip;.\n","date":"7 March 2005","permalink":"https://www.rickvandenbosch.net/blog/select-a-car/","section":"Blog","summary":"\u003cp\u003eIt\u0026rsquo;s almost like playing Need for Speed: “Please select your car.”\u003c/p\u003e\n\u003cp\u003eBut this time it was real! Last saturday I had two testdrives and I selected my future car. It is going to be the Citroën C4. I ordered it today and, when all goes well, I\u0026rsquo;ll be receiving it within just a few weeks! That is if my director accepts the order.\u003c/p\u003e","title":"Select a car …"},{"content":"Yesterday I attended the Microsoft DevDays 2005 in The Hague. The MSDN TechNet briefings in Veldhoven I attended last year (was that October or November?) were great. Because the DevDays would (or should) be even greater I could hardly wait for DevDays 2005 to begin! Here\u0026rsquo;s my short opinion on the DevDays 2005. Interested in a more elaborate version? Comment!\nKeynote #Prashant Sridharan kicked off with a killer keynote. This guy alternated humour with fact, example with slides and gave an overall really good presentation. I listened to him with ease for almost one and a half hour and after that I was sure: the DevDays were going to be great!\nVisual Studio Tools for Office 2005 #The name could make you think otherwise, but this session was about Visual Studio (2005) Tools for Office (2003). Lex Oskam made the crowd enthusiastic about these tools, which make it possible to create rich applications within a Word or Excel document. Great session to follow Prashant\u0026rsquo;s keynote.\nSoftware factories #The guy who spoke here wanted to share a lot of information, and that\u0026rsquo;s where it went wrong: the story he told was very scattered and sometimes he was quiet for just too long, indicating he himself lost the line of his story. Being complicated, software factories should be made concrete. Unfortunately this presentation stayed too abstract.\nBizTalk in action #There were two guys for this session, and why became very clear during the first demo: one of them was there for the presentation, the other was the technical guy who actually knew how the stuff worked. His presenting skills were not all that good\u0026hellip; The demos were too simple: “This is what we made and look, it works!”\nASP.NET Web Services 2.0 #Starting out, this session promised to be one of the best of the day. The speaker was very good and told his story very interesting. Near the end he went in too deep, and lost some of his viewers. I think this session was too complicated to be given at the end of such a tiring day.\nOverall #The DevDays didn\u0026rsquo;t bring what I hoped they would bring. The sessions I attended were mostly too abstract or too boring. The day started out great with the keynote and Lex Oskam\u0026rsquo;s presentation, from then on it seemed to get worse with every session.\n","date":"4 March 2005","permalink":"https://www.rickvandenbosch.net/blog/microsoft-devdays-2005-the-day-after/","section":"Blog","summary":"\u003cp\u003eYesterday I attended the Microsoft DevDays 2005 in The Hague. The MSDN TechNet briefings in Veldhoven I attended last year (was that October or November?) were great. Because the DevDays would (or should) be even greater I could hardly wait for DevDays 2005 to begin! Here\u0026rsquo;s my short opinion on the DevDays 2005. Interested in a more elaborate version? Comment!\u003c/p\u003e","title":"Microsoft DevDays 2005 – the day after"},{"content":"Delegates can be seen as interfaces for methods. Let\u0026rsquo;s look at an example of a delegate and what it really represents.\ndelegate double Calculation(double one, double two); All this line of code really does, is tell the class it is in that there might be one or more methods with the given signature: a method returning a double and taking two doubles as parameters. You cannot call a method Calculation now, because it does not have a body, so it doesn\u0026rsquo;t have any functionality. It\u0026rsquo;s just a blueprint for future reference. You\u0026rsquo;re saying something like: “You might find one or more methods somewhere having this signature which do something for you, but don\u0026rsquo;t ask me where or what they are called. Just be ready!” Next, let us create a method with the same signature as the delegate.\nstatic double Multiply(double first, double second) { return (double)(first * second); } This method has the same signature as the delegate. But, just for fun, let’s make another…\nstatic double Divide(double A, double B) { return (double)(A / B); } Notice that not only the names of the two methods are different, even the parameter names are not the same. The delegate doesn\u0026rsquo;t care: you have defined it for methods returning a double, and taking two doubles as parameters and that\u0026rsquo;s all that matters to the delegate. The delegate now lets you call either one of these methods using a new object of the delegate you declared:\nCalculation calc = new Calculation([functionname]); Substitute [functionname] with the name of the function you would like to use, and you are ready to go:\nCalculation calc = new Calculation(Multiply); double answer = calc(50, 4); Result for answer here is 200.\nor\nCalculation calc = new Calculation(Divide); double answer = calc(50, 4); Result for answer here is 12.5.\nBecause the delegate was created stating it had to return a double and would take two doubles as parameters, it\u0026rsquo;s enough to pass the method name to the creator of the new delegate. This will only accept names of methods that have the right signature. Otherwise, you will get an error stating Method \u0026lsquo;method name\u0026rsquo; does not match delegate \u0026lsquo;complete delegate statement\u0026rsquo;.\nIn my next post I will be showing how delegates can be used to create eventhandlers.\n","date":"1 March 2005","permalink":"https://www.rickvandenbosch.net/blog/delegates-explained/","section":"Blog","summary":"\u003cp\u003eDelegates can be seen as interfaces for methods. Let\u0026rsquo;s look at an example of a delegate and what it really represents.\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003edelegate double Calculation(double one, double two);\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eAll this line of code really does, is tell the class it is in that there might be one or more methods with the given signature: a method returning a double and taking two doubles as parameters. You cannot call a method Calculation now, because it does not have a body, so it doesn\u0026rsquo;t have any functionality. It\u0026rsquo;s just a blueprint for future reference. You\u0026rsquo;re saying something like: “You might find one or more methods somewhere having this signature which do something for you, but don\u0026rsquo;t ask me where or what they are called. Just be ready!” Next, let us create a method with the same signature as the delegate.\u003c/p\u003e","title":"Delegates explained"},{"content":"When using XmlSerializer in .NET on a self-made class, you might receive the FileNotFound exception at runtime upon instantiating the serializer. You don\u0026rsquo;t get enough info to debug this problem, and the filename of the file it didn\u0026rsquo;t find can\u0026rsquo;t explain much either, because the dll-name is different \u0026lsquo;garbage\u0026rsquo; every time.\nXmlSerializerPreCompiler to the rescue #Chris Sells has developed the XmlSerializerPreCompiler tool, which gives you more info about why instantiating an XmlSerializer for your class won\u0026rsquo;t fly.\nThe XmlSerializer PreCompiler is a command-line program that performs the same steps as the constructor of the XmlSerializer. It reflects over a type, generates serialization classes, and compiles them. Any compilation errors are written to the console.\nThe tool is very easy to use. You simply point the tool at the assembly that contains the type that causes the exception, and specify which type to pre-compile. But it gets even better! Mathew Nolton has written a GUI for the tool, so using it is even easier. A link to the graphical version of the XmlSerializerPreCompiler can be found at Chris Sells\u0026rsquo; site.\nSolving the issue #The tool finally told me the XmlSerializer couldn\u0026rsquo;t be instantiated because of a test-change I made: I made an inner class private, because I added an .Add method for the collection of that innerclass in the main class. That won\u0026rsquo;t fly during serialization.\n","date":"1 March 2005","permalink":"https://www.rickvandenbosch.net/blog/c-xmlserializer-filenotfound-exception/","section":"Blog","summary":"\u003cp\u003eWhen using XmlSerializer in .NET on a self-made class, you might receive the FileNotFound exception at runtime upon instantiating the serializer. You don\u0026rsquo;t get enough info to debug this problem, and the filename of the file it didn\u0026rsquo;t find can\u0026rsquo;t explain much either, because the dll-name is different \u0026lsquo;garbage\u0026rsquo; every time.\u003c/p\u003e","title":"C# XmlSerializer FileNotFound exception"},{"content":"My provisional program for DevDays 2005:\n09:30 Keynote: Microsoft Developer Tools Strategy\nPrashant Sridharan (Microsoft)\n10.45 Visual Studio Tools for Office 2005\nLex Oskam (Microsoft)\n13.15 Indigo update\nGijs de Jong (Microsoft)\n14.45 BizTalk in action\nSijmen Koffeman (Microsoft)\n16.30 ASP.NET Web Services 2.0\nAlex Thissen (Twice)\nI\u0026rsquo;ll probably be attending these sessions during my first DevDays ever: DevDays 2005.\n","date":"1 March 2005","permalink":"https://www.rickvandenbosch.net/blog/devdays-2005/","section":"Blog","summary":"\u003cp\u003eMy provisional program for DevDays 2005:\u003c/p\u003e\n\u003cp\u003e09:30 Keynote: Microsoft Developer Tools Strategy\u003cbr\u003e\nPrashant Sridharan (Microsoft)\u003c/p\u003e\n\u003cp\u003e10.45 Visual Studio Tools for Office 2005\u003cbr\u003e\nLex Oskam (Microsoft)\u003c/p\u003e\n\u003cp\u003e13.15 Indigo update\u003cbr\u003e\nGijs de Jong (Microsoft)\u003c/p\u003e","title":"DevDays 2005"},{"content":"To be honest, I\u0026rsquo;m glad I\u0026rsquo;m not on an ASP.NET project right now. I saw ASP.NET 2.0 in action last Friday, and I would go crazy if I would have to do an ASP.NET 1.1 project now.\n2.0 and the new Visual Studio 2005 (Whidbey) take a lot of \u0026lsquo;standard work\u0026rsquo; out of the developers\u0026rsquo; hands, making development much faster. It begins with something as simple as leaving the cursor where it is while switching between views. You\u0026rsquo;ve got button1 selected? Go to your HTML and the cursor is at the beginning of the button1 tag. In source view, select table3 and switch back to design view and, you guessed, table 3 is selected.\nBut there are some other great new features, controls etc.. For instance:\nDatabinding on an object!\nWhen you write a DAL, you can bind directly to its functions from the new DataGrid, the DetailsView or any other data-aware control. (naming might be off)\nStandards compliant HTML\nYou can select a standard for your HTML. The default is XHTML. This means all your controls spit out standard XHTML compliant code.\nUser authentication and authorization\nASP.NET 2.0 delivers a login control, a new user wizard, a password recovery wizard and more for you to use on webforms. And it automatically stores user data in a separate database!\nNo more initialization code in your code behind files\nDeclarative event wiring in C#\nIntelliSense everywhere (a Visual Studio feature)\nMasterPages\nYou can define a master page that all you other pages inherit from. This gives you one place to edit the style of your page, which cascades down to all the other pages.\nWebparts\nMany, many, many more\nBeta 2 of ASP.NET is scheduled to be shipped March thirty-first, so it will probably be downloadable the first or second week of March. The final release is planned for somewhere in August. I can\u0026rsquo;t wait\u0026hellip;\n","date":"1 March 2005","permalink":"https://www.rickvandenbosch.net/blog/asp-net-2-0/","section":"Blog","summary":"\u003cp\u003eTo be honest, I\u0026rsquo;m glad I\u0026rsquo;m not on an ASP.NET project right now. I saw ASP.NET 2.0 in action last Friday, and I would go crazy if I would have to do an ASP.NET 1.1 project now.\u003cbr\u003e\n2.0 and the new Visual Studio 2005 (Whidbey) take a lot of \u0026lsquo;standard work\u0026rsquo; out of the developers\u0026rsquo; hands, making development much faster. It begins with something as simple as leaving the cursor where it is while switching between views. You\u0026rsquo;ve got button1 selected? Go to your HTML and the cursor is at the beginning of the button1 tag. In source view, select table3 and switch back to design view and, you guessed, table 3 is selected.\u003c/p\u003e","title":"ASP.NET 2.0"},{"content":"Currently I\u0026rsquo;m reading the Microsoft Press book “Developing web applications with Microsoft Visual Basic .NET and C# .NET” by Jeff Webb. (This book is part of the very interesting “MCAD/MCSD Self-Paced Training Kit“.) I borrowed this book from the Microsoft Library here at my new job. They\u0026rsquo;ve got a very wide variety in books! Another plus to add to the list.\nAlthough I\u0026rsquo;d like to think I\u0026rsquo;ve mastered quite a part of the .NET functionality, this book has opened my eyes for a few things. And sometimes, these were fairly simple things like webpage user authentication and authorization. Because I came from the older versions of Visual Studio I did a lot of things \u0026rsquo;the old way\u0026rsquo;. This book has helped me do more things \u0026rsquo;the .NET way\u0026rsquo;. I can only encourage you to read a book when you would like to get better.\n","date":"1 March 2005","permalink":"https://www.rickvandenbosch.net/blog/net-eye-opener/","section":"Blog","summary":"\u003cp\u003eCurrently I\u0026rsquo;m reading the Microsoft Press \u003cA href=\"https://www.bfb.nl/mspress/boeken_detail.asp?ISBN=0-7356-1927-1\" target=\"_blank\"\u003ebook\u003c/A\u003e “Developing web applications with Microsoft Visual Basic .NET and C# .NET” by Jeff Webb. (This book is part of the very interesting “MCAD/MCSD Self-Paced Training \u003cA href=\"https://www.bfb.nl/mspress/boeken_detail.asp?ISBN=0-7356-1925-5\" target=\"_blank\"\u003eKit\u003c/A\u003e“.) I borrowed this book from the Microsoft Library here at my new job. They\u0026rsquo;ve got a very wide variety in books! Another plus to add to the list.\u003c/p\u003e","title":".NET eye opener"},{"content":"This is the first in what I hope will be a lot of posts here on my newly created weblog. I started blogging at Google\u0026rsquo;s blogger, but then I wasn\u0026rsquo;t aware of the possibilities bloggingabout.net brings you! So now I moved my blog here, to be able to give my opinion about all kinds of (developer related) stuff, and off course just for the fun of it. I\u0026rsquo;ll try to keep you posted!\nBut first, let me transport my old (usefull) articles here\u0026hellip;\n","date":"1 March 2005","permalink":"https://www.rickvandenbosch.net/blog/here-we-go/","section":"Blog","summary":"\u003cp\u003eThis is the first in what I hope will be a lot of posts here on my newly created weblog. I started blogging at Google\u0026rsquo;s blogger, but then I wasn\u0026rsquo;t aware of the possibilities bloggingabout.net brings you! So now I moved my blog here, to be able to give my opinion about all kinds of (developer related) stuff, and off course just for the fun of it. I\u0026rsquo;ll try to keep you posted!\u003c/p\u003e","title":"Here we go … !"}]