On being uncultured

On the way from the hotel to the restaurant for supper tonight, Tim took Josh and I on a short walking tour of what I called “art bars” – two very cool bars/clubs that were one part bar, one part art gallery. Very interesting stuff.

artbar 2

Then, to Osha (a Thai restaurant, coincidentally themed inside with elephants everywhere) for supper with the Pachydermers. I’d been crashing since about 10am, after working with Josh to stem the flow of negative Whuffie created by some miscommunication. (we got the Pachyderm authoring app up and running after an intense round of forensic analysis to find out wtf happened – then got to deal with a different but recurring problem, as described in the previous post)

At this point, I was so tired that I don’t think I could have successfully rubbed two neurons together to save my life. And everyone begins animatedly talking about the latest books they’ve read (I haven’t had any time to read fiction – or non-fiction, for that matter), or books they read as kids (I can hardly remember anything that long ago, nevermind what books I read), etc… I slowly withdrew into the corner of the table, nodding and following maybe 10% of the conversations as they swirled around me. The few comments I’m able to make are totally superficial, or seem to disappear into the background noise of the restaurant. I’m not contributing at all to the conversation, and am having trouble keeping up as a simple lurker, feeling decidedly provincial. And extremely uncultured. Not quite bumpkinesque, but I can see it from here. Truly humbling.

The saving grace is that these are all Truly Nice People. It’s nothing they’re doing – I’m just coming up short today. The irony is that once I get back to my quiet room at the hotel, and sitting in front of a keyboard, I’m almost able to maintain a stream of thought, and to construct something that appears like a coherent sentence.

OK. Now to crash, and hopefully sleep. Perhaps I’ll feel less braindead after more than 3 hours of sleep…

Debugging WebObjects

I got the chance to play with debugging a running WebObjects app today, with the added fun of having a roomful of 20 users of the app taking turns to mention “did you know that [X|Y|Z] isn’t working?”

Long story short, if you need to get the status of threads of a running WebObjects app, jdb provides some great tools. I have only scratched the surface of it, thanks entirely to the great intro document by Andrew Lindesay. (Andrew recently moved his website to .Mac from some New Zealand host, so I’m linking to help throw some Google Juice his way so others can find his article)

I’ve put a wikified crib sheet together to make it easier to get set up.

Pachyderm Year 2 Wrapup Day 1

Update: I made a Flickr Album for photos from this trip.

Had a really good first day of meetings. We had a quick lunch on the 36th floor of the Grand Hyatt, overlooking the awesome skyline of San Francisco. Then we got into the recap of the last 2 years, and touched base.

Then, we packed into a bunch of cars, and headed over to the De Young Museum in Golden Gate Park. What a cool museum! We headed straight for the Education Tower, with a spectacular view of The City – from an angle I’d never seen before.

We then proceeded with a tour through the Education Tower offices, and got a brief introduction to their education resources collection. Wow. They’ve put together a series of excellent binders for K-12 (well, 4-9 now, K-12 in January) art education. And they’re providing it free to any teacher. This is some high end stuff, so if you are looking to integrate art into your classroom, give them a shout!

View from De Young Museum TowerDe Young Museum Tower Observation DeckDe Young Museum Tower ExteriorDe Young Museum Torsion

After the tour, we were unleashed into the galleries. We spent most of our time in The Jolika Collection of New Guinea Art – very interesting pieces. And the collection wasn’t just dropped into the gallery – it feels like the rooms were designed completely around and for the collection, providing an immersive and compelling experience.

De Young Museum gallery 2De Young Museum gallery 7

As we moved through to the next gallery, the fire alarm sounded. Emergency doors slid down over every doorway and window. Metal rollers. I was expecting Halon gas to fill the gallery to protect the art, but apparently it was a false alarm. Thankfully so, since the security staff simply herded us into a group on the second floor and left us there with no apparent way to get out. We eventually were led downstairs and out of the building…

We ended the evening at Maya (2nd and Harrison) with a private dining room for the rowdy pachyderms. Some really good food (of course), and fun conversation with the folks on the project. We were also introduced to the new Pachyderm mascots – the iPachyderm. It plugs into an audio source (iPod, computer, whatever) and bops along dancing and barking and blinking and sitting and beeping and wagging and…
Pachydermers @ MayaiPachyderm

