Authoritative, but not Illuminating
I almost returned “Steve Jobs by Walter Isaacson” to the library unread. Dave Winer’s Why Jobs chose Isaacson and Thomas Q Brady’s Steve Jobs picked the wrong guy had created doubt in my mind. It was a library book, so I had no skin in the game. But Jobs was a totem for my generation of developers and I started leafing through the pages.
The pages pulled me in. I knew the main story. I knew much of the back story. But the biography depicted a depth and nuance that was all new to me. And so I inhaled the book over the weekend.
In the end, Winer and Brady were right. The Isaacson biography was authoritative, but not illuminating. Worth reading, but not worth a spot on my bookshelf (digital or analog).
Stalk WebCam
It’s hard to maintain eye contact in a web chat. If you look at your correspondent in your screen, then you’re not looking at your web cam. And if you look at your web cam, then you’re only seeing your correspondent in your peripheral vision.
Wouldn’t it be nice if you could buy a web cam on a stalk. Then you could place the web cam within your field of view while looking at your correspondent. Or how about some mirrors to shift the built in web cam focal point from the top to the interior of the screen.
Add in some software to move your correspondent’s picture into alignment with the webcam location and you have a complete solution.
iPhone Battery Woes
Troubleshooting a battery-sucking iPhone 4s [via Daring Fireball]
I wish that I had known about “Settings → General → About → Diagnostic & Usage → Diagnostic & Usage Data” before. My iPhone 3GS battery would drain quickly on road trips to my best customer. My “solution” was to delete and then add my Exchange email, calendar and contacts. I might have found something useful if I had known where to look.
Pick Two
- Fast, Cheap, Good
- Schedule, Scope, Resources
Once upon a time, I wondered whether there was a natural law dictating three choices. Now, I understand that three is the minimum number to graphically demonstrate the need for compromise. Two makes it look like you’re pitting one against the other and four makes the choices too complex.
The bottom line is that any commercially desirable goal requires compromise. The sooner you accept the need for compromise, the sooner you can make some decisions and get on with it.
Using XSL Param
XSL is not just a transformational process, you can also add information content during the transformation. The following transform tweaks the identity transform to add a date element as the first child of the root.
Here are our changes:
- Access the EXSLT extensions for dates and times in Xalan-J by adding the date: namespace.
- Exclude the date: namespace from the results by adding it to the exclude-result-prefixes attribute.
- Define an XSL date param and initialize it to the current date. Note that the param value specified in the transform may be externally overridden.
- Explicitly match on the root element: match=”/*”
- Use the name() function to create an element with the same name as the root
- Apply the identity template to any attributes of the root element
- Add a new date element that contains the value of the date param
- Apply the identity template to any children of the root element
Using soapUI Project Properties
So far, we haven’t done anything with soapUI that couldn’t be done with curl and a shell script. One of the advantages of soapUI over curl is the built-in support for groovy scripting .
The following example shows the use of a groovy load script to insure that properties are properly initialized. A project load script is specified in the lower load pane of the of the project panel. …
Adding a REST service to soapUI
soapUI is a “open source functional testing tool for Web Services”. In this post, we’ll add the XSL Servlet as a soapUI project.
To help you get started, here is the XSL servlet as a java war file. This war requires the addition of serializer.jar, xalan.jar and xml-apis.jar from Xalan-J to the web-application WEB-INF/lib directory to run.
First, create a new project in soapUI. That bring up the dialog shown below. For this example, I’ve named the new service Ideoplex, specified the base url for the service as http://localhost:8080/xsl/transform and requested that we proceed to add a REST resource as our next step. …