Pachyderm Server Installation

With the help of a whole cast of characters, we’ve got our “reference implementation” Pachyderm project server up and running. It’s just a clone of SFMOMA’s Making Sense of Modern Art production server, so we may need to clean out some data and media, but it’s working (apparently) well.

I’ve tried creating a new presentation (a Zoom Screen of an Ansel Adams photo), and the creation process went quite smoothly. I’m having some trouble actually viewing the result, but that’s probably a minor thing.

Cool. The Pachyderm is roaming the Hinterlands once again!

Pachyderms roaming the hinterlands

MT Weblog Aggregator

We’ve been slowly adding to the number of weblogs here at the Learning Commons. Heck, at least one of them is active, too!

I wanted a way to have a single page with all of the latest posts sorted by date, from all weblogs.

RSS wouldn’t quite do it. It would sort first by weblog, then by date. Not what I needed.

Blagg + Blosxom sorta does what I wanted, but relies on creating cached text files from the various weblogs. Redundant, and icky.

Then, I tried the WholeSystem MovableType plugin. Works like a charm. I just created a new “meta” weblog, replaced all of the normal “blog post-ish” stuff from the template, and dropped in the WholeSystemEntries goodness.

Now, the index for the weblog goes out and grabs all posts from all weblogs on our system, and displays the newest 30, sorted by date, from whatever weblog they were from. Sweet.

Combined with the handy MT-Rebuild script, which can be set as a cron task, the Uber Weblog should be pretty self-sufficient. I may even add an Uber RSS feed – subscribe to it and you get the most recent LC weblog posts delivered to your aggregator in one easy feed… Might be a clean way to integrate this with the upcoming LC website update…

See for yourself

Educational Blogger’s Network

Thanks to Al Delgado for the tip on this. There’s a big education bloggers shindig in San Francisco November 22-23. Sounds like it will be quite a gathering.

I hadn’t heard of (or if I’ve heard of it, I promptly forgot about it) the EdBloggers Network. K-12 focussed, with colleges of education participating.

I’ll be keeping an eye on this group… (no, not in a scary restraining-order kind of way…)

MT Spamkiller!

MT-Blacklist RULES! I installed version 1.5, and it’s been saving this weblog from hundreds of unsolicited, unwelcome, and unwanted comment spams!

If you run a MT weblog, you REALLY have to install this bad boy. Right now.

Here’s a screenshot of a small, small part of my MT log. This weasel tried several times over the course of a few hours, hammering repeatedly in bursts within seconds of each other (I can only assume it was some kind of software following Google links…)
spamkiller.jpg

Hammers, Nails, and Web Pages

Back when I was building the “theme engine” for CAREO, everything began to look like themable stuff. I kept saying “Hey, that’s not hard – we can just implement that as a theme in CAREO!”

Everything from a version of the Learning Commons website, to SciQ, to a bunch of other projects, were mocked up (and some even implemented) as themed components in CAREO.

Worked pretty well, and was an awesome test of the flexibility of the theme engine.

The main drawback was that all edits had to go through a rather cryptic process of defining content in (perfectly valid) XML, crunching the content through an app that ran some XSLT wizardry, and stored the results in a database.

That kinda killed any productive workflow. All edits had a single point of waiting, and it was hard to use regular tools to manage content (couldn’t use DreamWeaver much, as it barfed on XML, or worse yet, added invalid stuff). Contribute wouldn’t work with the custom workflow… Etc…

We’re going through iterative cycles on a few projects, and lo and behold, SciQ is becoming largely static pages (except the stuff that deals directly with learning objects – that is still generated by CAREO) – likewise for the LC website.

The moral of the story is, when you’ve built a pretty fancy hammer, and everything is looking like pretty fancy nails, take a good step back and think about what’s really going on. Odds are, you’ve got more than just nails to deal with.

Verifying email addresses

I’ve been working on the app that manages workshop registrations here in the Learning Commons, and have been tackling one of the major problems in the current version – people can enter invalid email addresses, and may never even know they did it. They won’t receive confirmation, and can’t receive updates/modifications.

Often, these addresses are trivially incorrect (an errant space, a missing . or whatever).

Anyway, here is the code I whipped up for the app to attempt to verify the email address. It relies on the Java InetAddress class, and does a lookup of the hostname. If there’s a machine at the hostname, I’ll assume it’s correct. (could get fancy and look up only MX records etc… but it’s a start.)


import java.util.*;
import java.net.*;

...

try {
NSLog.out.appendln("Validating email address...");

// get the hostname from the email address
StringTokenizer st = new StringTokenizer(_email, "@");
String accountName = st.nextToken();
String hostName = st.nextToken();

InetAddress emailhost = InetAddress.getByName(domainName);
NSLog.out.appendln("mailhost IP: " + emailhost.getHostAddress());

} catch (UnknownHostException e) {
NSLog.out.appendln("UnknownHostException: " + e.getMessage());
comment = "This email address appears to be invalid. Please verify your email address";

} catch (SecurityException e) {
NSLog.out.appendln("SecurityException: " + e.getMessage());
comment = "This email address appears to be invalid. Please verify your email address";

} catch (Exception e) {
NSLog.out.appendln("Unknown Exception: " + e.getMessage());
comment = "This email address appears to be invalid. Please verify your email address";

}