Wednesday, October 21, 2009

BBBBGoog ugh

This Blackboard / Google rumor makes no sense to me on the corporate culture levels.

Thursday, October 1, 2009

Back from Vacation, and found a thing of beauty

Hi folks,

I've been away for quite a while, enjoying Bavaria, Austria and Venice. Still chunking through tons of cheezy phone-cam video and better stills.

However I found this thing of beauty related to Google Wave. In a past life I ran around the world driving a tool called the Object Modeling Workbench in its first few incarnations. You know, back in the Object / AI days before the web lumbered across the landscape.

Anyhoo the SAP research group shows a real-time collaborative BPR tool embedded in a wave.

makes me think I should get back on that real-time collaborative discrete event simulation stuff, right? heh.

Thursday, August 6, 2009

Control Control, can you hear me?

I've been bopping back and forth this summer, and when I bop into software it seems that I'm using multiple version control systems; SVN, git, and mercurial. while drawing odd drawings of operational transforms. gah.

and none of them well, I'm sure. and heck we have svn running on our kitchen computer!

I think I'll be attending this git webcast: as I swill german beer in bavaria.

Thursday, July 30, 2009

Wave terms of service

An interesting item in the Google Wave terms of service came up this afternoon -

"Should you decide to charge users any type of fees in order to access to your Wave API Implementation, you must first get written consent from Google, and you may have to enter into a separate written agreement with Google before Google's grant
you permission to establish any such fee-based restricted access to your Wave API Implementation"

Thanks to Michael K for bringing this up.

I have to read this as including tuition.

Tuesday, July 21, 2009

a Wave server implementation is available

Today the Google wave team released an open source version of their software. It's Java 6; OS X users will have to take a chance with the recent buggy Java release from Apple. (I have to back up my machine before I take that jump - I didn't expect to take upgrade as there's a developer preview of the _next_ one waiting in the wings. )

It's not exactly what Wave itself is - for example it does not have a persistent store, doesn't implement the same type of user, and uses a funky stand-alone terminal ( think pine ) client. It does do the XMPP server federation stuff to talk back and forth between different deployments stuff. It does log tons of stuff; the stack of signing and transformations, etc. And you can bop around in the ASCII chat like wave tool with your unauthenticated friends. Just don't expect to point your browser at it and get the wave experience.

It's being released as a playground for integrators and as an executible protocol testbed. Expect rapid deltas to the code. They are hosting 2 servers for you to test your integration.

They gave a demo of 2 federated wave servers and 3 end users doing an ASCII wave.

You can find it in a mercurial version control system at

They really want us to all come play with them.

Best quote of the day: "We built an innovative cool system which we expect to be abused in innovative cool ways..."

Sunday, July 19, 2009

a day

get everyone's breakfasts going
Move Qg5 out of closet
Boot in Target Disk mode
Application Migration of QG5 boot disk to MacPro
SuperDuper Intel Mini to new external SATA disk
Read about Operational Transforms
Install external SATA in IntelMini
drive kid to friends house
Install original Intel Mini disk in external drive case
Boot PPC Mini in target mode
Application Migration from PPC Mini to Intel Mini
goof off in Wave
Remove QG5 disk. drop screw into gap between fan and case. use straightned paperclip to push screw head underneath contorted middle finger's finger nail, jam it in there and slowly draw hand back up. this takes half an hour and many tries.
run QG5 disk naked with funky adapters
change root directory on QG5 500M disk
Install QG5 500M disk in MacPro
Install QG5 2nd drive in MacPro ( what a beautiful case )
Install original QG5 250M disk in MacPro
Move QG5 Sonnet card to MacPro
rewire KVM, UPS farm
uninstall Final Cut Studio
use iStumbler to debug first floor wireless problems - pesky neighbors where is my tin hat!
uninstall CS2
reauth: Aperture, Logic, NI. Upgrade NI. Upgrade MOTU stuff. debug.
install Final Cut 2, CS4
rack PPC mini in server room, switch IP, enable services: OSX VNC server
install Compressor nodes
install Logic nodes
sear some tempeh and garlic, throw on salad
rack misc FW drives with PPC mini
unrack D4, XL-1 Turbo, the 828Mk2s, patchbay, UM880, power chain from rack A
unrack Mackie from rack B.
swap all unracked stuff to different racks
put monitoring UPS in re-racked cart rack
run RAID FW cables back through wall to closet.
daisy chain to time machine disk in closet
screw RAID straps to 2x4 studs. Being clever again, this will probably start a fire or send a weird humming vibration through the house.

Tuesday, July 7, 2009

Chrome OS?

Sometimes don't cha have to wonder?

Google Chrome OS. is there some mad splintering going on?

Monday, June 29, 2009

notes: svnserver on os x

I suddenly had an unplanned gap in my summer dad duties so I turned to my long list of neglected nerding.

I have been able to cajole my random-number-of-charges to help with installing Ubuntu on a stack of old machines prior to donation (5 so far!), taught some of them how to solder, and exterminated a horde of vermin from the call center, but no real traction. That will wait for summer camps to start!

After the last Stanford project I promised myself I would jump ahead from the 2.4 era of Sakai Stanford has been using. I took a peek at the K2 stuff - The white paper was sensible, Zach's notes useful... so I finally picked up Maven 2 and git. Too bad today was the same day the Sakai confluence was down for a brain trainsfer. I commenced to downloading the current binaries.


