How to undo bumps (or ‘unbump’) in phpbb

As you may have noticed, the SearchTempest forums use phpBB. Generally problems I’ve had with it are due to my own ignorance and today was no exception!

I was messing with the forum permissions, and I accidentally gave anonymous guest users the power to ‘bump’ topics. In phpbb, there’s a special function to bump a topic without having to post to it. Essentially it automatically updates the date of the latest post in that topic to the current time, so it appears as if it was just posted, and the topic moves to the top of the forum. (A little ‘Last bumped by [username]’ line appears at the bottom of the post, but I didn’t notice it at first.)

The problem is, apparently there are bots out there that will just go around bumping your posts like crazy if you let them. I’m not sure what they have to gain by this.. possibly just anarchy. Anyway, my temporarily lax user permissions resulted in a whole pile of topics from circa 2008 being bumped to present times. And since the bumping process actually changes the dates of the topic and its most recent post, there’s no easy way to just ‘unbump’ them. I didn’t relish the idea of manually going through my database editing the timestamps of tens or hundreds of posts, soooo I came up with a better solution.

(It probably took me just as long, but I learned some MySQL subtleties along the way, and now I can pass it along, in case anyone else runs into the same problem!) Without more ado, the code to automatically ‘unbump’ phpbb topics:

Read More

Transferring Large MySQL Databases with both MyISAM and InnoDB Tables

While setting up a development environment on my laptop, Nathan and I came across a bit of a problem: How do you transfer large databases in a way that a) works for databases with a mix of MyISAM and InnoDB tables, b) doesn’t take an eternity, and c) won’t wipe out any existing data on your server? After scouring forums and blog posts, I mixed a number of methods and came up with my own super awesome method! It’s pretty easy, and is much faster and more reliable than a straight MySQL dump:
  1. Copy database files from the old server to the new one. On the both servers, find your MySQL data directories. In WAMP, that directory is located at ‘WAMP\bin\mysql\mysql[version]\data\’. In MAMP, that directory is located at ‘MAMP/db/mysql/’ In LAMP, that directory is located at ‘LAMP/var/lib/mysql/’ Read More

iPhone/iPad/Android Awesomeness

After way too much effort, SearchTempest is now working quite well on all those platforms! For smartphones, it defaults to the Google-powered ‘All Cities Together’ tab on the results page, since this format requires less processing power. The iPad default is the same as in standard browsers though, where you get each craigslist city in a separate window. That said, both modes are now fully supported on phones and tablets running iOS or ‘droid though, so feel free to try ’em both! You’ll notice that instead of scrolling each city, as you would in a standard browser, you will just have to scroll the whole window. (If you like that, great! If you hate it.. sorry!) Basically, since these devices use touchscreens instead of mice and keyboards, their makers figured it would be difficult to scroll frames inside of windows. So instead they expand the frames to fit their contents, allowing you to just scroll the main site. (Of course, if you happen to be a web developer that can be kind of a pain in the butt, since 1) each phone and browser tends to do it in a slightly different way, and 2) frames expanding to fit contents you can’t control tends to wreck havoc on the design of your page in general… But fortunately only I have to worry about that. 😉 ) So! Enjoy the improved mobile compatibility, and of course, please comment or fire me an email if you notice any problems!

Multimedia Awesomeness

I started hearing the term ‘multimedia’ back in the 90’s. Now I think we may actually have it! One thing that I’m really enjoying about the Dragon Age saga at Bioware is their efforts at multimedia in the literal sense. Not content to just make fantastic computer games, they have also published several books in the Dragon Age world. Really good books too. I read a fair bit of fantasy, and these stood as fine examples independently from the games. Furthermore, they are planning what appears to be a potentially awesome miniseries, coming out this summer. I can only hope this kind of thinking catches on. Think of how much more fully we can explore a story, or a character, or a world, using all these forms of media than when we limit ourselves to only one! Plus it touches on a dilemma I sometimes encounter. I will be engaged in a particular story – say an engrossing novel, – but for whatever reason not in the mood for that particular medium. Maybe I’m feeling like a more immersive experience such as television, or perhaps I’m in the mood to actually take part as in a game. This sort of cross-platform storytelling gives the reader/viewer/player the ability, to some extent, to choose the story and the manner of experiencing it independently. Of course, in the Dragon Age example, each component is simply set in the same fantastical world; they don’t actually seamlessly carry on the same story at the will of the reader. But eventually, why not? Video games already use cut-scenes to tell parts of the story. What if those elements were decoupled somewhat? For example, a game could have an attached miniseries. You could watch episodes of the miniseries whenever you wished, interspersed with sessions playing the game. And the game would be aware of where you were in the series, adjusting itself accordingly. (The player character in the game would either be unaware of the events not yet seen in the series, or perhaps those events would not have yet occurred in the chronology of the game.) I’m sure there are interesting and entertaining ways this could be worked out. It wouldn’t be easy, but the result would be a form of entertainment and storytelling unlike anything we have today. OR, imagine cross-linked eBooks and audiobooks. You can already start a book on your kindle, then pick it up where you left off on your laptop or your iPhone. What if you could then get in your car, and keep on ‘reading’ in spoken form? That’d be awesome! (Honestly, I really hope this is on the way.. I can’t count the times I’ve wished I could keep reading my book while driving or folding laundry or whatever.) Although they better give you a break on the combined cost of the two formats! Guys, I love living in a time when technology offers all these incredible opportunities. 😀

