Thursday, December 31, 2009

2009 Was a Great Year for Ogg

Now, however, we have an online video technology that anyone is free to use, study, improve, and distribute without needing permission or paying fees. This technology is called Ogg Theora (or just 'Theora'). Some parts of Theora are patented, but the owners of those patents have granted a permanent, irrevocable, royalty-free patent license to everyone. Theora carefully avoids any patents held by traditional patent holders: to get around the ridiculous patent of image storing mentioned above, Theora stores video image information from bottom to top instead of top to bottom!

Recognizing that Theora is a crucial ingredient for the freedom of our internet, Mozilla, Opera and Google have announced support of Theora video for future or current releases of their browsers. This means that millions of users will be able to watch Theora videos using their browser, without the need for extra software. The work of the free software community, with support from Mozilla, Wikipedia and others, has brought Theora to the same level of quality as state-of-the-art video technologies

2009 was a great year for Ogg Vorbis and Ogg Theora, with the HTML 5 audio and video tags gaining support in browsers, and converting 300,000 videos to Theora. Make no mistake: Theora is a valid alternative to Flash and h.264, and with support for audio and video tags by browsers requires no plugins to work.

Looking forward to an even better year for Ogg in 2010!

Home Theater PC Project - Phase 2: Decisions

I've been doing a ton of research and experimentation since my last post on this subject, and I came to a bunch of decisions that are a bit far afield from where I started. Ultimately I think I'll wind up with a very cool setup even if it doesn't meet the original Home Theater PC goals.

Ultimately I want something that works well and is easy to use. If I were the only one watching TV in the house I'd probably tolerate a ton of rough edges with something like MythTV and potentially XBMC, but since I'm not the only one who watches TV, full-time TV tech support wasn't something I wanted to get into. As I looked at everything involved with a MythTV setup and started thinking about things like channel mappings, remote controls, potential noise issues, not to mention the overall cost involved with a multi-room setup, I started thinking it wasn't a wise road to go down.

As a bit of an aside before I get to the punchline, I did get an eyeTV 250 Plus for my Mac Mini, mostly so I could see what if anything I got over FiOS TV without using a Verizon cable box. Surprisingly I get quite a bit! It tuned a total of 86 channels, but about 40 of those are encrypted. I get all the networks in HD as well as WGN and a bunch of other things (still sifting through the odd channel numbers to see what I do and don't get), so that's good to know for future use. The eyeTV is a really nice product if you're looking for a TV tuner and DVR for your Mac. Even on my 3+ year old Mac Mini (I believe it's a Core Solo) it works great.

As for the overall solution, I debated this quite a bit and wound up ordering a Moxi. Specifically I got the three-tuner, three-room bundle since cost-wise that wasn't much more than a new one-room TiVo with service. Moxi looks extremely cool, has no service fees, has the multi-room thing figured out better than TiVo, and has a ton of other very compelling features that tipped me to it over another TiVo. It's still on order but I'll post more about it once I get it. They also have a 30-day money-back guarantee so I figured I'd give it a shot.

Yes, this means I'm not building a home theater PC per se, but in the end I decided I didn't want watching TV to turn into a huge ordeal, so I'll save the DIY impulses for another project. With the Moxi I'll be able to scale back to a single cable card instead of the multiple Verizon boxes I have now, and the Moxi Mate (which are the smaller units that go in other rooms but talk to the main DVR) is getting a software update soon that lets you watch live TV through the main Moxi unit.

The Moxi also hooks into PlayOn, which lets you watch Netflix streaming, Hulu, Amazon VOD, and a ton of other content from the Moxi. Watching Hulu without having to do so on a computer is going to be great. I went the Boxee on Apple TV route and never got it working, but from everything I've read about PlayOn this should be a great solution. This does mean I'll have one Windows machine in the mix (sigh), but PlayOn also lets you watch content from the Wii and Xbox 360, so it's a nice addition to the overall setup.

To get all of this working optimally from a networking perspective Wi-Fi wasn't going to cut it, so I installed a Netgear MoCA adapter in each room where I'll have the Moxi units. If you're not familiar with MoCA, it enables network traffic to travel over the existing coax lines in your house at speeds much faster than Wi-Fi. This is perfect for things like HD streaming that would tax Wi-Fi. I always had pretty poor luck with HD streaming from Netflix on TiVo over Wi-Fi even with a really good signal, so this should be a vast improvement. So far I've only hooked up my new Panasonic Blu-Ray player to MoCA but it's working great, and MoCA setup was dead simple. Plug it in and go.

For those of you who were looking to learn as I built out an elaborate MythTV setup, my apologies, but that path simply didn't make sense for me at this point. I'm very anxious to try out Moxi so at least those of you interested in some TiVo alternatives will get something out of my experience with Moxi.

Wednesday, December 30, 2009

Returning Java Exception Objects with Open BlueDragon

