Crazyegg == crazy expensive

Update: The nice folks at Crazyegg contacted me a few hours after I posted this, and though many different things were discussed and an informative dialogue was begun, I’m writing this update only to point out that they offer a free 5000-clicks/month plan, something I should have noted in the original piece.

Unless I’m missing something, the Crazyegg stats-tracking service seems to be way overpriced, especially in light of the free (or pay-once) offerings out there.

I mention this only because the blogosphere can’t seem to contain its enthusiam about it (indeed, I borrowed this title from 37signals’ recent post, Crazyegg = crazy good), but no one ever mentions the price, and, well, the prices are ridiculous.

As far as I can tell, the service offers three basic things, which are all just different presentations of the same click data: Overlay, List, and Heatmap. The “heatmap” feature is what has really set the blogosphere on fire, but is this one simple view worth $20-$100 a month? Does it really add anything to the “overlay” view, which is already available for free through Google Analytics? Does it look cool? Of course, and I’d love to use it myself, but I’ll be damned if I’m going to pay $50/mo (more than twice my actual webhosting costs) to get a pretty picture, whose ultimate significance can be derived for free from other services. Let me reiterate: save the pretty picture, this service offers nothing new. Moreover, with a little work, you can actually create a very similar picture for free, and I don’t think it’s going to be too long before someone creates a Pepper for Mint to accomplish the same.

If I’m wrong about this and/or have missed something, please correct me. I understand they are offering something somewhat innovative and their no-setup, everything-is-done-on-our-end approach will appeal to some people, but a high monthly cost for something that does so very little just doesn’t sit too well with me and I’m curious to know why no one else has taken issue with this aspect of the service.

It’s time to do that whole “adult” thing

Last week marked my first as an associate at Kenyon & Kenyon, the IP firm I worked for last summer and through part of my final year of law school. The two previous months — those spent doing basically whatever I wanted — have been great and have really allowed me to relax (to the extent I’m capable of doing such a thing), and though the thought of the bar was never completely erased from my mind, I was able to keep it at bay in the extreme recesses of my consciousness most of the time.

I’ve a feeling things at the firm are going to pick up rather quickly for me and so the bandwidth I usually allot to this site and other semi-related projects may be throttled somewhat. I’ll find a way to balance it all, I always do, but there’s no question that some non-work things are going to get pushed back. I have to find a way to convince myself that some things can wait, that the world isn’t going to end if I don’t do this or that immediately. Wish me luck.


In other news, I’m actually working on an “about” page for this site. I know, I know, I’ve existed here at this address in some form or another for seven years and should have made a who-the-hell-are-you page a long time ago (especially given my fastidiousness with regard to every other aspect of the site), but, for myriad reasons, I was never too keen on trying to sum up me or my life in two or three paragraphs. In any event, I feel the time has finally come that I put together such a page, one that hopefully complements the tour and works to shed some much needed light on yours truly.

OCD, the key to defeating terrorism?

One of my best friends is finally considering consolidating, organizing, labeling, and otherwise obsessing over his photography collection, which now spans 22GB, and this was at the bottom of a rather long e-mail he sent me yesterday regarding the same:

I figure if anybody knows the best way to approach this, it’s you. You seem to understand how to create these personal data management systems better than anybody I’ve ever seen. This might be a fun write up for your website too: a friend with serious data management issues applies your personal systems to his own life, becomes safe and happy, and the terrorists lose.

Just doing my part.

Footnotes, Textpander, and shell scripts

A while back I wrote a rather well-received piece on how to create footnotes with unique anchors using Textpander. Not long after writing that post, the author of Textpander sold the application and dropped its donationware pricing model — it’s now known as TextExpander and costs $30. That said, the older versions continued to work just fine as long as you didn’t “upgrade,” and I wasn’t required to upgrade until I moved to my new Mac Pro last week.

Though it’s likely I’ll eventually pony up and pay the rather high admission price — it’s great software — I’ve just quickly whipped up the following shell script to hold me over in the interim (at least as far as footnotes are concerned). Realize that it’s been broken up a bit so as to not cause IE to render it improperly (grr!).

#!/bin/sh

