Wiki Format Text Display Enabled in CAREO

I just threw the switch to enable Wiki Formatted Text in CAREO, specifically in learning resource descriptions (any time you see a resource listed – search results, main page, whatever), and discussion post entries. This will let folks just go ahead and enter plain text, and CAREO will try to Do The Right Thing to display it as nice HTML.

Something like this discussion on “Earth At Night” looks a wee bit better now that it’s not all munged into one paragraph per entry, or faking formatting using the icky <pre> tag…

I’m using the RADEOX RE java rendering engine. Looks like it’s doing a decent job, but it appears to require double carriage returns before it will paragraphize some text, whereas most folks will use a single return to break up a long block of text. I’ll look into changing this behaviour.

CAREO Learning Resource Syndication Feeds – RSS

After way too long, I’ve taken some time to re-implement the RSS feeds from CAREO. The new implementation is infinitely more scalable than previously (now uses periodically updated static files, rather than regenerated-every-time live queries).

The downside of this new implementation is that you can’t create your own feeds from any query. I’ll add any new feeds that people want, but I preferred the personalized and on-demand nature of the previous implementation.

Unfortunately, that on-demand regeneration from live queries was the achilles heal, since it caused the server to fall flat on its face once adoption really took off. A victim of its own success, really…

For now, the feeds are regenerated daily (at, or shortly after, 6:00am MST).

RSS feeds are now listed in one central place, at

XStreamDB Progress

I’ve been playing around with interim builds of XStreamDB 3.1 Beta, and it’s coming along REALLY nicely. It’s pretty cool when the president of the company is the guy running the beta program. Jim’s been awesome, feeding tips and pointers to the new stuff.

They just added/enhanced scoring of fulltext queries, so we can have results sorted by descending relevancy to a query. It’s freakin’ fast, too. I’ve added 3734 XML records from CAREO to XStreamDB (which is also running on the CAREO server – a G4/500 Desktop box, not fast by any stretch of the imagination – to keep the playing field level). Scored and sorted queries are returning results in well under a second. Great stuff.

I’ve even got it doing the processing to pull out just a few elements (title, description, etc…) rather than the whole LOM. It doesn’t seem to take any more time to just pull the whole LOM out, either, which is cool. I prefer the mini proxy results for now, because they’re easier to read in the results listing, but if the EOAdaptor needs the full record, that’s trivial.

The cool thing about the relevancy ranking is that it generates a float value from 0.000000 (completely irrelevant) to 1.000000 (completely relevant). Lots of room in there for subtle variation in relevancy.

Here’s the query I’m running right now:

