Skip to main content

Updating on the fly

I thought this was a moderately clever solution to a problem, so I thought I'd share it here.

A client wanted to add thumbnails for every entry on their huge movable-type powered blog site. They already had full-size pics for most posts, they just wanted a preview thumbnail version associated with each post for use in the xml feed, search results, etc.

This is a static movable type powered site with thousands of entries. The standard solution would be to create a new field using RightFields and store the filename of an image their, and then somehow go through all those thousands of entries and create thumbnails, then save the thumb filename in the new field. And do a full rebuild of the site.

This would work, but it was going to take forever!

The first thing to figure out was how to automatically create those thumbs. I knew that the first image in each post was the one to use, so it was pretty easy to set up a little php script that would find that image tag in the entry body, and then use imagemagick to create a thumbnail for it. I then had it save the thumb using the blog id number and the entry id number, into a special folder. This way each image for each post would have a unique file name, and I wouldn't have to mess with saving the filename into the database. The image is either there or it's not, and it's easy to check.

So I could at that point have just written a script to cycle through all the entries and create thumbs. I started to do so, but realized it wasn't going to solve the other part of the problem - how to keep it up to date. The client writes many new entries a day, so there needed to be some sort of automated way to create the thumbnail. A cron would work, except that obviously the new posts show up on immediately the homepage and on the xml feeds - which is exactly where the thumbs need to be. The cron would have to run like every minute, and look for entries in the last few minutes or something to create thumbs for. Still doable, but I thought there was a better way.

I decided to write a little php script that would check for the existence of a thumb, and if needed create it. I added this as an include at the bottom of the templates for the main index and the individual story archives. This way whenever a post is viewed, the thumbnail is created. The key is to make sure it looks for the thumb's existence, otherwise you'd have the system creating thumbs on every page view (multiple ones for the homepage!) which would not be a good thing for the server!

Now whenever a new entry is posted, as soon as someone sees it the thumb is created, and is available for use in the feeds and search results. Even better, their only created as needed, which cuts down on the load on the server - no need to have a cron running queries every minute or anything like that. It's also handy that if a change needs to be made to the format of the thumbnails, I can simply dump the ones that have been created so far, and the system will begin creating them again as needed!

Comments

Popular posts from this blog

Security Tips - Passwords and Logins

Passwords are something we all have to live with. There are other authentication methods slowly coming into use (i.e. two-factor) but it's hard to see passwords going away anytime soon. I assume everyone knows the basics - use "good" passwords, don't share them between sites, don't write them on a sticky note on your desk, don't save them in a file named "passwords.txt" on your computer, etc etc. That's all well and good, but there's so much more you can do! Good Passwords A "good" password is hard to guess, is what we're told. I think most people are unclear about what exactly "guess" means. These days, it means that it needs to be resistant to password cracking attacks that are getting ever more fast and sophisticated. Just making sure that you have numbers, characters, upper/lower case, etc isn't enough. The gold standard most important thing about a password is that it is long . The longer the better.

Another VI tip - using macros, an example

God I love VI. Well, actually, vim but whatever. Here's another reason why. Suppose you need to perform some repetitive task over and over, such as updating the copyright date in the footer of a static website. (Yes, yes I know you could do a javascript thing or whatever, just bear with me.) Of course you could just search and replace in some text editor, changing "2007" to "2008" (if you're stupid) - and you'll end up with a bunch of incorrect dates being changed, most likely. What you need to do is only change that date at the bottom. And suppose that because of the formatting, you can't use the "Copy" part of the string in a search replace - perhaps some of the pages use "©", some spell out "Copyright" etc. This is where vi macros come in handy. A macro in vi is exactly what you expect, it records your actions and allows you to play them back. To start recording, press q followed by a character to use to "stor

Debugging a DOS

I'm not a sysadmin, but I end up doing my best now and then when one of my sites gets into trouble. This is a sort of "after action report" of an incident that I just resolved (hopefully). I woke up and happened to check email on my phone (don't always do this, will now) and was greeted with a uptime robot email that one of my sites was down, and had been for about 4 hours. I quickly checked the site on my phone and yup, it wasn't loading. Ran to the office and hopped on my laptop. SSH to the server, and everything seems fine. Very little load on the server (AWS instance). Did a restart of apache/php/mysql and the site is still down. Weird. Running the site's index.php file on the command line works as expected and fast. Ask a few other people to check, and it's down for them. Then I logged into the AWS console and checked on status there - everything is up and running.... WTF? This is a lightsail instance, and then I noticed the outgoing network traffic h