File this one under the “nerd” category as this will be highly technical but I finally fixed the hotsync from my Treo 650 to my Mac. Hopefully this post will help anyone else grappling with the same issue and googling for the cryptic error message I was getting. The problem turned out to be multiple issues. First the background…
I had the bluetooth hotsync working under the Palm Desktop software and OS X for awhile but one day it just crapped out throwing the error message “unexpected error 71013.” It was seemingly a problem with the conduit since we could open the Hotsync manager but upon trying to open the conduit manager, nothing happened. I tried reinstalling the Palm Desktop software but ran into a strange issue where I couldn’t delete the old instance. Apparently the Palm installer installs the software as root rather than the administrator that it’s running under and I was getting the message “Cannot delete trash. Localized.rsrc in use.” It took a friend to show me how to go into the command line and navigate to this hidden trash folder under /users/root/Trashes to clear out the file in use. So we were able to get it back to square one with no Palm Desktop.
My friend Jay told me about an app called Missing Sync which supposedly would bypass the Palm software altogether and allow me to sync my contacts directly to the address book and my calendar to iCal (which was all I wanted). I bought the software (there is no free trial) and installed it per the readme but unfortunately got a new error saying “Unable to connect to Hotsync, port is in use by another application.” This was annoying. I followed the Missing Sync tech support representative’s instructions and tried killing the bluetooth preferences and repairing my phone to the Mac. Nothing.
What ended up being the problem was an obvious mistake on my part in failing to enable the bluetooth connection from within the Missing Sync software. Apparently the bluetooth is turned off by default and the interface for enabling it is an icon which glows blue when it’s on. I missed this crucial step so the bluetooth connection was working fine but my phone was effectively “knocking on a door that nobody knew to answer.” Once the Bluetooth was enabled from within Missing Sync, all worked perfectly.
I will say Missing Sync is pretty slick and gives you all the functionality you’d want from the Hotsync software plus the capability to sync iPhoto and your iTunes playlist as well as AvantGo. Kudos to Mark/Space for excellent software and solid support.
I looked around for a migration script to port my blog from BlogCFC over to WordPress and didn’t find anything so I wrote one. First lemme say that BlogCFC is a great piece of software and I don’t want to encourage anyone to move away from it. For myself the decision to move to WP was one of those “eat your own dogfood” choices. 100% of the stuff we’re building at Grid7 right now is centered around Structured Blogging and Microcontent. WordPress and Moveable Type are currently the only two authoring tools that have plugins that support this. For me to advocate microcontent without having the ability to publish it would be like Ray advocating BlogCFC and hosting his own blog on WordPress. Plus removing barriers to exit on a piece of software should theoretically increase the adoption of its usage because people can now safely use it knowing that they aren’t locked in permanently. Anyways, I asked Ray if he was cool with me releasing this code and he had no problem with it. There is a Readme included but basically here’s what you do:
Setup a new instance of WordPress (you’ll need to be able to run CF and PHP side by side)
Configure a datasource in CF administrator for your new WordPress db.
Extract the contents of the zip file to a directory on your site
Modify the config.ini file to reflect the source and target datasources
Provided you want a fresh install you should clear out the dummy data that comes with WP
Run the RunMe.cfm file
Delete the BlogCFC2Wordpress directory
Two optional last steps
put the rss.cfm file in the root of your wordpress blog to keep all your old subscribers
put the index.cfm and qBlogCFCPosts.xml files in your root to handle redirects for all your old links
Provided that it worked you should see a screen that looks like this->
Obviously you’ll need to mimic the directory structure of your BlogCFC instance so all the files referenced in your posts continue to work. I just moved my downloads and images directories over and it worked fine. I updated the stylesheet to include the .code classes so inline code would display properly. There were some weird idiosyncracies with the way that the inline embedded flash player was handled by WordPress/php but that was really the only gotcha and I just referenced it in a new window on entries where it broke (it was something to do with the
The code is actually commented (i know, crazy right?) and makes heavy use of components so it may have some instructional value. There’s some other nuggets in there and one technique in particular that I’ve started doing (and I don’t know whether this equates to CFUnit or another type of unit testing – i’m admittedly horrible about not writing unit tests) but it’s been a time-saver on another project where I’m dealing with a long sequence of calling various components that access external systems to get the objects I need to do an operation. Basically it’s a few lines of code that lets you serialize the object and write it to a file so that for testing rather than calling the components each time, you can instead read the file and deserialize it to create the same object so it behaves as if it were getting it from the prior sequence. This may be old hat for others but it’s a technique that has saved me time and the pain of repeatedly clearing out database entries.
The performance of the migration script is fine for me (it took 13secs to move 73 posts, 75 comments, 130 category mappings and 18 categories). It’s admittedly not optimized (I prefer the syntax and I realize it instantiates the component on each request under this method). There’s plenty of room for improving this with the function-style syntax for instantiating objects and for someone like Ray who has 5000+ posts you might have to (or else bump your Timeout in the CFadmin) but it worked fine for me and I have no desire to do this. I’ve tested it against CFMX7, MySQL 4.1 and Win2k3 with BlogCFC v. 3.8 to WP v.2. There are some new fields in the latest version of BlogCFC so you would need to make a few minor modifications to the query syntax but it should be pretty painless. Also the sql is vanilla with no stored procs (all the logic is in the cfc’s) so it should also work with other databases like Postgres or MSSQL and it should run fine on BlueDragon. It should be noted that I did end up using a queryToArray utility found here and this is embedded in a util component in the distribution.
The usual discalimer applies on this code – backup your WP db before you use it if there’s anything that is worth saving! I’m not providing support on the code. You can repost it and take it apart and make it better if you want but please leave the original comments and license intact. It’s the MIT license which is as close to having no license as you can get.
One thing – I was on the fence about using feedburner because athough I wanted the stats and the other promotional and convenience features they offer, I didn’t like the idea of promoting an RSS link I don’t have control over (ie. they decide to start charging and have you hostage by having control over your feed). My partner came up with the great idea to use a link that redirects to feedburner. Simple and genius.
Big ups to Ray Camden and Matt Mullenweg for writing useful Blog authoring tools. Hopefully this migration utility makes both products more accessible to others.
Oh, and in the never-ending pursuit to master the art of the tripodless qtvr, I took one yesterday in the middle of the pool at this pool party we went to on the side of Camelback Mountain. It was like the house they blew up in Lethal Weapon 2 and it was was every bit as ridiculous as it looks.
Following the lead of my man James Archer on his latest post “Powering a Professional Web Firm” here’s a run-down of the technology we’re using inside Grid7. Colorcoded by opensource, Freeware/shareware and commercial products.
What’s interesting is how central the iPod device has become as far as a platform for communication for us. We use it for capturing and syndicating the audio from meetings and I use it personally along with the Griffin iTrip to stay ontop of the latest conferences and interviews with industry experts via ITconversations and Venture Voice. I can’t comment on all the Mac applications as that’s Kimbro’s realm (hopefully my realm eventually). If you have any critical pieces of infrastructure you’re using in your company that aren’t on this list, do tell.
I just downloaded Google Sketchup and went through their tutorials. I did two years of work with 3d studio max creating animations for jury trials and I gotta say this is interesting. From a 50,000-ft strategic view, it seems perplexing why Google would release a 3d modeling application when they’re typically thought of as a search company. And yet when you look more closely this move is hugely-consistent with John Battelle’s assessment of them building a massive database of intent.
If you think about what Google really is- they’re not a search engine company at all. They’re not even an ad company. They’re an information broker that is making their commission through different angles by hooking people up with the knowledge they seek. Their mission statement says their goal is “to organize the world’s information and make it universally accessible and useful.” By their own words they want to become the librarian for the card catalogue of everything that currently exists. But realistically their goal is more ambitious than that: it’s to know exactly what everyone wants at any given moment that does not yet exist for them. If the analogy of energy in its kinetic vs. potential states can be extrapolated to “information as energy,” Google is far more interested in the “potential” side of the equation. In fact I would argue that they are closer to Joseph Campbell and Karl Jung in their motivations than they are to Rupert Murdoch in terms of desire to create a real-time map the world’s collective intelligence at any given moment and broker the info exchange vs. scraping profiles on Myspace and targeting users with personalized ads. Of course they’re a public company now so it’s not entirely up to Google anymore what Google will become…
The SketchUp program from a tactical perspective is the distillation of the basics of a 3d modeling environment without the animation capabilities. It’s extremely friendly, simple, intuitive and their quickstart tutorial is solid. Compare the toolset from SketchUp on the left to that of 3dsmax on the right:
It’s reminiscent of the way Flash first felt as a vector drawing program after having used the more-powerful-yet-complex Adobe Illustrator for so long. The most interesting promise of this 3d app is not just in that it reduces the barriers for the layperson to be able to model fictitious things – it’s greatest value is in its integration with google earth. It will allow people to imagine things and overlay them where they would exist in the real world (or the “big room” as my buddy Dave calls it) and then share these dreamed objects with others. The teaser example graphic on their homepage shows an animation of a 3d model planning of a wooden deck evolving on the back of a house presumably tantalizing the viewer with the prospect of conceiving new home additions and overlaying these dreamed additions on reality via google earth. WOW- so Google essentially wants to:
know what your dreams are (exactly how you envision that log cabin you want to build in the mountains)
and where you want to manifest them (30 yards away from the creek and just south of the rock outcropping- lon/lat GPS coords…)
Understandable now why this app is compelling and very consistent with their strategy…It’s them giving a virtual lego set to the world and watching what people make with it – a more open-ended way of asking “what do you really want?” Armed with that intelligence they will have all the essential ingredients to broker info that helps get you there and doesn’t just satisfy your sterile web searches but that hones on the emotions and the passions that are driving your searches, and THAT (any salesperson will tell you) is where the the true power is in being able to close a customer.
The real question is, “which will be the first bionics company that google purchases?” And once that happens, how far off is it until the release of “Google Desktop: Brain edition?” There have been huge advances in bionics recently and scientists can now patch into the visual and motor cortex and to the point to facilitate sight in blind people, hearing in deaf people and even instill telekinesis in monkeys (no joke – listen to the podcast to hear how they’ve done it). My question to you is: if you could upgrade your brain to jack directly into google’s information database but the tradeoff was that they got to index your brain, is that a pill you would willingly swallow?
Quicktime Virtual Reality Panoramas are immersive scenes that show a 360deg view of one’s surroundings. There are high-end solutions for creating these scenes that utilize special optics and tripods but you can also create a decent one using the digital camera you already own. I’m down in Mexico once again working from the road and enjoying spring break. My buddy Dave has a beach house here in Rosarito and a few of us shot this QTVR last night from his rooftop:
Here’s the simple recipe for how we did it using my Canon SD550 digital camera:
Setup the scene – You’re going for 30deg separation on each shot – you need a way of aligning the scene so you can shoot 12 images equidistant around the “clockface” where you are standing. If you’re in sand you can actually draw a clockface on the ground and align each shot on its corresponding numeral, otherwise you’ll need to find orthogonal objects to give you a reference for the “12, 3, 6 and 9” positions and estimate 1/3rd the distance between each for the intermediary pics. I was standing on tile so that made it easy.
Shoot the pics – the goal is to produce a sequence of images in perfect vertical alignment with a minimal change in brightness amongst each pic. Hold the camera vertically, focus and shoot one pic on each of the twelve numerals of the clockface. If you’re on a slope, you want the camera perpendicular to the sky and not to the slope (if you position relative to the slope you’ll end up with a QTVR that looks like a sine curve). I generally disable the flash unless there’s bright sunlight raking from an angle and you need to compensate for the objects in shadow. You want to hold the camera at the same vertical height as you spin around.
Produce the movie – there are tons of options but I found a $70 shareware windows app called Panorama Factory by Smoky City Design that does an amazing job of intelligently splicing the photos to produce the final scene. Import the twelve photos you just shot into the program and follow the cues in the wizard using all the standard defaults. You’ll need to rotate your sequence of images unless your digital camera does this automatically for you – Panorama Factory has an option on import to do this automatically. You’ll step through a series of about 6 screens on the wizard and arrive at a point where it lets you save the final image. Choose the QTVR option and jpg compression and adjust the slider for quality depending on the delivery format (CD or Web) and how small you want to make the final file.
That’s it. Once you perfect the process of creating the QTVR, try experimenting with the advanced hotspot features to create a series of linked scenes that make a full virtual tour. Some camera vendors bundle QTVR software with their products – it’s probably a good idea to check the software that came with your camera before buying anything extra.
I try to enhance my posts with audio or video whenever possible and I just realized that the simple media component I threw together to do this might be useful for other people using BlogCFC or BlogFusion so I figured I’d bubble it back up into the community. I did separate files for audio and video but with a little more thought the media type could be abstracted and you could just use one file. Here’s how I do it:
create a separate directory for video and audio, encode the clips in .flv and .mp3 format and place them in their respective directories
put the .swf for each type of media in its respective directory. The audio player is an example of calling inline and therefore only uses the swf, the video player is a separate external .cfm file that demonstrates playback in a new window. This just shows two ways of doing it and either component could be switched to inline or external.
use the following code in your post to call the media files:
I’ve zipped up the test files and put them here. I also included the .fla files so you can see how the .swf’s were built and re-skin them if you like. The real key to this technique is a small bit of actionscript in the swf that treats the file name as a variable so you can pass it in dynamically. Until we find a service that does protected podcasts, we’re using this audio component in conjunction with my iTalk within the Grid7 pilot right now internally to capture the audio from our meetings and make it available via streaming flash audio. It’s useful for anyone who missed, any participants that were there but need clarification (or inspiration) and most importantly, so future members can hear the conversations that have taken place before they arrived and so they can come up to speed quickly and get an idea of the culture of Grid7 before their first participation. Hit me here with any questions if you need help on setting it up. I use Quicktime to export as .flv for the video (I know Sorenesen Squeeze is supposed to be good too). I know someone in our CFUG had been working on a server-side way of encoding the .flv’s so you could just upload the .avi and not worry about that piece. Would be slick to see a total solution integrated with BlogCFC. Hopefully this trick reduces the friction for people adding media to posts and more people start doing it.
On an entirely different topic, we had a bit of a snafu with the Grid7 domain on our first day out of the gate and have chose to change domains and rebrand while we’re still a newborn. If you’re interested, this is the detail of what happened. The new domain is Grid7Labs.com– anyone who subscribed to the RSS feeds since Tuesday will need to update their feeds to reflect the new URL.