FOR $record IN (Root("Apollo:Metadata"))
    LET $score := SCORE $record USING [//* CONTAINS "earth image"]
    LET $title := $record//:general/:title/:langstring/text()
    LET $location := $record//:technical/:location/text()
    LET $format := $record//:technical/:format/text()
    LET $description := $record//:general/:description/:langstring/text() 
    LET $docid := GetDocId( $record )
    ORDER BY $score

Which returns stuff like this:

        The Earth and Moon Viewer
        This website allows you access to earth and moon imagery from a
        variety of viewpoints.  You can view either a map of the Earth
        showing the day and night regions at this moment, or view the
        Earth from the Sun, the Moon, the night side of the Earth, above
        any location on the planet specified by latitude, longitude and
        altitude, from a satellite in Earth orbit, or above various
        cities around the globe.   Images can be generated based on a
        full-colour image of the Earth by day and night, a topographical
        map of the Earth, up-to-date weather satellite imagery, or a
        composite image of cloud cover superimposed on a map of the
        Earth, a colour composite which shows clouds, land and sea
        temperatures, and ice, or the global distribution of water
        vapour. Expert mode allows you additional control over the
        generation of the image. You can compose a custom request with
        frequently-used parameters and save it as a hotlist or bookmark
        item in your browser.


Compare that to the smaller statement to just pull the whole LOM:

FOR $record IN (Root("Apollo:Metadata"))
    LET $score := SCORE $record USING [//* CONTAINS "earth image"]
    ORDER BY $score
RETURN $record

Which returns the whole freakin’ LOM document.

Designing Effective Learning Objects – Presentation

Ferdinand Krauss is preparing for a presentation he’ll be giving on designing effective learning objects.

Presentation available here (but requires some form of MS browser, which I don’t have handy :-(

UPDATE: If you get the warning: This presentation contains content that your browser may not be able to show properly. This presentation was optimized for more recent versions of Microsoft Internet Explorer. – just click on the “do it anyway” link. It works OK in Safari here, I was just daunted by the “You don’t have Explorer” warning…

WebObjects 5.2.3 Update ate my StartupItem

Just updated CAREO to WebObjects 5.2.3 (and MacOSX Server 10.3.3, Java 1.4.2). All appears to have gone well, except the WebObjects StartupItem got eaten. Empty. nada.

I copied the working one over from my laptop, and all’s well. Caveat emptor. Yadda yadda.

UPDATE: Yup. Just updated, and it borked the WebObjects StartupItem as well. I had tarred the previous one, so it was just a matter of tar -xf WebObjects.tar to get it back, but it makes me wonder what else might be messed up…

For the record, I applied the update to 3 machines (my test iMac, CAREO, and Commons), and the StartupItem was erased on all 3. Everything else appears to be OK, though…

UPDATE 2: Filed it in Radar, as bug #3591338

Macromedia Flex as an interface to web apps?

We’ve been taking a look at Macromedia Flex, and it seems like a pretty cool technology. It manages data modelling, UI generation, and presentation of an interactive application (as a .swf) to the user. Some cool potential there.

The data modelling stuff feels a lot like WebObjects EOF. The UI description stuff (MXML) is much like Mozilla XUL. The end product looks like a plain old Flash .swf, that can be presented anywhere.

Lots of marketing fluff on the Flex website (considering the product isn’t even released yet, that’s understandable). Some of the fluff is a little misleading, suggesting that rich interactive stuff hasn’t been possible until now. I’ve done this before in Shockwave, talking to a server via XML over HTTP. Worked great. 4 years ago…

One of the more reassuring things is a collaboration with IBM to build an Eclipse plugin for authoring MXML files for creating Flex applications. That, tied to the claim that it can run on any J2EE server, should be quite comforting, especially after the whole Generator thing…

One thing we’re looking into is the potential to use Flex as part of the architecture of Pachyderm 2.0. If it can handle programatic generation of rich, interactive, data-driven Flash movies, that takes care of a considerable bit of work for us… The only real question now is whether Flex applications can be configured to run (or at least output to) offline mode, or if they require a live connection to a server. Kiosks and CD-ROM standalone delivery of Pachyderm 2.0 content will be crucial for us.

We may also try out writing an APOLLO app, using Flex to generate some kind of funky interactive interface, rather than static HTML pages.

Radeox – Wiki Formatting Render Engine in Java

I’ve been poking around for a decent way to implement text formatting without requiring folks to know HTML. This is for use in our Workshops management app, as well as the Discussion/Review component of CAREO (and coming soon for APOLLO).

At the bare minimum, I’d like to at least translate linefeeds into br and p tags, but ideally I want to support Textile and/or Wiki formatting.

I came across Radeox, linked from the c2 wiki.

Looks like it supports Textile and Wiki formatting out of the box. Cool. Claims to be embeddable pretty easily, so I’m working up a simple WebObjects app to try it out.

UPDATE: woah. That was fast. And simple. Had it running in under 5 minutes (would have had this posted back then, but I forgot to click “Post”, and Kung Log’s been sitting patiently under a ton and a half of open windows…)
All I did was import the radeox.jar, and add one method to my component:

private String renderTextWithRadeox( String text ) {
    RenderContext context = new BaseRenderContext();
    RenderEngine engine = new BaseRenderEngine();
    return engine.render(text, context);

Also, looks like it supports only a subset of the full Wiki syntax, but way more than enough for what I need…

ALOHA Application

I’ve just bundled up the ALOHA application (version 1.3) as a MacOSX bundle, so you don’t have to go through Java Web Start to fire it up. The other added bonus is that it looks more like a “native” application, using the real live menu bar and everything!

Here’s a link to the disk image containing the application. The bundling was absolutely trival. Just fire up Jar Bundler, feed it the .jar(s) and configure it a bit. Done.

ALOHA 1.3 Application on MacOSX

APOLLO NMC Online Conference Presentation

King Chung Huang and Mike Mattson are presenting at the NMC online conference on Wednesday. The presentation just went live, and it’s an excellent overview of some of the thinking behind APOLLO (the next version of the CAREO software).

A brief description of the fundamental conceptual shifts we’ve made, including “Object At Center”, is provided, and King even touches a bit on some of the technical details (with cool sounding object class names, too).

APOLLO really is shaping up to be some amazingly cool stuff, and this is just the first (of many) public appearances.

Breeze Presentation Link

There are a lot of subtle inferences made during the presentation, some of which can only really be clarified with demonstrations (which will be rolled out in the next few weeks and months).

The concept of “Nodes” is pretty powerful stuff. We’re not talking about simple lists of metadata anymore, but quasi-intelligent objects/containers that can interact with other objects/containers to produce more elaborate/complex results. At a very simple level, this could be analogous to W3C DOM Nodes, which can be single objects or complex hierarchies, with a single simple interface to access and manipulate the contents.

The other cool thing that Nodes can provide (based on a defined interface to control/manipulate/access the contents) is the ability to create rich interfaces to add/edit/view/refine Nodes (and subnodes, and sub-sub-nodes, ad infinitum). Sounds kinda boring, but it boils down to providing a way to create cool, dynamic presentations of Nodes, or transporting them to other media (Node-to-DVD? Node-to-website? Node-to-LMS?), and lots of other stuff that we haven’t even thought of yet…