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

DeliciousEmailShare

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).

DeliciousEmailShare

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).

DeliciousEmailShare

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.

DeliciousEmailShare

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.

DeliciousEmailShare

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.

DeliciousEmailShare

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.

DeliciousEmailShare

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.

DeliciousEmailShare

Mozilla Prism

I took a look yesterday at Mozilla Prism. So far, i’m not particularly impressed, though I have to do a little more investigation into the webapp.js file and see what XPCOM stuff I can tap with it. As it stands, it seems like it’s just a simple way to open up a chromeless browser window from the desktop instead of having to click a bookmark. Largely uninteresting, when compared to things like Google Gears and Adobe AIR.

Tonight i’m going to tap the Google Gears libraries a bit and see if there’s anything in there that could be combined with Mozilla Prism to make something really cool.

DeliciousEmailShare