8 October 2026
A Modern Guide to Using OAuth 2.0 with Node.js
Get an OAuth 2.0 access token in Node.js with MSAL, then call Microsoft Graph using built-in fetch and credentials loaded from an environment file.
Articles written by Dean Hume.
8 October 2026
Get an OAuth 2.0 access token in Node.js with MSAL, then call Microsoft Graph using built-in fetch and credentials loaded from an environment file.
6 October 2026
How I used GitHub Copilot and Lighthouse reports to improve my blog's performance, taking some of its worst pages from a score of 73 to 100.
23 September 2026
We used GitHub Copilot coding agents to build an app across different time zones. The AI wrote the code, but prompts, tests, guardrails, and pull requests made it software development rather than vibe coding.
14 September 2026
What does a Technical Program Manager actually do? A look at the gaps they fill, the decisions they chase, and the reactive vs proactive split.
3 September 2026
Short AI coding prompts can create more back-and-forth. Give the assistant the problem, source material and constraints it needs to finish the task.
3 August 2026
Quality isn't decided in the final review. The teams with the smoothest launches built it through daily habits, long before anyone thought about a release date.
21 July 2026
Use a practical maturity matrix to assess your game development team, spot gaps in engineering and people practices, and choose what to improve first.
29 June 2026
As AI shrinks engineering teams and the EM role splits in two, the Technical Program Manager could be the most overlooked answer hiding in plain sight.
29 June 2026
Meeting Notes is a free offline desktop app for 1:1s. Organise notes by person, tag topics, and transcribe meetings on-device with Whisper.
4 June 2026
Build a Node.js MCP server that answers bin collection questions from a JSON file, then connect it to VS Code so your AI assistant can use your data.
5 May 2026
The technical skills every TPM needs in 2026 from cloud basics to AI agents and governance. A practical guide to staying close to the tech.
28 April 2026
PowerToys Advanced Paste transforms your clipboard - paste as plain text, Markdown, JSON, extract text from images, and reformat content with AI.
12 March 2026
Tired of arranging windows every morning? PowerToys Workspaces launches your ideal Windows desktop management setup with two clicks đź«°.
18 February 2026
Learn practical ways Technical Program Managers can stay technical - daily habits, internal engineering practices, and hands-on routines that keep skills sharp while leading programs at scale.
1 December 2025
Backup Buddy turns your website sitemap into a portable Markdown archive with local images and videos, ready for offline reading or a platform move.
24 November 2025
My Microsoft Developer blog guide brings together practical tools and workflows for diagnosing and resolving crashes in Xbox and Windows games and apps.
3 November 2025
Master OAuth 2.0 in .NET 9.0! This tutorial covers using OAuth 2 to acquire tokens and access Microsoft Graph user data.
30 October 2025
Discover the 12-year journey behind HTML Minifier an open source tool that helped developers optimize web performance and reduce page load times.
16 June 2025
My 2025 Microsoft Game Dev Blog article shares recommendations to help developers build better gaming experiences for handheld devices.
15 February 2024
Set up Azure hybrid and embedded text-to-speech in C#, using cloud voices when connected and an on-device fallback when your app or game is offline.
4 October 2023
An Azure Function timer that won't fire may have a five-part Cron expression. See how the six-part NCrontab format fixed my Node.js schedule.
18 August 2022
In this article I go into detail about how I hooked up a Raspberry to continually track and monitor the progress of my beer all whilst graphing it out to another application. It gets a little geeky!
1 April 2022
It's been almost four years since I started collecting data on Service Worker usage and support on this website and in this article I show the details.
14 March 2022
I’m always on the lookout to improve both myself and my team's daily work, so when I came across a book entitled Leading Virtual Teams by the Harvard Business Review, it really caught my eye.
7 January 2021
I was quite surprised to found out that I was greeted with an annoying HTTP 503 error on my site over the Christmas period. After taking a closer look at the logs on Amazon, it turns out that I had actually run out of disk space on the instance.
3 August 2020
During my morning coffee session, I came across the book - Accelerate: The Science of Lean Software and Devops, and the title of the book instantly drew me in.
26 March 2020
The People Manager is the book I wrote with Jo Root to help first-time managers handle one-to-ones, team conflict and the challenges of a new role.
21 January 2020
In my day to day role, a big part of what I do involves hiring and assessing Software Engineers. It might not be to everyone’s liking, but I really do enjoy the interview process. It’s a great chance to meet new people and I often learn new things
19 March 2019
Process NDJSON with the Streams API and render results as they arrive, rather than making users wait for a large download to finish.
4 February 2019
I look under the hood of Brewfather's progressive web app to explore how Workbox caching and Firebase offline data supported a practical homebrewing tool.
8 November 2018
Use feature detection to measure service worker support among your visitors, with a historical Google Analytics example to help assess the value of a PWA.
26 October 2018
I share what helped when my Ghost blog on a Bitnami AWS EC2 instance went down, including backups, image restoration, domain changes and recovery.
10 October 2018
Use a maturity matrix to assess your team's engineering and people practices honestly, spot gaps and decide which improvements need attention first.
30 July 2018
The Network Information API allows developers to determine the connection types and the underlying connection technology that the user agent is using. In terms of web performance, this brings a whole new level to the way that we build web pages.
3 July 2018
The Ambient Light Sensor API provides developers with the means to determine ambient light levels as detected by the device’s main light detector. This information is available to developers in terms of lux units.
5 June 2018
The results of my 2018 Progressive Web Apps book giveaway, with five randomly selected winners and a thank you to everyone who took part.
16 May 2018
Add a new-version notification to your progressive web app, then activate the waiting service worker and refresh the page to load updated cached files.
30 April 2018
"Progressive Web Apps" has recently been released, and if you haven't already gotten your hands on a copy, I have 5 free copies to give away to lucky readers.
24 April 2018
Service workers allow you to cache resources on the user's device when they visit your site for the first time. Fewer HTTP requests mean less CPU usage and less energy consumed.
29 March 2018
In this article, I am going to take you through the different steps required to get a Ghost blog up and running as a Progressive Web App (*hint: it’s easier than you think!*)
1 March 2018
Before leaving an organisation, write down what worked, what didn't and what you'd change. Those notes can help you make better choices in your next role.
14 December 2017
Introducing my Progressive Web Apps book at its 2017 launch: practical examples of building fast, resilient web apps and lessons from existing PWAs.
5 December 2017
My 2017 guest articles cover progressive image loading with Intersection Observer and SQIP, plus a practical learning path for junior web developers.
18 October 2017
My 2017 conversation with Matthew Groves on Cross Cutting Concerns covers Progressive Web App basics and the tools and techniques available to web developers.
12 October 2017
I’ll be the first to raise my hand and admit that my CSS skills are about as stinky as the stinkiest egg sandwich. I just about manage to get by and normally rely on frameworks such as Material Design Lite or my colleagues for advice. This is why I
20 September 2017
If you had told me when I first start developing many years ago, that I’d be able to build websites that work on a mobile device and even respond when offline - I’d be blown away! One of my favourite features of Progressive Web Apps is the ability to
8 August 2017
Lazy load images with Intersection Observer so they download as they enter the viewport, saving bandwidth without repeatedly checking scroll positions.
27 July 2017
This early Workbox walkthrough shows how its CLI, caching routes and debugging tools reduced the boilerplate needed to build a progressive web app.
26 June 2017
Request persistent storage for an offline web app to help protect cached data from automatic eviction when the browser runs short of space.
5 June 2017
Work through common PWA gotchas from my talks, including installation prompts, stale caches, service worker debugging, storage and offline analytics.
23 May 2017
A preview of my Fluent Conference 2017 talk on building Settled's offline-first dashboard with Progressive Web Apps, HTTP/2 and service worker caching.
22 May 2017
A 2017 exploration of the experimental Shape Detection API, with JavaScript examples for finding faces and text in images using device capabilities.
30 March 2017
Expose backend performance measurements through Server Timing response headers, so you can inspect routing and database timings alongside frontend load times.
22 February 2017
My early Web Share API example opens a device's native share dialog, checks browser support and falls back to ordinary sharing links.
26 January 2017
How I worked around service worker registration errors with self-signed certificates in 2017, using Chrome flags strictly for local testing.
24 January 2017
I am very proud to announce that I am writing a new book entitled Progressive Web Apps. I started working on it during late 2016 and the book is shaping up nicely! I will be the first to admit that I am a big fan of Progressive Web Apps, and
30 November 2016
Explore how five early progressive web apps, including Twitter Mobile and the Washington Post, used caching and offline features to improve the experience.
24 October 2016
Revisit my Node.js experiment with node-spdy to see how HTTP/2 multiplexing and Server Push aimed to reduce page load times by serving assets sooner.
21 September 2016
I experiment with estimating Speed Index in the browser and collecting it in Google Analytics, explaining why results need checking against video-based tests.
15 September 2016
My review of ReWork focuses on its short, unconventional business lessons, especially hiring, honest leadership and making working hours better, not longer.
6 September 2016
Meet Image Beast, my 2016 10 K Apart entry: a tiny service worker helper for serving alternative image formats, saving data and caching images.
2 August 2016
I built Progressive Beer with an app shell, service worker caching, offline support and WebP images, using a beer catalogue to explore practical PWA techniques.
25 July 2016
My review of James Watt's Business for Punks explores BrewDog's unconventional marketing and the lessons on small-business finances and building teams.
19 July 2016
My guest article for Pony Foo introduces Background Sync with service workers, covering the basics and a working example for developers new to the API.
5 July 2016
Ten WebPageTest features worth exploring, from simulating third-party failures to inspecting JavaScript bottlenecks, with tips shared by Pat Meenan.
28 June 2016
My early Chrome Canary walkthrough shows how CPU throttling helps you test what your website feels like on less powerful devices, not just slower networks.
28 June 2016
My review of Sir Alex Ferguson's Leading looks at discipline, encouragement and preparation, and what business teams can take from his football experience.
19 May 2016
This early Firebase JavaScript tutorial shows how to store and display realtime data, associate it with a user and prototype without writing a backend.
11 April 2016
Find the exact font a website renders in Chrome DevTools, rather than guessing from its CSS font stack, and inspect the font's character set.
14 March 2016
A preview of our Velocity Conference 2016 workshop on Chrome DevTools, covering debugging, service workers, mobile development and performance profiling.
8 March 2016
A service worker example that checks the Save-Data request header and returns lighter content when users have asked to reduce their data usage.
2 March 2016
If you follow this blog, you may have noticed that I've been working on a side project for the past 8 months or so. I'm really passionate about building and growing teams and I'm lucky enough to get to do this in my day job. As a
22 February 2016
My 2016 introduction to Building Great Startup Teams, a practical book about planning recruitment, attracting talent, interviewing and retaining people.
16 February 2016
Binary search doesn't need to be daunting. Walk through a sorted array, halve the search space and turn the idea into a recursive JavaScript function.
25 January 2016
Cache a simple offline HTML page with a service worker and return it when navigation fails, giving visitors something useful when their connection drops.
17 December 2015
See how Service Worker Toolbox's routing and caching helpers made offline-capable pages easier to build and debug in this historical library walkthrough.
10 November 2015
My announcement for the Chrome Developer Summit 2015 London livestream, with a talk on improving mobile web app performance using Chrome's built-in tools.
2 November 2015
Use a service worker to inspect Accept headers and serve WebP images where supported, keeping responsive image markup simpler and JPEG fallbacks intact.
7 October 2015
Describe your organisation and social profiles with JSON-LD for Google's Knowledge Graph, following an example that used the original markup testing tool.
11 September 2015
A preview of our OSCON 2015 tutorial on automating web performance, from image compression and critical CSS to testing and continuous integration.
19 August 2015
Compare XMLHttpRequest with the Fetch API and see how promises make asynchronous HTTP requests easier to read, chain and share across your JavaScript code.
3 August 2015
A while ago I built a fun side project on Github to keep a collection of typography links and tools that caught my eye. There are a number of people that follow the project on Github, but every time I make a change or add a new link, I normally
22 July 2015
Watch my UpFront 2015 talk and browse the slides for mobile performance techniques, including critical rendering, responsive images and profiling tools.
6 July 2015
A 2015 example of using Google Analytics visitor flows to choose which pages to prefetch, speeding up likely next steps without wasting bandwidth.
10 June 2015
Keep Google Fonts requests lean by specifying the text you need, choosing character subsets and combining font families to reduce unnecessary downloads.
1 June 2015
Compress static assets with Zopfli through a Grunt task. Get smaller Gzip files before deployment without paying the cost of slower encoding on each request.
13 May 2015
Explore Chrome's internal pages as they were in 2015 to see how URL predictions, prerendering, experimental flags and networking diagnostics worked.
7 May 2015
Compare good and bad engineering management habits, from removing blockers and growing people to giving honest feedback and setting realistic delivery goals.
30 April 2015
In 2015, I joined the Google Developer Experts programme for web performance. Here's what the role meant for speaking, code samples and mentoring developers.
22 April 2015
I’m proud to say that I will be speaking at UpFront Conference in Manchester, UK on the 19th of May. UpFront Conference is in it’s first year and is billed as “a front-end conference for anyone who makes for the web”. The speaker line-up is packed
10 April 2015
Add a small ASCII animation to your HTML comments with Dom Animator, creating a hidden message for visitors who inspect your page's DOM.
7 April 2015
My 2015 contribution to Smashing Magazine's A Career On The Web, a book about finding a role that fits and preparing for the web development job hunt.
30 March 2015
Follow your first open-source contribution from fork to pull request in this beginner's walkthrough using the original GitHub for Windows desktop client.
19 March 2015
Why I built a web typography resource site in 2015: a collection of articles and links to help developers and designers work with web fonts.
16 February 2015
A 2015 walkthrough of Selenium and Webdriver.io in Node.js, with a JavaScript test that searches a page, checks its title and saves a screenshot.
7 January 2015
See how Chart.js turned raw data into animated, responsive HTML5 canvas visualisations in this early introduction, with line and pie chart examples.
16 December 2014
An introduction to my January 2015 Moz webinar on web performance, covering eight practical steps to improve page speed with little or no coding experience.
10 December 2014
A while ago I created a blog post with a list of free icon packs for developers that can be easily used on any website. The web is packed with loads of great icons, but they seem to be all over the place! I thought it would be handy to
17 November 2014
Here's a quick tip to use Google Chrome's Devtools to convert an image to a Data URI.
5 November 2014
My Apps World Europe 2014 talk announcement, focused on the areas developers can tackle to improve mobile website performance and page speed.
23 October 2014
The ASP.NET MVC HTML5 Toolkit has been running as an open source project since August 2010. It contains a rich set of controls that you can use to build ASP.NET websites using HTML5. If you've never used it before, it can be a great way to take
21 October 2014
Use the HTML picture element and srcset to serve images that suit the viewport, avoiding desktop-sized downloads on mobile and handling older browsers.
22 September 2014
Highlights from Velocity New York 2014, with slides on mobile web performance, progressive JPEGs and lessons from the HTTP Archive.
12 September 2014
My 2014 comparison of HTTP and HTTPS page loads explores TLS handshake overhead and practical ways to measure and reduce the cost of encrypted connections.
26 August 2014
As a web developer, I regularly write code to consume and create data in a JSON format. It's a simple and easy way to represent data as a string and if you work with JSON every day, you'll know how much easier it is to use than XML.
26 August 2014
A preview of our Velocity New York 2014 talk, using the HTTP Archive to uncover good and bad website practices and practical page speed improvements.
27 July 2014
Understand what Visual Studio's Build, Rebuild and Clean commands actually do, when incremental builds save time and which files Clean leaves behind.
3 July 2014
My experiment with Filament Group's loadCSS shows how asynchronous stylesheets avoid blocking rendering, along with the flash of unstyled content tradeoff.
11 June 2014
My historical comparison of Rackspace, Amazon CloudFront and Azure CDNs shows how I tested response times and weighed cost when choosing a static-file host.
30 May 2014
A collection of image optimisation examples from our Velocity talk, covering lazy loading, sprites, data URIs and WebP to reduce page weight.
30 April 2014
Keep Visual Studio projects easier to maintain by removing unused references and using directives, reducing dependency clutter and namespace conflicts.
5 March 2014
Set up Grunt and UnCSS to remove unused selectors and minify stylesheets automatically, using a Bootstrap example to show how much CSS can be cut.
26 February 2014
Use .NET's MailAddress class for a simple server-side email format check instead of a complicated regex, while recognising that validation isn't perfect.
24 February 2014
A 2014 walkthrough of Chrome's CSS audit tool, showing how to spot unused framework styles and reduce the stylesheet weight your users download.
27 January 2014
Extend classic ASP.NET bundling so you can add attributes such as async and media to script and style tags without losing built-in minification.
9 December 2013
Fix Chrome's web font MIME type warning in an ASP.NET application by adding font mappings to IIS through Web.config, rather than ignoring the console.
21 November 2013
Set up separate Web.config transforms for staging and live environments in Visual Studio, using solution configurations or publish profiles.
20 November 2013
Highlights from Velocity Europe 2013, including our image optimisation talk, Addy Osmani's unused CSS tools and Paul Lewis's rendering performance advice.
1 November 2013
My announcement for Velocity Europe 2013, where Robin Osborne and I planned to share image optimisation techniques for smaller, faster-loading pages.
28 October 2013
Track hyperlink clicks with the HTML ping attribute. A small example shows the asynchronous request and how it can avoid an extra tracking redirect.
24 October 2013
Meet the three winners of my Fast ASP.NET Websites book giveaway, which closed on 22 October 2013, and read my thanks to everyone who entered.
21 October 2013
Slides from my 2013 Untangle the Web talk on improving your online profile and standing out in interviews, aimed at new and junior web developers.
4 October 2013
The original ASP.NET HTML Minifier walkthrough shows how to minify files during Visual Studio 2012 publishing, avoiding per-request processing overhead.
23 September 2013
This archived announcement explains my three-copy Fast ASP.NET Websites giveaway, which closed on 22 October 2013, and introduces the book's practical focus.
10 September 2013
Track connections, disconnections and reconnections to display a live online count without session state, using a classic ASP.NET SignalR hub example.
30 August 2013
My original Fast ASP.NET Websites launch announcement introduces the book's hands-on performance guidance and code examples for ASP.NET MVC and Web Forms.
19 August 2013
The August 2013 MVC HTML5 Toolkit update added DataType annotations, EditorFor helpers and validation support, reducing manual setup of HTML5 form fields.
11 August 2013
Check tests, performance, configuration, security and custom error pages before deploying a classic ASP.NET side project with this lightweight release checklist.
24 July 2013
Follow the original Windows Azure custom-domain setup to understand A records, CNAME verification and how I connected both www and root domains.
5 July 2013
A 2013 Chrome Canary profiling example shows how costly CSS painting can cause jerky scrolling, and how changing styles can reduce paint times.
3 July 2013
Choose a sprint length that gives your team room to plan, build and test. My Scrum experiences explain why a steady rhythm matters more than a universal rule.
3 April 2013
Build an ASP.NET MVC HTML helper that serves smaller WebP images to supported browsers, with original-format fallbacks and the required IIS MIME mapping.
26 March 2013
A Bootstrap typeahead example for ASP.NET MVC that retrieves JSON key/value pairs, displays readable names and keeps the selected ID for lookups.
20 March 2013
Browse five icon packs I gathered for web prototypes, including IconMonstr, IcoMoon and Typicons, with notes on the image and icon-font formats they offered.
12 March 2013
A 2013 ASP.NET MVC 4 example uses the Google PageSpeed API to retrieve scores and suggestions, turning manual performance checks into a dashboard.
22 January 2013
A single point of failure is a part of a system that, if it fails, will stop the entire system from working. Let's look at a tool called SPOF-o-matic.
2 January 2013
My 2013 announcement of Fast ASP.NET Websites, a practical performance book with profiling advice and code examples for MVC and Web Forms developers.
29 November 2012
See how I disabled Flash while testing an HTML5 replacement in older Chrome, Internet Explorer, Firefox, Safari and Opera versions in this historical guide.
26 November 2012
Add a file dependency to .NET's MemoryCache with HostFileChangeMonitor, so cached file contents are invalidated when the source changes, without a restart.
30 October 2012
Use the Five Whys to look beyond a software failure's symptoms, uncover process problems and identify small changes that help prevent the same issue recurring.
17 October 2012
Spot DNS lookup delays in a waterfall chart and add dns-prefetch links to resolve external domains early, reducing the wait for later requests.
7 October 2012
My Velocity Europe 2012 roundup brings together talks and resources on Facebook deployments, WebPageTest and debugging the mobile web.
20 August 2012
My first week with Visual Studio 2012: installation, compatibility with 2010 projects, asynchronous C# features and the changes that made development feel faster.
10 August 2012
An announcement of my article in Net Magazine's September 2012 issue, explaining how content delivery networks can help improve page load times.
31 July 2012
Use .NET's CultureInfo, RegionInfo and TimeZoneInfo classes to retrieve country codes, currencies, localised day names and time zones without lookup tables.
11 July 2012
A 2012 Socialite.js and jQuery example defers social sharing widgets until they scroll into view, keeping third-party buttons out of the initial page load.
31 May 2012
Compare async and defer script loading, see how execution order affects jQuery dependencies, and use browser waterfalls to inspect the performance difference.
18 May 2012
Google Chrome has come a long way since it's early days. I am a big fan of the Chrome Developer tools and use it in my day to day development. There are also loads of great tools and extensions that are on offer at the Chrome store, and most
25 April 2012
The beauty of Selenium is that it allows you to test your UI against all of the common browsers out there at the moment. Writing the code to test for a test scenario is quick and easy and getting up and running with Selenium can be done in a matter
16 March 2012
Run .NET Selenium tests without a browser window using SimpleBrowser's WebDriver interface, with a worked example and the important limitation of no JavaScript.
9 February 2012
Combine TinyCon and local storage to show new-post notifications in a favicon, with a same-origin gotcha and a title fallback for unsupported browsers.
16 January 2012
Build a basic ASP.NET MVC AsyncController with the Task Parallel Library, following the Async/Completed naming pattern and tracking outstanding operations.
2 December 2011
Web Workers allow you to run client side scripts without interrupting the page or any other scripts that are currently running.
7 November 2011
Use Web.config transforms in Visual Studio 2010 to replace environment-specific settings during publishing, keeping development and release configuration separate.
27 October 2011
Handle AJAX-loaded elements in Selenium WebDriver with explicit and implicit waits, so tests don't fail just because the page hasn't finished updating.
11 October 2011
An early PDF.js walkthrough shows how to render PDF documents in a web page with JavaScript and HTML5, without asking users to install a reader plugin.
26 September 2011
A C# Memcached walkthrough for sharing cached objects across applications and keeping them outside the IIS app pool, with setup and client examples.
14 September 2011
Build an ASP.NET MVC helper that embeds images as Base64 data URIs to avoid separate HTTP requests, with browser fallbacks and a look at the size tradeoff.
7 September 2011
How I redesigned this blog in 2011 with CSS3 media queries and Skeleton, letting one layout adapt to different screen sizes instead of separate mobile pages.
8 July 2011
A 2011 ASP.NET MVC experiment with HTML5 Application Cache, showing dynamic manifests, offline resources and the pitfalls of caching server-rendered pages.
24 June 2011
Run independent C# methods concurrently with Parallel.Invoke, using lambda expressions and the Task Parallel Library instead of managing threads yourself.
5 June 2011
I used a Visual Studio T4 template and Microsoft Translator to generate translated .resx files, reducing repetitive work while leaving room for human review.
12 May 2011
Capture page timings in Selenium 2 tests, save them to XML and chart the results in an MVC dashboard to track performance changes over time.
15 April 2011
A 2011 C# example using Microsoft Translator's SOAP API to translate text and request spoken audio, with a service reference and a small wrapper class.
21 March 2011
Use explicit interface implementation in C# to make selected methods accessible through the interface, helping keep callers away from concrete class methods.
22 February 2011
An early MVC HTML5 Toolkit release added audio and video helpers, plus autofocus, readonly and disabled attributes to make richer MVC views easier to build.
17 February 2011
Count table rows with Selenium 2's C# API using XPath and a reusable helper, then apply the same approach to other elements such as select options.
9 February 2011
I must admit, I've been a bit of a slow starter when it comes to Asp.net MVC 3. I am an avid fan of MVC 2 and haven't really taken the time to look at MVC 3 until now. Wow - I am impressed though! There are a
1 February 2011
My original MVC HTML5 Toolkit NuGet announcement shows how to add the library through Visual Studio's package interface or Package Manager Console.
24 January 2011
Follow the original OAuth token exchange and signed API calls in this historical C# walkthrough, with a link to my newer OAuth 2.0 guide.
6 January 2011
There have been many times when I have run a Unit Test that has failed and afterwards I wondered where it went wrong. The ability to see what occurred on the page or how it looked at the time would be a great benefit. I've been writing a few
13 December 2010
My early Selenium 2 and NUnit walkthrough automates browser searches and checks page behaviour with JavaScript disabled, making regression tests repeatable.
9 December 2010
I look back on my first year and 42 blog posts, from building a custom blog engine to finding things to write about and learning to be patient with traffic.
26 November 2010
This post is the third part of a series on Mocking with Moq. If you haven't already taken a look at the first two posts on the basics of Moq, please check it out. Mocking a method within the same class So, recently I came across a problem where
2 November 2010
See how I exposed my blog database as an OData API with Entity Framework and WCF Data Services in 2010, including related comments and query examples.
1 November 2010
Handle HTTP 407 proxy authentication errors in a .NET application with a helper that checks connectivity, tries credentials and prompts users when needed.
28 October 2010
Use an HTTP HEAD request in .NET to check a resource and inspect its size or last-modified headers without downloading the body, saving unnecessary bandwidth.
25 October 2010
My 2010 introduction to jQuery Mobile shows how to build a mobile page with data-role attributes, theme swatches, buttons and icons.
20 October 2010
A 2010 update to my SmushMySite image optimisation tool added CSS image support, better URL validation and improved handling of duplicate images.
15 October 2010
Why I built SmushMySite in 2010: a WPF tool that used Yahoo's Smush.it service to optimise images from a page URL or sitemap and report the results.
6 October 2010
Store and retrieve objects with .NET 4's MemoryCache, using a small reusable wrapper to avoid repeated database calls and handle cache misses.
1 October 2010
My 2010 comparison of Google Analytics and Clicky shows why a reader spending time on one article could still count as a bounce, and why measurement matters.
24 September 2010
Feed ASP.NET MVC data into a Google Visualization table, then add column formatting, sorting and paging to make the results easier to browse.
7 September 2010
My early SQL Compact 4 walkthrough creates a file-based database and uses Entity Framework to add and retrieve records without a separate database server.
23 August 2010
I'm sure most of you have at some point been exposed to a CAPTCHA control on the net. They come in loads of forms and are used to tell the difference between humans and computers (bots). If you have a website on the net, you are prone to lots
13 August 2010
My original ASP.NET MVC 2 HTML5 Toolkit added helpers for typed inputs, placeholders and validation, bringing HTML5 controls into familiar MVC view syntax.
6 August 2010
Test ASP.NET MVC routes with Moq by faking HTTP requests and checking controller, action and parameter values, catching broken mappings before they ship.
2 August 2010
The result of my 2010 Professional ASP.NET MVC 2 book giveaway: Paul Irvine won the draw, with thanks to everyone who entered and shared ideas for the blog.
14 July 2010
If you haven't already read Professional Asp.net Mvc 2, you should really check it out. Luckily though, I also have a free copy of this freshly released book to give away. If you are new to Asp.net MVC, this book is a great way to get you
1 July 2010
My early exploration of HTML5 input types shows how native email validation, placeholders and form widgets can replace extra JavaScript and CSS.
22 June 2010
I've been using Linq to Sql for quite a while now, and here and there I have heard of compiling your Linq queries mentioned. Now I know that this feature has been around for a while in terms of .net, but I have never actually got round to using
8 June 2010
This post is the second part of a series on Mocking with Moq. If you haven't already taken a look at the first post on the basics of Moq, please check it out. In this post, I hope to cover some other basic aspects of mocking such as Verifying,
1 June 2010
Set up a local HTTPS development site in IIS 7 with a self-signed certificate, configure Visual Studio debugging and handle a 32-bit application pool issue.
1 June 2010
A jQuery Lazy Loader example delays images on long pages until they're in view, using a placeholder so readers don't download everything upfront.
7 May 2010
A 2010 ASP.NET MVC Google Maps helper combines controller JSON and JavaScript to draw interactive maps with markers, while keeping the view code reusable.
29 April 2010
My 2010 experiment with RDFa structured data shows how to mark up a page for rich snippets and test whether search engines understand the HTML.
20 April 2010
Small Stopwatch and NUnit experiments compare .NET loops, list searches and HashSet operations, with a reminder that results depend on the workload and machine.
13 April 2010
I'm currently working on a project where I need to quickly insert a list of Countries and Us States into a database table. This is not the first time that I've needed to have a useful script handy for this sort of thing. I had a quick look
9 April 2010
Isolate your C# unit tests with Moq by mocking the data layer, setting up return values and checking results without changing a real database.
22 March 2010
An early look at Postmark in 2010, exploring transactional email delivery, bounce tracking and .NET support without maintaining an email server yourself.
19 March 2010
Practical C# lambda examples for finding and filtering list items, declaring event handlers and selecting ranges, making everyday code shorter and clearer.
22 February 2010
The changes I used to speed up this MVC blog in 2010, including data and output caching, minification, Gzip compression and content delivery networks.
9 February 2010
Render an ASP.NET user control as a string for a web service, reusing the same HTML on the server and client and handling controls that expect a server form.
3 February 2010
A look back at my 2010 poll on .NET dependency injection containers, with an introduction to inversion of control and notes on Castle Windsor and Ninject.
3 February 2010
Toastify is a great little app that allows you to add hot-keys to Spotify. If you haven't already heard of Spotify, it is a streaming player that allows you to listen to music for free. I've been looking for a way to add hot-keys to Spotify
11 January 2010
A 2010 ASP.NET MVC example wraps the Google Charts image API in an HTML helper, turning repeated chart markup into a reusable method for your views.
8 January 2010
I've just got my hands on a shiny new computer, maxed out with new RAM and Windows 7. So far I am very impressed with Windows 7, although it looks pretty similar to Vista, its a lot slicker and I can't really seem to find any faults just
5 January 2010
My small C# sample uses the original iTextSharp library to generate a PDF with a barcode, illustrating how dynamic data can become a printable document.
17 December 2009
A Visual Studio T4 template uses the YUI Compressor for .NET to generate minified JavaScript files, with a custom tool command to refresh them after edits.
16 December 2009
Use dotless to add variables, nested rules and mixins to CSS in a .NET app, then automate stylesheet minification with a Visual Studio T4 template.
15 December 2009
Configure custom error views in classic ASP.NET MVC with HandleErrorAttribute and web.config, with separate handling for missing pages and server errors.
14 December 2009
Welcome to my site! It has been developed using ASP.NET MVC 2 beta (Which I intend to update as soon as the full release comes out), Subsonic 3.0 and a SQL 2005 DB. Ive written everything from scratch and Ive still got a lot to learn about the
14 December 2009
So, once I got the site up and running and I thought I was home and away. My home page worked perfectly, but as soon as I clicked away from the home page I got a 404 error page. Now I assumed that the only reason I was getting this