I'm working on a project that uses a pre-existing Java library to handle payment processing. This is great because it's a heck of a lot of stuff I don't have to write myself, but when payments fail I need to get a code that's contained in an exception object that's thrown in the Java code. This is a problem since given the way the Java code is written, the normal message and detail keys of the CFCATCH struct don't contain the code I need. To get the code I need to call a getCode() method on the Java exception object itself.

Open BlueDragon doesn't implement GetException() yet, which in theory lets you get the actual exception object thrown by Java (provided you specify the specific Java object type being thrown), but I figured since the Java class name is contained in the JAVAEXCEPTION key of the CFCATCH struct, it wouldn't be too hard to tell Open BlueDragon to put the actual Java object in that key instead of the class name.

It took a bit of hunting but it was extremely easy once I found the right spot. The CFCATCH struct is an instance of com.naryx.engine.cfCatchData (which extends cfStructData), and if a Java exception is thrown, the setJavaException() method in cfCatchData is called. This puts a new key called JAVAEXCEPTION in the CFCATCH struct and this key contains the name of the exception class thrown by Java.

Since I wanted to keep that key intact for the sake of compatibility, I decided to add another key called JAVAEXCEPTIONOBJECT to the CFCATCH struct, and this key contains the actual Java exception object. It was as simple as adding one line to the setJavaException() method. The original was this:

public void setJavaException(Throwable _value) {
    setData("javaexception", new cfStringData(_value.getClass().getName()));

So I changed it to this:

public void setJavaException(Throwable _value) {
    setData("javaexception", new cfStringData(_value.getClass().getName()));
    setData("javaexceptionobject", new cfJavaObjectData(_value));

Now any Java errors that are caught by CFCATCH will contain the Java exception class, which lets me get at everything I need. This turned out to be a much more useful solution than going down the path of writing a Java class to wrap everything just so I could return what I needed from the Java exception object to OpenBD.

Yet another small example of the power of open source. If you want something to work differently, get in there and make it happen!

Iterate Me: Brian Klaas: Blog: Lessons Learned in Making Many Mach-II Modules Out of Standalone Apps

I'm in the process of converting a bunch of standalone Mach-II apps in to modules inside of a new, monolithic application. It's been a surprisingly smooth process, thanks to the tools that the Mach-II framework gives us to work with. Most of the bumps along the way have been related to bad software design practices in some of the oldest apps that I've created, and continuing, after many years building Web applications, to do dumb things like hardcoding URLs and other strings which will change when converting the app to a module (or moving the app to a different server).

Awesome tips from Brian on Mach-II modules and good practices for building Mach-II apps in general. Thanks for sharing Brian!

Tuesday, December 29, 2009

Slashdot IT Story | Adobe Flash To Be Top Hacker Target In 2010

"Adobe Systems' Flash and Acrobat Reader products will become the preferred targets for criminal hackers (PDF) in 2010, surpassing Microsoft Office applications, a security vendor predicted this week. 'Cybercriminals have long picked on Microsoft products due to their popularity. In 2010, we anticipate Adobe software, especially Acrobat Reader and Flash, will take the top spot,' security vendor McAfee said in its '2010 Threat Predictions' report.

Um, congratulations? :-)

Saturday, December 26, 2009

Home Theater PC Project - Phase 1: Requirements

My TiVo Series 3 finally died. Over the past several weeks it went from being a bit sluggish, to not showing the Now Playing list at all, to occasionally rebooting itself, to finally being in an endless reboot cycle when it's powered on. I attempted to save it with a new hard drive and power supply from, but neither did the trick. The new hard drive didn't get it out of its endless reboot cycle, and with the new power supply it won't power up at all. According to weaKnees the Series 3 TiVos fail quite a bit in comparison to other models, and they've seen cases where a known good power supply is simply rejected by the TiVo. So after throwing $300 in repairs at my Series 3 with no results it's time to give up.

I could replace my dead Series 3 with a new TiVo, but as I outlined in a previous post, the world has changed pretty dramatically since TiVo first hit the scene, and for my purposes I'm just not sure TiVo has evolved enough to justify spending $500 on a TiVo HD XL (and that's only because it's $100 off right now), plus $10/mo for service or $299 for a lifetime contract. And though I've never had a single problem with my previous TiVos, since my Series 3 failed after having it for only a little over two years, there's no way I'd risk throwing $299 away by getting lifetime service on a unit that may up and die on me.

I've also been wanting to build my own Home Theater PC (HTPC) for quite a while, so I've been paying attention to projects like MythTV, XBMC, and a few others over the past couple of years, and they're very compelling for several reasons. First, they're open source and that appeals to me in a huge way. Second, there's no monthly service fee for using them. And finally, because they're open source they support a much wider array of formats and options than any of the proprietary options.

Since the TiVo was more than a simple DVR, however, there is additional functionality that I still need, specifically Netflix streaming and Amazon Video on Demand. So the first thing I need to do is evaluate all my options so I make sure whatever solution I do come up with covers all my bases.

The Requirements

My needs are relatively straight-forward but since I'll be asking for input from others who've already done this, I thought I should be very clear about what I do and don't need my solution to do, as well as mention some specific things that are non-starters for me.

At a basic level here's what I absolutely need:

  • PVR functionality, meaning schedule recordings as well as pause, rewind, and fast-forward live TV
  • Record two HD programs at once
  • Stream video from other network resources
  • Stream music from other network resources, specifically Squeezebox Server
  • Play DVDs. Standard DVDs are fine--I'm just not enough of an HD junkie that I need Blu-Ray capabilities on this particular box.
Pretty basic requirements. Even the music is optional since I do have a Squeezebox Player, but it would be nice to free that up to use elsewhere in the house and I figure asking one of these boxes to play music is basic enough to call it a must have.

Now here are a couple of nice to haves:

  • Stream photos from other network resources
  • Be able to watch video recorded on the main PVR from other rooms in the house
Other things I need in the mix but don't necessarily expect to be on the PVR box itself:
  • Netflix streaming
  • Amazon video on demand
What I Don't Need/Won't Use
  • It can't be Windows Media Center. No offense to those of you who use and like WMC, but I can't do it, and I'm really interested in the "project" aspect of this endeavor so I really do want to build my own to a greater or lesser degree.
  • I don't really need a Blu-Ray player, and I definitely don't need a PlayStation 3.
  • I don't want or need to buy a new TV.
  • I already have a FiOS DVR. It's fine, but it doesn't do enough that it qualifies as a true HTPC, so "use the cable company's DVR" isn't really the answer I'm looking for.
What I Already Have

As most geeks do, I do have some hardware laying around already that I'm willing to sacrifice to this project or at least throw in the mix as part of the overall solution.

  • Xbox 360. I don't want to hack this to bits since I do like to play games on it, but if it can serve as a front-end to the main PVR without wrecking the Xbox for other purposes, that would be fine.
  • Mac Mini. It's an older one (Core Solo if I remember correctly), but I never use it at all. I assume at a minimum I could throw software on here (something like eyeTV) and use it as a front-end box?
  • Apple TV. Apple TV is so astoundingly frustrating that it's about to go on Craig's List already, so if this can serve some purpose I'll hack it beyond recognition. I've heard it's rather underpowered for most uses though.
  • A system76 Meerkat that's currently running Amahi and nothing else. I figure at a minimum I can store some video on this box since I have about 2TB total storage available on it.
Netflix Streaming and Amazon Video on Demand

Since this is a bit of a tangent that will likely require a separate box let's get this out of the way first. Yes, the Xbox does Netflix streaming (and maybe the Amazon VOD as well; I haven't checked), but the Xbox is connected to the basement TV (as is the Wii) and needs to stay down there, so I need something for the upstairs living room.

