Blogging
An archive of blog posts at SitePoint
Here's an archive of posts I've written for the
SitePoint Blogs,
where I've become known for my off-beat, sometimes contentious
take on industry issues. My posts are mostly technical,
and sometimes vividly opinionated! But always an interesting read
Latest post
- Better Passwords #3: Caps-lock Warnings <mmx.viii.iii>
Older posts
- Better Passwords #2: “Show Password” <mmx.vii.xxii>
- Better Passwords #1: The Masked Password Field <mmx.vii.xix>
- Creating Accurate Timers in JavaScript <mmx.vi.xxii>
- Making CSS Count Backwards <mmx.vi.xii>
- Reducing HTTP requests with generated data URIs <mmx.vi.v>
- Using CSS Text-Shadow to Create Embossed Text <mmx.iv.xxii>
- A Simple CSS Drop-Cap <mmx.iv.xv>
- How To Get Smoother Rounded Corners <mmx.iv.xiv>
- Towards A Cooler Focus Caret <mmx.iv.xiii>
- A Specialized JavaScript Library for Querying CSS <mmx.iv.v>
- Creating Beveled Images with CSS <mmx.iii.v>
- CodeBurner Updates for Firefox 3.6 <mmx.ii.xvi>
- A Quick-And-Dirty Way To Update Your Firefox Extensions <mmx.ii.ii>
- The CodeBurner Family Welcomes Three New Babies! <mmix.x.xx>
- Who's Using ARIA? <mmix.ix.xvi>
- HTML 4 Considered Harmful <mmix.vii.xxxi>
- Announcing Updates to our Popular Add-ons for Firefox 3.5 <mmix.vii.ii>
- 10 Cool Things We'll Be Able To Do Once IE6 Is Dead <mmix.iv.xiv>
- The Right Way to Make a Dropdown Menu <mmix.iv.i>
- Techy Treasures #5: Fudging CSS Counters in Internet Explorer <mmix.iii.xxxi>
- Announcing Version 1.1 of CodeBurner: the Reference Tool for Firebug <mmix.iii.xx>
- Developing CodeBurner — An Exercise in Exploratory Programming <mmix.i.xxviii>
- Introducing CodeBurner: the SitePoint HTML & CSS Reference Tool for Firebug <mmix.i.xxvii>
- Techy Treasures #4: What's inside a dollar function? <mmviii.xii.x>
- Techy Treasures #3: When is a mouseout not a mouseout? <mmviii.xi.xxv>
- Techy Treasures #1: Feelin' Empty <mmviii.x.xvi>
- Tagging is Not Just for Content <mmviii.viii.xxix>
- Debugging JavaScript: Throw Away Your Alerts! <mmviii.viii.xxii>
- Using JSON for Language-independent Configuration Files <mmviii.viii.xxi>
- Regex Matching Attribute Selectors <mmviii.vii.xxix>
- Mangling XML as Text with PHP DOM <mmviii.vii.xxiv>
- Conditional Comments for HTML Email <mmviii.vii.xviii>
- Top 5 Tips for Staying Awake <mmviii.vii.iv>
- BBC Rejects hCalendar Microformat Because Of Accessibility Concerns <mmviii.vi.xxv>
- Dust-Me Selectors: Now Compatible With Firefox 3! <mmviii.vi.xxiv>
- Thanks for what? <mmviii.v.xx>
- Building The Matrix - Notes from The Architect <mmviii.v.xiv>
- You can stick your em-dash up your dot dot dot <mmviii.iv.xxx>
- You guys all suck <mmviii.iv.xxi>
- You're Fat and I Hate You <mmviii.iv.xvii>
- continue - the forgotten statement <mmviii.iv.xiv>
- A collection is not an array <mmviii.iii.xix>
- Unblocking Adblock <mmviii.ii.v>
- The Accessible Dungeon of Doom <mmviii.i.xvi>
- Internet Explorer doesn't just suck, it also blows! <mmvii.xi.xxx>
- Dust-Me Selectors Version 2.0 <mmvii.xi.xxvi>
- All in the mind? <mmvii.xi.xxii>
- Dealing with unqualified HREF values (Part 2) <mmvii.x.xvii>
- Why Accessibility? Because It's Our Job! <mmvii.x.xvi>
- Comment-Driven Development <mmvii.x.x>
- How green can you be? <mmvii.x.i>
- Don't make users take responsibility for our problems <mmvii.ix.x>
- Nihilism, accessibility, and the preponderence of amazing co-incidences <mmvii.viii.xiii>
- Dealing with unqualified HREF values <mmvii.viii.x>
- What is a community? <mmvii.viii.iii>
- Find unused CSS selectors with "Dust-Me Selectors" <mmvii.vii.xxx>
- Insert in place without document.write <mmvii.vii.xi>