One goal floating around is to upgrade the kitchen Mac Mini to an Intel based Mini. The current Mini becomes a server in the call center. I wanted to run a CZWXLLC svn server outside of the graces of Stanford, and so went through the steps to get a svn server on the G4 mini. I did the simplest possible thing I could do. That is to get the server deployed running via the svn:// protocol and constantly accessible from within the imperial home network.

It wasn't that bad. Here is a rough outline:
  1. install the SVN package somewhere sensible. I used /usr/local/bin. that may not be sensible to you, but it was sensible to me.
  2. figure out which user is the 'login' user, if you have one. The Kitchen computer happens to have one - we want Skype up when Mitchell is on the road, so it's always ready to go.
  3. use svnadmin to create a repo directory somewhere where the login user has rights. I just used the user's home directory.
  4. update the user configuration files with your various users and assign passwords
  5. start svnserve
Now, this last bit is a bit trickier. You probably know about svnserve -d -r /path to repo and all that stuff. Firing up your svn server that way, as the login user, gets everything hopping along. Until restart.

To get your svn server to start up after a restart is the real goal. To do that you're going to have to use the Mac OS launchctl tool.

launchctl is used to configure the launchd daemon. The idea is that you want the box to boot, scoot through a set of 'scripts' and fire up basic services. init.d stuff like stuff.

The 'scripts' are XML configuration files. They are stored in /Library/LaunchDaemons, and by convention are '.plist' files. These contain a namespace registration mechanism and a way of passing in command line arguments. Take a look at the files on your own machine - it's pretty straight forward, yet as with most of these abstractions rather opaque - what the heck are the options? the options for svnserve itself are fine, but what about the OS?

For svnserver I used one found here. Be sure to change the path to the repo, the user and the user's group as necessary for your machine.

More sophisticated schemes would have non-login users, separate groups, etc., etc., but I didn't think that was necessary for getting off the ground.

As this repo is behind the CZWX firewall this is as far as I've gotten. If I put it into the DMZ when I drop it into the call center I'll have to upgrade the connections to SSL and all that jazz.

Onward! Next steps are to get the most recent Sakai checked out as well as the K2 stuff and see about getting some edgeless administration stuff going on these phones.

Saturday, June 13, 2009

Just a note:

I've succeeded, after a Firefox upgrade, in slipping a Google Wave into the Blogger template.

the Wave embedding example worked fine.

Should work anywhere ;)

Thursday, June 11, 2009

Desktop integration with Sakai

There has been a good stream of articles describing Sakai's web services lately. If you're doing work with Sakai you can quickly come up to speed with this very useful functionality.

I'ld like to give an example.

Over the past Stanford academic year I built a desktop Java application designed to provide high-stakes language skills testing. The desktop application is tightly integrated with the Stanford University deployment of Sakai, Coursework.

The test is called the "Simulated Oral Proficiency Interview" (SOPI) and is administered by the Stanford Language Center. This rSmart newsletter has background information on SOPI.

I'll cut to the chase.

The SOPI test is administered under highly controlled conditions. The student only gets once chance, ever, to take the assessment. The assessment materials are so tightly controlled access is denied to the instructional staff. There is all sorts of complex authorization requirements for this project.

Sorta tricky to have a Sakai site where the instructor can't get at the materials, eh?

The assessment takes the form of a series of Quicktime movies. Each movie presents a question to the user. The user's response is recorded in a Quicktime movie, which is stored away for review by the instructional staff. The sequencing of the assessment is structured through an awkward XML file. To hit the schedule for the 2009 SOPI assessment we decided to leave the XML format as it was - there is lots of room for improvement.

The SOPI Application is written in Java, using the Swing Application Framework (JSR-296), Axis, and Apple's Quicktime for Java. A desktop app was written to avoid all the Java / Quicktime / Sandbox / multi-Browser issues, and to push security up several notches. It does all the things you expect - pretty boxes with movies, live audio waveforms, etc. I've a writeup in the works over at, my companies site, and I'll put up one of the screen play movies used during development so you can see it.

To support the (baroque) security requirements the SOPI assessment resources are not stored in the Language Classes' Sakai site. Rather a 'sister' site is created. We called these Sopi Resource sites officially, but most often just 'sister-sites.' This is a custom Sakai site type with a new role, the standard Resources tool, and a real-time monitoring tool created by Zach Thomas of Aeroplane Software. Sakai site properties are created which provide references to class site sections - a single SOPI Resource site can provide content to rosters from various class-site sections.

The test is given in a controlled lab. 20 to 40 students may be starting the test simultaneously.

Stanford is running a modified Sakai 2.4.x

The SOPI Application uses Sakai webservices to
  • support 2 user sessions, a super-empowered 'agent' and the end user
  • determine which SOPI assessments are currently enabled
  • to get user site membership information
  • to get user Stanford affiliation information, which changes the desktop app's UI
  • to store user progress, including resume state
The SOPI App uses Sakai REST tools to support
  • pulling of XML and Quicktime movie content from the Resouces tool
  • pushing Quicktime movie content into the Resources tool
The App pulls down the XML, validates, and then pulls down all the Quicktime movies. At that point a second validation is performed to see if the movies are in a valid QT format.