One option would be to get a networked Blu-Ray player, but I'm not sold on Blu-Ray honestly. After getting burned by HD-DVD I'd still love to see physical media go away altogether, and I think we're closer to that than a lot of people realize.

There are networked TVs as well, but I really don't want to blow money on a new TV since I like my TVs, and also because I think the idea of having that sort of thing built into the monitor itself is a dumb idea. There's also the PlayStation 3, but I really don't want or need another gaming system and since I don't care about Blu-Ray, it's overkill to use a PS3 only for Netflix and Amazon.

Given my requirements I see only one option, namely the Roku Player. Inexpensive, simple to set up, and does exactly what I need, so this will likely solve this piece of my puzzle. If people have experience with these or other solutions I haven't thought of I'd love to hear about them.

TiVo Replacement Box/"Back-End" PVR Box

Here's where the options immediately explode. Given the myriad options it's probably good to set some general guidelines. Note that here I'm talking specifically about the box that will replace the TiVo only, meaning this is what will do all the recording and storage as well as provide the PVR functionality for other front-end boxes elsewhere in the house. If I can find a solution that works in the living room and isn't too big or loud that's great too, but a backend/front-end solution is ultimately probably more flexible.

In terms of budget, if I start spending as much or more as I'd spend on a TiVo, I'll just buy another TiVo or maybe a Moxi. I want a solution that works and works well, but I don't need the be-all end-all of every component in the system. So the cheaper the better, but it needs to be decent stuff and work well, and I absolutely don't mind buying the components individually and putting everything together myself.

With respect to form factor/size, how loud the thing is, etc. I'm OK with the main PVR box being a bigger, louder box I can stick in the basement so long as it will support (and support well) a small, quiet front-end box in my living room. Note that it needs to support streaming over Wi-Fi since my basement and living room aren't wired. I do have very good wireless signal strength throughout the house, but if doing HD over Wi-Fi isn't going to work, then I'll have to re-think the solution and make sure the PVR that would sit in the living room isn't too obtrusive.

