Moving to Seattle

This has been in the planning stages for a while, but in October I'll be moving from one Washington (DC) to the other (Washington state), specifically to Seattle or thereabouts. Through the magic of telecommuting I'll be keeping my same job with the Senate, which is fantastic because there are always lots of cool projects going on and the freedom to play with the latest technologies and gadgets.


I have a blog post in the works called "Lightweight Cross-Country Moves" because in an effort to minimize the amount of stuff I lug (or have moved) 2800 miles, as well as just to lighten the load in my life, I've gotten serious about eliminating physical possessions wherever possible. I'll post that once I have it in better shape than random thoughts and bullet points.


And no, this move has nothing to do with my love for Microsoft as some people suggested on twitter. I still hate them as much as ever. :-)

CF Jobs in Maryland

I received an email today about two CF openings in Abingdon, MD, specifically for one junior and one "mid-level" developer.


Skills listed in the email:



  • 5+ years CF, ASP, Javascript, and HTML

  • experience with custom tags

  • Oracle and SQL Server experience

  • regular interaction with customers/managers to capture requirements and provide technical guidance

  • Bachelor's degree in related technical discipline

  • Must be a US citizen


If you're interested, contact Dean Abrams (dabrams at techusa dot net).

Going All Electronic With Books: The Good, The Bad, The Ugly, and the Downright Ironic

More on this before long, but I'm in the process of a mass purge of physical possessions, and like most geeks I have a ton of books. In the age of electronic books, however, it's surprisingly easy to put all these paper beasts up for sale on Amazon.com and replace them with electronic copies.


As with everything these days, however, when you go electronic you'll find you're treated as everything from a valued customer down to an outright criminal, so I'll outline briefly my experience with converting to all electronic books thus far.


Safari is fantastic. Get a subscription, plain and simple. If you buy even near the number of books I do a year, or if you find yourself needing a book on some wacky technology you don't use often but have a burning need for on a project, this is the way to go. As I went through my bookshelf if a book was on Safari, it was a no-brainer to dump the physical copy.


Next, I wanted to replace my books from Pragmatic Programmers with electronic copies, and some of these weren't on Safari. Thankfully they are very progressive with their electronic books--simple PDFs you can buy for cheaper than the physical copy (which makes sense, but surprisingly most companies don't price PDFs cheaper). And no DRM on these from what I can tell; they basically just say "don't put these on a file server or we'll be mad." :-) They seem to understand that most people are honest and it isn't worth pissing people off with DRM nonsense to protect yourself against the few bad apples out there.


Next on my list was Manning, and they were decent about things. The files are DRMed but it's rather unobtrusive; they're just PDFs that say they'll fail if you try to move them around. Annoying, but OK I guess. (I haven't tried moving one so I'm not sure if anything actually happens.) Manning also charges substantially less for PDF books than the physical copies, which is nice.


I had a couple of Wrox books that I wanted to keep electronic copies of, and they turned out to be the worst. They mandate the use of Adobe Digital Editions, which is basically just a DRM-laden wrapper for PDFs. Fine, not the end of the world, but at this point I started getting that "you're a thief" feeling I always get when DRM smacks me around while I'm trying to do the right thing and actually pay for something. I doubt I'll be buying any more electronic books from Wrox, but for the two I wanted to keep (one on Tomcat, one on Spring) this was OK.


Finally, we come to Adobe Press. You know Adobe, right? The people who brought PDF into the world? Well, guess what: very, very few of their books are available for purchase in electronic format. I don't know the whys behind this, and I don't really care, I just find it extremely ironic. You'd think Adobe would be pushing PDF versions of their books like crazy, but even when I wanted to buy some, no dice. Now granted the ones I was interested in all seem to be on Safari, but for the WACK books (which yes, I dumped the physical copies of), I thought it would be nice to have PDF copies outside of Safari. Oh well, maybe next decade.


Other miscellaneous books I bought as Kindle versions from Amazon.com, which was a great way to clean out the last few items on my bookshelf. I only kept books that are out of print or that have sentimental value, and I now have largely empty bookshelves, which is a nice feeling.