As the user proceeds through the assessment the responses are queued up and asynchronously uploaded to Sakai as the assessment plows along. The load-balanced pool of Sakai servers does pretty darn well in accepting 30 odd movies all at once.

The major changes to Sakai to support the SOPI assessment were
  • modifying the Resources 'webservlet' tool to not swallow all sorts of sensible exceptions, such as quota violations. These are now reported back as HTTP RFC responses to which the App responds.
  • using a locally developed version of Sakai login which has far less overhead. We wrote this code during our first rollout of Sakai at Stanford long ago.
which aren't really all that major, are they ;)

I found this model of Sakai development, that of using REST and Axis, to be really fun and efficient. The more recent versions of Sakai would of made this even easier. I look forward to catching my dev environments up to the most recent Sakai and seeing what drops out of the SOPI codebase - less code, less to break.

My next experiment is to create a language assessment app which uses a cell phone. How could this not be cool?


Saturday, June 6, 2009

Wave II.5

I find it funny that the google email with my wave ID was stuffed into my gmail spam folder.


There is a sandbox upgrade today, so I'll not be hanging around in the wave client too long.

later: commencing to tinker. note to self: tinker on a fast machine.

Friday, June 5, 2009

7 years of Mozilla!

Today is the 7th anniversary of Mozilla.

Getting Mozilla rolling was a very iffy proposition.

And it's taken a lot of work - I doubt people realize how much has gone into simply surviving let alone prospering.

Just look at the mad stuff emerging from the Labs.

Not to mention the standard "We'll make you incredibly rich, just sign here..." opportunities walked away from.

Congratulations Mozilla!

Thursday, June 4, 2009

LincVolt - Neil Young's Java Land Yacht

This beheamouth is Java controlled.

JavaOne day Two

Moscone is getting a funky air. That of thousands and thousands of java programmers shuffling around in the morelockian tunnels. The suits are up in the hotel suits cutting deals. we hope.


  • Extream GWT by David Geary. You know, he wrote the book.
    His website,, has tons of examples.
    He dashed through a set of examples with a wry style. One of his examples is of a drag and drop framework in about 350 lines of code. Another example was rather bread-and-butter; jdbc and rpc stuff, but for some reason the example db was populated with the very small towns surrounding the absence-of-town where I grew up. That was just odd. I mean, Castile NY?
    This presentation was quite professional. It had the desired effect of lowering the percieved barrier and inspiring to action.

  • JavaFX in Action by Mike the Canoo guy. yes I did change my schedule around.
    This entertaining chat was peppered with usage insights and mild grumbles about the rapid changes JavaFX went through just before JavaOne.
    (His complaint was echoed in just about all the other JavaFX talks I've seen - Sun broke the demo code of their presenters just a day or two before JavaOne. "Fail Fast!")
    JavaFX started off in Sun Labs as a language called 3F - Form Follows Function. Apparently after a few internal demos it recieved Uplift to JavaFX.
    Mike gave an hands on live demo of the Photoshop to JavaFX asset export. As he did so he gave out some practical hints, such as "Do NOT rename any layers after this first round trip - the IDs are a contract between your designers and your developers." He had plenty of time to comment as he clearly was not a Photoshop user... pleasant self-deprecating jokes through out.
    This export and prototype in JavaFX model has legs. I guess the Adobe Flex world has this kind of flow just built in, hmm?
    Mike mentions that JavaFX has damn few widgets, and only a few 'multimedia' widgets. That there will be a lot of hand noodling to extend these.
    On the other hand there is data binding - this alone is a big lure for his team.
    He gave a good explanation of remote calls and the impact on the event dispatch thread (EDT), leading to a talk on the JavaFX equiv of invokeLater.
    A good talk. The Canoo team seems like a fun group.

  • Groovy 1.6 by Mister Groovy Himself
    I dragged Xinlei to this - I think she would find Groovy to her liking and that it can have a place in the Stanford Digital Repositories back end pipeline (s).
    Mister Groovy gave a great intro by deconstructing a Java beans app down to a groovy script, element by element. Xinlei's ribs were sore by the end as I kept poking her with my elbow - 'see... see...' poor woman.

  • JFugue and Log4JFugue
    A bit of fun.
    These guys wrapped the java MIDI implementation with an easier to use layer. This allows statements such as"C A C") to play those notes. If you've ever done any MIDI programming outside of Max or PD - say in a line based language, you know it's a giant mess to set up.
    JFugue melts that away. And it is a bit idiosyncratic.
    MIDI gets a bad rap by casual users. If you want to see what MIDI can really do you have to start by upgrading your OS's MIDI services with better samples or whatnot. This talk presented a sensible series upgrades.
    Now Log4JFugue. ha. How about feeding your log files into something which makes music based on the log content? Your ears ( sadly not mine so much any more ) are great at distinguishing fine details in complexity. you can background your log reviews!
    The Log4Jfugue people gave a fun demo where application-level service requests and releases were mapped to bass drum and snare, and service interruptions to cymbal crashes. They did some basic time mapping and let it rip. "Service Normal" running is heard as a steady-ish beat with some swing. However once the service starts backing up it's immediately clear that something is up.
    Then they used Log4J's port sending ability to stream the log data to another computer for audio presentation in real time.
    Julian at Stanford could stream this to his iPhone and just listen in the background for Sakai problems...

  • JavaFX + Groovy == Beauty
    Excellent live demos of polyglot programming by another member of the Canoo team. I apologize for being impressed and tired during this talk. My notes are rather scattery: "Cool" "How is he going to tie that into swing?" etc. sigh.
    When the presentation is available online I'll cast in a link.