dateid=$(date +%m%d%y)

echo 
echo Footnote reference:
echo 
echo <sup id=\r1-$dateid\><a href=\#f1-$dateid\>1</a></sup>
echo 
echo 
echo Footnote:
echo 
echo <div class=\footnotes\>
echo <hr />
echo <ol>
echo <li id=\f1-$dateid\>
echo <p>FOOTNOTE <a href=\#r1-$dateid\>&uarr;</a></p>
echo </li>
echo </ol>
echo </div>

Is this as elegant? Of course not. Does it do the trick? Absolutely. Well, kinda. I may try to come up with some funky Quicksilver voodoo to have this script launched from a QS trigger and the output copied to the clipboard, but probably not before I actually end up buying TextExpander.

An Inconvenient Truth

An Inconvenient Truth

Go to the official site.

Search for showtimes near you.

Buy the DVD.

Well, what are you waiting for?

LOST

Lost has to be one of my favorite TV shows of all time. Yes, it can be annoying. Yes, it can be evilly slow. Yes, its twists and turns can make me want to throw up, but there’s no question that it keeps me engaged. We just finished the final DVD of season two last night,1 and the thought of season three, which starts in early October, has me positively salivating.

I think it’s safe to say that no program has ever caused me to question so much. Every ten seconds I blurt out, “What the hell was that?,” or, “Maybe…” — it’s all quite fun. Frustrating, but fun. Though I’ve done pretty well with my guesses, I’ve definitely had my fair share of misses, and I think that, more than anything, is what keeps me interested. I really can’t wait to see how it all ties together, but given that the show sometimes moves at a snail’s pace, it may take the producers half a decade to sort everything out.

When I can find a free second I’m going to dive into some of the crazy fan sites to see what others have figured out and where they think the show is headed.


  1. I originally started recording the first season on my TiVo, but after it hiccuped a few times and failed to record the show, I just kind of gave up (there’s no question that those first few episodes were slow slow slow). Then, my girlfriend decided she wanted to start watching it and so when she Netflix’d it I tagged along.   

Remove those trailing slashes from your URIs

Though I made the move a few years ago to future-proof everything on this site (and have already discussed that process in way too much detail here), I’ve never really talked about how I remove trailing slashes from my URIs (e.g., using /projects instead of /projects/). There really is no legitimate technical reason for this, I just think it looks better, and I recently received an e-mail asking how I do it, and so, as usual, I thought I’d explain it here.

I should point out that if you use WordPress, this method will not prevent you from having files (minus the extension) and directories of the same name (i.e., /projects.php and /projects/whatever can still work together).1

I don’t currently use the “default” WP .htaccess rules (remember, I work outside of its theme system), but instead have a single RewriteRule that handles all of my archives (yearly, monthly, and individual). That said, my best guess is that the following rules, if placed above the WP-created rules in your .htaccess file, will work just fine with a default install. Let me know if you have any trouble.

RewriteCond %{REQUEST_FILENAME}.php -f
RewriteCond %{REQUEST_URI} !/$
RewriteRule (.*) $1\.php [L]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]

These rules accomplish a couple of things, and I’m going to use my gadget page to illustrate them. First of all, this page exists on my server as /gadgets.php, however, when I point to it with /gadgets, the above .htaccess rules tack on the .php extension (behind the scenes) and give it back to the browser as if it were originally called as /gadgets.php, all while leaving the URI intact (i.e., it doesn’t add the extension to the actual address).

Second of all, if I were to link to the gadget page with /gadgets/ (as myself and others have done in years past) and there wasn’t a true directory named “gadgets,” the rules would remove the slash (both in the address and behind the scenes), tack on the .php extension (behind the scenes), and process it as gadgets.php. To see this, simply go to the gadget page, which you’ll notice is linked to here with the trailing slash; you’ll see that the slash is removed, no file extension is added, and the page is ultimately processed as it should be.


  1. Not sure if this would work quite right with Movable Type’s dynamic publishing option.   

Mac Pro? Yes please!