iPod Microphone

This morning before the meeting started, I took a quick sprinting shopping spree through Macy’s and then to the Apple Store. Played with the new video iPods. Oh my f#cking god. How can they make something so obviously incredible? I must have one. Oh, yeah. Cash…

Where was I going with this? Oh, yeah. I also picked up a Belkin TuneTalk microphone for my iPod. Maybe Evan will give it to me for Christmas. Plugged it into my iPod and it pops up immediately with the “Record Now” screen. Cool. So, I record some sample stuff, and it doesn’t sound like crap. Actually, it sounds completely decent. With some massaging in Audacity or GarageBand, it might even sound good. I can even leave the iPod on my belt, with the microphone in place, and record myself talking while standing and walking around. Kind of like I do when I present something to a group. Hmmmm… Might have to experiment with recording my next presentation… It also seems like a pretty handy podcasting recording setup as well.

I’ll likely be playing with the microphone while I’m here. I shouldn’t record myself at the moment, as I have a little too much wine in me to want my words recorded and published to the inkernets. Tomorrow 🙂

Listening to a longish recording I made today during the “Welcome”meeting, and am noticing some, well, issues with loud speech while recording. It seems like when the audio being recorded maxes out, instead of just clipping the audio, it inserts static. Be careful not to max out audio levels. It’s also entertaining to hear the iPod hard drive spinning up in the recorded audio as the file is periodically spooled to disk.

Travel ranting

This is the one where I rant/vent about my flight down. I’m blogging this from 30,000′ for therapeutic reasons… It wasn’t a bad trip down at all, and I’m seriously not complaining about being sent to San Francisco for a couple of days of meetings, but man some people are just ignorant enough to deserve a full-fledged ranting…

OK. I wake up at 3:20am – alarm’s set for 4 – and realize with a shudder that it’s only 2:20am Pacific time, but I can’t sleep the morning I have to fly anywhere. Get ready, sneak into Evan’s room to say goodbye while he sleeps, and then head downstairs to catch the cab at 5am. I arrive at the airport at about 5:20. Through checkin in about 5 minutes, then into the lineup for US Customs. It’s moving smoothly, and I’m through in about 20 minutes. I head for the lineup for the security check, and notice people starting to shove. They’re trying to follow the flight crews through the expedited lines, and they’re trying to shove their way through the remaining lines.

One very sweaty nervous little man nudges his way behind me, and quietly asks “do you mind if I ask you when your flight is? mine’s at 6:30”. I tell him mine is at 7:something, and there’s lots of time to get through security, that it won’t take any more than 15 minutes (it’s 5:55 when he asks). I decide to be an asshole (it happens occasionally). He’s got lots of time, and he’ll be through with 15-20 minutes to catch his plane if he waits patiently with the rest of us, so there’s no real emergency – just his sense of sweaty panic because he’s a moron in a suit, who can’t tell time or refuses to plan ahead. He decides he doesn’t like waiting, so makes a fuss with the agents, and is promptly rushed through the line, ahead of people that got there early enough to wait in line. Other people in line chuckle that he must have a very important meeting to be so nervous about missing it. I’d be a bit more nervous if he was running a company I was involved with – pretty obvious lack of planning skills.

10 minutes later (say, 6:05), and I’m third in line, starting to prepare my stuff to go through the X-Ray screener. A big Texan in coveralls, carrying a big duffel bag, marches through the line, to the staff side of the security checkin counter. I half expect him to open up with a hearty “WaHOO!” and pull out his dual six-shooters, all Looney Toons style. Instead, he blurts out “My flight to Dallas is at 6:30. I can’t wait in line. I need to get to my flight now!” The agent calmly replies “Well, sir, it’s not up to me. You’ll have to ask the people in line [gestures to the ~150 people in the waiting area] – maybe they’ll let you move up.” Several people in line calmly mention they’re on the same flight, but they don’t rush to the front because they know there’s lots of time left.