ach, I am running late - more expansion later!

Tuesday, June 2, 2009

JavaOne day One

I'm on a roll - Google I/O, 3 days of Maker Faire, and now JavaOne. throb throb, that's my swelling itching brain you hear.

JavaOne. Thanks to Lois Brooks @ Stanford I'm attending and slurping it up.

Some slurps:
  • Java Scripting Language Bowl 2009.

    Here we had Jython, Groovy, Scala, Clojure and jRuby 'duking' it out, har har, in a two round grudge match where each contestant updated the crowd on new features and then pressed on to extoll their respective communities.

    I wrote and deployed Jython and Groovy apps in production at Stanford; I'm happy with both languages and lean to Groovy. Soley because of the indentation thing in Jython/Python.

    The Scala presentation left me a bit adrift. The clojure presentation reminded me of all those pesty Lisp hounds with their fancy Lisp machines from Symbolics and TI who now are off doing nothing because the world left them behind. And I've had a thing about Ruby since the early Ruby days when their advocates were slinging personal attacts at Guido.

    BUT from this session I heard about some cool apps: Field, a Processing front end. SwingPad, an interactive Swing UI scratchpad.

    This session was a meh.

  • JavaFX intro

    I enrolled in this session as a flyer. I was totally surprised. JavaFX Scripting Language reminded me of a set of languages I enjoyed years ago - the IntelliCorp ProKappa / ProKee / Kappa-C / ProTalk set. Ok, not so much ProTalk as there was no backtracking or chaining involved :P.

    But here, in a strongly typed Java language, we have mixins! we have automatic value binding! we have triggers ( only post triggers, but still! ) The triggers are not first class objects but we can't have everything we had in 1992 can we. I liked the additions of new access types, such as public-init.

    The language / toolage seems to fit into a groovyish space. I fired up my computer in the miserable wifi cloud at Moscone center and started re-scheduling my time.

  • MTGame

    Not your mothers JMonkey Engine. These guys were working on WonderLand and using the JMonkey Engine but found that their models were getting very twisted. They decided to move forward and implement a component based model.

  • Securing Web and Service Oriented Architectures with Apache Axis, WSS4J, Spring and OpenLDAP.

    This was a great session. Mike Scheuter and Shawn McKinney of Fidelity brought a few other fellow-travelers to stage and hammered through the most concise architectural overview I've seen in a few years.

    new acrynoms for me: RBAC ARBAC02.

    and a new site:, altho when Sun publishes the slides in this talk it will be worth your read

    Here, from the description:
    It provide attendees an outline they can use in designing future SOA security systems that will be capable of running on various application server platforms, both commercial and open-source.

  • The Floor

    On the floor the best thing in the Lincoln Volt. god, it's 20 feet long, has fins, a touch screen UI, and is a cool cream white. I was asking one of the booth grogs, whos is actually more of a film person, why it didn't generate timecode for his part of the deal and he sent me off to check out the blu-ray Neil Young release.

    This too was a totaly surprise. I'm not much of a TV consumer - I'ld rather make stuff - but the blu-ray Neil Young retrospective lead me to talk to a group of java developers who are creating an IDE for making blu-ray... hmm. things.

    I didn't know until getting the NY demo that blu-ray players have Java inside, and a hard disk, and an internet connection, and that the UI can be built not from video fragments and a lot of tedious Photoshop / Motion / Final Cut / work but rather from AWT and Java ME. That there is a different version of ME for players, and that they can pull down stuff over the web to augument the DVD. Oh and run local code. I'm sure there are parts of the 'educational community' who are all over this stuff...

    After having spent the last month ( post-SOPI, more later ) doing a multi camera video gig of trapeze artists and solo-assembling it into a multi DVD package my sneering at the DVD interactivity paradigm is now blown away by the capabilities of the blu-ray stuff. you mean, I don't have to worry about stinking registers and bit shifting for tracking menu selection logic? I'm YOURS. I got hit by the clue train.

    The Blackberry folks were very nice. forced a T shirt on me. Signed me up for stuff. I think they were sniffing the Android phone I got last week.

    the Java desktop folks were very nice. jWebPane is a WebKit Swing wrapper / component / something which does a lot of what I see the Mozilla folks doing with swirling live renderings of live browser 'surfaces.' I guess it's all the thing.

  • JavaFX Tooling for being happiness with your designers man

    I attended a session where some members of the JavaFX team showed off a series of plugins for Adobie Photoshop / Illustrator foo which took the layering and layout information from the diagrams and allowed them to be packaged as resources for JavaFX Application development.

    In such a way that allowed round-trip development. Ok perhaps not round-trip but FAST. How many times have you waited for a new set of smurfberry graphic doo-dads to come back from wendy or billy over in the graphic art pen just to see what the heck kind of layout slicing the math-impared artists have come up with now?

    This was pretty slick. I am starting to smell the JavaFX cotton candy.

  • Birds of a Feather -

    Java and Lego Mindstorms. These folks are making mad progress in the little bricks. Exciting. I think they should get together with SRL and make some killer bots.

    Alice 3.0. Great! So imagine you use a drag and drop 'syntax-less' IDE such as Scratch or StarLogoTNG or greenfoot or some of the MIT derived Lego Mindstorm environments, right? you know, like iconic software legos for do loops, message sending, assignments... And you mix in a donation of myriad 3d SIMs models from Electronic Arts. And expose behaviors from the 3d mesh and skeletons as, well, drag and drop behaviors. Add cameras and timelines. Run. You have avatars running around interacting in a 3D world.

    Then from a pull down have the picto-program onion skin back down to raw Java in a series of gradations. Sorta like BlueJ rite?

    Then export it all to NetBeans or Eclipse. Continue.

    I think I'm going to give the movie contest a shot.