Now for the software. As far as I can tell based on what I've researched, MythTV is pretty much the only full-blown solution for doing a real PVR, and the nice thing with MythTV is I believe it supports both MythTV and XBMC on the front end, which gives me some options. Also from what I can tell MythTV is DLNA, which a lot of hardware (including something like Moxi) supports.

I'll cover hardware, tuners, etc. in a separate post. There are way too many options to cover here, and at this point I'm still evaluating all my options even if it means I'm not actually building something myself.

Front-End Boxes

At a minimum since I'm assuming the PVR box itself may be something bigger and louder than I want in my living room, I'll need at least one front-end box (potentially more).

  • Small form factor. Something like the system76 Meerkat Ion or even smaller (like an Acer Aspire Revo) would be ideal.
  • Works with a remote control. I don't want to mess around with a mouse and keyboard in my living room. Ideally it would work with my Logitech Harmony remote.
  • Quiet
  • Built-in HDMI output
  • Supports 1080p
Other Options/Components

Some of these I've just read about so mainly I need to do more research, but these are some interesting components that could play a role in the overall solution, so if anyone has experience with these or others I may not be aware of, I'm all ears.

  • HDHomeRun networked tuner. This is a REALLY interesting solution at least on the surface. My main concern is if it causes tons of network traffic, since my girlfriend and I both work from home and do VOIP, VPN, video teleconferencing, etc. I can't have my TV tuner sucking up all my internal network bandwidth.
  • WD TV Live. Love the price and form factor, but it's a bit difficult to tell what it would and wouldn't support. I assume this would work as a front-end box and would connect to MythTV
Other Questions/Miscellany

If anyone has answers to these I'd love the feedback. I've read quite a bit on these issues but still get mixed signals, which ultimately probably means YMMV applies, but particularly if someone reading this has FiOS TV and has experience with any of these issues it would be great to hear from you.

  • What channels will I get on a tuner card? I have Verizon FiOS TV and I'm not sure what they do and don't encrypt. Since I scaled my FiOS service back to more or less the basic channels, so long as I get the major networks in HD I'll probably be fine.
  • Can I use the firewire out on my cable box to interface with the HTPC? I've read mixed reports about whether ot not this works.
  • Are there non-TiVo options like Moxi people have had good luck with? I like a good DIY project, but I don't need this to consume my life, and the Moxi apparently does Netflix streaming as well, plus no monthly fees.
  • Any other devices either on the front or backend that I'm overlooking?
Next Steps

I'm asking a lot of questions in this post, but I have researched a lot of options for each of these so I'll cover the various areas individually in future posts. Once you get into things like tuner cards, etc. things get detailed rather quickly.

I'd greatly appreciate any feedback anyone might have on any of this, even if it's "just buy a TiVo and save yourself the headaches!" Not that I'll do that, but if I can learn from the mistakes of others who've gone down this road that would be fantastic.

More soon!

Thursday, December 24, 2009

"Defining the contours of freedom" - Free Software Foundation


Great, great video from Lawrence Lessig about the importance of the free software movement to society and culture as a whole. Lessig also wrote the forward to Richard Stallman's book "Free Software, Free Society" and it's one of the many things that helped me see the big picture where free software is concerned.

Wednesday, December 23, 2009

Grails 1.2 Released

Grails 1.2 final was released today, and there's tons of great new features as well as numerous under-the-hood improvements that make it a very compelling release.