Texas turns to the person who’s next in line, and asks if he can join him through the security checkin. And then proceeds to remove the rope barricade so he can muscle his way into line. He then turns to us and says “This is my first time doing this – I’ve never gone through it before” – uh, Texas? how the f#ck did you get here in the first place? You’re talking with a Texas drawl, wearing a hat that says “Freer Texas” and are pretty obviously Not From Here, but you somehow managed to get up here with all of your crap without traveling by plane? And didn’t bother to pay attention when you’re told to show up at the airport 2-3 hours ahead of boarding time to deal with your own country’s security protocols? And have no problem muscling your way into line, acting like an ignorant buffoon, and making ~150 people wait while you throw a little tantrum to get your way?

Obviously, rules and lineups are for suckers. Only losers wait in line, and plan ahead.

Finally, I’m through, and find my way to gate 31 – it’s hidden in the new area – and relax in the waiting area. Lots of time. They start boarding, asking us repeatedly to board by sections (I’m in section 4, the last to board). When they call my section, I happen to be the second person to come forward. I get through to my seat, and find a woman already sprawled out in the window seat next to mine. Her coat is draped over her, as well as my seat, and she’s pretending to sleep. She must be tired. Maybe she got up early this morning. That would be rough. Oh, wait. Every single person on this plane got up early. I initially attempt to find another seat so she can continue her sprawl undisturbed, but decide that I could really use the extra leg room the exit seat provides (not to mention dual seat trays – one in front, and one in the armrest).

We take off after a short delay, and I get to see an absolutely amazing sunrise a few minutes after takeoff, once we rise above the cloud cover. It’s overcast the whole way to California, but fluffy cloud-tops are cool, so that’s fine with me. There are some pretty spectacular cloud formations off in the distance for most of the flight, with funky shadows being cast all over by the rising sun.

Sprawling Neighbor Lady eventually falls asleep for real, and repeatedly pours her bulk over into my seat. It’s fun editing XML files with a 50lb arm pinning your left arm to the armrest. I subtly nudge her a couple of times. No movement. I softly tuck her coat sleeve back over her so it’s not flapping on my keyboard. I cough, hoping the slight jarring might send a hint that she’s not exactly confining herself within one seat, and she’s not alone on the plane. She eventually takes a hint, and if I lean a bit to the right, and fold my left arm thusly, I can sort of simulate having enough elbow room to edit the 1431 xml files for the Mavericks website that I need to FTP back ASAP after landing (it launches officially tomorrow, so they need time to put it on their server). Actually, I get the files edited in record time thanks to the Glorious Wonder of BBEdit. Love it.

I finally give up on getting comfortable, and fire up Team America: World Police in iTunes. Might as well relax a bit 🙂

Pachyderm Year 2 Wrap-Up in San Francisco

I’m heading down to San Franshisky for a couple of days to take part in the Pachyderm Project Year 2 Wrap-Up meetings/training/gathering at SFMOMA. I’ll be sitting in meetings during the day, trying to take a photo or two of the area in between, and working on some projects with deadlines this week during the remaining hours. Should be interesting. I’ll likely be blogging during the event, and will post what I can to Flickr.

Also, since I’ll be working on projects at night, I’ll have to go for in-room internet, which means I’ll likely be checking blogs as well… Does that count as falling off the wagon? Dunno. I’ll be out of town, on business, doing work. Whatever.

Early thoughts on Joomla (nee Mambo)

