Couch to 5K week 4 playlist

If you follow me on Twitter (and if not, well…) you know that for the past few weeks I’ve been trying to conquer decades of sedentary lifestyle by way of the Couch to 5K iPhone app. It’s been working out very well so far!

One thing I have yet to do is consciously plan out a playlist to correspond to the cycles of walking and running that are a key to the Couch to 5K program. Well, on Thursday I will be running the final day of week 4, nearing the halfway point (what??!!) in the program, so it’s time to remedy that situation.

Here then is my Couch to 5K week 4 playlist, for your consideration:

Action Song Artist Time
Warm up One More Robot / Sympathy 3000-21 The Flaming Lips 5:00
Run The Distance Cake 3:01
Walk Little Fishes Brian Eno 1:30
Run Smells Like Teen Spirit Nirvana 5:01
Walk And I Love Her The Beatles
Run Highly Suspicious My Morning Jacket 3:05
Walk Pigs on the Wing (Part One) Pink Floyd 1:25
Run Uprising Muse 5:05
Cool down Computerworld Kraftwerk 5:08

It will be interesting to see how this plays out. Clearly I focused primarily on the timing and general mood of the songs when programming this playlist, giving… well… absolutely no consideration whatsoever to the transitions between the songs. But I think it will still be successful. It helps me a lot when running to focus on the music and to think, “OK… I run until the end of this song.”

And yes, when I get to running for the entire time, I will have a song for that. I have 14 songs in the library on my iPhone that are over 20 minutes long.

Yes, it’s… yet another redesign

I’ve redesigned this blog more times than I can count. Many of those redesigns have been incremental tweaks, to be sure, but still, there’ve been probably dozens of times that I’ve completely torn it down and rebuilt it, more-or-less from scratch. This is one of those times.

I’ve also (finally) wised up a bit. Usually when I post these redesign announcements, I don’t include a screenshot… as if this is the last time I’ll ever redesign the site. I wish I could go back to some of those earlier posts and see what the site actually looked like when I announced the changes. I can remember most of them, even from the pointless ramblings I composed to commemorate their creation. But it would still be nice to see them on the outside of my brain.

There are some big changes in this version. Most significantly, I’m using two (relatively) new technologies as both key components of the underlying structure and also as inspiration for the design itself. They’re created (or at least inspired) by some amazingly talented people in this field, so they deserve recognition.

First, the fonts are being delivered by Typekit. Finally, web designers have more fonts at their disposal than Arial, Georgia and Verdana. (Yes, there are some others, but these three are the most excessively used.) There are some awesome people behind Typekit, but I especially want to call out founder Jeffrey Veen and creative director (and probably the best web designer on the planet) Jason Santa Maria.

Next up, we have a responsive web design using CSS3 media queries. (Yes, that’s probably the most boring possible link about one of the coolest technologies out there right now in web design.) I think we have Ethan Marcotte to thank for devising this brilliant use of CSS3 media queries to dynamically adapt web page layouts to the size of the browser window. At the very least, he named it and helped spread the word with the aforelinked A List Apart article and his new book.

In short, by employing CSS3 media queries to adjust the page layout to an appropriate width and number of columns (and smartly resizing elements within), it’s possible to easily adapt a web page’s presentation to suit the capabilities and dimensions of a number of screens. Just take a look at this site on your 27-inch iMac and then on your iPhone (or your roughly equivalent non-Apple devices) to see what I mean. I’m sure I’m not doing Ethan’s work justice, either in my description or in my application of it here, but I’m excited about the potential regardless.

It’s a great time to be a web designer!

Update: I went for less than 48 hours with Futura PT Light as my primary font for body text here, despite knowing it was too light and, perhaps, too geometric for good body type. Finally, at a friend’s prodding, I resorted to the inevitable: Proxima Nova. I love Proxima Nova. It’s the primary font I use in all of my business materials (and in my logo itself). I had envisioned a kind of ’50s retro school textbook concept with this site redesign, and Proxima Nova, a 21st century font, doesn’t fit that description, but… man, it just looks so good. So, now it’s here.

CakePHP at the command line: it’s cron-tastic!

I’m kind of surprised it’s taken this long. cms34 has been around for almost three years now, and this is the first time I’ve had a client need a cron job that relied on CakePHP functionality. (The system has a couple of backup and general-purpose cleanup tools that can be configured as cron jobs, but they’re just simple shell scripts.)

And so it was today that I found myself retrofitting my CakePHP-based web application to support running scripts from the command line. I found a great post in the Bakery that got me about 85% of the way there, but there were some issues, mostly due to the fact that the post was written in late 2006, and a lot has happened in CakePHP land over the last 4 1/2 years.

