problems with webmethods developer/designer 8 (eclipse based)

So I’ve upgraded from v7 of webmethods developer (with the custom three column sort of view) over to v8 of webmethods designer (eclipse based)

Here are the stupid, annoying, weird things that I haven’t managed to fix (yet?)

  • Entire flows are marked in grey until you check them out for editing. I don’t want to edit it, but I want to be able benefit from having a colour screen. I also want to be able to separate disabled steps. Sure, the icons are still there, but it’s all grey.
    Which steps are active?

    Which steps are active?

  • Comments on a flow are now a single line property. They used to be a whole panel of free form text. Given how awkward it is to comment the “code” any other way, and given that this is the only place to put any overall comments on the whole flow, and given how crap the VCS integration is (at least in our setup?) this box is pretty important for staying sane. yes, you can use the “…” link to get into a box editor, and i’ll probably get used to this one, but it used to be a bit easier
  • No keyboard shortcut to expand the flow. And no config setting to always start expanded. Although right and left arrows will open and close, they only open/close a single level. That’s not good enough.
  • Pressing delete on the keyboard doesn’t work for flows/folders in the Package Navigator. It does work for flow steps. Even though right click “delete” shows Delete as being the keyboard shortcut
  • Enough for now. bleh.

eclipse 3.6 and maven archetypes with IAM/q4e

Ok, IAM for maven integrations fails the big one. It still uses the v1 archetype plugin in maven, so it completely and utterly fails to generate archetypes that are remotely recent.

Secondly, it only uses an internal list of archetypes, even if there’s more installed in your local ~/.m2 repository, and there’s no way of browsing on a remote repository, you have to type in all of it. (Intellij 9 also does this, but at least it can then do the generation steps!)

So, how about running archetype:generate from the command line, and then importing it into eclipse?

well, that kinda works. I made a new empty project, and chose to import a maven project. I pointed it at the base dir of my generated project, and it detected the two child modules, and with “experimental parents” enabled, it generated me 3 projects. Apparently that’s how eclipse works. kinda lame. My parent project has all the source of the inner projects.

This was using eclipse 3.6.1, and Eclipse IAM version 0.11.0.201001181900

WebMethods Designer 8 with eclipse 3.6

SoftwareAG’s webmethods designer 8, the eclipse based replacement for “Developer” comes packaged into a rather old version of eclipse, 3.4. if you’d rather use it with, say, 3.6, here’s what you need to do…

Install it as it likes, then open up c:\softwareAG\eclipse\updates. This is the goodness :)

Start up your eclipse 3.6, and under “help->install new software” choose “add” then “archive” and find first of all, the com.softwareag.common.zip and install it. The feature should install happily there.

But, to install the DeveloperPlugins.zip, you need to do a bit of hackery.

Inside the zip, open up features/com.softwareag.is.feature_8.1.0.0000-0193.jar, and then open up com.softwareag.is.feature_8.1.0.0000-0193.jar (your version may differ, but it should be much the same)
Then, open up feature.xml and you’ll see the following list of requirements:

   <requires>
      <import feature="org.eclipse.gef" version="3.4.0" match="greaterOrEqual"/>
      <import feature="org.eclipse.wst" version="3.0.0" match="greaterOrEqual"/>
      <import feature="org.eclipse.jst" version="3.0.0" match="greaterOrEqual"/>
      <import feature="org.eclipse.platform" version="3.4.2" match="greaterOrEqual"/>
   </requires>

Unfortunately, org.eclipse.wst and org.eclipse.jst don’t exist anymore, they’ve been broken up into smaller pieces, and renamed.

Remove those two lines from the requires list, and replace them with this:

   <requires>
      <import feature="org.eclipse.gef" version="3.4.0" match="greaterOrEqual"/>
      <import feature="org.eclipse.wst.ws_core.feature" version="3.2.0" match="greaterOrEqual"/>
      <import feature="org.eclipse.jst.web_core.feature" version="3.2.0" match="greaterOrEqual"/>
      <import feature="org.eclipse.jst.enterprise_core.feature" version="3.2.0" match="greaterOrEqual"/>
      <import feature="org.eclipse.jst.server_core.feature" version="3.2.0" match="greaterOrEqual"/>
      <import feature="org.eclipse.platform" version="3.4.2" match="greaterOrEqual"/>
   </requires>

Save your way all the way back out, and then use this zip as a software source as before, and the new feature should install just fine :)

You may not need all three jst.XXXX_core features, but this was enough to get it working for me.

oh, You’ll know you need this, if you get the following errors when you try and install from the original .zip files.


Ack, try and get back to the initial state where this didn't work to catch the whole error message to make googling easier.

blank is numeric, but blank is not numeric?!

Someone please explain this piece of sheer lunacy in apache commons-lang’s (otherwise superb) StringUtils