Wave II

More thoughts, as I go out the door to JavaOne:
- Wave servers will be tricky to run at scale. That may be a higher ed barrier right there.
- not sure what the persistence mechanism is yet. must dig.
- fine grained ACLs will come from site specific Wave robots. perhaps even task specific.
- the ( cool, large ) demo app has the look of a development sandbox. I expect much smaller client side apps.

Friday, May 29, 2009


Overnight I've been thinking about Google's new Wave dealy.

I can see a Wave server being woven into a Sakai deployment to facilitate ad hoc and classroom projects, with the Wave robots tracking participation and in simple cases grading. Cross institution wave components can federate.

Wave client thingy is written in GWT, stitched together with Guice and GIN.

My first concern is for the amount of bandwidth this can soak up. Each keystroke - yes - is a callback up to the server. gulp. I haven't plowed through the protocol but I think it's XMPP ( Jabber spawn ) with extensions.

Since I'm between projects... hmm... sniff. hell I better do public write up of the last one!

Other quick hits:
Project management - Lombardi's Blueprint is a very impressive hunk of engineering. Their GWT implementation is beautiful. Might be of a low-ritual scale Sakai implementors could find useful.

Instant slideshows - Animoto. Upload your still images and a clicktrack (ok they said music) and it will auto keyframe a set of configurable transitions based on the clicktrack. nice stuff.

Thursday, May 28, 2009

Google I/O notes

I am attending the Google I/O conference, and these are short notes. typed on my nokia with my thumbs - sorry for the typos!

the conference threads I am attending are the GWT, the Java app engine, and the generic 'tech talks.'

GWT 2 looks good. they have addressed the problems inherent in their stnd-aalone client by creating a set of browser plugins. This was in no small part due to developers missing the great firefox tools.

their initial presentation on the Java app engine wasn't very compelling; a lot of review.

a later talk from the Lombardi team was interesting. to achieve ambitious graph rendering the resorted to all soerts of mad hacks, including inline html. another totally cool technique was to execute 'client' layout code backk on the server ... if timing metrics in the browser showed that the server was more responsive.

in all GWT talks the use of for:each loops was strongly discouraged as a wway to create many spurious objects.
code spliting is cool. i like how it forces dvlprs to consider failure conditions. entry level / weak developers always ignore or handwave failure, and many UI folks ignore the issues completely. ( ymmv I hope ) TURN OFF unused platform targets in dev for faster builds. watch out for broad class use in the RPC code via polymorpphism. Hmm there is a flag to log the steps of code optimization. cool. the useful tool is 'Story of Your Compile' SOYC.

javascript code splitting is an olld trick, but always a headache to maintain or torque in an emergency. Letting GWT worry about a lot of it sounds like a good idea. the idea is to get running code on the browser ASAP. here you will wrap in some GWT async blocks around deferrable functionality.

yes there really was an android phone for everyone.

Google Wave. cool. it'll be interesting to read the newly released white papers.

datastore. goal - simplify dev and mngt of apps. 'scale always matters'ok there are remote keys. multi values look too easy. frames! soft schema: only in the app layer. JDO /JDA defines this soft schema using JDO / JDA supports migration to and from. what? one to ten transactions a second?only one slot update in a transaction? whoa. p eht presenter focuses a lot on this not being a RDBMS.

single col keys migration easy
composit keys map to ancestor chaiin
mapping table to mv props
but hard to do bidirectional adds up to heroics
porting transactions involves more heroics in the form of, say, explicit compensateing transactions.

no joins.denorm or multi queries.

ezr to migrate out.

Monday, February 23, 2009

never leave your computer

I'm back from a week of my son's mid-winter break.

We rented a neat house above Truckee (high high above Truckee) with a mess of friends and totally recreated. Cooking, playing, sledding, skiing. It was really great - what was better was re-introducing the kiddo to sledding. Just a "That's AWESOME!" after a snowbank drilling crash was enough to forgive him the snowball to the back of the head. Or the ones at the shuttle buses. Or the shovelful of snow down my back - something about this trip brought out his inner Calvin. We had a couple of days in deep snowstorm and then a few more in blue sky sunny weather - making Mitchell a very happy ski-woman.

Upon return I fired up my main development machine and was greeted by a growing stream of I/O errors as I did repository backups. (system.log and console.log, via the Mac OS Console app) This machine is one of the monster QuadG5's which still rips along nicely. Those machines have had a significant number of failures in their liquid cooled housings, so I'm always a bit on the lookout for goop leaking out. But nothing like all these hundreds of channel resets!

