The Curious Engineer

All blogs / Dev tools / editors / IDEs

Mads Kristensen

madskristensen.net

A blog about everything technology.

Dev tools / editors / IDEsC# / .NETWeb developmentElectronics

Posts
435 from 6 Feb 2006 to 17 Sep 2026
Posting
monthly (6 in the last year)
Kind
personal blog
Feed
https://www.madskristensen.net/feed/rss

2026 6

  1. Why I built Home Automation Cookbook, and how I keep it useful
  2. Solution Colors: Telling Visual Studio Windows Apart at a Glance
  3. Lore for Visual Studio: Source control without leaving the IDE
  4. Building Max Line Length: Making EditorConfig Formatting Visible in Visual Studio
  5. Building Bookmark Studio: bookmarks that belong to the codebase
  6. Building CodeShot: turning Visual Studio editor state into a shareable PNG

2024 1

  1. Schemastore.org: The journey of a quiet revolution

2020 3

  1. Receive a notification when the dishwasher finishes
  2. Hiding electronics behind fake books
  3. The dashboard for our smart home

2019 3

  1. Home automation sensors
  2. Home automation ideas
  3. Home automation best practices

2018 4

  1. How to upgrade extensions to support Visual Studio 2019
  2. Getting started writing Visual Studio extensions
  3. Visual Studio extensibility samples
  4. 3 new extensions for Visual Studio extenders

2017 5

  1. Progressive Web Apps made easy with ASP.NET Core
  2. Offline ASP.NET Core apps with service workers
  3. Miniblog.Core is a new blog engine built using ASP.NET Core 2.0
  4. Send ETag headers in ASP.NET Core
  5. Long live Web Essentials

2015 3

  1. Bundling, minification and client-side compilation
  2. New handy Visual Studio extensions - part 2
  3. Read article →

2014 16

  1. Grunt and Gulp Intellisense in Web Essentials 2015
  2. Fall update 2014 - my year in review
  3. Optimizing static websites hosted on IIS
  4. New handy Visual Studio extensions
  5. Prepare web.config for HTML5 and CSS3
  6. Effects of GZipping vs. minifying HTML files
  7. Effect of tabs vs. spaces in HTML files
  8. Important update to Web Essentials 2013
  9. Automatic optimization of images, CSS and JavaScript
  10. Improved JavaScript Intellisense in Visual Studio
  11. Web Essentials on Visual Studio Web Express
  12. Visual Studio extensions for web developers
  13. Visual Studio 2013 Update 2 and Web Essentials
  14. Cache busting in ASP.NET
  15. Image workflow using Web Essentials 2013
  16. Read article →

2013 21

  1. URL rewrite and the www subdomain
  2. The story behind _references.js
  3. Shipping Visual Studio snippets in an extension
  4. URL rewrite issues with ASP.NET Razor 3
  5. Open static HTML files in the Visual Studio 2013 designer
  6. Web Essentials 2013 RTM
  7. My road to Visual Studio 2013
  8. Open sourcing Web Essentials 2012
  9. Are short demo videos helpful?
  10. Auto-sync JavaScript Intellisense in VS2013 RC
  11. Build Google Chrome Extensions in Visual Studio
  12. VS2013: New web developer features
  13. Web Developer Checklist - the Chrome extension
  14. Talk to, hear, touch and see your code
  15. Introducing Pretty Paste for VS2012
  16. AngularJS Intellisense in Visual Studio 2012
  17. Web Tools 2012.2 and Web Essentials
  18. Google Analytics vs. Google Page Speed
  19. The ASP.NET developer checklist
  20. Fix for uncompressed JS files on IIS
  21. Web Developer Checklist

2012 8

  1. Web Essentials nightly builds
  2. Web Essentials 1.4 released
  3. Web Essentials 1.1 released
  4. Custom schemas in VS2012 CSS editor
  5. Web Essentials 2012 released
  6. The road to Web Essentials 2012
  7. Get latest CSS 3 support in Visual Studio 2010
  8. TechDays 2012 Netherlands - slides and demo