I grabbed a copy of Joomla the other day, to play around with another option for a CMS to use for projects at the Learning Commons. Some early thoughts:

  • The admin UI seems very well done – but man, is there a lot of stuff in there. Not sure I’d want to unleash that interface on a novice user, or even a casual Office warrior. I’m sure it makes more sense as you get used to it, but it’s even more jarring than Drupal, and much more complicated than WordPress (likely necessarily so, since it does so much more than WordPress, but seems like it should be on par with Drupal).
  • Seems like a very odd definition of “Open Source” in the Joomla community. Likely some historical context to make it meaningful, but of the several Joomla community sites that I’ve visited for modules and templates, they all seem to require logins to download stuff, and several require paid subscriptions – some quite steep – just to get access to something that I thought was GPL. Bizarre…
  • The content publishing process seems much more complicated than Drupal or WordPress. How do you determine which chunks of content make it to the front page, in what location? The admin interface provides a lot of bells and doodads to control that, but it’s not immediately obvious how to control the flow of content.
  • It’s got a really nice level of granularity for permissions. Admins, publishers, editors, managers, writers, etc… All with their own sets of restrictions. People with access to the admin UI can publish content immediately, while “lesser” users need to have stuff approved before it shows up.
  • The URL structure is pretty much semantically meaningless. URLs take the form of /content/view/14/2/ – and that’s with the “search engine friendly” option turned on – it’s even worse without that. There’s a spot for a “Title Alias” – but it doesn’t seem to get used as the Post Slug does in WordPress, or the Path does in Drupal. Maybe there’s another bit to twiddle for that to kick in…
  • The pervasive rich text editor / WYSIWYG dealie is pretty nice.
  • Joomla feels like a robust, mature CMS. Things like content checkin/checkout, staledating, moderation, etc. appear to be done quite nicely.
  • What’s up with Joomla’s RSS Feeds feature? It’s borked. Right now, it just gives a list of feeds, and you have to click on each one to get a list of items. It should give a merged list of items, ala Drupal or FeedOnFeeds or SuprGlu or etc…
  • Installing templates and modules – hasn’t worked for me so far. Not sure what the exact process is. Doesn’t seem to work if you just drop files into the templates or modules directories. The provided Upload/Install feature fails for me, too. I’m sure it works, but I haven’t tripped over the piece of documentation describing the installation process.

I’ll have more thoughts over the next few days – I’m setting up an instance for a demo on Friday. Right now, Drupal feels more “fluid” but Joomla feels more “newspaper-ish”. If that makes sense.

Here’s a handful of screenshots of various stages of the content publishing process:

Joomla: Control PanelJoomla: Authoring content in admin uiJoomla: Content listJoomla: View content

Mambo installer bug

Just installing Mambo for a demo of various CMS options to the team tomorrow. The Mambo installer borked while creating a table, choking on a missing default value for “rating_sum”.

Easy fix. Line 221 of mambo/installation/sql/mambo.sql is dealing with setting up the content_rating table. Modify the sql thusly:

  `rating_sum` int(11) unsigned NOT NULL default '0',

Aside from that silly sql bug, the Mambo installer is pretty slick. I’ll likely blog my early thoughts of it as a CMS, after I’ve played with it for awhile…

Update: Well, looks like my Mambo installation is pretty much borked. I can’t edit content – keep getting MySQL errors on missing tables or fields. I’ll try nuking and reinstalling, but this was a fresh install from the latest build, so I’m not sure what could be wrong…

Update: Nope. It’s still borked. Install claims to have run successfully, but any attempt to edit content results in this:

DB function failed with error number 1054
Unknown column 'c.access' in 'on clause' SQL=SELECT c.*, g.name AS groupname, cc.name, u.name AS editor, f.content_id AS frontpage, s.title AS section_name, v.name AS author
 FROM mos_content AS c, mos_categories AS cc, mos_sections AS s
 LEFT JOIN mos_groups AS g ON g.id = c.access
 LEFT JOIN mos_users AS u ON u.id = c.checked_out
 LEFT JOIN mos_users AS v ON v.id = c.created_by
 LEFT JOIN mos_content_frontpage AS f ON f.content_id = c.id
WHERE c.state >= 0 AND c.catid=cc.id AND cc.section=s.id AND s.scope='content' AND c.sectionid='1'
 ORDER BY cc.ordering, cc.title, c.ordering
 LIMIT 0,10

Update: Mambo was borked, but the Joomla fork of the project installed perfectly…

Ultimate Tag Warrior hack: counting tags and backing up

I wanted to update my Archives page to display the total tag count, but didn’t see a built-in method in Ultimate Tag Warrior to do that. So, here’s the recipe I followed – mimicking how the other methods are set up, in case the changes get rolled into the main distro…