What?! This was only happening on my firewire buss too. Gah.

I've spent a fair number of hours doing all the various dances - different disks, Diskwarrior, reformatting, juggling cables, making coffee.

It was a firewire buss-powered camera, last used just before I left to Skype with Zach Thomas of Aeroplane Software, which was screwing everything up.

I was fretting about the gigabytes of data on those firewire drives... man it would hurt to lose that. But now as it's spinning out again to the backup drives I'm going to go get some pasta and celebrate.

Wednesday, February 11, 2009

Interesting speakers from Davos II: Thulasiraj Ravilla

Thulasiraj Ravila comes to Davos under the Social Entrepreneur program. He has founded a set of non-profit eyecare centers in India - the Aravind Eye Hospitals. I actually met him previously, but wanted to mention this years great mad scheme.

You've heard about off-shoring the analytical bits of health care, such as X-Ray image review, or CAT scan analysis. The central idea is that over the interwebs the images gathered from remote sites can be analyzed by skilled experts most... anywhere.

Of course this is all wrapped up in big science and big bandwidth and big hospitals and big universities.

He's built and is running an inversion of this scheme.

He's using small towers with low power mini WIFI repeaters to send simple eye-chart exams from rural health workers to his central eye hospitals.

No big science, a private low speed network, and the benefit of early diagnostics. Wow!

Interesting speakers from Davos I: Benjamin Zander

I have to leave some notes somewhere - in a chronological order...

Some of the new-to-me-this-year interesting folks. ( yeah, you previously met facinating people you I'll have to catch up with! :P The obnixous type-A multi gazillionares who elbow and foot-stomp into buffet lines I won't document for you. )

Benjamin Zander, conductor of the Boston Philharmonic Orchestra. He lead a very exciting session titled "Managing Complexity: A Different Approach." Mitchell and I sorta kinda stumbled into this one, and were immediately entranced. He was leading an accomplished quartet through an interpretation of Mozart with a great deal of humor, jumping up and down, leading astray and back, and fun.

As he was doing this he dashed back and forth across the Congress Center's main hall scribbling madly on various large notepads.

I think his message, that a simple and difficult attitude shift from "what must I do to kill these goals off" to "what can I contribute?" has got to me one I pick up. The programmer psychology is so much "goal.goal.goal" with a tied in reward system for those little stinky goals that one spends a lot of time down in the pit. The trick has to be to have the second outlook - "what can I contribute" utilize the skills of the first - and step back up when done. If you ever get a chance to hear him speak don't miss it.

Mitchell and I are still practicing his gesture for acknowldeging mistakes: you must stand up, raise your hands over your head and yell "How Marvelous!" It shakes off the stigma and the laughter wipes some of the slate clean.

Friday, January 23, 2009

Munich soon

I'll be in Munich for a few days, riding my wife's coat-heels to the Digital, Life, Design (DLD) conference. I'm really looking forward to it! This conference precedes the World Economic Forum's annual meeting in Davos. I've been hearing about DLD for a few years now and frankly the DLD looks to be filled with more of my kind of people ;)

I've never been to Munich; perhaps the airport once or twice. Does the Lazy Web have any suggestions for Casey's Munich wanderings?

I have a waterproof GPS loaded with data and good boots!

Wednesday, January 21, 2009

pondering WebappToolServlet

In my intermittent work on the Sakai tool side, using the Eclipse Sakai plugin, I have seen references to WebappToolServlet in the generated web.xml.

Clearly it's the first stage in handling requests. Stuff worked so I haven't worried about it. However I poked around a bit and found this:

WebappToolServlet is a CARET invention (pace Andrew Thornton)
that was created to allow other Java view technologies than JSF
to work in the Sakai dispatching environment.
[snip - about going to conferences where all this is discussed - casey]
Without WebappToolServlet the context path part of the URL will
be mapped incorrectly, as well as various other parts of the
request object being empty. This correction cannot be made with
a simple filter, since on initial entry to the context there is
no valid URL.
Yes, Spring is meant to avoid all dependence on the container, but
this is plain JSPs here. This is no kind of supported option in
Sakai - you are basically "on your own" - although I'm
sure the few folks that have done JSP work in Sakai (Andy, Ian)
will be glad to help you out.
The supported/recommended option in Sakai until now has been JSF,
which is what the dispatching environment was designed for.
We are expecting a transition to RSF underway over these few
The most direct step towards sanity you could take if you insist
on sticking with JSPs is to move to SpringMVC. This defines
various taglibs that should let you resolve beans as variables.
As a "framework" it's pretty useless however (naturally I would
say that...)

whcih explains enough for me. Since I just want to use something to bootstrap the GWT stuff and move forward I'll no longer ponder WebappToolServlet.


The crew stretches down behind the point where this picture was taken.

DayOfService-2009-01-19 14-21-47

Joining the Planters doing restoration in Golden Gate National Park.

Monday, January 19, 2009

Day of Service

Today I met up with a couple hundred strangers and worked on restoring native plants to some CA shoreline.

Lucky for us it was a drop-dead robin's egg blue sunny day. Up on the bluffs above the Pacific Ocean in January can be a deeply chilling experience.

I took a polaski and trenched ahead of Mitchell and Jarett. Mitchell had a rock pick and cleaned up my work. Jarett also had a rock pick and knocked the seedlings out of their container and finished up.

