Usability according to Abbott and Costello:

0 commentsApologies for the duplicate posts that showed up last night and are
probably still stuck in some aggregators. I inadvertently deployed my
development configuration to my production host, and that's why there
were lots of posts with localhost:7007 in their
permalinks. Needless to say, better configuration
management moved up the list of features to be added to
perpubplat.
0 commentsThe following phishing email showed up in my GMail inbox today:

Even if I was to be taken in by the ploy, there is no web link or other way to submit the form. Maybe I'm supposed to reply to the email? Too bad it's not as amusing as other stupid criminal tricks.
0 commentsAfter I saw post about a WTF-worthy comment a while back, I had meant to post this gem, which I'll paraphrase from memory:
foo *f; f = (foo *) malloc(sizeof(foo)+4); // seems about right
The comment was the tip that code elsewhere was abusing the allocated memory, and the developer had added the padding to avoid segmentation faults...
There were quite a few similar gems lurking around in that particular app, like a catch block wrapped around printing "Whoops!" to stdout, which wouldn't be so bad if it hadn't been cut-and-pasted all over the place, making it difficult to determine where a "Whoops!" on stdout for the app actually came from...
0 commentsAn alternate title might be why true is false.
I got some help from Matthieu debugging a BPEL process today, and it boiled down to this little construct:
<b:while> <b:condition>true</b:condition> [...] </b:while>
A lint for XPath 1.0 would have caught this one. As written, true is a relative location path, and depending on the document and context node, if there isn't a node named true, it would evaluate to the boolean value false. (The expressions section of WS-BPEL 2.0 specification further states that the XPath function boolean(...) should be applied to any value not already a boolean.)
This is what the true() function is for. Kudos to Matthieu for spotting it after we'd explored a few rabbit holes looking for an explanation. (And, yes, I still write WS-BPEL by hand in Emacs. I'll get around to updating my Relax NG Compact schema for transitional BPEL to WS-BPEL 2.0 at some point.)
0 commentsSuppose that you have a Java web application where regular expressions are used deep down in the implementation to do some work, but you observe that the an array index exception is occurring sporadically where the regular expressions are being used.
What's causing the exceptions? What's the solution?
1 commentPricing is a black art, especially when it comes to things like a company, a highly specialized piece of software, or a business relationship with intangible benefits. The rookie mistake is to set the price according to the cost or even to use the cost as an anchor in explaining the price. The value to you in whatever units (dollars, years, number of bowls of Top Ramen eaten, broken marriages, quatloos, whatever...) is irrelevant to the purchaser, while the value to them is some proportion more than you can expect a rational actor to be willing to pay.
Putting the cost on the table in front of the potential purchaser can only weaken your position. Instead, keep the discussion focused on the value and how to ensure that the purchaser realizes it. If they try to low ball you, just say "no"; there's no need to justify it or explain your reasoning.
0 comments