Since I'm relatively new to Grails I'm still wrapping my head around some of the new stuff, but here are some of the more interesting changes in 1.2 from my perspective:

  • Performance Improvements
    Faster is always better of course, so the first thing that caught my eye was the performance improvements in GSP/SiteMesh and the tag library return types (default is now StreamCharBuffer, but tags can return object values too).
  • Environments in Bootstrapper
    Not that this was a showstopper in previous versions of grails, but having to use a kludge or do a quick check of the state of your database to see whether or not you should crank out test data seemed a bit wrong since environment awareness is available elsewhere in Grails apps. Now that it's in the bootstrapper too we can do things the "right way."
  • Per-Method Transactions in Services
    I haven't run into issues with this yet but I could see them coming, so it's nice that you can now declare at the method level whether or not something should be transactional.
  • Named Query Support
    I'm still debating whether or not I think this one is a good idea, but it's certainly interesting. Named query support allows you to define named queries right in your domain classes, and these named queries can then be executed in the same fashion as dynamic finders. The really intriguing thing is that you can run dynamic finders on your named queries, which is tremendously powerful. On the one hand I'm thinking, "Queries in my domain class? That seems wrong." But on the other hand, when they're looked at as "customized dynamic finders," I suppose it's really no more intrusive than the dynamic finders themselves. And frankly given the power you can get out of this feature it's probably worth the small purity of architecture trade-off.
  • Support for SQL Restrictions in Criteria Builder
    Much as I love GORM, sometimes it's simpler to throw some ad-hoc SQL at a problem. This is now supported in the criteria builder which should make lots of the "grab stuff then grab stuff from that stuff" type code disappear (if that made any sense!).
  • GSPs are Pre-Compiled in WAR Deployments
    Small new feature, huge impact in my opinion. On Tomcat instances where we're running a few other apps (especially on 32-bit Windows servers ... don't get me started), we noticed that Grails apps wouldn't start up due to out of memory errors that I strongly suspect were related to this issue. Pre-compiling GSPs reduces the amount of permgen memory space used on deployment.
  • Tomcat is Now the Default Container
    I didn't have a problem with Jetty personally but since we use Tomcat in production it's nice it will be Tomcat in development as well. Note that you can still use Jetty if you like since all the container support is done through plugins. The Tomcat Plugin has a ton of cool additional features like JNDI support in Config.groovy for the embedded Tomcat instance, as well as remote deploy/undeploy scripts. Yes, you can do "grails tomcat deploy" to deploy your app to a remote server. Sweet.
  • Named URL Mappings
    Very handy feature that lets you create URL mappings that may be linked to by name in the link tag/function. For example if you define a URL mapping with the name "fooBar" with attributes of foo and bar, your link tag in a GSP would be <link:fooBar foo="foo" bar="bar">Link to FooBar</link>
  • Improved JSON Builder
    Some nice changes (and an under-the-hood rewrite apparently) here, but note this is a breaking change from previous versions. You can turn on compatibility if you don't want to re-write your code to take advantage of the new simpler syntax.
  • Better Date Parsing
    One of the very few things I've run into in Grails so far that I thought to myself, "this could be simpler," is the way the date picker passes its params to controllers. Now it works like it should have all along.
Much more in this release so be sure and check out the release notes for all the details.

Kudos to everyone involved with this release! Can't wait to upgrade the current app I'm working on and give this all a whirl.

Tuesday, December 22, 2009

Microsoft Word Sales Face U.S. Ban -- InformationWeek

An appeals court on Tuesday ordered Microsoft to stop selling Microsoft Word 2007 and other Office 2007 products by Jan. 11 because the software infringes on a patent held by a Canadian company. The judge also hit Microsoft with a $290 million fine.

Buy MS Office while you can! Or save your money and reclaim your freedom by using instead. :-)

Saturday, December 19, 2009

Groovy - UltraEdit Plugin

UltraEdit is a nice little text editor when working on Windows. It is very much suited to handle all kinds of resource files and some little scripts, when starting your IDE just takes too long.

You can get it from

Now that UltraEdit is on Linux (the column select capabilities alone are worth the $50!), I hunted for a Groovy plugin for UltraEdit and it didn't take long. There's a link in this article to an addition to UltraEdit's wordfile, so you copy/paste and UltraEdit is Groovy aware. Nice.

Friday, December 18, 2009

EtherPad Blog: EtherPad Open Source Release

As promised,
we hereby release all the source code to EtherPad.

Our goal with this release is to let the world run their own
etherpad servers so that the functionality can live on even after we
shut down

If you are just interested in running an etherpad server, these
should get you up and running.

Running EtherPad behind a firewall is rather intriguing. Might have to do some experimentation.

Received a Review Copy of Tomcat 6 Developer's Guide


The folks at Packt Publishing contacted me to see if I'd be interested in reviewing their newly published Tomcat 6 Developer's Guide, and being a bit of a Tomcat junkie I jumped at the chance. I downloaded the ebook tonight and I'll be reading it over the next few days, so look for a review soon.

Thursday, December 17, 2009

Shalin Says..., Burst of activity in Lucene

To put it very simply, search engines transfer a lot of work from query-time to index-time. The reason this is done, is to speed up queries at the cost of adding documents slower. Until now, Lucene based systems have had problems with dealing with scenarios in which the searchers need to see the changes instantly (think Twitter Search). There exist a variety of tricks and techniques to acheive this even now. However, near real-time search support in Lucene itself is a boon to all those people who have been building and managing such systems because the grunt work will be done by Lucene itself.

I can't wait to see this implemented. I'm in the process of rethinking a big application to use Lucene/Solr instead of hitting a database for searches, and even though this application only gets data updates twice daily, they can be numerous and I can only imagine having near real-time search available will make it that much easier to keep your search indexes up-to-date.

Sometimes I honestly can't believe all the amazing open source projects that are out there.

There will not be a beta for Flash Professional CS5 (Adobe Flash Platform Blog)

They are still releasing a beta, only now it'll cost you $1000 to participate....

The above is a comment from Adobe's blog post announcing that contrary to what they said at MAX, there will be no public beta of Flash CS 5. And it's a comment that I think gets straight to the heart of the matter.