The organizers, rangers and volunteers from the National Park Service, had laid out rows and rows of seedlings. This allowed all the newbies to simply 'plow along' the hillsides and get the plants in.

It felt great to do this. I always have enjoyed volunteer trail work. I guess it reminds me of my childhood doing in-voluntary trail / field / woods / farm work. What a pathetic romatic I am.

Jarett and I have agreed that if we stop at Peets after our Saturday trips to our respective gyms we can dash out and join this crew for their afternoon sessions. This is a sneaky way for dad to get his kiddo used to miserable outdoor adventures.

Wednesday, January 14, 2009

A bit of GWT in Sakai - StringReverser

Originally uploaded by badubadu
Here is a screen shot of the StringReverser Hello World tutorial wrapped up in Sakai via the Sakai App Generator and some wrangling.

GWT in Sakai, Hello World.

You may recall that I totally mongled the back deployment of the IPBUserManager. What I didn't mention is that I also hand built another Sakai tool but had all the useual grief with tool registration and all that miserable stuff and tried to merge the IPBUserManager GWT stuff in there. But Sakai's kung-foo was too powerful for me.


I used the Sakai App generator to get a skeleton of an app. I should of used this in the first place. I generated a JSP "hellow world" app - all I wanted to do was to get a tool in place at this first step. And I want the tool to present a web page containing the GWT Application, for Sakai to serve up unto that web page all the GWT bits, and for those to make their way back to a servlet .

Aaron's plug-in slams out the framework.

So I dug up a clear GWT example from somewhere. I had been plowing through GWT In Action but had found the sequence of that book awkward.

Exactly, where?, which is titled "Building a GWT RPC Service." It was a clear and easy to follow mini-tutorial.

then it was mixing and munging.

I copied the String Reverser bits into the generated Sakai app directory. The various GWT generated cache bits in the web-inf directory, the client, public and server directuries under the web-inf/classes directory, etc.

I hacked up the generated app's web.xml
  1. to include the references to the tutorial's StringReverser servlet.
  2. to use the tutorials StringReverser.html as welcome-file
I had a couple of typos and all that, but hey.

This manual wonkery worked.

I'll now see what I can do to make it useful. One of the more useful things will be to make the canonical Sakai User Directory Service call, which we see in many Hello Sakai apps.

GWT in Sakai, onward!

After thoroughly confusing myself with the the IPBUserManager Sakai 2.5 example I decided to relax a bit and reset.

After ensuring that I had Aaron's Eclipse Sakai App Generator plugin I went up to the kitchen.

I pulled out my handy Santoku and a larger knife we call "the Angel of Cut." Learning to use these knives I picked up many small cuts, so it's well named.

There I frenched some lamb ribs and rubbed them with a garlic and curry like dry mix. These were set aside atop the kitchen Mac mini to come up to room temperature.

I grabbed a big bag of Russian fingerling potatoes and another bag of carrots and proceeded to scrubbing. Scrubbing needs music so I put on "Pioneers who got scalped" by Devo. After all that's how they day went, eh? After cleaning up the rooties I tossed them in the nuke to pre-cook them a bit. As the floor and kitchen counter was soaked with water I went with the flow, cleaning and prepping a green salad by mixing in some julienned green onions and some great cherry tomatoes. The Angel of Cut came into play and I took apart some sweet red onions into large chunks.

More carrots were tossed into a blender with some ginger and left over chicken-vegi broth for a soup. Just keep the blender running and toss your veggie scraps in. Your guests will never know.

The nuked rooties were pulled out. I got a big jar of olive oil and some rock salt and lightly coated the rooties. The deal is to use the rocky salt; it'll help keep in the moisture for the next step. Don't go crazy with it tho! I tossed in the onion chunks. I did not wear a diving mask, BTW, nor did I listen to polka during this step. Thyme is also driftled across the mix.

Then I grabbed a Full Sail Ale from the fridge and set the oven to 500F. This is pretty hot, but don't be afraid of it or you will burn yourself. The racks go all the way down. I also checked in on the carrot/ginger soup. As it got up to speed I spread the rooties'n'onions in a pyrex baking dish thingy and put the lamb on a rack on top. I left a little fat on the back of these, and the fat points up. The deal with this is that the lamb juices will be injected into the underlying rooties, which are depending on them for flavor.

Jeez I forgot about the child creature! I nabbed some fish-sticks and some alpha tots from the freezer. These went on a baking tray on the bottom most shelf. The veggis and lamb go on the next shelf up.

Cook the mass for about 15 or 20 minutes. The fish sticks and such have to be watched as they are being cooked at a higher temperature than their instructions call for. Smoke is a good indicator of overcooking.

