Archive for the 'programming' Category


Instant Storage 1

Here’s one of my favorite PHP ‘hacks’: when I’m whipping up a quick script that needs a place to stash some persistent data, but don’t feel like coming up with a database structure, or doing anything remotely approaching a real solution, I instead stuff it into a “static” session. By static, I just mean that I set the session ID to a static value, so I’m always pulling the same session. Instant data store.

session_id('stash-stuff-here');
session_start();
$_SESSION['stuff'] = $w00tz;

(Another quick and dirty approach would be serializing an array into a local file… oh, wait, I just recreated the default PHP session handler. ;))

PHPUnit + FAM + libnotify == fun 3

Last night I ‘tweeted’ (man, I hate that word!) on some hacking I was doing with PHPUnit, FAM (the File Alteration Monitor), and libnotify/notification-daemon to automatically run unit tests as you modify files.

Credit where credit is due: this was inspired by other people’s work with other unit testing frameworks.

Anyways, the short screencast in my update last night has already generated some interest, so I thought I’d get this out on the web for perhaps wider exposure.

Coming soon: continuous integration on your desktop for your PHPUnit projects.

Duck Typing 2

I’m in fairly creative mood tonight, as evidenced by one (now two) blog postings, the PHP coding I did earlier, and the upload of some 75 random pictures to Facebook. I guess that’s what happens when I avoid the work I really should be doing. (Blech, JavaScript.)

Anyways, a few days ago a coworker mentioned something to me about duck typing, and I again decided to shirk my responsibilities and experiment. The basic idea is to stand typing on its head and have an imperative system rather than declarative — as they say, “if it walks like a duck, and quacks like a duck, it must be a duck.”

Read more »

Willfull Ignorance 2

Sometimes, writing good code is really hard. But other times, writing good code is so darn easy you shouldn’t even have to think about it. In fact, it shouldn’t even be called “good code” — in these cases there should never be anything else, so we’ll just call it “code”.

For instance, if I see another line of code that does this:

$foo = isset($foo) ? $foo : 'default value';

I think I’ll kill someone.

Let me clear something up for you: using the ternary operator does not make you cool. However, assigning a variable to itself makes you very uncool.

if (!isset($foo)) $foo = 'default value';

Now why is that so hard to write?

~Time 0

I’ve been playing around with Xubuntu on an old machine, and happened to install the latest version of Eclipse + PDT (1.0.3, IIRC?). While setting up the myriad of options I require to feel comfortable in the editor, I noticed that they’ve added the ability to strip whitespace on save. May the authors be praised!

Represent! 5

I just learned that I’ll be presenting at the 2008 installment of the DC PHP Conference (in Washington DC, oddly enough). I’m excited about the prospect.

Open up wide 2

When I signed into meebo this morning, I got a little pop-up with a blurb about a partnership with AOL. I was immediately intrigued. Unfortunately, muscle memory kicked in too fast, and I closed the box — the same one that opens every time I sign in — before I even realized I wanted to read it. So I signed out and back in.

Apparently, AOL is finally opening AIM up really wide. They’re talking about full protocol documentation (that’s the “oscar” protocol, not the crappy TOC one), letting people use their own AIM libraries, and full access to all the functionality (voice, video, filesharing, etc.) — as far as I know, this stuff has never been available before.

I also noticed that you can now convert any AIM screen name into a “bot”: the various rate limits are removed (or heightened, at the very least), you can’t be warned, and are allowed to be added to more people’s buddy lists. In return, you can’t initiate conversations.

You know what this means.

The screen name crabbychild has been successfully converted to an AIM® Bot.

Across an Instance 0

Here’s the quick PHP tip of the day: class methods can access the protected (of any shared ancestors) and private (of the same type) members of any instance, not only their own instance. That may sound confusing, but it’s really not so much.

Read more »

The Importance of Bits 2

With their abundant availability both in volatile and permanent storage (i.e., RAM and hard-disks), sometimes I think the value of bits is lost on more recent developers, especially those that write in a very high-level language, like, say, PHP. The past few weeks I’ve been working very closely with some data analysts in our company — in particular, I’ve been compiling some very large tables (think nearly 1 billion rows per month) into “views” (technically, they’re completely new tables) that are much more manageable.

Tonight, mostly as an exercise in futility, I began looking at some of the foreign keys stored in the gargantuan tables. One of them in particular links to a table that currently contains (oddly enough) 256 rows. It grows very, very slowly. Currently the column is a long integer: 4 bytes. Imagine for a minute that we replaced that with what MySQL calls a small integer, or 2 bytes. Last month’s table was in the neighborhood of 900,000,000 rows, times 2, divided by 1024… That’s something just shy of 2 GIGAbytes that we’ve saved. (Never mind that there are about 4 other foreign keys this could also be applied to).

Every byte adds up, folks. Save ’em while you can.

(Some might call this inconvenient math. I’m not quite that unscrupulous.)

The PDT (Or: I Don’t Like Zend) 1

My animosity towards Zend has really increased lately, due to a number of factors (the recent ZendCon, their character when dealing with open-source projects, etc.), so much so that I’ve sworn off Zend products. Which doesn’t really sound like a difficult task at first glance, since I only use one Zend product — but that one product just happens to be one of the only good PHP IDEs out there: Zend Studio.

Fortunately (and if you follow the PHP world, you’ve probably heard about this), Studio is receiving competent competition in the open-source world from the Eclipse platform in the guise of the PHP Developer Tools, or PDT. (And that’s competition in a very liberal sense of the word, since Zend is actually backing PDT — so they can rip it of– base future versions of Zend Studio on it.)

Anyways, the real goal here was just to talk about a quick PDT tip (now that I’ve switched), not rant and rave about how Zend seems to have a knack for positioning themselves in the middle of hugely conflicting interests.

The tip: Most people know that you can Ctrl+Click “into” a function call. What I didn’t know is that you can also Ctrl+Hover to get a tooltip containing the first ~10 lines of the function.

blah.jpg

This can be immensely useful when you’re just trying to figure out what a piece of code does, without completely losing your train of thought and switching contexts.