From the docs

 StringUtils.isNumeric(null)   = false
 StringUtils.isNumeric("")     = true
 StringUtils.isNumeric("  ")   = false

Insanity. I can only assume this was an error in the old code, and is now preserved for backward compatibility. :(

What you want instead is NumberUtils.isNumber()

Version control of tools.

Over the years, this has come up on and off again. Some people fervently saying that tools should be kept in version control as well, some people saying that’s ridiculous overmanagement, and that many tools are very unhappy in version control anyway. For instance, try keeping a working version of visual studio in your version control system[1] Or even just try keeping different versions of a perl library from CPAN around.

I’ve normally leant somewhere in the middle. writing C? you probably want your compiler versioned. Nothing worse than an OS upgrade providing a new version of GCC and you finding that either a) it doesn’t compile any more, or b) worse still, some obscure “feature” has changed/been fixed. and your code compiles, but doesn’t _work_ anymore.

Writing Java? You probably want to always use the newest JDK. Writing perl? well, who knows….

Anyway, I ran into this problem recently with exiftool, or Image::ExifTool, depending on how you use it. Some changes/corrections in the library broke a lot of my photo gallery generation scripts. I did want some of the things in the newer versions of exiftool, like extended support for the MakerNotes for my new(ish) Canon 500D, and more robust parsing and writing of XMP.