2011 6

  1. Introducing CSSCop - FxCop for stylesheets
  2. Web Essentials - the idea
  3. CSS speed typing for Visual Studio
  4. Optimize ASP.NET presentation
  5. Web Standards Update - behind the scenes
  6. HTML5 & CSS3 in Visual Studio 2010 SP1

2010 8

  1. Demo of Image Optimizer
  2. Image Optimizer (beta) - VS2010 extension
  3. Performance tuning tricks for ASP.NET and IIS 7 – part 2
  4. Performance tuning tricks for ASP.NET and IIS 7 – part 1
  5. Client-side performance - IIS 6 vs. IIS 7
  6. Google’s Page Speed and invalid HTML
  7. Windows Phone 7 user agent
  8. Efficient stylesheet minification in C#

2009 26

  1. Embed images in stylesheets
  2. Off topic: The grand plan of 2009 conclusion
  3. Use Google's Closure Compiler in C#
  4. Use iframes with XHTML 1.0 Strict
  5. Verify JavaScript syntax using C#
  6. Meta-tag bypasses IE8 checks
  7. Scale in the browser
  8. Iframe cross domain JavaScript calls
  9. Off topic: The grand plan for 2009 follow up
  10. Get last-modified header from response in ASP.NET
  11. ASP.NET developer categories
  12. ASP.NET is a database framework
  13. BlogEngine.NET 1.5 final release
  14. Add support for iPhone in ASP.NET
  15. BlogEngine.NET 1.5 release candidate
  16. YSlow: Add expires header to images in IIS 7
  17. .NETworking dinner
  18. Off topic: The grand plan of 2009
  19. Caught on tape
  20. WebForms or MVC? What about the third option?
  21. The WebOptimizer class
  22. Checklist for high quality websites part 2
  23. ASP.NET application lockdown on IIS 7
  24. Method for retrieving movie posters
  25. Checklist for high quality websites part 1
  26. The mail that got lost

2008 71

  1. Default script and style language
  2. BlogEngine.NET Christmas update
  3. Christmas geek dinner
  4. W3C Geolocation support in Firefox
  5. I’m not dead yet
  6. Reverse GEO lookup in C#
  7. Simple JavaScript event model
  8. Search for people using SHA1 hashing
  9. Track your visitors using an HttpModule
  10. Thursday’s Silverlight presentation
  11. My 10 common mistakes in ASP.NET
  12. BlogEngine.NET meeting this Friday
  13. Introducing SemanticEngine.NET
  14. ASP.NET developers wanted
  15. Next stop Florida
  16. Demo for ASP.NET performance tuning talk
  17. Localize text in JavaScript files in ASP.NET
  18. ASP.NET performance optimization talk
  19. Create better experiences for your visitors
  20. hCard enable the comments in BlogEngine.NET 1.4.5
  21. Status 500 errors when doing HTTP requests
  22. Cool projects that don’t exist - part 2
  23. BlogEngine.NET 1.4.5 released
  24. Get language and country from a browser in ASP.NET
  25. Custom LightBox JavaScript
  26. New BlogEngine.NET release coming up
  27. Find semantic links in a web page
  28. From wine to web
  29. Optimize WebResource.axd and ScriptResource.axd
  30. BlogEngine.NET memory leak fix
  31. Gravatar’s new features and ASP.NET
  32. Creating widgets for BlogEngine.NET 1.4
  33. BlogEngine.NET 1.4 released
  34. How to use the IHttpAsyncHandler in ASP.NET
  35. Compress WebResource.axd in ASP.NET
  36. Front-end vs. back-end developers
  37. Access the page from a BlogEngine.NET extension
  38. My first video interview
  39. ZYB to the rescue
  40. Guide to the semantic web
  41. Wake up ASP.NET developers!
  42. FOAF parsing and crawling in C#
  43. Nest related resources in Visual Studio
  44. Data at the root level is invalid
  45. Touch screen and no keyboard
  46. Moving to a new server
  47. Copenhagen Geek Dinner III – on Facebook
  48. Twitter widget example
  49. Playing with Gravatar images
  50. Filter search and feeds by your interests
  51. New features in the next BlogEngine.NET
  52. Build your online social graph
  53. Make an API of your website
  54. The method you didn’t know you needed
  55. Be in charge of your online life
  56. Let Live Search know when you update your website
  57. Create custom activities for IE 8
  58. Tip: Regex.Escape
  59. XML-RPC ping endpoint in C# and ASP.NET
  60. Tech talk about BlogEngine.NET
  61. Website working again
  62. Going to Brazil
  63. Cache expiration puzzle
  64. Copenhagen geek dinner II – update
  65. OpenID implementation in C# and ASP.NET
  66. Firefox and the FileUpload control in ASP.NET
  67. 'Open sauce' talk
  68. Add or remove the www sub domain
  69. Geek dinner II - January 29th
  70. Video - widget framework
  71. Quirk in the DateTime class