There are two big differences in app/webroot/index.php in CakePHP 1.3 compared to the version that existed at the time of that original post: first, the calls to the Dispatcher object are now wrapped in a conditional, so the instruction to replace everything below the require line should now be something closer to “replace everything within the else statement at the bottom of the file.”

The other big change is that this file defines some constants for directories within the application, and those paths are all wrong if you move the file into the app directory as instructed.

Below is my revised version of the code. Note that I also reworked it slightly so the command can accept more than two arguments as well. There’s a space before Dispatcher is called where you can insert any necessary logic for handling those arguments. (I also removed all of the comments that appear in the original version of the file.)

<?php
if (!defined('DS')) {
    define('DS', DIRECTORY_SEPARATOR);
}
if (!defined('ROOT')) {
    define('ROOT', dirname(dirname(__FILE__)));
}
if (!defined('APP_DIR')) {
    define('APP_DIR', basename(dirname(__FILE__)));
}
if (!defined('CAKE_CORE_INCLUDE_PATH')) {
    define('CAKE_CORE_INCLUDE_PATH', ROOT);
}
if (!defined('WEBROOT_DIR')) {
    define('WEBROOT_DIR', APP_DIR . DS . 'webroot');
}
if (!defined('WWW_ROOT')) {
    define('WWW_ROOT', WEBROOT_DIR . DS);
}
if (!defined('CORE_PATH')) {
    if (function_exists('ini_set') && ini_set('include_path', CAKE_CORE_INCLUDE_PATH . PATH_SEPARATOR . ROOT . DS . APP_DIR . DS . PATH_SEPARATOR . ini_get('include_path'))) {
        define('APP_PATH', null);
        define('CORE_PATH', null);
    } else {
        define('APP_PATH', ROOT . DS . APP_DIR . DS);
        define('CORE_PATH', CAKE_CORE_INCLUDE_PATH . DS);
    }
}
if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {
    trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR);
}
if (isset($_GET['url']) && $_GET['url'] === 'favicon.ico') {
    return;
} else {
    // Dispatch the controller action given to it
    // eg php cron_dispatcher.php /controller/action
    define('CRON_DISPATCHER',true);
    if($argc >= 2) {

        // INSERT ANY LOGIC FOR ADDITIONAL ARGUMENT VALUES HERE

        $Dispatcher= new Dispatcher();
        $Dispatcher->dispatch($argv[1]);
    }
}

After implementing this version of cron_dispatcher.php, I was able to get CakePHP scripts to run at the command line without being fundamentally broken, but there were still a few further adjustments I needed to make (mostly in app_controller.php). Those were specific to my application. You’ll probably find yourself in the same boat.

A couple of other things worth noting: if your server is anything like mine, you’ll need to specify the full path of the PHP command line executable when running your scripts. In my case it was /usr/local/bin/php. And, the one sheepish confession I have to make: I know the goal with the way the file path constants are defined is to avoid any literal naming, but I couldn’t find a good way to get around that for WEBROOT_DIR, with the file no longer residing in webroot itself. I’ll leave fixing that as an exercise for the reader.

Good luck!

Download the Script

Download zip file... cron_dispatcher.php
cron_dispatcher.php.zip • 1.2 KB

Takin’ it to 3-2-1 Contact

I’ve been thinking this for years, but I finally decided to put it to the test. I tweeted the results, but it felt like something worth commemorating here as well.

First, a confession: I am a Michael McDonald fan. Not the latter-years, “songbook”-type crap Paul Rudd’s character made fun of in The 40-Year-Old Virgin. But the classic, late ’70s/early ’80s stuff with the Doobie Brothers, Steely Dan, and countless other backup vocals and solo tracks that inspired Yacht Rock.

As a Michael McDonald fan, I’ve listened to his work with the Doobie Brothers probably more than anyone should. Tracks like “Takin’ It to the Streets.” And another thing I’ve done a lot of in my lifetime — again, probably more than anyone should — is watch shows produced by Children’s Television Workshop for PBS in the late ’70s and early ’80s, right around the time of Michael McDonald’s peak.

So, no, I don’t think it’s an accident that what I’ve anecdotally observed is now, here, for you, concretely proven: the 3-2-1 Contact theme song is almost a direct ripoff of the transitional bridge of the Doobs’ 1976 hit “Takin’ It to the Streets.” But don’t take my word for it… your ears will tell you.

Listen to “Takin’ It to the Streets,” particularly, the section beginning at 0:47 in the clip below.

And now, the legendary title sequence of 3-2-1 Contact, whose music and imagery is indelibly etched in my brain.