Nuke your plates and bowls to heat them ( it's too hot in the oven, remember? ) and serve the soup. You may want to put some Balsamatic viniger on the top of the soup, but that's pretty frooey.

Accompany with Veuve Clicquot Ponsardin and have at it.

After being thusly fortified return to work!

Open Syllubys Guys! come back!

Hey Open Syllabus Guys - you posted a great and exciting comment which, as I was reading, I accidentally in my great excitement deleted! ARG.

The core of your comment was that your team was thinking, or doing, a flesh out of the HelloWorld example. Apparently you have a spike?!

If you come on back and re-comment I will go away and get a cup of coffee to help ensure that I don't erase your comment next time.

> how embarrassing <


Monday, January 12, 2009

Let's see about this GWT in Sakai stuff

Now that I have the SOPI Swing app talking nicely to Sakai I need to build a Sakai tool for setting some site properties and monitoring student progress.

Being more of a on the server and in the plumbing type of guy I don't have tons of experience with modern front end technologies.

This give me a chance to investigate GWT in Sakai.

I'm starting off with that interesting post from Luis of last year ( ) and starting from there. I need a hello-world for Sakai / GWT / Eclipse and I have concluded that the OpenSyllabus folks are too busy to finish up the one they started in the Sakai Confluence area. The Davis folks are apparently plunging along but no cycles have been spared for more than a few tasty public postings.

off I go!

1) get gwt - I expand this and drop in in my development area. I kick the mail sample. it just works. love this just workingness. but heck the app engines just about just worked too.

2) Oh I better get Luis' IPBUserManager dealy. Use the Nabble link above. I expand this and put it into my Sakai Eclipse workspace, and then import it into Eclipse. Of course it's a bit confused.

2.1) As Luis described in his email the include-sakai directory is empty in his package. He did us all a favor by not populating it and attaching such a giant wad to his email. A WHAT_WAS_HERE.txt file explains the deal. As I'm developing against Sakai 2.4.x I'll have to wing it on the various M2 versions. So I get busy updating the include-sakai directory based on the shopping list. I do this by ransacking my local maven repo and populating the IPBUserManager's include-sakai directory.

2.2) don't forget to update Luis' (it's easier to type Luis than IPBUserManager) build.xml. You'll need to update locations to reflect where you've dumped the GWT and to update the platform info to reflect your development platform. For example Luis is using Linux, so his is gwt-dev-linux, right? swap it for whatever platform specific value you need.

2.2.1) the Ant I'm dorking around with on this G5 isn't wired up to use the tomcat administration bits, so I comment those out.

2.3) compile the bits, package as a .war, and drop into my dev instance of Sakai. Let's see what we get. I fire up the VPN, restart the sakai, and wait...a while. This isn't the fastest way to work with sakai - a VPN'ed database out through DSL. snore. Then I make a mistake of clicking on a course site which must be an old load testing site - it has scads of users and so it starts off doing scads of LDAP and Kerberos lookups! oops. I pick another site, go to Site Info -> Tools and find the IBP User Manager tool. nicely.

2.3.1) Ok I have it now in a page in a course Site. I get a big exception when I go to actually use it. the exception is from the portal, and it's throwing a NPE. OK I probably missed a step or a dependancy.

org.sakaiproject.portal.api.PortalHandlerException: java.lang.NullPointerException
at org.sakaiproject.portal.charon.SkinnableCharonPortal.doGet(
caused by: java.lang.NullPointerException
at org.sakaiproject.tool.impl.ActiveToolComponent$MyActiveTool.forward(
at org.sakaiproject.portal.charon.SkinnableCharonPortal.forwardTool(
at org.sakaiproject.portal.charon.handlers.ToolHandler.doTool(
at org.sakaiproject.portal.charon.handlers.ToolHandler.doGet(

The portal isn't having much fun getting the tool placement together.

I wonder if this only works with Spring 2.0? Because I also see that org/springframework/web/HttpRequestHandler is missing. I don't think that was part of spring 1.2.8, which is the Spring in this Sakai.

That's got to be it; I bet this example works in Sakai 2.5 or a Sakai 2.4.x which has been mutated to use Spring 2.0.x.

Time for lunch and then I'll be back at this! I'll just dork up the dispatching.

3) Luis mentions a plugin from Cypal. I think Thomas has mentioned it as well. While I know this won't help with my Placement problem I go off and get that: with documentation:

Monday, January 5, 2009

a great break...

This has been a very relaxing holiday break.

I don't think I turned on a computer other than to check weather (skiing / biking / hiking / gardening-hillside erosion control), photography, gaming with kiddo, or to chat with friends far and wide.


Infact I'm going to head out for more skiing tomorrow! bwa-ha-ha-ha!

But for now I will return to my Java / Quicktime /XP problem - why, sometimes, does Java grab all the available disk space when creating temp files? I've only seen this in XP, but it's a machine killer. XP hates having all of its spare disk space eaten up.

The file is finally saved to a normal size at the end of the processing, when I close the file - if the XP box lasts that long.

As this is an intermittant problem it's really freeking >pesky< to deal with.

So today I'll investigate various hacky gymnastics. such opening and immediatly closing, and then reopening the temp file. or not using the temp file libraries when in XP... or in creating a virtual disk for the temp file (!?) of a constrained size. madness.

later - from

Thanks very much, Jeremy, adding those flags (especially the UNDOCUMENTED seqGrabDontPreAllocateFileSize
constant) seems to have resolved the huge file issue. That's a big relief for me.

I of course scoured the web and StdConstants files looking for something that suppresses the pre allocation of the file, and a constant with a name like that would have jumped out at me. I'm sure other people have done ths same thing. Hey, QT Engineering: how much engineering and QA effort does it take to define a new constant?

Thanks again, Jeremy!


great gizzards. I have to second this Michael's suggestion to the QT team.