I finally gave into fate and picked up a Mac Pro, which is pretty much the fastest desktop money can buy right now. What can I say? I mean really. It’s so freakin’ awesome I can’t see straight — it’s a safe bet that I’m going to be on a “nerd high” (the girlfriend’s term for my, uhh, excitement) for quite some time.

When four processors isn’t enough

While this little brushed aluminum Ferrari has more horsepower than I’ll likely ever be able to use (I don’t yet do much with DV), if ever the time comes that I need to simulate the effects of global warming or predict where the next hurricane is headed, the upgrade possibilities of this machine should have me covered. As AnandTech recently announced, they’ve been able to get Intel’s as-yet-unreleased, quad-core “Clovertown” chip to play nice with the Mac Pro right out of the box: “We grabbed a pair of 2.4GHz Clovertown samples [that’s 8 cores] and tossed them in the system, and to our pleasure, they worked just fine.” Umm, yah.  :)

The migration was seamless

The transference of data from my old PowerBook G4 to the new machine could not have been easier:

  1. Boot the new machine.
  2. Use Firewire to connect the new machine to the old machine.
  3. Boot the old machine into “target” disk mode.
  4. Transfer everything.
  5. Reboot the new machine and voilà, it’s like I never left the old one (except for that whole speed thing).
  6. Change the name of the disk on the new machine to match that of the old machine.
  7. Start SuperDuper! and let it sync with the external drive I use to mirror my Mac each night.

Poll: Quicksilver, the greatest Mac app ever?

Update: This poll has been closed. Thanks for participating.

I can barely imagine how I ever got along without Blacktree’s brilliant application at my fingertips and so it’s probably pretty easy to guess which way my vote would go here. I’m pretty sure I know which answer is going to win out, but I figured I’d ask anyway.

Is Quicksilver the greatest Mac app of all time?

  • Yes! (37%)
  • No! (12%)
  • I’d probably say yes if I understood it better. (20%)
  • I thought Quicksilver was a clothing company? (31%)

Pondering a move back to Movable Type (3)

Please read part one and part two before reading the rest of this post.

Let me first point out that a lot of people have written to me about the two previous posts in this ‘series’ and it seems many of them are in the same boat as me and are thinking about maybe coming back to MT. While the reasons for wanting to switch again vary wildly, I’m definitely not alone.

At the tail end of the previous post I said the following:

Basically, I just don’t think that DreamHost, my current webhost, will give me the CPU time I need to rebuild the entire site (at least not without using MT’s dynamic PHP publishing system on my archives, which goes against the idea of keeping everything static, something I may or may not want to do again), and this could be a very big problem should I ultimately decide to move back to MT.

I’ve yet to bring it up publicly, but this little series of posts has kind of put my back up against a wall and instead of explaining in-depth the issues I’ve had with DreamHost as of late, I encourage you to check out Mike Davidson’s post on the matter (aptly titled “Thoughts on the DreamHost meltdown”). As he points out, he makes around $30,000(!) a year in referrer fees from DreamHost, and while I don’t make nearly that much, I have pulled in a pretty respectable amount from them and so it is with much hesitation that I dare say anything less than flattering about their service.

I agree with just about everything Mike says, including the update on the DH situation, where he remarks, “After an unusual and unfortunate two-month span of questionable performance, Dreamhost appears to be back to its previous levels of reliability for me.” That said, the fact that the default, static version of MT is essentially unusable on their machines doesn’t sit too well with me. I understand that MT can be a resource hog when doing a full rebuild of a large website, but this is something that must be done from time to time and so the server should allow it unless your aggregate CPU time for the day starts to inch over the threshold set for your particular account.1

I’ve a hunch DH is monitoring any process that uses the mt.cgi file (MT’s “engine”) and is killing it after a certain amount of CPU time, a certain small amount, is spent on it. I say this because almost every time I try to rebuild, no matter the number of entries, it gives me generic “internal server” errors.

