Blogging

An archive of blog posts at SitePoint

Until fairly recently I was regular contributor to the SitePoint Blogs where I became known for my off-beat, sometimes contentious take on industry issues. My posts were mostly technical, and sometimes vividly opinionated ... but always an interesting read.

Archive of posts

This archive dates from July 2007 to May 2011. When I have more time I'll reproduce some of the best ones on this site (so you don't have to wade through banner-ads to read them (big grin))

  1. The Ever-Increasing Uses of a Zoom Layout (Part 2) <mmxi.v.xi>
  2. The Ever-Increasing Uses of a Zoom Layout (Part 1) <mmxi.v.x>
  3. The Angst of Accessibility <mmxi.v.ii>
  4. Better Take The Web's Temperature — It's Coming Down With Another “itis” <mmxi.iv.xxi>
  5. (More) Assignment in Conditions <mmxi.iv.xix>
  6. The Art of Accessibility <mmxi.iv.xii>
  7. Sophisticated Sorting in JavaScript <mmxi.iv.iv>
  8. What's The Best Date Format? <mmxi.iii.xxii>
  9. Counting with an Arbitrary Character Set <mmx.xii.xxi>
  10. The Anatomy of a JavaScript Design Pattern <mmx.xii.viii>
  11. My Favorite JavaScript Design Pattern <mmx.xi.xxx>
  12. Why Aren't Tooltips Triggered by The Keyboard? <mmx.xi.xxiii>
  13. The Guilty Secrets of a Standards-Based Programmer <mmx.xi.x>
  14. Scripting, Loading and Irony <mmx.xi.iii>
  15. Throwing Better Errors Using Stack <mmx.x.xxvii>
  16. Assignment inside a Condition <mmx.x.xii>
  17. The Best Way to Instantiate Ajax? <mmx.x.v>
  18. The Footer's the Menu <mmx.ix.xxviii>
  19. Creating Shadows Around Polygons in CSS <mmx.ix.xxi>
  20. Contiguous Sibling Selector <mmx.ix.vii>
  21. Better Passwords #3: Caps-lock Warnings <mmx.viii.iii>
  22. Better Passwords #2: “Show Password” <mmx.vii.xxii>
  23. Better Passwords #1: The Masked Password Field <mmx.vii.xix>
  24. Creating Accurate Timers in JavaScript <mmx.vi.xxii>
  25. Making CSS Count Backwards <mmx.vi.xii>
  26. Reducing HTTP requests with generated data URIs <mmx.vi.v>
  27. Using CSS Text-Shadow to Create Embossed Text <mmx.iv.xxii>
  28. A Simple CSS Drop-Cap <mmx.iv.xv>
  29. How To Get Smoother Rounded Corners <mmx.iv.xiv>
  30. Towards A Cooler Focus Caret <mmx.iv.xiii>
  31. A Specialized JavaScript Library for Querying CSS <mmx.iv.v>
  32. Creating Beveled Images with CSS <mmx.iii.v>
  33. CodeBurner Updates for Firefox 3.6 <mmx.ii.xvi>
  34. A Quick-And-Dirty Way To Update Your Firefox Extensions <mmx.ii.ii>
  35. The CodeBurner Family Welcomes Three New Babies! <mmix.x.xx>
  36. Who's Using ARIA? <mmix.ix.xvi>
  37. HTML 4 Considered Harmful <mmix.vii.xxxi>
  38. Announcing Updates to our Popular Add-ons for Firefox 3.5 <mmix.vii.ii>
  39. 10 Cool Things We'll Be Able To Do Once IE6 Is Dead <mmix.iv.xiv>
  40. The Right Way to Make a Dropdown Menu <mmix.iv.i>
  41. Techy Treasures #5: Fudging CSS Counters in Internet Explorer <mmix.iii.xxxi>
  42. Announcing Version 1.1 of CodeBurner: the Reference Tool for Firebug <mmix.iii.xx>
  43. Developing CodeBurner — An Exercise in Exploratory Programming <mmix.i.xxviii>
  44. Introducing CodeBurner: the SitePoint HTML & CSS Reference Tool for Firebug <mmix.i.xxvii>
  45. Techy Treasures #4: What's inside a dollar function? <mmviii.xii.x>
  46. Techy Treasures #3: When is a mouseout not a mouseout? <mmviii.xi.xxv>
  47. Techy Treasures #1: Feelin' Empty <mmviii.x.xvi>
  48. Tagging is Not Just for Content <mmviii.viii.xxix>
  49. Debugging JavaScript: Throw Away Your Alerts! <mmviii.viii.xxii>
  50. Using JSON for Language-independent Configuration Files <mmviii.viii.xxi>
  51. Regex Matching Attribute Selectors <mmviii.vii.xxix>
  52. Mangling XML as Text with PHP DOM <mmviii.vii.xxiv>
  53. Conditional Comments for HTML Email <mmviii.vii.xviii>
  54. Top 5 Tips for Staying Awake <mmviii.vii.iv>
  55. BBC Rejects hCalendar Microformat Because Of Accessibility Concerns <mmviii.vi.xxv>
  56. Dust-Me Selectors: Now Compatible With Firefox 3! <mmviii.vi.xxiv>
  57. Thanks for what? <mmviii.v.xx>
  58. Building The Matrix - Notes from The Architect <mmviii.v.xiv>
  59. You can stick your em-dash up your dot dot dot <mmviii.iv.xxx>
  60. You guys all suck <mmviii.iv.xxi>
  61. You're Fat and I Hate You <mmviii.iv.xvii>
  62. continue - the forgotten statement <mmviii.iv.xiv>
  63. A collection is not an array <mmviii.iii.xix>
  64. Unblocking Adblock <mmviii.ii.v>
  65. The Accessible Dungeon of Doom <mmviii.i.xvi>
  66. Internet Explorer doesn't just suck, it also blows! <mmvii.xi.xxx>
  67. Dust-Me Selectors Version 2.0 <mmvii.xi.xxvi>
  68. All in the mind? <mmvii.xi.xxii>
  69. Dealing with unqualified HREF values (Part 2) <mmvii.x.xvii>
  70. Why Accessibility? Because It's Our Job! <mmvii.x.xvi>
  71. Comment-Driven Development <mmvii.x.x>
  72. How green can you be? <mmvii.x.i>
  73. Don't make users take responsibility for our problems <mmvii.ix.x>
  74. Nihilism, accessibility, and the preponderence of amazing co-incidences <mmvii.viii.xiii>
  75. Dealing with unqualified HREF values <mmvii.viii.x>
  76. What is a community? <mmvii.viii.iii>
  77. Find unused CSS selectors with "Dust-Me Selectors" <mmvii.vii.xxx>
  78. Insert in place without document.write <mmvii.vii.xi>

Like to read more?

Check out the articles list, plus there are more articles and commentary in the reference section.

So how can I help you?

Please do get in touch, and let me know what you need.


In this area

Main areas


[brothercake] a round peg in a square hole, that still fits