I just want a pretty picture…

Several years ago, I had a Capital One credit card which had Van Gogh’s “Starry Night” as the background image.  It was my “Gas” credit card, that I would put all of my gas on, and since I had a 30 mile commute each way, I got to see it pretty often.  My “Starry Night” credit card was a little piece of joy that I got to see whenever I filled up my tank, helping to lighten up my otherwise annoying task of filling up the gas tank.  A few months later, one of my other card companies (Providian) offered to give me a customized card with Seraut’s “Sunday Afternoon on the Island…” and thus, I was on my way to having a wallet full of impressionist paintings.

Unfortunately, when my Capital One card expired, they sent me a new one with the plain Capital One background, and when I called to request the Starry Night background again, they said that wasn’t available with my card.  I grumbled a bit, but gave up after a while.  The next year, my Providian card followed suit, and so I gave up on my dream of carrying the works of the masters in my pocket.  It was allayed a bit when my wife (then girlfriend) picked me up a “Starry Night” skin for my laptop from Gelaskins but I’ve still been annoyed about the whole situation for at least 4 years.

Recently however, I noticed in my Wells Fargo account that I could request a custom design on my Wells Fargo bank card.  “Fantastic!,” I thought..  “I can finally get Starry Night back on one of my cards again.”  Reading over the guidelines, I noted that it would only accept images which you had the rights to personally.  “No problem, ” I think to myself, “Van Gogh died in 1890, and copyright at the time extended for the life of the author + 50 years, so Starry Night went public domain in like 1940, before I was even born.  I’ve got the rights to duplicate it.”  I browse over to Wikipedia, which has a photo of the painting, which, according to their licensing information is in the public domain because the copyright has expired, just as I expected.  So I download the image, send it to Wells Fargo, and submit it.  They say they will contact me within 5-7 days to let me know if my image has been approved.  “Horray,” I think.  “There’s nothing offensive about this picture, it should be a slam dunk!”

Unfortunately, 5 days later, I recieved an email:

Unfortunately, the design you selected does not meet our Image Guidelines. To select a new design, simply sign on at https://www.wellsfargo.com , click the Access Card Design Studio link on the Account Services page, and try again using a design that meets the following criteria.


 For all images you must:
 * Own the image or have permission from the owner to use the image on your card

Hrm.  I call the number included in the post, and ask to speak to the person who sent the rejection.  They’re unable to let me speak to that person, so I ask to speak to someone else in the card designer department, and they inform me that I can’t speak to anyone in that department.  I ask the person who answered why I’m not allowed to use the painting on my card.  They explain that I must have permission from the author of the artwork to have it on my card.  I calmly explain that the author has been dead for nearly 120 years, which makes obtaining permissions exceptionally hard.

“Fortunately,” I continue, “Copyright on the image expired in 1940, so it’s currently public domain.”

“But we need to have permission from the artist to use their image on a card.”

“He’s been dead for 119 years.  He isn’t in a state to give permission to anyone for anything.”

A short discussion with her supervisor didn’t yield any more progress, so I’ve decided to just submit the image over and over again until someone from Wells Fargo who is actually involved in the approval process contacts me.  I suspect it may take a while, but I just have to re-upload the image to their site once a week until they do.


Getting Flex Builder 3 plugin to survive a new Eclipse Version

Eclipse 3.5 (Galileo) has recently been released, so I’m in process of rebuilding my development environment to run on it.  I was happy enough to go use the update sites to re-install CFEclipse and MXUnit, and the StarTeam (our company’s chosen Version Control software) plugin was able to seamlessly update the Galileo instance of Eclipse to include it’s plugin, but I ran into a snag when trying to update the Flex Builder 3 plugin.

When originally installing the Flex Builder 3 plugin for eclipse, I used the default path (i.e. C:\Program Files\Adobe\Flex Builder 3 Plugin\).  When I tried to re-run the installer, It reported that I already had a Flex Builder Plugin instance at that location, and would I please choose another directory.  Not wanting to clutter my hard drive with extra copies of the Flex Builder plugin, I decided to poke around and see what I could do to use the existing Flex Builder Plugin in my new Galileo installation.