For those unfamiliar with how MT works, the long and short of it is that it uses templates (individual archives, indexes, etc.) to create static (X)HTML pages that are saved as such on the server. While MT now gives you the option of building pages dynamically (a combination of this and static files will probably be what I ultimately use if I end up switching back to MT), this doesn’t really concern me at this juncture. I’m interested in the fact that I can’t rebuild my website. I mentioned in the previous post that importing all of my entries at once (nearly 1000 of them) was a no go as MT told me the file was too large. To get around that I broke the file up into smaller pieces. I tried to do the same with the rebuild. I selected 125 posts. It broke. I selected 75 posts. It broke. 50. It broke. 25. It worked about every third time. Sometimes just rebuilding a single template or post would cause the server to return a 404 error (not found) on the mt.cgi file. Huh?

Obviously, then, there is just no way to run MT on DH without the dynamic publishing turned on (at least for the archives). If you’re using MT to run a 1000+ post weblog on DH and are not using dynamic publishing, I’d love to hear from you; I’ve many questions to ask. I’d also like to hear from you if you’ve got a hosting recommendation. I realize nothing out there is going to compete with DH on disk space and bandwidth, and it will be hard to give up the nightly syncing of all my photos (discussed in the last section of this post), not to mention the referrer money mentioned above, but I would like to at least have a solid backup plan should I eventually decide to leave DH (it’s unlikely, but…).

Should I really attempt the move?

Probably not. Will I? Yah, probably. I’m in too deep now to stop myself. Like I said before, I’m just kind of bored and want to peek under the hood of MT to see what’s changed since I left. I can’t help it.

What’s left to do?

Hrm. Where to begin? As I said in the initial post:

I think part of me just wants to see if this can be done [relatively quickly]. My WP setup is a very customized one, far removed from the theme system most people use and rife with hacks, workarounds, and one-off plugins (most of which I’ve never released). It will be interesting to see if I can achieve the same with MT.

The following is what’s currently floating around in my head regarding things that need to be done.

  • Clean up all of the HTML entity stuff that got a little mangled from the initial export/import and then install SmartyPants (though it would seem a bit superfluous given that I run SmaryPants + Markdown locally through TextMate as I type up my posts).
  • Fix my categories (see next section).
  • Create a completely separate weblog for the bits.
  • Come up with a way to interlace the index page with both regular posts and bits (the same as I currently do now with WP). It seems to me that the MultiBlog plugin is exactly what I need; the documentation is a bit wanting, but I’m sure I can figure it out by looking at the code.
  • Get all of my crazy .htaccess rules to play nice with the rules required by MT for its dynamic publishing (if I ultimately go that route, and I may be forced to).
  • Get all of my templates how I want them. This is going to take a while and will involve creating a ton of MT modules that will probably be structured very similarly to the PHP “modules” I currently use in my WP templates.
  • Come up with an archives system similar to that produced by my Smart Archives plugin for WP. Ironically, this plugin was actually modeled after something I initially did for Movable Type, though the MT thing was much simpler.
  • Implement some code I wrote for MT way back when to do relative dates (I also wrote a WP plugin to accomplish the same). I’ve noticed that MT now has relative dates built into the system, but it looks like they only go back a week. I’ll have to change that.
  • I haven’t looked into MT’s public search routine at all, but I might have to change some things regarding that as well, especially if it’s as limited as WP’s, but I highly doubt that.
  • [Hopefully] find a plugin that uses full-text indexing to locate posts that are ‘related’ to other posts.
  • Get all of my permalink URIs to match up with those created by WP. Oh wait, MT no longer requires you to specify an extension and now lets you use hyphens instead of underscores to separate words.  :)  In years past this could only be accomplished with a few plugins and some ingenuity (see Future-proof your URIs). Also, since I’m keeping the hyphens, there’s no need to create .htaccess rules for every single post, something I had to do when initially moving to WP (see Maintaining URIs between Movable Type and WordPress).

OK, so this list is getting out of control. I can think of 20 more things to add, but I’m going to stop myself as this post is already 10x longer than it should be.

Another note about importing

I went into detail in the last post about the trouble with importing, but failed to mention the issue of categories. The WP plugin I linked to in that post (and, subsequently, my modified version) doesn’t handle categories too well. In fact, it barely handles them at all. The problem is two-fold.

