First off I wanted to be sure I had good backups, because Murphy and I go way back. I host this site on DreamHost, and used their One-Click Installer option to set up WP originally. Because of this, I was able to upgrade with the One-Click Installer, which offers automatic backup of the entire WP directory tree, including your plugins, themes, etc. The whole tree is copied to a .old directory before any changes are made. Excellent. That only left backing up the database.
WordPress uses MySql , and there are a number of ways to backup a MySql database. Because my hosting account includes shell access (all DreamHost accounts do), I just did a full dump from the command line, which is dead simple and wicked fast:
mysqldump --opt -p -uMySqlUsername -h MySqlServername MyDBName > backup.sql
Note that while many resources will tell you to include you password in the above command by replacing -p with -pMySqlSecretPassword, this is a security risk on any system with more than one user. Don’t do it. Instead, just use -p, and mysqldump will prompt you for your password. The resulting backup.sql is a sql script that you can feed directly to mysql, which will recreate your entire database, data and all. Very nice.
So, precautions properly taken, I asked the One-Click installer to upgrade me. A couple of minutes later, I got an email telling me that my upgrade was successful, and instructing me to follow a link to a special page in my site’s Admin area that would complete the upgrade by updating my database structure. Which is when things took a turn for the worse.
The update database page would not load. The admin login screen would not load. The blog would not load. Half a dimension away, Murphy giggled maniacally as he enforced his Law. Jerk.
The error message indicated that one of my plugins was attempting to redefine a function already defined in one of the core WordPress files. Oops. I’ll just skip ahead here to something I learned after some quality time on The Google: It is recommended that you disable all plugins before upgrading from a pre-2.5 install to 2.5.x. Oops. Annoyingly (but perhaps predictably), the only way to disable a plugin is via the Admin interface. You know, the one that didn’t load. Oops.
Fast-forwards 20 minutes of increasingly irritated Googling, and I had learned that there is an entry in the MySql table wp_options named active_plugins (i.e., where option_name = 'active_plugins'). If you set the option_value field of this row to an empty string, all plugins are disabled. That was enough to let me access the Update Database page, complete the upgrade, and use the Admin interface.
Of course, the blog was still broken, because my theme templates rely on certain functions exposed by various plugins. I proceeded to turn on plugins one at a time, based on the error messages I saw, until things were working. The only problem I ran into was UltimateTagWarrior, which is no longer supported, as of WordPress 2.3. Shutup, Murphy.
The solution was not difficult, although it required a little more Googling than I expected. UTW was discontinued because WP got built-in tagging support in WP 2.3 (I believe). However, anyone who used UTW had theme templates containing calls to UTW-specific functions. In addition, UTW offered a number of tag display options not offered by the core WP install. So the plugin’s author Christine introduced a new plugin, UTW Theme Compatibility Thing, which offers all of the old UTW template functions, but uses WP’s native tagging system as the data source. Once I installed and activated that, everything worked, except that I had no tags on my posts. (Note: If you used icons with your tags, as I do, be sure to check the instructions on the Compatibility Thing wab page or the readme file; there are a couple of extra steps required to make them work.)
This turned out to be an easy fix as well, after more time on The Google. WordPress already includes a tool to convert UTW tags to WP tags. From the Manage tab of the Dashboard, choose Import, and then choose Ultimate Tag Warrior. Five clicks through the wizard later, and you’re all done.
As far as I can tell, everything is working now. If you have any problems using the site, or see anything funny, please drop me an email or a comment.
So far, I really like the new WordPress, and I’m looking forward to trying out the new image uploader and the Gallery. My only complaint so far is that the page preview has been moved out of the Write Post page; you now click to pop open a preview. Do not want. I’ll give it a couple of days to grow on me, and them I’m going to start looking for a plugin to add integrated preview to the Write page.
]]>Over the past couple of years, this interest has been renewed as I’ve been reading up on microcontrollers and hobby robotics. Bill Bumgarner’s recent posts about experimenting with AVR microcontrollers and the EMSL AtmegaXX8 Target Board have inspired me to make some time to tinker. While I have done some experimenting with AVRs using the 20.00 USD Atmel Butterfly recently, I decided to haul out the Parallax Boe-Bot I purchased a couple of years ago, and never got around to playing with.
I bought the Boe-Bot because I caught a great deal from Micro Center. Parallax sells the Boe-Bot for 159.95 USD, and you can often find them for sale for about 20 bucks less. I picked mine up for 49.00 USD, which is the Parallax list price for just the BASIC Stamp BS2 Microcontroller included with the kit. The kit also includes 2 Parallax Continuous Rotation Servos, which are actually Futaba S148 Standard Precision Servos which have already been modified for continuous rotation. Parallax sells them for 12.95 USD a piece, which is a good price on these servos, and an even better deal as they are already modified.
In spite of the good deal, I did have some reservations. As a matter of personal preference (and perhaps, programmer’s ego), I would prefer to program the microcontroller directly in C. I believe this provides the most flexibility on limited hardware, as well as the greatest opportunity for learning as I go. This is the primary reason why I avoided the open-source, AVR-based Arduino platform popularized by Make Magazine- the Arduino is programmed in a custom programming language. (Update: In the comments, David A. Mellis explains that the Arduino is programmed in C/C++, and that the Arduino language is a set of helper functions. I sense a purchase in the offing!) The BASIC Stamp 2 used in the Boe-Bot is programmed using Parallax’s custom variant of BASIC called PBASIC. While there are BASIC Stamp clones available from other manufacturers that are programmed with PBASIC variants, much of the details of programming in PBASIC is not directly translatable to the kinds of chips I am interested in, such as the AVR.
Another concern about the Stamp is licensing. While looking for information on programming the Stamp via Linux (Parallax only supplies Windows software), I found the following commentary in a reply to a question on the Ubuntu Forums about using the BStamp tools for Linux (more on this in an upcoming post.):
The package is apparently using two licenses, GNU for the volunteered portion, and PBASIC license. PBASIC Tokenizer Library software is used with hardware that is sold by Parallax. The license to redistribute any programs written is very restrictive, including requiring a driver’s license, and written agreement in the possession of Parallax, and subject to revokations including those mentioned within that package. The source for the library is not provided, and the library file is stripped. It is only useful with their hardware.
When working on personal projects, I prefer to use open source software whenever possible, to allow for the greatest flexibility should I wish to change the software or redistribute my work, but I do not object to closed-sourced software on moral grounds; open source is simply a better value for me. In the case of the BASIC Stamp, I intend to use the Boe-Bot kit as an inexpensive way to experiment with small scale robotics for my own enjoyment. At 49.95 USD, the pros outweigh the cons. If I decide to move on to custom designed projects, I will likely use an AVR or other inexpensive, more programmable microcontroller.
The Parallax line is not without its benefits as well. Parallax positions their products not only as hobbyist devices, but also as educational aides. The Boe-Bot kit includes a 340+ page spiral bound manual that explains much more than just construction (which only takes about 15 minutes). There are chapters on servo motors and how they work, robot navigation using dead reckoning, tactile navigation using physical touch sensors (implemented via metal “whiskers”, and non-tactile navigation using both visible light detection and infrared obstacle sensing. The text assumes little knowledge, and explains both the principle and implementation of these features. Most of the information learned from this course is directly applicable to other robotics projects, even if the PBASIC used to implement behaviors is not. If my son ever expresses an interest in microcontrollers or robotics, I will definitely start him with a Parallax kit.
While Parallax may exert strict control over the code to parse and compile PBASIC, they are far more open with their instructional texts. Their Stamps in Class line of kits (which includes the Boe-Bot) includes 9 distint products, which can be used in several progressions. All of the kits are built around the BASIC Stamp and the user’s choice of controller boards. Their are two controllers, the flagship Board of Education and the less expensive HomeWork Board (sold in 10 packs for schools). The starter kits- the Boe-Bot and “What is a Micrcontroller“- include a Board of Education; the other kits act as add-ons, combining a thorough text with additional parts needed to complete the projects and experiments in the books. Best of all, the books are not only available for sale separately, but they are all also available as free PDF downloads from the Parallax website. I’ve browsed several, and the quality appears as good as the Boe-Bot manual. This was a big part of my decision to grab the Boe-Bot when I saw it on sale. The book included with the industrial control kit includes a very good chapter on PID, or Proportional-Integral-Derivative control. This system is used not only in many industrial control scenarios, but also in two-wheeled self-balancing robots such as Larry Borello’s Gyrobot. (Note: After I started writing this post, I learned that the Industrial Control kit is discontinued. I do not know if it will be replaced with an updated version, but the latest manual is still available for download).
I have just begun to play around with the kit, and in truth, I am skimming some of the early material as I already have a firm grasp on the fundamentals of programming. I am also familiar with the basics of small robot design from other reading I have done. I can’t provide a full review as I have not worked my way through all of the material yet. I can say that I it is a well thought-out product and appears to provide a lot of learning opportunity for the beginning roboticist. I will post again in the near future with details on using the Boe-Bot (or other BASIC Stamp product) with Linux, and possibly on more on my experiences with the kit itself.
]]>I filed much later than usual this year. Due to some one-time income, I actually owed money instead of getting a refund this year, for the first time. While paying taxes is never fun, and paying more at tax time is even worse, this year’s tax-paying event was even worse than I anticipated, thanks to Turbo Tax.
I have been using Turbo Tax since at least 1997; possibly longer, but those are the oldest returns files I have. I used the PC version until a few years ago when I decommissioned my old Windows desktop, and I have used the Mac version since. I have always had a good experience with the program, and have recommended it to friends and family.
I cannot recommend the 2007 tax year version without reservations (I used the “Deluxe” version). The entire process felt less polished than in years past. There were a number of forms that I had to hunt down in “Forms Mode” because “Interview Mode” did not ask the right questions, or ignored some possibilities. There were a number of areas where questions were asked that I did not understand; unlike in previous years, the integrated help often did not explain the question thoroughly.
Admittedly, part of the issue may be that I owed taxes this year, and in general had a few details in my return that I haven’t dealt with before. It is possible that the overall quality has not changes, only that I have not used the parts of the program which are less polished in the past due to my filing situation. For example, I had to pay Alternative Minimum Tax this year (which is a whole ‘nother rant); the help and interview questions for the AMT were by far the worst I’ve seen in Turbo Tax. Maybe they have always sucked; I’ve not seen them before. Whatever the reason, the perceived quality of the product was much lower this year than in years past.
Ah, but I promised advice. If you have not completed and filed your returns, and if you are using Turbo Tax, I strongly recommend that you use the “Print for Review” option which is offered just before you finish e-filing. Review the printed pages (and there will be many) carefully. This may seem obvious, but don’t forget this step. You may find something that you didn’t see while using the program. I certainly did… based on my unusually high (one-time!) income, Turbo Tax was going to tell the IRS that I would be making estimated 2008 tax payments of over $3000, four times this year, on top of my paycheck withholding. Fortunately, I caught this when I printed, before I filed, and found the correct section of the interview to fix it. Apparently, the interview originally asked if I wanted to make estimated payments, and when I said no, it ran its own calculations and signed me up.
]]>]]>The idea behind this event is to promote Web Standards. Plain and simple. This includes proper use of (x)html, semantic markup, a good hierarchy structure, and of course, a good ‘ol play on words. It’s time to show off your
.
For example, I’ve never used Twitter. It has never struck me as a useful method of communication, and I don’t know anyone (personally) who uses it. It has remained on my radar; many of the bloggers I follow use it and often refer to it, and to “tweets” (twitter messages, for the uninitiated) they have received. It also comes up on a regular basis in the podcasts I listen to. Tonight, I decided to give it a try, if only to follow a few of the folks whose other works I read and listen to on a daily basis.
The Twitter sign up page is elegantly simple- three inputs, the obligatory CAPTCHA, yes-please-email-me checkbox (off by default!) and the submit button, which is labeled as an acceptance of the Terms of Service (omitting the need for a separate checkbox). Each input- username, password, email address- is clearly labeled, with brief help text alongside. What impressed me was the username text box. Below the text box appears the message “No spaces please.” As you begin to type your desired user name, the message is updated to read “That name has been taken. Please choose another.” or “Available!” As I typed, I was impressed - the messages took the guesswork out of choosing a username- a process which is often a pain on any site that requires a domain-specific unique ID. Especially annoying are those sites that clear the password field, or even the whole form, when they tell you that the username you want is already taken.
But all was not as it seemed. My old standbys “jason” and “jclark” both being taken, I tried “jclark.org”. “Available!” declaimed the help text. “Excellent!” I replied. Add a password, supply an email address, squint through a CAPTCHA and… Fail? The page refreshed. The password and email inputs were cleared. The CAPTCHA images were updated, and the CAPTCHA input cleared. The username was still filled in, but the help text now said “Username can only contain letters, numbers and ‘_’”. Wow, that would have been useful knowledge BEFORE I submitted the form. You know, back when you told me my choice was “Available!” in soothing green text. And why was the entire form cleared, forcing me to start over? Well, the entire form except the field that was invalid. That field was thoughtfully left populated.
In the space of 2 minutes, my very first interaction with Twitter went from very positive (simple form, sensible defaults, instant feedback) to very negative (misleading instant feedback, clearing of valid data). I don’t know if this will stop me from ever signing up for Twitter. It did stop me from signing up for it tonight.
]]>Paper Boy. For nearly three years, starting when I was 13, I was a morning paperboy. I’d get up every morning at 4:30 and head out to retrieve, fold, bag or band, and deliver anywhere from 50 to 100 papers, by bicycle. No wonder I hate mornings so. Every two weeks I’d go door to door, collecting (”I want my two dollars!”); nearly no one paid by mail. As much I hated the early mornings, I think I dreaded collecting even more, since it cut into my actual leisure time, such as it was. Still, collecting had its benefits. I made an effort to learn each customer’s preferences (in front of the door, inside the storm door, on the ledge next to the door, “stay off the grass”, etc.). In return, I made pretty good tips, and really cleaned up at Christmas. Wearing the Santa hat while collecting in December helped to remind everyone it was time for the Christmas tip, too.
Dish washer cum Burger Flipper. After years of early mornings, I was ready for a “real” job. The only real options in walking distance when I turned 16 (old enough for a job in Virginia at the time) were McDonald’s and Wendy’s. I worked at Wendy’s for about 4 months, which was plenty of time to realize that “real” jobs suck.
Retail Clerk/Shoe Salesman. When summer started, a friend got a job at Sears at the local mall, and told me they were hiring. At this point I was ready to never see another burger, much less flip one, so I applied. I was initially hired as a clerk in the Men’s department, but in a lucky break got promoted to shoes by the end of the summer. Lucky? Oh yeah… the Shoe department worked on commission.
TV Shopping Channel Order Entry Operator. “Thank you for calling QVC, my name is Jason. May I please have your item number?” Took this one over the summer during college. Boring, boring, boring, but eventually lead (after several other positions in the company) to my first job as a programmer.
Better Off Dead. Still my favorite John Cusack role. Best quote is a tie: “I want my two dollars!” (see number 1, above) and “Now that’s a real shame when folks be throwin’ away a perfectly good white boy like that.”
The Princess Bride. What a fun, funny movie. My favorite Mandy Patinkin role. Best quote is also a tie: “Hello! My name is Inigo Montoya! You killed my father! Prepare to die!” and “You keep using that word. I do not thin[k] it means what you thin[k] it means.”
Driving Miss Daisy. Morgan Freeman and Jessica Tandy are just fantastic in this film. This is one of those films I will stop and watch any time I find it while flipping channels.
Star Wars. Still a classic, and so much better than episodes 1 through 3. Best Quote: “I’ve got a bad feeling about this.”
Mt. Dessert Island, ME. Home to Bar Harbor, I’ve spent many vacations across the island in Southwest Harbor, where my father grew up. I beautiful place to visit, and I still have lots of family back there.
Outer Banks, NC. I’ve stayed in Nags Head, and Kitty Hawk, and this past summer we rented a house in Duck. I’m not a big fan of the beach like the rest of my family are, but there’s lots to do, and it’s not far from Virginia Beach & Portsmouth, where we have family. Kitty Hawk Kites is always fun place to visit.
Galveston, TX. We spent a long weekend in Galveston this past spring, looking for a warm weather beach destination we hadn’t visited that didn’t require passports, as the kids didn’t have them yet. The weather didn’t really cooperate, but we stayed at a very nice place with a heated pool that included in-pool bar/food service, so I can’t complain too much.
Niagra Falls, Ontario, Canada. Took the kids when they were younger. The falls are an impressive site, but the town is very much like a beach boardwalk, folded into about four square blocks. We had a nice time, but I wouldn’t recommend more than about three days’ stay.
And whilst ye be talkin’ as God and Davy Jones intended today, be sure not to walk th’ plank… Captain Zeldman, the old pirate, suggests a few utterances ye might should avoid.
]]>Want.
Of course, my hard drive is nearly full to bursting as it is. I’ve been idly considering an upgrade to a shiny new Intel Mac for early next year. I really don’t want to wait that long to grab Studio, but it’s not in the budget right now anyway.
But still. Want.
I know where my 100.00 USD iPhone gift certificate is going.
]]>All this was brought home to me again today. I had to visit the Apple store because my daughter’s MacBook has developed cracks in the case where the top lid meets the lower lid. After meeting with a genius (”No problem, we can fix that”), I decided to pick up a Belkin iPhone adapter- the one that lets you use any headphones with the specially recessed headphone port on the iPhone. The Apple store I was visiting is the older design- they still had a separate Genius Bar and Register area. While waiting in line to check out, a store associate wielding one of Apple’s hand-held checkout devices offered to complete my sale, if I was paying by credit card. Rather than wait, I agreed. When he asked me if I wanted a receipt by email or a hard copy, however, I opted for the hard copy. As quick as the handheld devices are, I didn’t want to wait while he picked out my email address on his on-screen keypad using the stylus. He swiped my credit card, retrieved my receipt (and a bag) from behind the Genius Bar, and I was on my way.
So imaging my surprise about an hour later when, upon checking my email on my iPhone, I discovered that the Apple store had emailed me my receipt. The only possible explanation is that they had saved my credit card info and the associated email address from a prior purchase (at another Apple store, no less) and used that information to send me a receipt anyway. It’s a good thing that my purchase wasn’t a gift, and that I don’t share an email account with anyone. And before you ask, they did not get my email address from my earlier Genius Bar visit. Beside dealing with different associates, I never gave out my email address- the MacBook in question is registered to my daughter.
Now, I understand that emailing a receipt is a convenience- both when checking out, when it allows staff to ring you up from anywhere in the store, no need for a printer, and for the customer, as a lost receipt is replaced by a quick trip to your email client. I also know that when I make a purchase via credit card, the merchant may store that number with my order; Internet retailers commonly keep it on file for later purchases. It still bothers me that a retailer would use my credit card info from this purchase as a lookup key to find earlier purchases, and then use that information to contact me with content I had already declined.
There’s no escaping this kind of data mining today, but it still bugs me. I think I may start carrying (and using) more cash.
]]>