In ultimate-tag-warrior.php:

	function UTW_ShowUniqueTagCount() {
		global $utw;
		echo $utw->GetUniqueTagCount();

In ultimate-tag-warrior-core.php:

	function GetUniqueTagCount() {
		global $wpdb, $tabletags;

		$sql = "select count(*) from $tabletags";
		return $wpdb->get_var($sql);

And, in K2‘s page-archives.php (or anywhere you want the count to show up):


I’ve also hacked my copy of wp-db-backup.php to automatically back up the UTW tables, thusly, starting at line 407:

$wp_backup_default_tables = array ($table_prefix . categories,
	$table_prefix . comments,
	$table_prefix . linkcategories,
	$table_prefix . links,
	$table_prefix . options,
	$table_prefix . post2cat,
	$table_prefix . postmeta,
	$table_prefix . posts,
	$table_prefix . users,
	$table_prefix . tags,
	$table_prefix . post2tag,
	$table_prefix . tag_synonyms);

Censorship considered harmful

This morning, I saw that James Farmers’ Edublogs service is being banned in Australia. Censored. Blocked. Verboten. It irked me, and has been bugging me all day. Now, Brian just posted about it, and I realize I need to publicly demonstrate some form of outrage at this. It’s not enough to quietly grumble, or to simply comment on James’ blog post.

Censorship is inherently evil. The goal of censorship, by definition, is to prevent access to, or dissemination of information. Some might say it is a necessary evil, but I’d respond that it’s a very slippery slope, and that it’s far too easy to slide down past a point of no return.

Freedom is indivisible, and when one man is enslaved, all are not free.
John F. Kennedy

Hearing about an educational system that imposes censorship on all of its students, teachers and staff (and yes, it is imposed, as the only internet access available in the schools is provided by The Man) scares the hell out of me. Schools are supposed to foster communication. Critical thinking. Rational thought and behaviour.

And yet it appears as though an entire school system – “powered” by the EduConnect filtering mechanism – has decided that Blogs Are Bad, and Should Be Banned. They didn’t act against a specific blog. They’re not preventing kiddie porn, or spam, or phishing (but this is what they’ll say they are doing). They are blocking open communication. And that is nothing less than evil.

“Swimming pools can be dangerous for children. To protect them, one can install locks, put up fences, and deploy pool alarms. All these measures are helpful, but by far the most important thing that one can do for one’s children is to teach them to swim.”
National Research Council, Youth, Pornography, and the Internet

In the absolute best case scenario, this is simply a side effect of a lazy, outdated, authoritarian system trying to maintain the status quo. Instead of trying to educate people about information literacy, they decide it’s easier to just block access to information Just In Case™. I’m hoping this is all there is to the story, and that a public outcry might actually affect some form of change.

But, in a worst case scenario, open communication is essentially being outlawed in favour of a government-mandated censorship and filtering system. That has no place in modern society, especially in institutions of learning.

Here’s hoping things get opened up again. If they’re blocking EduBlogs.org, there’s no telling what else may be blocked.

It’s like a brand new iPod, but older.

Product Image: TruePower iPod Battery for 3G iPod
My rating: 5 out of 5

I got a new TruePower battery for my 2.5 year old 3G iPod last week. It took a grand total of 20 minutes to install, and after charging the battery, my iPod is performing better than it did the day I bought it.

I’ve gone entire work-days (including commute to/from the office) with about a third of the battery life left. It never went that long when the iPod was new. I no longer have to worry about my battery recharge cycle (don’t forget to charge it when you get into the office, or it will be dead when you go home. don’t forget to leave it in the dock all night at home, or it will be dead in the morning. etc… very liberating).

My only regret is that I don’t have to buy a new iPod anymore. My old one runs so well I just can’t justify a new one. I’ll be able to extend the life of this iPod indefinitely, picking up a new battery every few years. That’s just plain cool.

If you have a third generation iPod (the ones with the four buttons that glow), and the battery is starting to suck, run to FastMac and buy one of these batteries. For $30, you get a better-than-new iPod, while retaining the scratches and scuffs that you worked so hard to grind into your iPod…

My battery was comped by the cool folks at FastMac, but if I’d have known about the cheap and fast shipping, I would have totally bought it myself!

Updated Colophon

I get occasional emails asking me about what plugins I use to run this blog. I don’t mind answering them *cough*Alec*ahem* but having an up-to-date colophon might be helpful, too.

I just copied the table from the WordPress plugin manager, trimmed out the “Action” column, and pasted it into the colophon for this blog. I’ve noticed that some plugins provide incorrect or incomplete URLs to the plugin description/download page. I’ll find/fix the links when I get a chance. And no, I’m not turning the colophon into a wiki 😉

Intro to Wiki Presentation

I gave a presentation/workshop this morning introducing 20 folks to wiki. “Collaborative Publishing with Wiki”. The session went really well, I think, and there have already been edits by some attendees on the U of C wiki (and perhaps on Wikipedia as well).

Here’s an interactive Quicktime version of the presentation. I didn’t record audio – I really need to record the full session. If you view it, imagine me talking about stuff, and making things really interesting and clear. It’s another modified-Lessigian-style presentation, so no bullet points, and some of the slides may not make too much sense without me talking. If a slide looks odd, imagine something interesting or pithy, and click the mouse to go to the next one…

I borrowed an image from Alan (he got a better shot of the Wiki Wiki Shuttle than I did), and pulled a couple images from Flickr. I also took advantage of the Santa Claus Parade this weekend to illustrate solo vs. group efforts 😉

You might need to right-click-save-target-as to download the movie – .mov files are being throttled at the U of C right now, so it’s taking FOR EVER to load in my browser. Save the sucker to your desktop, and when it’s (eventually) done, it’ll be completely viewable.

Intro to wiki screengrab

GoDaddy increased account limits!

Patrick just came by to ask me about my experience with GoDaddy, so I was telling him about the great deal – 25 GB of bandwidth per month and 500MB of disk space. Patrick looked at me quizzically and said “No, that’s not right… It’s 250GB and 5GB.”

Wha? So, I check my GoDaddy account, and they’ve increased the hosting account limits! It is now 250GB of bandwidth per month, and 5GB of disk space. For $5CDN/month.

GoDaddy account limits increased

GoDaddy ROCKS! I just hope they can stay in business at these rates. Now, if they hosted Ruby, I’d have a nice testbed for playing with Rails…

Google Analytics – nice, but delayed

Product Image: Google Analytics
My rating: 3 out of 5

I’ve been playing with Google Analytics since I saw Tim Bray mention it last week. It looks like Google bought the Urchin webserver stats cruncher, rolled into their Adsense service, and are offering it for free. Although it seems rather tilted towards optimizing Adsense revenue, it’s also quite useful for non-Adsense usage.

I’ve been letting it chew for a week to see what kind of data it came up with, and am really impressed with the reports it provides. My only real beefs are that the data is delayed (-1/2 star) – by sometimes a day or more – and that it borks in Safari (-1/2 star). And, the interface seems really complicated (-1 star) – I keep forgetting where the various reports live. Are they visible under “Executive” mode? “Webmaster”? “Marketer”? And, some of the terminology used to describe the reports is a bit non-intuitive. Maybe not if you’re an Adsense geek, but for a regular web-head, I keep thinking “uh, what does this report tell me – they do provide nice paragraphs under each report to give the gist of it, though.

The report delay is really noticeable because I’m also using Sitemeter, which provides up-to-the-second reporting. That’s how I saw the traffic spike sent from TUAW this morning. I would have completely missed that (until it was over) if I was relying on the Analytics reports.

The reports are displayed in dynamic form – either “ajax” (blech) or Flash, depending on the report, making drilling down into the data a bit less unpleasant. I personally love the “Map Overlay” view, showing where the last 50/100/500 viewers were from. I wish there was a way to teleport to the other end of a network connection. There are several blog readers in locations I’d love to visit 🙂

Google Analytics: Map Overlay

The other really cool report matches entry pages with exit pages, so you can see sort of a flow through the data on the blog. Very cool, seeing how people are taking advantage of the alternative navigation links (related entries, calendars, tabs, searches).

It doesn’t have a way to track RSS traffic. If it did, I’d gleefully bump the review up to 5 stars, and ignore the no-Safari display. I can live with a few hours of delay on the reports, too.