What I didn’t want was changes to the IPTC print format. (Urgency was now returning “0 (reserved)” instead of “0”, I now needed Urgency# to disable print formatting) What I didn’t want was apparent changes to the priority of IPTC and XMP. What I wanted was my tools under version control.

Or more accurately, better acceptance testing of new tools before allowing new versions to be installed. But really, this is for home use. Do I really want to have a test suite run before I install any new tools? Hell No. But can I afford to let untested tools near my photos? No again.

Lose lose for the consumer. Like normal.

BACK TO POST Although, really, your version controlled tools should not require human intervention to build, so if you use visual studio to do the actual real builds of your system, you probably have other problems.

Version Control of scriptlets/single file programs

I have my ~/bin directory under version control, which is fine, and all well and good. But some of those scriptlets, I’d like to make public, and share them on github, or somewhere similar. Then they could get tickets opened and closed, and better? documentation. But, version control systems seem to consider a directory to be the smallest managed unit possible.

How does one reconcile these? I don’t want all my scriptlets public. (Some of them are both far too ugly, and contain far too much hardcoding) But I don’t want a directory for each scriptlet and have to manage paths. I DO still want to have all scriptlets under version control. Essentially, these are _all_ unique software “projects” but with just a single file per utility, it seems heavy handed to have to have an install wrapper to handle putting it into a single bin dir for actual usage. And having to have separate repositories for each one?

I can have a public and a private repository, but how does one “promote” code from private to public? (I’m only really interested in svn/git/hg) Gist’s at github seem to offer versioned single files, but how can that easily be integrated into my ~/bin directory? I want some sort of easy way of saying “update all these utilities”

Really, how does one manage this at all? Or do we all just stick it in a single directory, and live with the cruft?

putty, pageant, git and github. key problems

FATAL ERROR: Disconnected: No supported authentication methods availableGithub’s help on this isn’t actually very good.  And the solution is really quite easy when you get it working.

  1. You _DO_ want to use plink for ssh when you’re installing msysgit.
  2. Putty’s public key that you have saved isn’t in the right format for pasting into github.
  3. fire up puttygen again, but choose to LOAD AN EXISTING KEY
  4. copy and paste from _there_ into github.

Do not try things like opening up your saved public key, removing the comment lines, and adding “ssh-rsa” to the front or things like that.  It won’t work.

If you get this of these, you’re doing it wrong:

  • FATAL ERROR: Disconnected: No supported authentication methods available

Some of the other advice on the net is for problems where plink can’t talk to pageant.  To make sure that’s not the case, you need to try using plink directly to login to github.

C:\somewhere>"c:\Program Files\PuTTY\plink.exe" -v -agent git@github.com

Looking up host "github.com"
...
SNNNIIIIPPPP
...
Pageant is running. Requesting keys.
Pageant has 1 SSH-2 keys
Using username "git".
Trying Pageant key #0
Server refused public key
Disconnected: No supported authentication methods available
FATAL ERROR: Disconnected: No supported authentication methods available

If you see that pageant is running, and it has a key, but it isn’t working, that’s a SURE sign that you just haven’t been able to convert the putty key format into a suitable format for github.

org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration

Update 2010-09-29:
So, depsite being able to trigger it live, and knowing that it’s always a problem with an exception being thrown by the web service, and something in the soap fault parsing being broken, I still haven’t been able to actually fix this. Sometimes I get a parser cast error for a soapfault, sometimes I don’t. Classloader hell somewhere I presume. This one still bites me a lot, and I don’t feel any closer to permanently solving it than I did on day 1, if anything I feel further from resolution, because of how much I’ve tried.

Original post below….

Not much information out there about this one.   What little there is will indicate some sort of class path or library conflict.  That may be true, but there’s other ways of getting here.  I finally managed to trigger it myself today, and now I know what causes it.  And I’m disgusted.

DISGUSTED

Now, admittedly, I’m having a hard time coming up with a test case for this, but it very much appears that this is happening when certain characters that are illegal in XML are returned via a webservice call.  FYI, I’m using JAX-WS wsdl first services, with JAX-WS service clients.  The _clients_ throw the error.

After eventually finding one of the problem calls, I found that the invoke was actually failing on the service side, and because ERICSSON ARE MORONS, the error message included ^c in the output. While this got sent back to the client without the service failing, the client exploded, with the delightfully helpful xml parser casting error.

So, JAX-WS RI, despite being billed as non-intrusive, and something that let’s you expose your existing services as webservices, is HIGHLY INTRUSIVE, and requires that _you_ take pains to make sure you _NEVER_ send out any invalid xml.  Even in you string fields, where you should be able to use what you want.  Because, you know, the library’s just exposing my service.

Still, there’s a fine tradition of this moronic behaviour.  XFire does the same thing.  [1] They flat out refused to accept that this was something the webservices library should be handling.

[1] You’ll get something like: com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character ((CTRL-CHAR, code 3)) at line blah…

Frequency Counter library for atmega32u4

The guys at KHM in Cologne cooked up a very handy Frequency Counter library for arduino.  Seeing as my humidity sensor is based around the HCH1000, basically a variable capacitor, one simple way to measure the humidity is to use the sensor in an oscillator, and use the output frequency as an indicator of the humidity.  (I really need to get around to writing that up properly, it’s in progress, I promise)

Anyway, I have more boards than just an Arduino, and I also use mostly raw C.  So I’ve update the library to work with either the atmega 168 or 328 on arduino boards, but also with the atmega32u4 found on PJRC’s nifty little Teensy boards

You can get the code over on github (You need FreqCounter.c and .h)

Adafruit shipping prices, part 2. Or, tipping and fuel surcharges.

If you don’t want to read an overly analytical piece on shipping and online carts, just skip this altogether.

So, this morning I woke up to find adafruit had found my somewhat disparaging remarks within an hour of me posting them, and seemed rather concerned that I retract/change my wording, because they never pad prices.  I commented that there’s nothing intrinsically wrong with it, it’s quite a common practice, it’s just something I don’t particularly like.  I’d rather see the product price reflect the price you need to get to stay in business, and shipping being shipping, and nothing more.  The net price might be the same, but I just feel better about it that way.

I played with their cart again before I left for work, and found that every item is at least 0.1 pounds (45g), and there’s no scaling of that as you go up.  Some things count as 0.2 pounds.  I completely endorse minimum weights.  These are handpacked kits, and there’s a lot more to a kit than just the sum of the parts on mouser/digikey.  But, if I order 1 magnet, it’s 0.1 pound. 2, 0.2 pounds, 4, 0.4 pounds.  If I order 40, my order is calculated as weighing 4 pounds.  This is clearly wildly inaccurate, and rather than converging as the number of items goes up, it just stays flat.  Ramping out with ever increasing error.

You can pick any item.  An xbee adapter kit, weighing in at 12g packed, actually counts as 0.2 pounds, or 90g.  So with 5 of them in the cart, we’re going to get billed for a whole pound, and the shipped weight will only be 50g or about 0.1 pounds, plus the packaging.  If you look at the shipping estimates, you’ll see that adafruit calculate their packaging to be 0.2 pounds.  This is entirely reasonable, and sensible of them to add on for packaging.

Which leads back to my first post yesterday.  I got charged for 1.6 pounds shipping.  Which, although not super cheap, is reasonable, given the difficulty in locating some of these parts elsewhere.  But, clearly, my order didn’t weigh that much. It simply couldn’t have!  Adafruit claimed in their comments yesterday that they weigh every parcel before it goes out, and while that’s absolutely true, as they need to weigh it to work out how much they’re paying in shipping, I’ve already paid for shipping by that point, based on what the shopping cart calculator decided.  See the picture of the packaging, where adafruit only paid for 6 ounces, not 1.6 pounds that they charged me.  Note, this is _not_ a clerical error, with an extra decimal point or anything, 0.6 pounds is over 9 ounces.

I’m quite happy to believe that adafruit had no intention of price padding, but if I pay for 1.6 pounds of shipping, and the merchant only pays for 6 ounces of shipping, well, I call that price padding. I really do believe they probably had no intention of doing this, nor even knew they were.  They’re far too active in community outreach and education to be knowingly doing this, but I pointed this out this morning, and have had no further comment from them, other than “am I going to update the post / title”

And now some pictures