Will I miss physical books? For tech stuff, I highly doubt I will. I'm still a huge fan of sitting in a chair reading a book away from the computer, but that's not what I do with tech books. Add in the ability to search, cut/paste (unless they're DRMed to hell), etc. and in my opinion it's a better medium for tech books. As for regular books, the Kindle is fantastic. All this makes me feel a lot greener too, which is something else I continue to work on.


So what are your thoughts? Electronic/online books the way to go, or have I just made a huge mistake?

FarCry Runs on Open BlueDragon

Since this question comes up fairly regularly, and since there were issues running FarCry on BlueDragon in the past, I wanted to let folks know that Geoff Bowers of daemon put together a nice screencast showing FarCry running on Open BlueDragon. A great open source framework and CMS running on a great open source CFML engine--can't beat that with a stick. ;-) Thanks Geoff!

More CAR File Issues

And this time it's all on Windows. Trying to take a CAR from a 32-bit Windows server and deploy it on a 64-bit Windows server, and again the directory paths are getting screwed up on the deploy end of things. It wasn't the same issue as in my other entry about CAR file problems; this time it just seems to be looking for things in a directory that doesn't exist.


As with my previous problem with CAR files, as long as you run it once and let it fail, then check the logs to see where it created the XML files and where it's looking for them, move the files to where it is looking for them, and run it again, it will work.


With my last issue I assumed it's because I'm not running CF on a supported platform, but since this is all on Windows server, pretty sure the CAR stuff just has some bugs in it. I'll run this by Adobe support once I get it completely nailed down.

BFlex/BFusion Open for Registration!

You want two solid days of great training in Flex and CFML? And you want it for free? Just who do you think you are?


If you're a smart Flex and/or CFML developer, who you are is someone who's going to attend BFlex/BFusion in Bloomington, IN on September 6-7. Great CFML training, great Flex training, great speakers, and an all-around great time, all for FREE. That's right, FREE.


I'll be teaching the intermediate CFML track along with Peter Farrell and Kurt Wiersma, and it's an entire day of hands-on Mach-II training. Where else you gonna get that for FREE?


Why are you still reading this? GO REGISTER!

Issues Deploying CAR File from Windows to Linux

I ran into some issues deploying a CAR file created on a Windows server to my local deveopment box, which is running Kubuntu with ColdFusion (and Open BlueDragon of course!) deployed on Tomcat.


Deploying the CAR file failed, and a quick check of the logs showed that the CAR was not writing its XML files to the work directory correctly. Rather than writing them correctly into the CF instance name directory under the work directory, it was writing a file that was literally named 'instancename\filename.xml'. Note that means the file name itself contains a backslash. I suppose that means the CAR file assumes it's going to be deployed on Windows since it was generated on Windows, but to me this is a bug pure and simple, based on the fact that what generates the CAR is using a hard-coded path separator.


Since the CAR file is encrypted I couldn't go into the file itself and fix the problem (which is highly irritating), but luckily moving the two XML files that were being generated by the CAR deployment into the correct directory with the correct name fixed the problem. The CAR deployment still generates the misnamed files, so you have to run the deployment once, let it fail, rename/move the files, and then run it again.


A bit annoying, but much less annoying than manually recreating a bunch of datasources.

File Manipulation on Windows Servers From Linux

This is more of a handy tip than anything earth-shattering, but yesterday I was faced with the task of grabbing all files with a particular extension from a nested directory structure, moving them all into a single directory, and renaming them with a different extension. I also had to be careful to preserve the original timestamp of the file.


The files reside on a Windows server, and needless to say the thought of remoting into the Windows server and spending the afternoon drilling into nested directories, sorting by file type, and manually moving and renaming the files didn't appeal to me.


One of the great things about Linux is how powerful the shell is. Let me preface this with saying I'm not a DOS expert, so maybe there's a way to do this in DOS (or PowerShell, which I've never tried), but I knew I could probably accomplish this entire task in a couple of commands in a bash shell.


Step 1 was to mount the Windows server drive:


sudo mount -t cifs //server.dns.or.ip/sharename /mount/point -o user=username,password=password


Note that "/mount/point" is the local directory where you want to mount the share. I tend to use something like /media/servername-driveletter because mounting everything in /media is easy to remember, and on some distros this will also cause the drive to show up on your desktop (though this doesn't happen on Kubuntu).


With the drive mounted, I navigated to the top level of the (rather nasty) nested directory structure and ran the following:


find ./ -name "*.fileextension" | xargs -i mv {} /mount/point/destinationdirectory


What this does is traverses the directory structure, finds all the files with the file extension I needed to move, and pipes that into the move command. The "xargs -i mv {}" bit basically says "get your arguments for the command you're about to execute from the standard input (which is the list of file names kicked off by the find command) and replace {} with the data from standard input." Then of course /mount/point/destinationdirectory is the directory into which I want to move the files.


A note if you want to use copy (cp) instead of move (mv)--this does NOT retain the original timestamp. The cp command has a -p option that preserves the original timestamp, but this did not work for me when I was mapped to a Windows share. Apparently this is because I'm executing the command as one user on Linux and that user doesn't have permission to change the timestamp on the Windows side. If you were logged in with the same user name on both sides maybe this would work, but I didn't try it.


So with step one completed, I just needed to rename all the files with a new file extension, or in my case I was actually just removing a second file extension since the files were named in the format "filename.ext1.ext2" and I just wanted to remove the ".ext2" part.


After navigating to the directory into which I moved all my files, that was another one-liner in the terminal:


rename -v 's/\.ext2$//' *.ext2


The rename command in bash allows for the renaming of multiple files using Perl regular expressions as the criteria for the rename operation. In this case I just wanted to lop off the .ext2 bit, and apply that to all files with the .ext2 extension. The -v option is for "verbose" so I could watch what it was doing while it did it, and if you're nervous about what might happen, you can use the -n option to have it show you what it would do with your command but not actually do it.


So a bit of research and help from a Linux guru friend, and the drudgery of file moving and renaming was reduced to two commands in a bash shell. With some clever piping I probably could have even done this in one line.


I suppose my point with all of this is when I'm faced with little tasks such as this one, I try to take the time (unless I asbolutely can't) to find a way to accomplish the task elegantly and in a way I can use again, as opposed to blindly saying "there goes the afternoon," shutting off my brain, and dragging files around in a GUI. Not only does this make me more productive, but I learn something in the process, and it's something I can use and alter time and again in the future to make boring tasks a lot less work.

Voyager VX 10000 and Linux

Verizon made me an offer I couldn't refuse on a phone upgrade when I called in with an account issue, so I now have an LG Voyager VX 10000. This is Verizon's "iPhone killer" and I have to say after using it for a few days, it's a damn nice phone. The touch screen is nice, the QWERTY keyboard on the inside of the phone is fantastic, and both screens are bright and sharp.


Application-wise the mobile email is OK; certainly functional enough for basic read/reply on the go. Not as nice as the email app on the iPod Touch, but I can also type a heckuva lot faster on the physical keyboard on the LG Voyager than I can on the iPod Touch virtual keyboard.


I thought long and hard before getting this phone. Since I've become more or less a total free sofware convert, getting a new phone with a proprietary OS was something I didn't want to do. The state of Linux on mobile devices is getting better with LiMo, but it still isn't quite there yet. I came very close to buying an OpenMoko Neo FreeRunner but after a lot of investigation and reading on forums, I came to the conclusion that I might be plunking down $500 on something that, while it's a dream device from a hacking standpoint, might not be all that usable as a phone due to sketchy carrier support.


Also, practically everyone I interact with via mobile devices is on Verizon, so the fact that the FreeRunner absolutely wouldn't work on Verizon clinched it. I'm keeping my eye on that device though, because it will very likely be my next phone.


Why not an iPhone? Frankly, between Apple's draconian attitude about their phone and the fact that I'd have to be on AT&T, it's a non-starter for me. Also, I already have an iPod Touch (that I still love), so I just didn't feel the need to have an iPhone. Finally, since I use a BlackBerry pretty heavily for work, I'm used to having a physical keyboard. Apple did an admirable job with the virtual keyboard on the iPhone/iPod Touch, but I still can't type nearly as fast on it as I can on a physical keyboard.


Back to the LG Voyager--it comes with Windows file management software for things like photos and music. This could be a bad thing, but thankfully unlike many other devices, the Voyager doesn't use a playlist-based system for music. What this means is that I can stick my 8GB microSD card into my laptop running Linux, drag files to the card, stick the card back in the phone, and all the files are recognized by the Voyager. After having not such a great experience on this front with things like my SanDisk MP3 players, this was a very nice surprise. It also supports file transfer via Bluetooth, so that's another way to move files around.


There's also a piece of software called BitPim that lets you manage things like music, contacts, etc. more directly, and on any operating system. I haven't had luck getting it to connect to the Voyager yet but I only tried once, so I'm sure it's just a port setting or something simple.


In short, the Voyager is a really nice phone and plays well with Linux, so even though the phone itself isn't running Linux, I'm happy with it so far!

Gotta Loves Fools and Their Money

I just love stories about people with more money than brains, and the gaming the Apple iPwn Store aspect just makes my Friday. Whoever built this app is my hero.

Flex Builder for Linux

Since I'm very nearly on Linux full time now, and I'm having to make some changes to a Flex app I built a while back, I decided to give Flex Builder 3 for Linux a shot. It's still at Alpha 3, and it's missing design view and some other things, but since I rarely use design view anyway that isn't a deal breaker in my book.


Thus far I'm very pleasantly surprised! Been working on it all morning, hasn't crashed once, and in terms of the functionality I'm using it's identical to the Mac version (meaning code completion, how projects work, etc.).


I'm keeping my fingers crossed that they make this an official release at some point, but it's certainly fitting the bill for me so far even as an Alpha.