First of all, the MT import format accepts both a “primary” category and multiple sub-categories. The export plugin only accounts for sub-categories and doesn’t create a primary category element at all, but it seems that MT falls back to that anyway if no primary is specified; in other words, when no primary is given it uses the first sub-category it sees for that post as the primary category.

Second of all, I use categories fairly sparingly and don’t currently use sub-categories at all. I use one category to separate the bits from the regular posts (so that I can style them differently on the index and individual archive pages), one for the posts linked to on the bottom of the projects page, and one to specify what should be displayed on the tour. As it stands now, the export plugin only creates a single sub-category entry in the export file and fills it with the first category it finds in the database for that particular post.

The problem then, is that posts in multiple categories (e.g., a single post that is on both the tour page and the project page) lose all but one of their categories in the move, which puts me in the position of having to add those categories back in the MT system.

Two solutions

One option would be to rewrite the category routine of the WP export plugin to account for multiple categories and to place them in the format MT likes. While certainly doable, it may be a bit more trouble for me than it’s worth in light of my sparing use of categories.

It might actually be easier for me to simply re-categorize the posts. In WP my bits and regular posts are part of the same weblog (I just style them differently), but in MT I think I’ll probably want them to be separate weblogs entirely (and I’ll just splice them together on the main page). Given that the posts in my bits category are in that category alone (i.e., not General and bits), I can simply pull up those posts in the General category and delete them. Then, I can export from MT and save that file as my bits (already in an importable format).

After that’s done, I’ll re-import the original export file and then filter for the bits this time. After deleting those posts I’m left with my regular entries, which I can then further categorize/tag for the tour and project pages (this can be done simply by eyeballing those pages as they are now and checking off the respective posts).

Is there anything left to say?

There’s always more to say.  :)  However, if there is a part four to this series it will likely be a comparison of the two systems (something I’ve been requested to write by more than a few people looking to break into this whole weblogging thing) and not so much a line-by-line transcription of what I’ve done or am planning to do regarding the possible migration.


  1. My experience with their processor restrictions is somewhat limited. The only time I’ve ever had trouble with CPU time was when I used to have a public referrers page, which was getting spammed to all hell. After locating the problem, removing the public referrers, and setting up some .htaccess rules to keep the spammers from causing every hit to be routed through WP’s system, the problem was resolved and DH stopped sending me automated e-mails telling me that I was over my processor quota.    

Pondering a move back to Movable Type (2)

Please read part one before reading the rest of this post.

Well, my half-hearted attempt at fooling around with Movable Type again didn’t go too smoothly. The install was of course not an issue, but moving my entries over from WordPress most definitely was. I did actually get them moved over, but not without a lot of hassle.

Before I go further, I have to make note of the fact that importing/exporting between these systems (or any CMS-like system) is not yet standardized. Hell, it’s almost like both pretend the other doesn’t exist. I’m not ignorant of the pressures upon one system to not create an importer for other systems (competition, etc.), but at some point these companies just have suck it up and make it easy to share data between them. It’s ridiculous. Wasn’t XML supposed to swoop in and fix all this mess? Yes, but the magic potion can’t work without an element called cooperation.

Getting the data into the right format

Movable Type makes it fairly easy to import entries from other systems by specifying a format for your posts that MT can understand and ultimately import. However, neither MT nor WP has an application to create the importable file from a WP installation. I’m still on the fence about whom the onus is on to create the “exporter,” the importee or the importer, but, like I said above, someone just needs to step up and be the bigger man about all of this. It’s not like any of it is rocket science.

I eventually stumbled upon a WP plugin that could put my WP data into an importable format. However, it broke and I’m not quite sure why. After hacking up the MT.php file within this package, I eventually got it to create a usable file that took into account both the fact that I don’t use comments at all on my site and that I do use the “excerpt” field for my “bits” posts. There was also some code that stripped <br /> tags from posts and comments; I removed this.

If you’ve run into similar trouble, e-mail me and I’ll send you my hacked file.

Importing the data into MT

After getting all of my posts exported to a usable file, I thought I was money. Eh, not so much. The MT import/export panel offers you two ways to import your file, but both of them failed for me. The first lets you upload the file from your local machine and the second allows you to put the file on the webserver and have MT pick it up from there. Both of these methods reported back to me that the file was too large. To be sure, I have a lot of posts (600+ regular posts and 200+ bits), about 1.5MB total, but I don’t use comments at all and I know plenty of people who’ve many more entries than I.