2007 144

  1. Examples on new BlogEngine.NET 1.3 features
  2. Christmas present - BlogEngine.NET 1.3 released
  3. Choosing the right URL structure
  4. A state aware generic list
  5. 3-tier web applications
  6. Has privacy limited our possibilities?
  7. Create your own spam filter extensions
  8. Fighting spam attacks
  9. Use the provider model in ASP.NET 2.0
  10. Code samples on display
  11. Make your blog talk
  12. Protect your links from Visio
  13. Website architecture is backwards
  14. Show IIS process information
  15. Keeping web services simple
  16. Copenhagen geek dinner update 2
  17. BBCode extension for BlogEngine.NET 1.2
  18. Dangers of the new ASP.NET MVC framework
  19. First Facebook application
  20. Supporting mobile devices
  21. Geek dinner Copenhagen update 1
  22. New FxCop 1.36 beta 2 released
  23. Old school AJAX call that just works
  24. Remove whitespace from your pages
  25. Remove generated JavaScript from your pages
  26. The expando attribute
  27. Copenhagen geek dinner
  28. Re-enable request validation in ASP.NET
  29. Tag mapping in ASP.NET
  30. New BlogEngine.NET videos
  31. Combine multiple stylesheets at runtime
  32. URL parameter injections
  33. Making screencasts
  34. BlogEngine.NET 1.2 is released
  35. New events in BlogEngine.NET 1.2
  36. Evolution of code lines
  37. Translators for next version of BlogEngine.NET needed
  38. Remove default HTTP modules in ASP.NET
  39. URL rewrites and the HtmlForm action attribute
  40. Worst spam day so far
  41. Load user controls from an HttpHandler in ASP.NET
  42. HTTP compression of WebResource.axd and pages in ASP.NET
  43. Resolve and shorten URLs in C#
  44. New search feature
  45. Cookies and Unicode characters
  46. I’m ashamed – very ashamed
  47. User control injection in BlogEngine.NET 1.2
  48. Navigational header links
  49. New job – going mobile
  50. Code quality sessions
  51. Running FxCop and the quirks
  52. Time zone trouble
  53. Prepare for growing projects
  54. BlogEngine.NET goes mainstream
  55. Invalid postback or callback argument
  56. YSlow performance challenge
  57. Ping using XML-RPC in ASP.NET
  58. Cool projects that don’t exist
  59. Make your ASP.NET application extendable
  60. Secure your forms in ASP.NET
  61. New extension model in BlogEngine.NET
  62. Principles of simplicity
  63. Trackback spam fighting
  64. Webcast on building BlogEngine.NET themes
  65. Beware of the FileInfo.OpenText() method
  66. Release of BlogEngine.NET 1.1
  67. Localizing ASP.NET - which is best?
  68. Generate links to your blog
  69. Hidden feature of BlogEngine – conversions
  70. Testing your code – follow up
  71. Testing your code
  72. Remove the X-AspNet-Version header
  73. Don’t use the ThreadPool in ASP.NET
  74. Implement micro formats on your website
  75. Think twice before using any third-party assemblies
  76. Comment the class before coding it
  77. What became of VB.NET?
  78. What type of developer are you?
  79. Life without TV – is it possible?
  80. Impersonation across threads in ASP.NET
  81. Optimize HTTP requests and web service calls
  82. Section 508 and WAI triple A accessibility
  83. Bind countries from CultureInfo class in C#
  84. Google Sitemap and BlogEngine.NET
  85. Official release of BlogEngine.NET 1.0
  86. Print Visual Studio project
  87. URL parameters in ClickOnce applications
  88. Worst regular expression ever
  89. Web Application Projects vs. Web Site Projects
  90. Validate a form before submitting it in ASP.NET
  91. Debug JavaScript in Visual Studio 2005
  92. BlogEngine.NET update
  93. Microsoft stole my idea
  94. The API of a blog
  95. New bits finally available
  96. Status on BlogEngine.NET
  97. The use of audio on a website
  98. New AJAX features
  99. Have .NET developers finally grown up?
  100. New sitemap features in robots.txt
  101. New provider model for BlogEngine
  102. Send the right error codes in ASP.NET
  103. BlogEngine.NET on CodePlex
  104. Events in the file and image handlers
  105. The launch of BlogEngine.NET
  106. Getting started with BlogEngine.NET
  107. Identify external links in JavaScript
  108. The first post on the new blog
  109. Adding search capabilities to the new blog engine
  110. Implement Gravatar icons in ASP.NET
  111. New blog engine in town
  112. A shorter and URL friendly GUID
  113. Generate unique strings and numbers in C#
  114. Asynchronous GridView in 5 simple steps
  115. Compress and decompress strings in C#
  116. A dynamic blogroll for ASP.NET
  117. Is security harmful for innovation?
  118. Count clicks on external links in ASP.NET
  119. Generic plug-in application in C#
  120. Serialize files to base64 strings
  121. Create reusable user controls in ASP.NET
  122. A simpler AJAX implementation in ASP.NET
  123. The true selling point of XHTML
  124. HttpModule to block external referrers in ASP.NET
  125. Turn on true tabbed browsing in IE7
  126. Screen scraping in C#
  127. Simple RSS reader class in C#
  128. Download tools and C# source code
  129. Remove the www subdomain from your website
  130. A state aware generic collection in C#
  131. Get your Google search position in C#
  132. Stock quote class in C#
  133. Universal data type checker
  134. Access client information server-side
  135. The death of the ArrayList
  136. HttpModule for query string encryption
  137. Do postbacks with parameters in JavaScript
  138. The what, why and how of XML code comments
  139. The class you didn’t know existed
  140. Block DoS attacks easily in ASP.NET
  141. Use the thread pool in ASP.NET
  142. Block IP addresses from your website
  143. Website monitoring tool
  144. Parse controls dynamically in ASP.NET

