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.
SELECT author, title, body FROM articles WHERE publish_date <= NOW();
That works, right? Yeeeeah, it works, but it isn’t optimal. The problem is that MySQL can’t use the query cache on any query that has NOW() in it (or CURRENT_TIME() or any of these other functions for that matter). The solution I like to use is have PHP generate the timestamp. Even better is to have PHP round the timestamp, like so:
// Calculate time to nearest 15 minutes $roundness = 60 * 15; $rounded_now = (round(time() / $roundness) * $roundness); $sql = "SELECT author, title, body FROM articles WHERE publish_date <= $rounded_now";
Of course, depending on how time sensitive your application is, you may need to change the code from rounding to 15 minutes to something like 5 minutes, or 1 minute. Hey, even rounding to 30 seconds would be better than using NOW() because you can use query cache!
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
FOWA & BarCamp Miami
Future of Web Apps (FOWA) Miami & BarCamp Miami are quickly approaching. I’m really looking forward to picking up tips on building better web apps, and meeting some smart people. I’m planning on giving a presentation at Barcamp, but I haven’t decided on what to talk about. I’m considering either “An Intro to Comet” or “Improving User Experience With JS Form Validation”, and I’m leaning more towards the former. Any suggestions?
I still have a lot to get done before the month’s end, including: launching the new and improved Statiksoft website, designing and printing affordable business cards, and, of course, writing my presentation. Add those things to the laundry list of other projects I’m trying to work on and it’s gonna be a busy month.
Also, BarCamp Orlando is slotted for early April, with two focused days! Kevin and I are gonna give a killer presentation on ExpressionEngine on the developer day. Be there.
The New SPEEDtv.com
February 6th has come, and it has gone. After much toil and many, many long days, the largest development project MindComet has ever undertaken launched on time. That statement alone is worth celebrating.
Whether the project ends up being a glorious success to the end users or not, as a developer I can make it something to be proud of in the lessons I take away from it. For example, here’s one thing I discovered about myself: I like BIG. I like the challenge…the complexity…the impact. Big forces you to approach problems in a different, often better, way. Big challenges your development processes and methodologies when you may otherwise be content. Big requires skills, tools, and architectures you don’t normally get to use with small. Big magnifies your weaknesses, and exposes your flaws–refining those who learn from it. And in the end, if you can make it to the finish; if you can reach your goal–you’re a cut above the rest. Here’s to big. Here’s to the SPEEDtv development team.