LongURL—Restoring Order to the Universe

It’s been two weeks since I conceptualized LongURL, and a productive two weeks at that! Last Monday I officially launched the service (which provides a handy REST API) with support for a dozen or so shortening services like TinyURL.com. Once I stepped away from the problem for a little while I realized there was a better way to go about solving it. Thankfully the way I designed the service didn’t make it very difficult to swap out that bit of business logic, so this week I rolled-out an update that adds support for all shortening services.

After getting feedback from some helpful beta testers (thanks Marjolein and Børge!) and making a few tweaks I was happy yesterday to release the LongURL Mobile Expander Greasemokey script and Firefox extension which use the LongURL API to expand shortened URLs on any web page. I haven’t had much feedback from others yet, but for me personally, the extension tremendously improves my user experience. Sorry guys, no more rickrolling me!

Read more

Making Campfire Work for Me (and More Like IRC)

One of the companies I work with has decided to use the 37signals line of products for internal project management and communication (which I think is great BTW). This means that I sit in a Campfire chat room for the working hours of my day, along with a handful of other developers. I started to run into a problem, though, when I didn’t need to be talking with others. It is difficult to tell when people are trying to talk to me. Campfire has, by default, two methods of notifying you of new messages: an unread messages counter (dock icon or browser tab), and optional sound ‘dings’. When I’m trying to work on something though that doesn’t involve chatting with others, all the while the chat room still active with other developers, it’s really distracting to hear constant ‘dings’ or have to repeatedly check new messages to see if they pertain to me.

The situation for me is similar to lurking on IRC channels. But IRC has been around much longer than Campfire, and IRC client developers are familiar with the problem. Thus, many IRC clients allow you to specify keywords, that, when present in other users messages trigger some form of notification, like a sound or Growl message. Well, this clearly is the feature I needed to solve my Campfire problem.

Read more

Negative Word Matching with Regular Expressions

Today on the #codeigniter IRC channel someone asked about how to match a string that didn’t start with a specific word using a regex. I quickly threw out that, off the top of my head, /^(word){0}/ should work. Well, surprisingly, it didn’t. Turns out negatively matching words with regular expressions is a little more difficult.

After a little research I came up with a working solution: /^(?!word).*/

This post by Jeff Atwood helped: Excluding matches with Regular Expressions

MySQL SELECT Entries Before NOW()

I’m in the business of making things faster. Using NOW() in a SQL query is something I’m going to complain about. Here’s a familiar scenario from the online publishing industry where future dating articles is a commonality:

You have a news site. You need to display only articles that have been published, and one of the criteria is that they need to have a publish_date before now. Easy, peasy, lemon squeezy.

Read more

SparkStats Widget Patch

Luc Betheder wrote a handy little widget for Sean McBride’s SparkStats plugin, which I recently started to use. I noticed, though, that whenever I made changes to my widgets the custom title I set for the Sparks plugin would get wiped out. So I fixed the problem in the plugin and thought I’d send the patch to Luc. Turns out, I can’t get in touch with him. You have to be registered on his blog to comment, but he has registrations turned off. Also, his email address was nowhere to be found. Hmm…slightly frustrating. I’m not giving up though, so here’s my patch (I’m also testing out the Google Syntax Highlighter):

--- sparks.php	2008-02-16 14:14:22.000000000 -0500
+++ sparks.php.mine	2008-02-16 14:14:58.000000000 -0500
@@ -63,13 +63,13 @@
 			// Clean up control form submission options
 			$newoptions['title'] = strip_tags(stripslashes($_POST['Sparks-title']));
 			$newoptions['text'] = strip_tags(stripslashes($_POST['Sparks-text']));
-		}

-		// If original widget options do not match control form
-		// submission options, update them.
-		if ( $options != $newoptions ) {
-			$options = $newoptions;
-			update_option('widget_Sparks', $options);
+			// If original widget options do not match control form
+			// submission options, update them.
+			if ( $options != $newoptions ) {
+				$options = $newoptions;
+				update_option('widget_Sparks', $options);
+			}
 		}

 		// Format options as valid HTML. Hey, why not.

Download the patch: SparkStats Widget Patch

← Previous PageNext Page →