The Ultimate Website Deployment Solution

Most basic websites tend to be deployed something like this:
  1. Write code
  2. Copy code to website hosting via FTP
  3. Refresh page to see latest changes
And.. that works. But it leaves much to be desired, both in terms of performance and convenience, for you and for your users. I’ll go over some of those issues here, then dive into a little more technical detail in an upcoming post (or posts..) So, here are some of the things we would like to add to the deployment process:
  1. Version Control! If you haven’t used version control before, go check out Subversion. I would also recommend the windows client TortoiseSVN. Honestly, version control has the potential to save your ass by allowing you to revert bad changes. The ability to compare current and past versions of files also makes it an invaluable development tool. Plus a million more things.

    As far as the auto-deployment utopia though, version control is key because it allows you to automatically pull the latest versions of files (or the latest stable versions if you prefer) directly to your production server. No hunting around for changed files and uploading via ftp. Plus, in the worst case, if the update breaks the live version of the site, you can easily revert to how it was before.

  2. Compression. One of the goals of good web development is of course to have pages load as quickly as possible. Yahoo offers a fantastic tool call YUI Compressor, which will compress (or minify) CSS and Javascript files to a fraction of their initial size, while maintaining full functionality. It does this by eliminating unnecessary whitespace, optionally renaming variables (in a consistent manner of course), cutting out redundant braces, etc. You obviously wouldn’t want to actually work on the files in this format, but doing it before making them live helps page loads and essentially costs nothing.

    Read More

Common CSS Problem – Header background cut off when page scrolled horizontally

Actually it can be any element, but it’s usually seen with header divs. For example, head over to facebook. Shrink your page down until a horizontal scrollbar appears, then scroll to the right. Notice that the blue background in the header is cut off. I’ve been noticing this on a few websites lately, but just today thought to check SearchTempest – and found that it had the same problem! Now fixed. The problem is that by default (or even by explicit css) these divs fill 100% of the width of their container. (For example, the page body.) This is good, because no matter how big the browser window is stretched, the div will stretch to fill it. Unfortunately, the 100% refers to the window width, so if the window is shrunk to less than the size of the content, it will be cut off when the page is scrolled horizontally. The solution? Fortunately, it’s simple. Just use the min-width property, and to set it equal to the fixed-width size of the content. My content is 960px wide, so by setting min-width=960px on the header div, I ensure that it is always at least that wide, even if the window is narrower. Of course, it still extended to 100% of the window size if that is wider than 960px. (If your content is variable width, just set the min-width of the header equal to the greatest min-width within the content – ie to the width at which the horizontal scrollbar appears.) Have a better solution? I’d love to hear about it in the comments!

Updated Help Files; new AutoTempest to be the best thing since the new SearchTempest :)

Actually, I’m going to go on record and say the new version of AutoTempest, due out this summer, will be better than the new SearchTempest released a few months ago. It’s going to be awesome, and I can’t wait until it’s ready to share! What I can share is a much-needed update of the AutoTempest FAQ/Help document. Not quite as exciting, but hopefully.. helpful!

Post craigslist ads with large image galleries using

I’ve just come across a sweet new tool that I know some of you will find use for. It’s called, and basically it’s the new, easy way to create attractive, HTML craigslist posts – complete with galleries of HD images. Imagine the attention your posts could get if they looked like this: (Click the picture to see the full-size sample.) They give you a few other formats to choose from too. Honestly, I don’t see any reason not to use this when posting on craigslist. Anything that makes your ad stand out will help it sell, right? Plus it’s super easy, and free. Click here if you want to learn more, or to give it a try! Hope you like it.

+1 This

SearchTempest is now sporting a flashy new +1 button, courtesy of Google. Learn all about it here. (Then head over to SearchTempest and click it.. 😉 ) Took the opportunity to improve the look of the Facebook like button too. (Almost up to 5000 likers there!) Granted, ways to share SearchTempest with your friends probably aren’t the most exciting news in the world, but I certainly appreciate it if you make use of them! The more people use it, the more resources I can put into making it awesome, after all.

The Internet is Down

It seems like my problems earlier today were symptomatic of something a fair bit larger. Several major sites (,,, perhaps others) are inaccessible by both ping and tracert. Equally strange, the tracerts all seem to fail at completely different locations. And I have tried originating them both from my development machine in Canada, and a remote server in California. (PS: If you know what I’m talking about, try your own tracert to and/or and post in the comments!) Even MORE strange, the websites themselves are accessible! I can pull up in a browser, or grab it with wget. But I can’t ping it?! Before today I would’ve said that’s impossible. If you’re an internet guru (or just know what’s up here), please enlighten me.