What I eventually happened on was a very nice, clean way to install a single instance of an Eclipse plugin, and allow multiple copies of Eclipse use it.   It’s pretty straight forward, and assumes you’ve already got a copy of Eclipse installed, and a licensed copy of the Flex Builder 3 Plugin installed.

First off, navigate into your eclipse directory.  Mine is C:\Program Files\Eclipse\Galileo\ .  This should be the folder which contains your eclipse.exe file.  Under this directory, if there isn’t already a directory named “links”, create one. Navigate into the links directory.  Create a new text file named “com.adobe.flexbuilder.feature.core.link”.  Edit the file, and add the following contents to it:

path=C:/Program Files/Adobe/Flex Builder 3 Plug-in

Close the file, and start Eclipse.  Now go into your Window Menu, select “Open Perspective”, and “Other”, and you should see your Flex Development Perspective listed.  It’s even smart enough to pick up the license key from your previous installation, so you don’t have to dig out the old key to reinstall. However, for some reason, when I did this it lost my installed Flex SDKs.  To fix this, I went to the “Window->Preferences” dialog, and navigated to the “Flex->Installed SDKs” option.  I removed the two entries for “Flex 0.0″ which were listed, and re-added the two existing Flex SDKs: c:\program files\adobe\flex builder 3 plug-in\sdks\3.2.0 and c:\program files\adobe\flex builder 3 plug-in\sdks\2.0.1   You must mark one of these as default by clicking the checkmark next to it on the screen.  After this, click Ok, and you should be good to go.

If you’re doing ColdFusion development, don’t forget to also install the ColdFusion extensions for Eclipse at C:\program files\Adobe\Flex Builder 3 Plug-in\Installers\ColdFusion Extensions for Flex Builder, and JSEclipse is also pretty helpful at C:\program files\Adobe\Flex Builder 3 Plug-in\Installers\JSEclipse


3D TV cometh

I saw a “glassless” 3D TV demo at The Bridge on Friday night when we went to go see Watchmen. Looked pretty cool, but there’s still plenty of kinks to be worked out, like viewable angle, and screen distance considerations. It looks like you still have to be sitting at least 5 feet away from the screen, and roughly centered, (though there appeared to be a “pocket” of space about 45 degrees off center that gave 3D too).


Friday Robot Roll Call for Week of 3/2/09

Sorry for the late posting, I was out watching Watchmen on Friday, and I was busy soldering together my Microrobot Avoider  and Geocaching on Saturday 
  • Engadget has an article about a Japanese fire department which is employing a semi-autonomous robot for rescues. This track-crawling bot can get past very hot areas, locate people trapped by the flames, and carry them to safety. While on board, the bot can monitor the vital signs of the occupant. This may also be used for earthquake rescue.
  • Hack-A-Day has an interesting video of a multi-mobility robot which can either use hexapod ground motivation, or fly using helicopter blades and motives.
  • Continuing with the Helicopter theme, Engadget has an interesting article about flying drone robots which can be deployed to disaster relief areas to supply a wi-fi mesh network and phone service to areas during emergencies
  • Engadget continues to wow us with stories and videos of household assistance robots.  I especially like the arm design on these robots, which allows for greater angular postions for thier arms that many other designs I’ve seen.  
  • I’m still vaguely skeptical that it’s real, but Muckflash is reporting on a humanoid robot which “kidnapped” an intern who was working with it.  The robot had an powerful behavioral engine which made the robot “love” anyone who it saw, and it chose to block the intern from leaving the room, requiring technicians to come and shut it off to allow her to go home.

In my own robotic news, I picked up a Microrobot Avoider Robo Jr.  and soldered it together yesterday morning.  The torque it generates is a bit disappointing, but I’m hoping to use it as a simple wheeled robot platform.  I’m going to put together an adapter plate to attach either my Ardino or AXE117 board to the chassis to drive it.  

Also, i’m working on putting together the parts for a Jansen Linkage on the same Ponoko cutting i’ve built my adapter plate on.  Once I’ve got everything together, and tested, I’ll open source the plate(s).


Friday Robot Roll Call for Week of 2/23/09

