Skip navigation

A user on reddit, /u/printers_suck, spoke to the feeling of getting obsolete as a career goes on. The post and its linked-to article, On Being Overwhelmed With Our Fast Paced Industry, already had me thinking in the abstract. Having felt a small rut lately, my response was half to /u/printers_suck and half reminder to myself.

I’ve been in webdev for about two decades. If I’m fearing becoming obsolete, I’ve found that I’m actually paranoid of something else. Is my job itself sucking? Am I in a rut? Am I overworked? Am I just afraid of getting old?

There are some key practices that will keep you from being obsolete:

1. Never assume someone younger than you is dumber than you. I work with a lot of vibrant, brilliant, and sometimes head-in-the-clouds-shiny-new-thing-chasing young people. Always be willing to sit down with one of them so they can show you how to do something – it’s good for keeping up to date and great for collaboration. Be humble about it. Give them time to be the teacher.

2. Never say “no” just because you haven’t used something. Instead, get familiar with where it lies as being production-worthy. If it works better than what you have, use it. If not, scrap it or ignore it.

3. Speaking of scrapping things, don’t fall in love with your code. That wonderfully elegant thing you wrote yesterday? Be willing to dump it tomorrow. Keep iterating and evolving. Do so with an objective point of view. If you’re defending code simply because it’s yours, then you’re not arguing its merits.

4. Always be willing to re-think your position. There was a time when I would never even consider replacing Apache or lighttpd with Nginx. At the time, Nginx was not production-ready. These days, I can’t live without Nginx. Your prejudices, like your code, should be disposable from an objective point of view.

5. Finally, and it’s a cliche for a reason, never stop learning. If you haven’t learned something new for a long time (like a year), then it’s time to try something new just to keep those learning chops practiced. I’ve often found that just starting to learn again gets the whole process going again. (There’s a counterpoint to this though – never let learning a shiny thing distract you from real work that needs to be done.)

(Side note: One of the guys I work with, Cam, has been requesting that I write more experiential stuff down since I’ve had a long career in tech. Apparently, I can tell good water cooler stories. :) Here is my first official stab at it. Thanks for the prodding Cam!)


Need a way to test visibility of an element on a page, but don’t have jQuery? Have some isvis().

SpamAssassin Logo

Among other things, I run my own mail server for a few domains. On those domains, I use a method of combatting SPAM called greylisting. Basically, when another server wants to deliver mail, my server says “I’m too busy – try again later.” A valid mail server will still be around later to retry. A typical spammer’s ad-hoc server (that’s usually on a hijacked machine) won’t bother to try later even if it’s still around to do so.

In order to receive some time-sensitive mail recently, I turned greylisting off on a particular domain for the last 24 hours or so. The result was dramatic. Read More »

bpmv.cLog.jsSome JavaScript environments simply dont have the console object or don’t support all of the console functions. I get sick of either removing my debugging, doing oddball conditionals all over the place or re-writing the same wrappers all over again.

So here’s an addon to bpmv.js that will do all the heavy lifting. I’ll warn you that bpmv.cLog.js is experimental! I could change it at any time and I don’t consider it production ready (read the file before you use it).

Most of the console functions I could find for web browsers are in place. Some, like console.debug(), will fall back to console.log() if they don’t exist and console.log() does.

You can grab a copy along with bpmv.js at it’s GitHub home.

This blew my mind. I was looking at some code that had vars named like thing_x and thing_y, then thought, rather reflexively, "those should just be a single object or array var". The kind of thinking that comes along with the "all vars are objects" mentality of JS. If there was a difference, I thought, it should be nominal.

I was wrong. So wrong. I wasn’t expecting this kind of disparity. The difference in V8 is downright astounding.

jsPerf: Separate Vars vs Container Object

jQuery.scaleFrame.js Docs Screenshot

While messing around with CSS transforms, I noticed that scaled IFRAME tags didn’t behave well. They took up their full layout space regardless of their scaling. I wrote a quick plugin last night to aid with that and even threw in some zoom controls. This morning, I made some docs and threw it onto GitHub. Enjoy.

GitHub Project

This is mainly an experiment and a programming exercise for me, but with a usable result. I’m not sure how I or anyone else will use the plugin yet.

inBuckets()One of the biggest nightmares I’ve had to deal with is unpredictable cache keys. Inevitably, someone codes a function that uses its parameters in the key name. In many cases, this is fine. However, when you need to deal with paginated or grouped data in different sizes, things can get messy. To that end, I lean on PHP’s range() function.

Setting up the input for range() and making the output usable is something I’ve ended up doing over and over again, so I’m finally taking an implementation sharing it to save everyone the labor of dealing with it (including myself). And thus, I submit inBuckets() for your perusal (hosted at GitHub – sadly won’t let us embed Gists). The syntax is in the doc block and there’s commented out sample code at the end to get you started. Enjoy.

Here’s an Apache one-liner I often find myself using. It will list all of the server names and alises that are contained in the active Apache config files on a machine. I’ll go into the parts of the command and how to modify it to suit your needs. This assumes a bash-like shell (with grep, sed, sort, tr and a for loop), root (or permission to run the httpd binary directly) and if you wish to modify the examples, a little command-fu.

Read More »

ProFont in action (hmmm... what language is that?) Tonight I started using ProFont and fell in love.
I’d been a fan of Proggy Clean for a few years, but needed characters it didn’t support well (such as ‡ and »).
Read More »

Bryn's Smarty Debug Console
I’ve cleaned up and released my old variant on the Smarty debug template. Better navigation, better view of vars and using HTML5 as the basis. More improvements to come in the future.

The gist for it can be found on Github.


Get every new post delivered to your Inbox.