OK, so, whatever, the file is too large. No problem. I just broke it up into fourths and from there the import went off without a hitch. However, there was just one more problem. I noticed that my basenames (i.e., the text, based off the title of each post, used to create the tail end of each post’s permalink) were being clipped at 40 characters. After finding this new “feature” and increasing the number to 250 so that the basenames wouldn’t be clipped at all, I realized that the change isn’t immediately made to all the posts, and only applies to those entries created after the variable is increased. You have to re-import all of your entries for that change to take effect. So, I had to drop all the MySQL tables (to keep the ids as close to the number of posts as possible) and then go through the import process again. Ugh.

Now what?

I’m kind of stuck to be honest. I’ll delve into this a little more deeply in part three, to come soon. Basically, I just don’t think that DreamHost, my current webhost, will give me the CPU time I need to rebuild the entire site (at least not without using MT’s dynamic PHP publishing system on my archives, which goes against the idea of keeping everything static, something I may or may not want to do again), and this could be a very big problem should I ultimately decide to move back to MT.

Nike + iPod

I’m not going to spend a lot of time on this, but I will say, as matter-of-factly as I can, that the whole Nike + iPod system is awesome. I got my kit (along with a new pair of Nike+ shoes) about a week ago and have been very impressed.

There’s really no setup — just put the transmitter in the left shoe (or hack it to your shoe if you didn’t get a pair of Nike+ shoes) and plug the receiver into the iPod. Done.

One of my favorite things about the system is the voice feedback, which is activated whenever you press the iPod’s center button; it dims your music and tells you how long you’ve been running, how far you’ve gone, and your average pace (click the “voice feedback” link on this page to hear what I’m talking about).

Another thing that kind of blew me away was the Nike+ website that aggregates all of your data and spits it back to you through beautiful, meaningful graphs and charts. You can see a demo of the whole system by going to the site, clicking on “My Runs,” and then clicking on “Preview Nike+ runs now.”

I can highly recommend this product if you’ve already got a nano and like to run.

Pondering a move back to Movable Type

I don’t know if it’s boredom or what, but for whatever reason I’ve been thinking a lot lately about moving back to Movable Type. Don’t get it twisted — I love WordPress and have contributed quite a bit to the community, it’s just that, well, I feel something is missing. I can’t quite put my finger on it, but WP has always felt a bit ‘shaky’ to me and I kind of want to see what MT has cobbled together in my absence.

When I first mentioned that I was abandoning MT for WordPress, Anil Dash, now the VP of Professional Products at Six Apart, the company behind MT, e-mailed me to thank me for the contributions I’d made to the MT community and to ask why I was leaving and what they could change to make the product better. Looking back at my responses, it’s funny to see how much they mirror my feelings today, even though I’m contemplating a move in the opposite direction. An excerpt from one of my replies: “There wasn’t, per se, anything wrong with it. The time had simply come for me to try something else — I’d become bored I guess.”

The challenge

I think part of me just wants to see if this can be done. My WP setup is a very customized one, far removed from the theme system most people use and rife with hacks, workarounds, and one-off plugins (most of which I’ve never released). It will be interesting to see if I can achieve the same with MT. If it turns out to be more trouble than it’s worth, I’ll likely just give up altogether.

I’ll probably install the latest version of MT later today and play around with it some. Hell, I might even try to move all of my entries over just to see how it goes.

Old school

A good friend of mine from college flew out here a few days ago to visit myself and another undergrad buddy of ours who now lives here in Silicon Valley (we both move from Florida to California and end up 10 minutes apart; amazing how that happens). The three of us spent the weekend in San Francisco and had a great time doing what old college buddies do — drinking and making fun of each other (my specialty).

Anyway, I just wanted to explain why, especially to those who’ve been waiting on an e-mail reply from me since I returned from the cruise, I’ve been mostly MIA for the last few days; I promise I’m rifling through the queue as fast as possible.  :)