2006 110

  1. Use FxCop with ASP.NET 2.0
  2. Remove nulls from a DataTable
  3. List time zones in ASP.NET
  4. Maintain scroll position after postbacks
  5. A simple factory using Generics
  6. Get the HTTP status code from a URL
  7. Using the Ping class
  8. Asynchronous pages in ASP.NET 2.0
  9. Compression and performance - GZip vs. Deflate
  10. Why App_Code is better
  11. An HttpModule that moves ViewState to the bottom
  12. Brute force protect your website
  13. Using the W3C HTML Validator API
  14. Is ASP.NET too difficult?
  15. Pull a prank on your co-workers
  16. Tip for localized websites and the html tag
  17. Replacement for invisible columns in the GridView
  18. Event handling with anonymous methods in C# 2.0
  19. A realtime currency exchange class in C#
  20. Permanent redirection in ASP.NET
  21. Simple method to avoid comment spam
  22. Boost performance using the CompilationMode attribute
  23. Add social bookmarks to dasBlog
  24. Submit disabled controls in ASP.NET 2.0
  25. Spam proof your website using an HttpModule
  26. Speed up web services using the SoapDocumentMethod attribute
  27. Validate a URL using regular expressions
  28. Export a DataTable to Excel in ASP.NET
  29. Server-side and client-side caching in ASP.NET
  30. Traditional developers vs. web developers vs. CSS
  31. Examine animated Gif’s in C#
  32. Download album art for free through a web service
  33. Add variables to standard CSS stylesheets in ASP.NET
  34. Solution to the Firefox port problem
  35. Add a MicroSummary to any ASP.NET page
  36. A whitespace removal HTTP module for ASP.NET 2.0
  37. Add social bookmark links to any ASP.NET page
  38. XML membership provider for ASP.NET 2.0
  39. Little Helper – a true Web 2.0 application
  40. Wildcard search for domains in C#
  41. Convert a date to the RFC822 standard for use in RSS feeds
  42. Retrieve the subdomain from a URL in C#
  43. Find the number of string occurrences in another string
  44. Keep security as simple as possible
  45. Validate strong passwords in C# and ASP.NET
  46. Clean up your music library and other folders
  47. Update: Stronger password encryption
  48. Get flying with Isolated Storage in C#
  49. Add Windows Live Alerts to your blog
  50. A smart base class for business objects
  51. Add validation to business objects
  52. Overload operators the right way in C#
  53. Cross browser client caching
  54. HTTP compression in ASP.NET 2.0
  55. Create safe events in C#
  56. Reduce the weight of stylesheets by 35% at runtime
  57. Securing ViewState efficiently and simple
  58. Add true confirmation to the ASP.NET Button control
  59. JavaScript: Alert.Show(”message”) from ASP.NET code-behind
  60. ASP.NET client-callback – simplicity vs. performance
  61. Do more with a DataTable and improve performance
  62. Working with weeks in C# - not that obvious
  63. The true ASP.NET developer
  64. Create performance counters using .NET and C#
  65. Simple FTP file upload in C# 2.0
  66. Turn URLs into hyperlinks in ASP.NET
  67. Validate a GUID in C#
  68. Use If-Modified-Since header in ASP.NET
  69. Bind fonts to a dropdownlist in C#
  70. Remove whitespace safely at runtime
  71. Cache dynamic generated images in ASP.NET
  72. Tips for working with strings in C# 2.0
  73. Health monitoring in ASP.NET 2.0
  74. XML language list
  75. XML country list
  76. Make the GridView control accessible
  77. Firefox has an ”Almost Standards” mode
  78. Resize the browser window from the toolbar
  79. AJAX and search engines – Do's and Don'ts
  80. Fix the Firefox cache problem
  81. Store your settings in isolated storage
  82. CSLA .NET 2.0 with Generics
  83. Atlas – the new AJAX engine for ASP.NET
  84. The one true rich text editor
  85. Generate random password in C#
  86. Do not catch general exception types
  87. GhostDoc for XML code comments and documentation
  88. A .NET resource editor application for .resx files
  89. World Community Grid please step it up
  90. Remove HTML tags from a string
  91. Create beautiful thumbnails from gif images in ASP.NET
  92. Convert HTML tags to lower-case for XHTML compliance
  93. Close popups by pressing the ESC key
  94. Force x number of rows in a GridView
  95. What happened to nDoc?
  96. Book review: Getting Real by 37signals
  97. The old confirm button trick
  98. Calculate the total size of a directory in C#
  99. Override the html form in ASP.NET for URL rewriting
  100. Serialization helper class in C# 2.0
  101. Client Callback and Page.IsPostBack
  102. Visual Basic functions in C# 2.0
  103. Talking about storage capacity
  104. Changed the name of the blog
  105. Export a DataTable to XML and CSV
  106. Remove whitespace from stylesheets and JavaScript files
  107. The forgotten performance optimization tricks for ASP.NET
  108. Create vCalendar items from ASP.NET
  109. Remove whitespace from your ASP.NET page
  110. .NET Profiler