- air
- ajax
- algorithm
- apple
- bitbucket
- braintapper_exchange
- charts
- chumby
- codeigniter
- cognos
- complexity
- crashplan
- crosstab
- dash
- dashboard
- date
- dbvisualizer
- decisions
- dimension
- dogfood
- dona_wong
- dropbox
- edward_tufte
- extension
- feature_checklists
- feature_excellence
- filemaker
- firefox
- firewall
- flot
- flowing_data
- fogbugz
- football
- free
- freenas
- freshbooks
- git
- github
- gm
- google_charts
- iPad
- javascript
- jdbc
- jedox
- mac
- macbook
- maps
- marsedit
- mercurial
- metaweblog
- metrics
- microstrategy
- monowall
- moo
- nathan_yau
- news
- nosql
- open_source
- palo
- pentaho
- pfsense
- printing
- programmers_interfaces
- rapidweaver
- regex
- regexr
- rest
- safari
- smoothwall
- sony
- sqlpower
- stackoverflow
- statistics
- stephen_few
- svg
- tablet
- ticket_agent
- time_machine
- tip
- tm1
- transformer
- trick
- typographic grid
- usability
- visualization
- vmware
- w3c
- web
- wiki
- wikkawiki
- work_management
- wsj
After a little hand wringing caused by differences between my development environment and my hosted environment, the new site and blog are finally up!
While the most visible changes are in the template, this 2.0 upgrade actually involved significant changes behind the scenes.
The Blog upgrade was necessitated by an impending closure of the Blogger FTP service, which is what I was using to publish content to the blog. This meant that a migration to another system was inevitable. That the service was being dropped presented a major challenge, because all existing links would break, because of the naming and folder structure used by the Blogger publishing system.
Examples of the types of URLs that had to remain intact:
- atom.xml
- 2010_01_01_archive.html
- labels/labelname.html
- 2010/01/permalink.html
There were a couple of ways I could address this:
- Leave the published files intact while integrating a new content management system.
- Roll my own content management system.
Customizing an existing CMS (Wordpress, Movable Type, Textpattern) to what I needed would have taken more time than it would have to roll my own simple content management system in CodeIgniter.
That doesn't sound realistic, since writing a CMS can get quite involved. Because I use MarsEdit as my blogging tool, however, I didn't need to write an administration module. All I needed to do was build two things:
- An output mechanism for dumping content
- An input mechanism (XML/RPC) to interface with MarsEdit
The first part was easy. I moved my old content using Blogger's export system and used Pentaho Data Integration to move them into a super simple, 4 table database schema.
The second part was a little involved, maybe a day of work. I had to implement the Metaweblog API. CodeIgniter offers a core XML/RPC server library. I used that as a starting point, and then cheated by using the Template Parser library in CodeIgniter to spit out the XML that MarsEdit needed. If I had to use the XML/RPC server "properly", it probably would have doubled the effort.
Finally, to ensure that the old URLs continued to work (a lot of my hits come from Google Searches and Bit.ly), I used the routing functionality of CodeIgniter to mimic the old directory structure.
Ironically, for the full braintapper.com web site, I dropped the existing CodeIgniter code base and moved to RapidWeaver instead. I had already purchased a license for it, and figured I may as well use it, since the main site content is much more static than the blog.