I'm not a Flash developer so it's no skin off my back, but I simply can't fathom why any software company would not take advantage of the incredible value a public beta period offers, preferably a fairly lengthy one.

"Get it out the door as quickly as possible" is a very short-sighted attitude, especially when people are paying big bucks for your software, and there's a massive risk of whittling away your users' confidence that is quite damaging in the long term.

I'm not pointing this out to pick on Adobe per se (funny how CFBuilder and Flash are taking completely different approaches on the beta issue), but it's a great example of what I see as a colossal misstep that all too many software companies make.

Even if the software isn't open source, proprietary companies can learn a lot from the tremendous strengths of open source projects, and in my opinion they ignore the strengths of open source at their own peril.

Naked Domains in Google App Engine with GoDaddy | Dave Shuck's Blog

I recently set up a new site ( on the Google App Engine running OpenBlueDragon.  By default when you set up a new site on GAE (Google App Engine), you choose an ID for your application, which must be unique on their system as it also serves as the hostname of the URL like this: http://[your ID]   For those that would like to use a different domain name, Google App Engine has mechanisms for doing so.  In the administration panel of your application, you can add a domain and then choose hostnames from that domain that the application should respond to.  However, it makes no provisions for serving the "naked domain". 

Excellent step-by-step by Dave Shuck on how to get "naked domains" (meaning no "www" prefix) up and running on Google App Engine.

Tuesday, December 15, 2009

Dave Shuck Relaunches on OpenBD for GAE

Around a year or so ago, I inadvertently took offline in a server move.  Considering that it is a very low traffic site that is little more than a scrapbook of hiking pictures and descriptions, there is no active user community to send me nasty messages begging for me to bring it back online.  Finally this past weekend, I spent a bit of time and revived the code base off an old server, moved all the images out to Amazon S3 and brought the site up running under OpenBlueDragon on the Google App Engine.

Another site goes live on OpenBD for Google App Engine--I think we'll be seeing more and more sites like this on OpenBD for GAE as CFML developers discover just how easy it is to leverage their CFML skills and still be able to take advantage of Google App Engine.

Monday, December 14, 2009

H.R. 390: College Football Playoff Act of 2009 (

To prohibit, as an unfair and deceptive act or practice, the promotion, marketing, and advertising of any post-season NCAA Division I football game as a national championship game unless such game is the culmination of a fair and equitable playoff system.

I'm oh so incredibly glad our so-called representatives see fit to waste time on such utter nonsense when the economy's in the crapper and we still don't have national health care. Bravo, morons. Here's hoping anyone anywhere near this loses their next election.

Saturday, December 12, 2009

Major Firmware Upgrade, eBook Store for eSlick Reader

New Features in the eSlick 2.0 Build 1130 Firmware Update

The free eSlick 2.0 Build 1130 Firmware Update includes some fantastic new features and has enhanced many of the features from previous firmware updates.

EPUB Support
Foxit eSlick now supports EPUB format, which is an XML-based format for reflowable digital books and publications. Now you can download EPUB eBooks onto your eSlick and the text will automatically display in an optimized format to fit the screen size.

PDB (commonly known as eReader) Support
Foxit eSlick now also supports eReader format, which is widely accepted by several software formats. eReader format is commonly used on mobile devices.

Image Support

Supports viewing image files in GIF, BMP, JPEG, and PNG format.

On-screen Virtual Keyboard

With this on-screen keyboard, you can use your navigation buttons to enter alphanumeric data in any text environment, including password entering and folder naming.

Working with Folders

eSlick now allows users to fully interact with a folder management system, enabling you to create a new folder as well as copy, move, and delete folders.

My Bookmark

A useful feature that empowers users to add customized bookmarks when reading PDFs, helping users to quickly return to marked pages to resume their readings.

Rendering Text in Landscape Mode
Now the text files can be rendered in landscape mode which allows you to view the screen horizontally.

Optimized Text-rendering Engine
An optimized text-rendering engine boosts the rendering speed for the text files dramatically.

Bug Fixes
Many bug fixes including a bug where reading history cannot be recorded when viewing a magnified TXT file.

If you've been looking at the eSlick as an alternative to the Kindle or Nook but you've been waiting for ePub and eReader format support, the wait is over. I've had an eSlick for a while and I love it, but I have to admit the PDF-only thing was a bit limiting.

eSlick also announced the eSlick Bookstore ( ) which is a partnership with Fictionwise, and it looks like a great way to get books for the eSlick.

No, the eSlick doesn't have wireless connectivity like the Kindle and Nook, but what it does have is a Linux-based GPL OS and a lot more freedom since you're not locked to a single vendor for all your books. There's also the lack of the Big Brother factor that's pretty appealing for tin foil hat wearers such as myself.

Wednesday, December 9, 2009

Capitol Christmas Tree


Always a great sight if you're in DC during the holidays!

Vintage Cold Fusion (yes, with a space) Boxes


Since I know not everyone follows me on and Twitter I wanted to post this here as well. Found these sitting on an abandoned bookshelf in my office in DC. Ah, the memories.

Saturday, December 5, 2009

Coding Horror: Version 1 Sucks, But Ship It Anyway

What's important isn't so much the initial state of the software -- in fact, some say if you aren't embarrassed by v1.0 you didn't release it early enough -- but what you do after releasing the software.

Couldn't agree more with this, and lately on some projects I've had to remind myself of this mantra on a daily basis. This is right in line with the "worse is better" principle ( ), and since by nature software developers tend to be perfectionists, it's often difficult to let go, realize it will never be done, and focus on the bare minimum to get the application out the door.

A commenter on this post does have a good point, namely that you shouldn't ship it so early that your customers lose faith. So focus on the bare minimum of features that make the application usable, make sure that small set of features is rock solid, and launch the damn thing! After launch you'll impress your users with all the cool features you add one by one, not to mention in the meantime you're getting real feedback from real users, and before you know it you have an amazing application on your hands.

Haral's Blog: Java 7 chapter 1: The Virtual Machine

JSR 292: The Da Vinci Machine Project
The JVM should be extended with general support of languages other than Java, and in particular dynamically typed languages. Such language implementers have observed a range of painful aspects of the byte code language, and this projects aims to remove those in a general manner. The noteworthy suggestions is: dynamic invocation, continuations, tail-calls and interface injection. The JSR specifically targets dynamic invocation and hot class modification. Today dynamic languages produces a lot of different options for signatures that all have to be stored in permgen space. This is very inefficient, and one should be able to narrow down these options at runtime.

Since JSR 292 got voted up for Java 7 it will be interesting to see how the CFML engines will take advantage of this. Fingers crossed for a big performance boost when Java 7 comes along!

Friday, December 4, 2009

OpenDNS Blog » Some thoughts on Google DNS

Google launched a DNS service today, almost exactly four years after I started OpenDNS. This comes as no surprise as it was only a matter of time before one of the Internet giants realized the strategic importance of DNS. I’ve received a lot of questions from bloggers, journalists, friends and most importantly, our users. And so I want to share my thoughts on what this means for the recursive DNS space and what it means for OpenDNS.

Must read for people contemplating switching from using their ISP's DNS servers to something else (which I STRONGLY encourage) based on Google's recent announcement.

I've been using OpenDNS almost since its inception and I can't say enough good things about it. The blog post I quoted above does a great job of outlining the importance of DNS, some of the crap ISPs can pull with their DNS servers (some great Security Now! podcasts on that topic as well), and why OpenDNS is a great alternative.

DNS is a key part of your Internet experience, and the more control you have over it the better. At a minimum switch away from using your ISP's DNS servers, and I for one strongly encourage you to check out OpenDNS.

Thursday, December 3, 2009

Cisco AnyConnect VPN Client on 64-Bit Ubuntu 9.10

I've been using vpnc as my VPN client on Ubuntu for quite some time now, but vpnc allows for split tunneling (meaning I'm on the VPN but I can still access my local network), and, well, let's just say some network security folks don't like that. ;-) I looked into disabling split tunneling on vpnc and I didn't find any conclusive answers, so it was time to look for an alternative VPN client for Cisco VPNs.