I’m starting a new feature where I post a blog entry each week about interesting news that I find related to Robots.  The theory is to share ideas, and stimulate the imagination of myself and others about robotics.  Not everything may be directly related to robotics, but it should spur the imagination at least.

  • Tech Digest has a very interesting story about using a mesh of inter-dependent robots with a walking surface on top of them to simulate an endless floor in Virtual Reality a la Holodeck.
  • A friend of mine turned me on to Jansen Mechanical Linkages, which could make some very interesting leg actuators for some walking/climbing robots without requiring the extra degrees of freedom which legged robots typically required.  Related to Jansen Linkages are Klann Mechanical Linkages (which are patented).
  • It’s not exactly new, but while browsing the TED website, I came across a very interesting talk by Robert Full about using animal feet as inspiration for building robotic feet.
  • Engadget has a fascinating story about a woman in New Zealand who has realized mankind’s dream of swimming like a fish with the help of a robotic mermaid tail prosthesis.  Not only does it allow this double amputee to swim, but looks really good while doing so.

Finally, just a bit on my own robotics work.  My latest purchase was a PICAXE 14M experimentation board that I’m planning on using as a motor controller for a simple two-wheel castor mobile robot platform.  It has 4 PWM analog outputs and supports I2C, so I should be able to issue commands to it from an Arduino mainboard.  Unfortunately, I’ve discovered that the PICAXE programming cable/circuit doesn’t work properly with the $10 IOGear USB/DB9 adapter I have, so I’m probably going to have to go track down a serial PCI card for my computer.


Lenten Resolution

Back in college, I was attending church for the Ash Wednesday service, and the priest’s sermon really touched me. He stated that the Lenten season wasn’t so much about giving something up, or “fasting” as it was about doing things which remind us of what it is to be Christian. While fasting is a good fallback, he actually suggested that we spend this time doing more, working harder to be good Christians, rather than just giving up something. We should take this time to give of ourselves. Perhaps giving up what we prefer to spend time doing, in order to make the lives of our fellow humans better. Giving up our comfort, giving up our easy life, just to make things better for some others.


What Microsoft has to learn…

This started as a response to Rob Gonda’s “Will Microsoft ever get it?” post, but I think there’s enough in here to actually build out it’s own post:

I tend to break computer users down along the “Neophile” vs “Neophobe” axis. About a third of the computer users out there will use any new technology as long as it’s new. These are the people who loved Vista, because it did new things that no OS before had done (or at least, not one that they had used). Most of them will upgrade to windows 7 just because it’s new, and they want to try it. Usually within this crowd there’s a certain tolerance to bugginess, because the “newness” outweighs the bugginess. In the most extreme case, these folks are Linux users, who run bleeding edge Gentoo releases and build packages of new software whenever they’re released. These are the folks who are subscribed to the Freshmeat and Sourceforge new software feeds, and install new software daily. I’m one of these folks mostly.

Then there are “Neophobes”, who hate new things simply because they’re new. These are the people who say “I’ve got my toolset, and it works, and it’ll take me weeks worth of time to learn something new, so why the hell would I want to upgrade to Vista?” These are the people who were running Windows 98 well into the 2003 timeframe. These people were angry enough that they were “forced” to upgrade to Windows XP, and this whole Vista thing just pushed them over the edge. A few picked up Macs, but then they’ll be back on the Windows platform in a few years when Mac OS 11 comes out and they get pissed about the fact that there’s now some weird desktop metaphor change that they aren’t used to and they’ll start reminiscing about good old windows, and how easy everything was there. There’s a fair number of these folks in IT too. Ironically, this crowd also hosts a lot of Linux users who are more than happy with their green phosphor command prompt thank you very much. There’s also a good amount of bug tolerance in this group because they would rather work with a software package that’s buggy, but they know how to work around the bugs, than learn something new.

Then there’s the middle ground. I call them the Pragmatists. They don’t care whether it’s new, or old, they just want something that works. There’s almost no bug tolerance in this group. These are the folks who coined the phrase, “Don’t use a Microsoft Product until the first Service Pack”. This group is actually a fairly small portion of the general IT population, since they tend to get beaten up a lot by the other two factions. However, this group makes up the vast majority of the general, non-IT population. Most of these people won’t bother even trying an application unless there’s an obvious need at hand for it. Likewise, they won’t bother with upgrading their OS until some outside circumstance forces it (They buy a new computer, with the new OS on it, they are forced to by their corporate IT policy, etc..) For most of these people, there’s no reason to switch to Macintosh, or Linux, because even the huge changes in Vista don’t significantly negatively impact them. Their Office stuff still works, though the toolbars took a bit of getting used to, and their email and web browsing work just fine, and that UAC stuff only affected them like 5 times when they were first setting up the computer, and then it hasn’t popped up since then.