SEO doesn’t matter

Note (April 22, 2011): I rarely second-guess myself after posting a blog entry, but this was one of those rare cases. I reconsidered the post due to the fact that shortly after writing it, I observed a case with a client where SEO did matter. But upon further, um, reconsideration, I decided the post did still have merit, because the type of SEO we were dealing with was not the type of SEO I’m talking about here. In fact, “the type of SEO we were dealing with” is something I’m reluctant to call SEO at all, even though that’s denotatively what it is: search engine optimization. But there’s a huge difference between semantic HTML, well formed title and meta tags, and carefully constructed sitemap.xml and robots.txt files, versus “gaming the system,” which is the negative connotation SEO typically carries, and what I’m focusing on in my criticism here. So… on we go. With a few edits for clarification.


There, I said it. Well, actually I’ve been saying it in various ways for years, so what I actually mean is: there, I made it the title of a blog post. And if SEO does matter at all, then people who don’t think SEO matters (and somehow feel inclined to express that sentiment in Google’s search box) will soon be viewing this post. (Huh?)

Today I was perusing my RSS feeds (a good way to find information that is relevant to your interests, often much more effective than just searching for random terms on Google), and I came across a blog post entitled Whitehat SEO Is a Joke. Intrigued, I read it, and it made some sense. The argument in a nutshell is that whitehat SEO is, really, just ineffective SEO. This spawned a satirical response, Blackhat SEO Is a Joke. It made some sense too. And that’s when the thought really coalesced in my mind: all SEO is a joke. Not because on one end of the spectrum it’s ineffectual and on the other it’s unethical. Because manipulating search engine rankings shouldn’t really matter to a sustainable business model.

To the Twittermobile!

Forget SEO. If your business model depends significantly on search engine rankings, you're doing something wrong.

After some thought (and a few minutes of research), I followed up with this:

To wit: Google "Minneapolis web development" and I don't come up until page 4 of the results. IT DOESN'T MATTER. I have plenty of work.

So, what do I really mean here? In this specific example of my own work, what I mean is I don’t depend on random people googling “Minneapolis web development” to get work. I get most of my work through the network of contacts I’ve developed over a decade and a half of professional experience, and through referrals from past clients. And even if I do want people to be able to find me on Google, which of course I do, I expect they would type Room 34, not Minneapolis web development. Go ahead and google “Room 34.” I’ll wait.

Welcome back. And guess what? I didn’t spend a cent on SEO consulting, and I didn’t spend much time of my own thinking about SEO either. I thought about well-formed semantic HTML and relevant content and that just happened. But it still doesn’t matter because I don’t depend on search engine rankings for business.

If you’re building a website as a means to promote your business, or if the website is your business, you’ll certainly want to appear in relevant search results, but ultimately your goal is quite simply to get people to your website, regardless of how they got there. Search engines are therefore a marketing tool — hopefully only one of many you’ll be employing — and if search engines don’t lead visitors to your site based on its own merits, then the problem is not the search engines and their confounded algorithms, it’s your site.

Don’t ask me what the other marketing tools are or should be. I’m a web developer, not a marketer. For myself, word-of-mouth and business cards have been the only marketing tools I’ve needed. Other businesses need other strategies, and the first thing any business needs to do when developing a marketing strategy is to figure out where its business is likely to come from and how best to reach that audience.

Regardless of whether you’re deeply immersed in the world of SEO or you hold it at arm’s length like I do, there are some interesting and relevant points in the two blog posts I linked to above, but I think the most salient is this, from the blackhat post:

If however you have a web property that has some value to it, then true blackhat strategies are not the way forward.

Black, white or gray, all SEO (apart from basic web design best practices, careful [and responsible] use of legitimate tools like sitemap.xml and robots.txt files, Google Webmaster Tools, and meaningful, relevant content) is essentially about gaming the system. Some techniques may achieve more immediate impact, and others may have more lasting value, but ultimately I see only two reasons to engage in any of them:

  1. Your content and/or its presentation doesn’t have enough value on its own.
  2. Your business model itself is based on gaming the system.

If the latter is true, there’s nothing I can say or do to help you or to persuade you to act otherwise. We’re simply in this world for different reasons and will never see eye to eye. If the former is true, however, there’s an alternative. It’s a lot more work, but in some ways that’s the point: make your content better. And that will often lead to an even broader, harder, and more important task: figure out what you’re really trying to do in the first place. Because if you need to be on the first page of a generic Google results page to stay in business, maybe you don’t really have much of a business at all.

Addendum, a few hours later: Like I said…
Google search for "SEO doesn't matter"