Cisco AnyConnect is a VPN client that can (in theory) be installed from a web browser on any operating system, provided your VPN server is configured to support it. If you want to check, hit your VPN server in a browser. If you see a login screen, log in with your normal VPN credentials and you should be able to install AnyConnect from there.

All isn't rosy with this picture on Linux, however. The browser-based install doesn't work (or didn't for me at least), and while you can download a Linux version of the installer, the installer runs fine but the client throws some errors when you attempt to connect to your VPN. Specifically in my case it was throwing a "no valid certificates" error or something along those lines. As usual there's a relatively simple solution, but it took some digging.

AnyConnect relies on libraries that are distributed with Firefox, but AnyConnect expects these libraries to be located under /usr/local/firefox. On Ubuntu they're located elsewhere so AnyConnect chokes when it's trying to connect.

Once you have AnyConnect installed, go through the following steps to get things working. Also make sure the daemon is running; check using ps -ef | grep vpn and if it isn't running, do sudo /etc/init.d/vpnagentd_init start to fire that up.

  1. Download Firefox from Yes, I know, you already have it installed, but download a fresh copy anyway. Although you may be able to leverage your existing copy, I went this route just to be sure nothing interfered with the copy I use all day every day. I read some things that seemed to indicate you needed to get the 32-bit version if you're on a 64-bit OS, but that wasn't the case for me. I suppose if you have a 32-bit version of AnyConnect you'd want to get the 32-bit version of Firefox.

  2. Untar Firefox into /usr/local/firefox

  3. Create symlinks in /opt/cisco/vpn/lib to the following files, all of which are located in /usr/local/firefox:
    (Thanks to casevh in this thread for the list of libraries)

  4. Launch AnyConnect (/opt/cisco/vpn/bin/vpnui). From what I read you should not be launching AnyConnect as root or by using sudo.

  5. After the client launches, enter the host to which you want to connect.

  6. Accept the certificate provided by the server.

  7. Enter your user name and password as you normally do.

That's it--you should be in. Note that if you're used to using a profile file with a different VPN client, AnyConnect (at least based on my 1/2 day of experience) seems to work differently, so a user name and password should be all you need. If you're using a SecurID token of course you'll use that as your password.

eMusic's Best Albums of the Decade

Summing up a decade in 100 albums is a terrifying task. How do you determine which albums make the cut? Do you choose the albums that were the greatest game-changers? Or do you go with the albums that had the deepest personal resonance? Is it about global or individual importance? And which records are most emblematic of our age — an era equally fraught with paranoia, despair, optimism and joy?

Some really awesome stuff in this list, and I'm glad they threw this together because I would have missed some of these releases otherwise.

I disagree with some of the choices, though if I take my own likes/dislikes out of the picture I can perhaps see why they'd make the cut. Pretty monumental task to even come up with this list so in general I think they did pretty well.

#2 should have been #1 though. ;-)

Wednesday, December 2, 2009

The Truth About IT Consultants | I, Cringely

1) "This can only be accomplished through a large custom development project."