The problem with Vista is that Microsoft got too caught up in the Neophile point of view. They made so many radical changes to the OS that it completely alienated all of the Neophobes to the point where even the people who despise change, and want to keep things as static as possible are chosing to change to Macintosh rather than learn the newness of Vista. And of course, whenever you make such massive changes to any large system, many bugs were introduced. This alienated a good chunk of the Pragmatists as well. What Windows 7 needs to do if it wants to succeed is move back towards the middle, to the Pragmatist point of view. New features are great, but don’t let them overshadow reliability, and for god’s sake don’t drop massive user paradigm changes into your most commonly used flagship products first without getting people used to them in other products. The ribbon bar in Office may be a good idea, in the long run. It may make office easier to use, but you’re terrifying about a third of your audience. It’s just not a good plan.


Cold Fusion is NOT dead… ColdFusion is LIFE!

Over the last year or two there have been various reports that ColdFusion is dying, and that it’s a forgotten technology. This has caused much furore in the CF Dev community, since a good many of them have built their careers on ColdFusion evangelism and ColdFusion development.

However, the recent TIOBE Rankings for April 2008 show that not only is ColdFusion not dead, but it’s actually on the rise once again. While it still ranks below the likes of Ruby, Python, and C#, ColdFusion has surpassed Lua, ActionScript, and Groovy.

Of course, there are plenty who will argue the validity of using the TIOBE index, since it’s based on Search Engine results, rather than actual market positions, or sales figures, but at very least, ColdFusion is doing a good job of generating posts about ColdFusion programming all over the internet.


CFINVOKE as a substitute for CreateObject

So, a while ago, faced with the fact that CreateObject and would be disabled on my main development environment by zealous security requirements, I began searching for a way to still allow myself to develop and work with OOP, even though the “Community Best Practice” methods for working with Objects weren’t allowed in my dev environment. After a bit of experimentation and practice I came up with a pattern that worked remarkably well for me, and actually solved some of the other problems that I noted people were having with the “standard” invocation pattern.

My pattern is reliant on two things:

  1. The CFC must have (or inherit) a public init function, which performs the duties of a traditional object “Constructor”.
  2. The init function must return a reference to the object, generally by ending with

In the traditional paradigm, invoking an object is (almost) always performed in two steps. First , you get a fresh new object with either the CFOBJECT tag, or the CreateObject function. This object’s psuedo-constructor (any code outside the CFFunction tags) has been executed, but any intializing values (dsn for a DAO, the MachII.framework.AppManager for a MachII plugin, etc..) have not yet been fed into the object, so it’s really “half baked”. It’s not ready for general consumption. In order to make it ready for general consumption, you have to call an initializer on it. By convention, this function is called “init”, and accepts any arguments that are necessary to make the object “ready for primetime”.

A few people began to notice that this pattern broke your code up into multiple lines, which could be accidentally separated, resulting in the unitialized object references being released into the wilds of your program. One of these people came up with the bright idea of returning a reference to “this” from the init function. This allows your init function to be chained to the CreateObject call like so:

<cfset newObject = createObject(“component”,”foo”).init() />

This still is possible to mess up, but as Joel Spolsky once pointed out, one of the keys to making your code stable is making wrong code look wrong. If all of your CreateObject statements are immediately chained to an init function, then it’s easy to track down errors where your instantiated-but-unitialized objects are released into the wild. If you see a CreateObject anywhere that isn’t immediately followed an init, then you know at least one thing you need to fix.

This development inspired me. I knew that CFINVOKE could be used to in one operation, instantiate an object, and call a function on that object. The return value of that function call could be saved. What would happen if I ran a CFINVOKE on an init function that returned a reference to “this”? It turns out that the result is exactly the same as the CreateObject chaining that people were recommending before, but it didn’t require access to the “forbidden” functionality.