All blogs / Dev tools / editors / IDEs
Mads Kristensen
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
- Why I built Home Automation Cookbook, and how I keep it useful
- Solution Colors: Telling Visual Studio Windows Apart at a Glance
- Lore for Visual Studio: Source control without leaving the IDE
- Building Max Line Length: Making EditorConfig Formatting Visible in Visual Studio
- Building Bookmark Studio: bookmarks that belong to the codebase
- Building CodeShot: turning Visual Studio editor state into a shareable PNG
2024 1
2020 3
2019 3
2018 4
2017 5
2015 3
2014 16
- Grunt and Gulp Intellisense in Web Essentials 2015
- Fall update 2014 - my year in review
- Optimizing static websites hosted on IIS
- New handy Visual Studio extensions
- Prepare web.config for HTML5 and CSS3
- Effects of GZipping vs. minifying HTML files
- Effect of tabs vs. spaces in HTML files
- Important update to Web Essentials 2013
- Automatic optimization of images, CSS and JavaScript
- Improved JavaScript Intellisense in Visual Studio
- Web Essentials on Visual Studio Web Express
- Visual Studio extensions for web developers
- Visual Studio 2013 Update 2 and Web Essentials
- Cache busting in ASP.NET
- Image workflow using Web Essentials 2013
- Read article →
2013 21
- URL rewrite and the www subdomain
- The story behind _references.js
- Shipping Visual Studio snippets in an extension
- URL rewrite issues with ASP.NET Razor 3
- Open static HTML files in the Visual Studio 2013 designer
- Web Essentials 2013 RTM
- My road to Visual Studio 2013
- Open sourcing Web Essentials 2012
- Are short demo videos helpful?
- Auto-sync JavaScript Intellisense in VS2013 RC
- Build Google Chrome Extensions in Visual Studio
- VS2013: New web developer features
- Web Developer Checklist - the Chrome extension
- Talk to, hear, touch and see your code
- Introducing Pretty Paste for VS2012
- AngularJS Intellisense in Visual Studio 2012
- Web Tools 2012.2 and Web Essentials
- Google Analytics vs. Google Page Speed
- The ASP.NET developer checklist
- Fix for uncompressed JS files on IIS
- Web Developer Checklist
2012 8
2011 6
2010 8
- Demo of Image Optimizer
- Image Optimizer (beta) - VS2010 extension
- Performance tuning tricks for ASP.NET and IIS 7 – part 2
- Performance tuning tricks for ASP.NET and IIS 7 – part 1
- Client-side performance - IIS 6 vs. IIS 7
- Google’s Page Speed and invalid HTML
- Windows Phone 7 user agent
- Efficient stylesheet minification in C#
2009 26
- Embed images in stylesheets
- Off topic: The grand plan of 2009 conclusion
- Use Google's Closure Compiler in C#
- Use iframes with XHTML 1.0 Strict
- Verify JavaScript syntax using C#
- Meta-tag bypasses IE8 checks
- Scale in the browser
- Iframe cross domain JavaScript calls
- Off topic: The grand plan for 2009 follow up
- Get last-modified header from response in ASP.NET
- ASP.NET developer categories
- ASP.NET is a database framework
- BlogEngine.NET 1.5 final release
- Add support for iPhone in ASP.NET
- BlogEngine.NET 1.5 release candidate
- YSlow: Add expires header to images in IIS 7
- .NETworking dinner
- Off topic: The grand plan of 2009
- Caught on tape
- WebForms or MVC? What about the third option?
- The WebOptimizer class
- Checklist for high quality websites part 2
- ASP.NET application lockdown on IIS 7
- Method for retrieving movie posters
- Checklist for high quality websites part 1
- The mail that got lost
2008 71
- Default script and style language
- BlogEngine.NET Christmas update
- Christmas geek dinner
- W3C Geolocation support in Firefox
- I’m not dead yet
- Reverse GEO lookup in C#
- Simple JavaScript event model
- Search for people using SHA1 hashing
- Track your visitors using an HttpModule
- Thursday’s Silverlight presentation
- My 10 common mistakes in ASP.NET
- BlogEngine.NET meeting this Friday
- Introducing SemanticEngine.NET
- ASP.NET developers wanted
- Next stop Florida
- Demo for ASP.NET performance tuning talk
- Localize text in JavaScript files in ASP.NET
- ASP.NET performance optimization talk
- Create better experiences for your visitors
- hCard enable the comments in BlogEngine.NET 1.4.5
- Status 500 errors when doing HTTP requests
- Cool projects that don’t exist - part 2
- BlogEngine.NET 1.4.5 released
- Get language and country from a browser in ASP.NET
- Custom LightBox JavaScript
- New BlogEngine.NET release coming up
- Find semantic links in a web page
- From wine to web
- Optimize WebResource.axd and ScriptResource.axd
- BlogEngine.NET memory leak fix
- Gravatar’s new features and ASP.NET
- Creating widgets for BlogEngine.NET 1.4
- BlogEngine.NET 1.4 released
- How to use the IHttpAsyncHandler in ASP.NET
- Compress WebResource.axd in ASP.NET
- Front-end vs. back-end developers
- Access the page from a BlogEngine.NET extension
- My first video interview
- ZYB to the rescue
- Guide to the semantic web
- Wake up ASP.NET developers!
- FOAF parsing and crawling in C#
- Nest related resources in Visual Studio
- Data at the root level is invalid
- Touch screen and no keyboard
- Moving to a new server
- Copenhagen Geek Dinner III – on Facebook
- Twitter widget example
- Playing with Gravatar images
- Filter search and feeds by your interests
- New features in the next BlogEngine.NET
- Build your online social graph
- Make an API of your website
- The method you didn’t know you needed
- Be in charge of your online life
- Let Live Search know when you update your website
- Create custom activities for IE 8
- Tip: Regex.Escape
- XML-RPC ping endpoint in C# and ASP.NET
- Tech talk about BlogEngine.NET
- Website working again
- Going to Brazil
- Cache expiration puzzle
- Copenhagen geek dinner II – update
- OpenID implementation in C# and ASP.NET
- Firefox and the FileUpload control in ASP.NET
- 'Open sauce' talk
- Add or remove the www sub domain
- Geek dinner II - January 29th
- Video - widget framework
- Quirk in the DateTime class
2007 144
- Examples on new BlogEngine.NET 1.3 features
- Christmas present - BlogEngine.NET 1.3 released
- Choosing the right URL structure
- A state aware generic list
- 3-tier web applications
- Has privacy limited our possibilities?
- Create your own spam filter extensions
- Fighting spam attacks
- Use the provider model in ASP.NET 2.0
- Code samples on display
- Make your blog talk
- Protect your links from Visio
- Website architecture is backwards
- Show IIS process information
- Keeping web services simple
- Copenhagen geek dinner update 2
- BBCode extension for BlogEngine.NET 1.2
- Dangers of the new ASP.NET MVC framework
- First Facebook application
- Supporting mobile devices
- Geek dinner Copenhagen update 1
- New FxCop 1.36 beta 2 released
- Old school AJAX call that just works
- Remove whitespace from your pages
- Remove generated JavaScript from your pages
- The expando attribute
- Copenhagen geek dinner
- Re-enable request validation in ASP.NET
- Tag mapping in ASP.NET
- New BlogEngine.NET videos
- Combine multiple stylesheets at runtime
- URL parameter injections
- Making screencasts
- BlogEngine.NET 1.2 is released
- New events in BlogEngine.NET 1.2
- Evolution of code lines
- Translators for next version of BlogEngine.NET needed
- Remove default HTTP modules in ASP.NET
- URL rewrites and the HtmlForm action attribute
- Worst spam day so far
- Load user controls from an HttpHandler in ASP.NET
- HTTP compression of WebResource.axd and pages in ASP.NET
- Resolve and shorten URLs in C#
- New search feature
- Cookies and Unicode characters
- I’m ashamed – very ashamed
- User control injection in BlogEngine.NET 1.2
- Navigational header links
- New job – going mobile
- Code quality sessions
- Running FxCop and the quirks
- Time zone trouble
- Prepare for growing projects
- BlogEngine.NET goes mainstream
- Invalid postback or callback argument
- YSlow performance challenge
- Ping using XML-RPC in ASP.NET
- Cool projects that don’t exist
- Make your ASP.NET application extendable
- Secure your forms in ASP.NET
- New extension model in BlogEngine.NET
- Principles of simplicity
- Trackback spam fighting
- Webcast on building BlogEngine.NET themes
- Beware of the FileInfo.OpenText() method
- Release of BlogEngine.NET 1.1
- Localizing ASP.NET - which is best?
- Generate links to your blog
- Hidden feature of BlogEngine – conversions
- Testing your code – follow up
- Testing your code
- Remove the X-AspNet-Version header
- Don’t use the ThreadPool in ASP.NET
- Implement micro formats on your website
- Think twice before using any third-party assemblies
- Comment the class before coding it
- What became of VB.NET?
- What type of developer are you?
- Life without TV – is it possible?
- Impersonation across threads in ASP.NET
- Optimize HTTP requests and web service calls
- Section 508 and WAI triple A accessibility
- Bind countries from CultureInfo class in C#
- Google Sitemap and BlogEngine.NET
- Official release of BlogEngine.NET 1.0
- Print Visual Studio project
- URL parameters in ClickOnce applications
- Worst regular expression ever
- Web Application Projects vs. Web Site Projects
- Validate a form before submitting it in ASP.NET
- Debug JavaScript in Visual Studio 2005
- BlogEngine.NET update
- Microsoft stole my idea
- The API of a blog
- New bits finally available
- Status on BlogEngine.NET
- The use of audio on a website
- New AJAX features
- Have .NET developers finally grown up?
- New sitemap features in robots.txt
- New provider model for BlogEngine
- Send the right error codes in ASP.NET
- BlogEngine.NET on CodePlex
- Events in the file and image handlers
- The launch of BlogEngine.NET
- Getting started with BlogEngine.NET
- Identify external links in JavaScript
- The first post on the new blog
- Adding search capabilities to the new blog engine
- Implement Gravatar icons in ASP.NET
- New blog engine in town
- A shorter and URL friendly GUID
- Generate unique strings and numbers in C#
- Asynchronous GridView in 5 simple steps
- Compress and decompress strings in C#
- A dynamic blogroll for ASP.NET
- Is security harmful for innovation?
- Count clicks on external links in ASP.NET
- Generic plug-in application in C#
- Serialize files to base64 strings
- Create reusable user controls in ASP.NET
- A simpler AJAX implementation in ASP.NET
- The true selling point of XHTML
- HttpModule to block external referrers in ASP.NET
- Turn on true tabbed browsing in IE7
- Screen scraping in C#
- Simple RSS reader class in C#
- Download tools and C# source code
- Remove the www subdomain from your website
- A state aware generic collection in C#
- Get your Google search position in C#
- Stock quote class in C#
- Universal data type checker
- Access client information server-side
- The death of the ArrayList
- HttpModule for query string encryption
- Do postbacks with parameters in JavaScript
- The what, why and how of XML code comments
- The class you didn’t know existed
- Block DoS attacks easily in ASP.NET
- Use the thread pool in ASP.NET
- Block IP addresses from your website
- Website monitoring tool
- Parse controls dynamically in ASP.NET
2006 110
- Use FxCop with ASP.NET 2.0
- Remove nulls from a DataTable
- List time zones in ASP.NET
- Maintain scroll position after postbacks
- A simple factory using Generics
- Get the HTTP status code from a URL
- Using the Ping class
- Asynchronous pages in ASP.NET 2.0
- Compression and performance - GZip vs. Deflate
- Why App_Code is better
- An HttpModule that moves ViewState to the bottom
- Brute force protect your website
- Using the W3C HTML Validator API
- Is ASP.NET too difficult?
- Pull a prank on your co-workers
- Tip for localized websites and the html tag
- Replacement for invisible columns in the GridView
- Event handling with anonymous methods in C# 2.0
- A realtime currency exchange class in C#
- Permanent redirection in ASP.NET
- Simple method to avoid comment spam
- Boost performance using the CompilationMode attribute
- Add social bookmarks to dasBlog
- Submit disabled controls in ASP.NET 2.0
- Spam proof your website using an HttpModule
- Speed up web services using the SoapDocumentMethod attribute
- Validate a URL using regular expressions
- Export a DataTable to Excel in ASP.NET
- Server-side and client-side caching in ASP.NET
- Traditional developers vs. web developers vs. CSS
- Examine animated Gif’s in C#
- Download album art for free through a web service
- Add variables to standard CSS stylesheets in ASP.NET
- Solution to the Firefox port problem
- Add a MicroSummary to any ASP.NET page
- A whitespace removal HTTP module for ASP.NET 2.0
- Add social bookmark links to any ASP.NET page
- XML membership provider for ASP.NET 2.0
- Little Helper – a true Web 2.0 application
- Wildcard search for domains in C#
- Convert a date to the RFC822 standard for use in RSS feeds
- Retrieve the subdomain from a URL in C#
- Find the number of string occurrences in another string
- Keep security as simple as possible
- Validate strong passwords in C# and ASP.NET
- Clean up your music library and other folders
- Update: Stronger password encryption
- Get flying with Isolated Storage in C#
- Add Windows Live Alerts to your blog
- A smart base class for business objects
- Add validation to business objects
- Overload operators the right way in C#
- Cross browser client caching
- HTTP compression in ASP.NET 2.0
- Create safe events in C#
- Reduce the weight of stylesheets by 35% at runtime
- Securing ViewState efficiently and simple
- Add true confirmation to the ASP.NET Button control
- JavaScript: Alert.Show(”message”) from ASP.NET code-behind
- ASP.NET client-callback – simplicity vs. performance
- Do more with a DataTable and improve performance
- Working with weeks in C# - not that obvious
- The true ASP.NET developer
- Create performance counters using .NET and C#
- Simple FTP file upload in C# 2.0
- Turn URLs into hyperlinks in ASP.NET
- Validate a GUID in C#
- Use If-Modified-Since header in ASP.NET
- Bind fonts to a dropdownlist in C#
- Remove whitespace safely at runtime
- Cache dynamic generated images in ASP.NET
- Tips for working with strings in C# 2.0
- Health monitoring in ASP.NET 2.0
- XML language list
- XML country list
- Make the GridView control accessible
- Firefox has an ”Almost Standards” mode
- Resize the browser window from the toolbar
- AJAX and search engines – Do's and Don'ts
- Fix the Firefox cache problem
- Store your settings in isolated storage
- CSLA .NET 2.0 with Generics
- Atlas – the new AJAX engine for ASP.NET
- The one true rich text editor
- Generate random password in C#
- Do not catch general exception types
- GhostDoc for XML code comments and documentation
- A .NET resource editor application for .resx files
- World Community Grid please step it up
- Remove HTML tags from a string
- Create beautiful thumbnails from gif images in ASP.NET
- Convert HTML tags to lower-case for XHTML compliance
- Close popups by pressing the ESC key
- Force x number of rows in a GridView
- What happened to nDoc?
- Book review: Getting Real by 37signals
- The old confirm button trick
- Calculate the total size of a directory in C#
- Override the html form in ASP.NET for URL rewriting
- Serialization helper class in C# 2.0
- Client Callback and Page.IsPostBack
- Visual Basic functions in C# 2.0
- Talking about storage capacity
- Changed the name of the blog
- Export a DataTable to XML and CSV
- Remove whitespace from stylesheets and JavaScript files
- The forgotten performance optimization tricks for ASP.NET
- Create vCalendar items from ASP.NET
- Remove whitespace from your ASP.NET page
- .NET Profiler