2) "Of course your data is safe."

3) "We'll need a day or two for optimization and debugging."

4) "Yes, we've done this before. There are several companies using this product (or technology). They really like it."

5) "Server consolidation and virtualization will save you money."

6) "Storage consolidation and virtualization will save you money."

7) "The upgrade (or change) will be seamless and will not affect production."

8) "The upgrade (or change) will be transparent to users."

9) "Yes, we tested this thoroughly before installing it."

10) "If you install Tivoli it will solve all your support problems."

An oldie but a goodie. A friend of mine is about to go down this road to hell on a project (and I'm not so sure this road is even paved with good intentions ...), and it's amazing to me that the same mistakes are made over and over and over again.

Get someone to listen to you and come up with an appropriate solution FOR YOU. Most IT consultants are salesmen. They work for a company, not for you, and their #1 goal is to get you to buy their wares, regardless of whether or not they're appropriate for your project.

Don't let a salesman run the show. Talk to your internal IT staff first and see what THEY think you need. Then let them actually use their expertise in choosing or building the right solution. The second you start getting RFPs from big consulting shops, if you're not careful just expect to get completely screwed.

MPAA wants to control your TV |

The MPAA is pressuring the FCC for the authority to cripple recording devices using so-called "Selectable Output Control" (SOC).

Basically, SOC would enable Hollywood to actually shut off the video outputs on your cable box, DVR, or other recording device when particular movies or shows come on. When the movie's over, the outputs might turn back on. Your devices would dance to Hollywood's tune.

Most cable boxes and DVRs already include Digital Restrictions Management (DRM) and operate using proprietary software -- both of which we need to work to eliminate. But just because many of these devices already use DRM, that doesn't mean we should let Hollywood and the FCC keep adding more. This new form of control would take even more freedom away from people using those devices, would restrict people using free software like MythTV to watch broadcasts and record them, and would set a dangerous precedent elevating Hollywood's desires over the public's freedom.

There's a link in the full article to submit a comment to the FCC, which I encourage everyone to do.

Tuesday, December 1, 2009

Slashdot News Story | Harvard Says Computers Don't Save Hospitals Money

Researchers at Harvard Medical School pored over survey data from more than 4,000 'wired' hospitals and determined that computerization of those facilities not only didn't save them a dime, but the technology didn't improve administrative efficiency either. The study also showed most of the IT systems were aimed at improving efficiency for hospital management — not doctors, nurses, and medical technicians.

This is absolutely criminal. If computers aren't making hospitals more efficient then they're using them wrong, or they have crooked software vendors who are cashing in while not giving hospitals what they actually need.

This is another great opportunity for a big open source project in my opinion.

CFC Function Declarations in Javascript

The last few days I have been working on having the ability of declaring pure Javascript functions and making them available as first class, top-level, citizens in the CFML world.

Setting up a separate CFC can be done using the following:

function myMethod( param1, param2 ) {
return $cf.getTickCount();

Note that you can mix CFSCRIPT, Javascript and CFML in the one CFML/CFC file. Each one can declare a top-level function and you can use whatever language you feel works best for you for that particular method.

From there on in, you can simply declare the CFC as normal and use without any problems.

Great progress being made on the server-side JavaScript in OpenBD! Since JavaScript is the lingua franca of web development, it's going to be great to have it fully integrated into our CFML toolbox.