My Pachyderm ePortfolio

In the process of getting ready for our session on Thursday, I started to put together an ePortfolio for myself using Pachyderm. I’ve done several “sample” ePortfolios before, but not a full-blown attempt. Something about eating your own dogfood… So I gave it a shot. It’s still pretty rough, and the “Projects” and “About this…” sections are still empty, but it’s a start. I need to flesh out most of the pages as well, as I’ve currently just got command+c command+v content migration from blog posts and wiki pages.

I found the process difficult – not because of the software (Pachyderm actually worked really well for this, aside from one minor bug I found) but because I kept thinking “But, that’s what my BLOG is for!” – many of the pages are just vectors for links to pages on my blog.

Pachyderm ePortfolio

In the process of getting ready for our session on Thursday, I started to put together an ePortfolio for myself using Pachyderm. I’ve done several “sample” ePortfolios before, but not a full-blown attempt. Something about eating your own dogfood… So I gave it a shot. It’s still pretty rough, and the “Projects” and “About this…” sections are still empty, but it’s a start. I need to flesh out most of the pages as well, as I’ve currently just got command+c command+v content migration from blog posts and wiki pages.

I found the process difficult – not because of the software (Pachyderm actually worked really well for this, aside from one minor bug I found) but because I kept thinking “But, that’s what my BLOG is for!” – many of the pages are just vectors for links to pages on my blog.

Pachyderm ePortfolio

Pachyderm Showcase

A Pachyderm PresentationA showcase of selected Pachyderm presentations has been assembled, showing several completely different types of content being presented using the Pachyderm 2.0 authoring software.

Some really good stuff in there – I’m drawn for some reason to the second item on the list…
If you’re looking for some ideas of what can be done in Pachyderm 2.0, this is a good start. If you’re looking to see the various screen types in action, it’s also good for that…

A Pachyderm PresentationA showcase of selected Pachyderm presentations has been assembled, showing several completely different types of content being presented using the Pachyderm 2.0 authoring software.

Some really good stuff in there – I’m drawn for some reason to the second item on the list…
If you’re looking for some ideas of what can be done in Pachyderm 2.0, this is a good start. If you’re looking to see the various screen types in action, it’s also good for that…

iWeb as an ePortfolio Management Platform?

I’m involved with an ePortfolio project with our Faculty of Education – aimed at getting student teachers to build a series of high quality, interactive, personalized portfolios outlining their development as professionals. It’s more about the journey (self reflection, writing, documenting) than the destination (the final website) so we were looking for tools that wouldn’t require technical know-how in order for the students to produce interesting products. When the project got off the ground (in the fall of 2005), there wasn’t really any off-the-shelf product that fit the bill, so we started to implement an instance of Pachyderm so the students could start authoring in it.

But, things changed recently, when Apple announced and released iWeb. It’s a dead-simple app to use, and comes with some great design templates. The output is just standard HTML, which can be served from anywhere.

iWeb ePortfolio Authoring To help figure out if iWeb would serve as an adequate ePortfolio management platform, I just whipped up a quick and dirty skeleton of my own ePortfolio to see how it works out. After about 15 minutes of play time, I’m really impressed. Built-in blogging (with multiple "blogs" in a site, each with their own RSS feed). Great content-agnostic templates that let you basically do anything you want to.

I’ll be trying it out a bit more over the next few days to see if we should switch strategies, but if I was to start this project over now from the beginning, I’d have recommended iWeb as our first choice. It’s not perfect – things like the generated URLs make me want to cry – but it’s so simple to use, and flexible enough to let you be as creative as you can be.

There are 3 issues with this solution, that I see:

  1. Cost. The computers available to the students will have to be equipped with iLife ’06. Many of the computers are old enough that they’d have to be upgraded to install iLife ’06 in the first place. Perhaps just iWeb can be installed on lesser/older computers? Making each student cough up for their own copy of iLife ’06 isn’t going to fly. We could try to get some kind of bulk purchase price or something, but that’s not something to count on.
  2. Mac-Only. Many of the students don’t have their own Macs. Ideally, a cross-platform solution would be better. Perhaps Contribute may be up to that task? (but, see previous point about cost)
  3. Publishing. iWeb has automated publishing to a .Mac account. Most students won’t have one. (again, refer to point #1) Heck, I don’t even have one any more. FTPing files will be beyond many of the students. How about a built-in FTP upload function, or WebDAV?

I’m involved with an ePortfolio project with our Faculty of Education – aimed at getting student teachers to build a series of high quality, interactive, personalized portfolios outlining their development as professionals. It’s more about the journey (self reflection, writing, documenting) than the destination (the final website) so we were looking for tools that wouldn’t require technical know-how in order for the students to produce interesting products. When the project got off the ground (in the fall of 2005), there wasn’t really any off-the-shelf product that fit the bill, so we started to implement an instance of Pachyderm so the students could start authoring in it.

But, things changed recently, when Apple announced and released iWeb. It’s a dead-simple app to use, and comes with some great design templates. The output is just standard HTML, which can be served from anywhere.

iWeb ePortfolio Authoring To help figure out if iWeb would serve as an adequate ePortfolio management platform, I just whipped up a quick and dirty skeleton of my own ePortfolio to see how it works out. After about 15 minutes of play time, I’m really impressed. Built-in blogging (with multiple "blogs" in a site, each with their own RSS feed). Great content-agnostic templates that let you basically do anything you want to.

I’ll be trying it out a bit more over the next few days to see if we should switch strategies, but if I was to start this project over now from the beginning, I’d have recommended iWeb as our first choice. It’s not perfect – things like the generated URLs make me want to cry – but it’s so simple to use, and flexible enough to let you be as creative as you can be.

There are 3 issues with this solution, that I see:

  1. Cost. The computers available to the students will have to be equipped with iLife ’06. Many of the computers are old enough that they’d have to be upgraded to install iLife ’06 in the first place. Perhaps just iWeb can be installed on lesser/older computers? Making each student cough up for their own copy of iLife ’06 isn’t going to fly. We could try to get some kind of bulk purchase price or something, but that’s not something to count on.
  2. Mac-Only. Many of the students don’t have their own Macs. Ideally, a cross-platform solution would be better. Perhaps Contribute may be up to that task? (but, see previous point about cost)
  3. Publishing. iWeb has automated publishing to a .Mac account. Most students won’t have one. (again, refer to point #1) Heck, I don’t even have one any more. FTPing files will be beyond many of the students. How about a built-in FTP upload function, or WebDAV?

Mavericks – An Incorrigible History of Alberta

The Mavericks online exhibit went live on Wednesday. The event featured several of the Mavericks (or family members) attending to answer questions. I missed the event, but it sounded like a great one.

The project is really quite cool, presenting a history of the prominent figures in Alberta’s history from the 1700s to modern day. Themes such as settlement, ranching, Mounties, oil, politics, war, and immigration are covered in pretty impressive depth. There are over 1400 screens of content (images, text, audio, and video), as well as a full teacher’s resource for use as part of the curriculum.

The online exhibit was authored using the in-development versions of Pachyderm 2.0, and provided a pretty serious beta test suite for the software. The really impressive thing is that now that Pachyderm 2.0 is essentially “stable” enough to let people hammer at it, anyone can create online exhibits like this…

Mavericks Main Menu

The Mavericks online exhibit went live on Wednesday. The event featured several of the Mavericks (or family members) attending to answer questions. I missed the event, but it sounded like a great one.

The project is really quite cool, presenting a history of the prominent figures in Alberta’s history from the 1700s to modern day. Themes such as settlement, ranching, Mounties, oil, politics, war, and immigration are covered in pretty impressive depth. There are over 1400 screens of content (images, text, audio, and video), as well as a full teacher’s resource for use as part of the curriculum.

The online exhibit was authored using the in-development versions of Pachyderm 2.0, and provided a pretty serious beta test suite for the software. The really impressive thing is that now that Pachyderm 2.0 is essentially “stable” enough to let people hammer at it, anyone can create online exhibits like this…

Mavericks Main Menu

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.

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

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

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.

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.

On Customer Service and Travel

I had to book a hotel room today for the Big Pachyderm Wrapup Hootenanny at the end of the month. The rooms at the Grand Hyatt San Francisco were already sort of pre-arranged, so it was just a matter of calling, saying that yes I needed a room, and providing payment info.

I call the hotel, and the phone is answered by an extremely nice and pleasant operator, who assures me that it would, indeed, be a pleasure to connect me to the reservations desk.

Then, it all fell apart. I’m not sure if the person at Reservations was just having a bad day, or if her cat just died or maybe she was handed her walking papers that morning. But, whatever happened to her to put her in a funky foul mood somehow poured itself into her phone, travelled several hundred miles to the northeast, and oozed out of my earpiece. I felt like I should have been apologizing for interrupting her to give the hotel money in exchange for lodging. How rude and inconsiderate of me.

I eventually got the room booked, with the special meeting rate (“NMC? What does THAT stand for? Oh. Uh huh.”). Next, I went to book airfare. Normally a painless and quick process.

So, I head to the website – where I have already pre-searched for the flights – and proceed to book a seat to SFO. The process goes really smoothly. No attitude from cranky operators, just a relatively well-tuned website guiding me through the process.

Then, after the transaction has gone through, I am greeted by a scary new message. Because I am travelling into US airspace, I need to register with the Advance Passenger Information System (APIS) – oddly close to the AFIS system used on CSI, so I get a bit on edge. I’m told that they need my personal info before I will be allowed to board. But… I just gave my personal information… Not good enough. They need more info to make sure I’m not planning something stupid. Because, you know, having a valid passport number means I’m safe. I don’t carry my passport with me, so I have to resort to the printed form, which I will have to keep with me so I don’t lose it if I want to get on the plane.

It used to be so easy to travel. People were nice. It was almost as though traveling was a good thing. That’s gone. Now, traveling is at best an inconvenience. At its worst, it’s apparently a huge security risk. Why am I going through all of this again?

I had to book a hotel room today for the Big Pachyderm Wrapup Hootenanny at the end of the month. The rooms at the Grand Hyatt San Francisco were already sort of pre-arranged, so it was just a matter of calling, saying that yes I needed a room, and providing payment info.

I call the hotel, and the phone is answered by an extremely nice and pleasant operator, who assures me that it would, indeed, be a pleasure to connect me to the reservations desk.

Then, it all fell apart. I’m not sure if the person at Reservations was just having a bad day, or if her cat just died or maybe she was handed her walking papers that morning. But, whatever happened to her to put her in a funky foul mood somehow poured itself into her phone, travelled several hundred miles to the northeast, and oozed out of my earpiece. I felt like I should have been apologizing for interrupting her to give the hotel money in exchange for lodging. How rude and inconsiderate of me.

I eventually got the room booked, with the special meeting rate (“NMC? What does THAT stand for? Oh. Uh huh.”). Next, I went to book airfare. Normally a painless and quick process.

So, I head to the website – where I have already pre-searched for the flights – and proceed to book a seat to SFO. The process goes really smoothly. No attitude from cranky operators, just a relatively well-tuned website guiding me through the process.

Then, after the transaction has gone through, I am greeted by a scary new message. Because I am travelling into US airspace, I need to register with the Advance Passenger Information System (APIS) – oddly close to the AFIS system used on CSI, so I get a bit on edge. I’m told that they need my personal info before I will be allowed to board. But… I just gave my personal information… Not good enough. They need more info to make sure I’m not planning something stupid. Because, you know, having a valid passport number means I’m safe. I don’t carry my passport with me, so I have to resort to the printed form, which I will have to keep with me so I don’t lose it if I want to get on the plane.

It used to be so easy to travel. People were nice. It was almost as though traveling was a good thing. That’s gone. Now, traveling is at best an inconvenience. At its worst, it’s apparently a huge security risk. Why am I going through all of this again?

WOFileUpload may be broken.

Update: Nope it ain’t broken. It was purely operator error on my part – I missed an “=” sign in the .html for a component, and that was borking file uploads. It was weird, because Safari and IE would upload just fine, but Firefox would barf.

Josh just discovered a weird behaviour in Pachyderm, where uploading files was breaking. But only on Firefox. WTF?

A quick google brought up this post on NSLog.org, via ryfar.com:

NSLog(@”Guido’s blog”);: WOFileUpload problem
WOFileUpload problem

I implemented today a generic component for file uploads to my application and got “no form data left” errors from WOFileUpload.

To solve this, I added:

System.setProperty("WOUseLegacyMultipartParser", "YES");

to my application constructor. Works, but I’m not happy with it. Have to check back later on that topic.

Update: Well, that didn’t fix the problem, but it may come in handy some day…

Update 2: Looks like the code mentioned above may break things rather than fixing them. We’ve removed it, and things are sorta working again. And, King found one cause of the exception we were seeing – a missing = sign in the name="myButtonName" for the submit button was causing FF to barf violently. But, we’re still seeing a separate upload problem…

Update: Nope it ain’t broken. It was purely operator error on my part – I missed an “=” sign in the .html for a component, and that was borking file uploads. It was weird, because Safari and IE would upload just fine, but Firefox would barf.

Josh just discovered a weird behaviour in Pachyderm, where uploading files was breaking. But only on Firefox. WTF?

A quick google brought up this post on NSLog.org, via ryfar.com:

NSLog(@”Guido’s blog”);: WOFileUpload problem
WOFileUpload problem

I implemented today a generic component for file uploads to my application and got “no form data left” errors from WOFileUpload.

To solve this, I added:

System.setProperty("WOUseLegacyMultipartParser", "YES");

to my application constructor. Works, but I’m not happy with it. Have to check back later on that topic.

Update: Well, that didn’t fix the problem, but it may come in handy some day…

Update 2: Looks like the code mentioned above may break things rather than fixing them. We’ve removed it, and things are sorta working again. And, King found one cause of the exception we were seeing – a missing = sign in the name="myButtonName" for the submit button was causing FF to barf violently. But, we’re still seeing a separate upload problem…

Fun with Java RegEx String Replacement

In the Pachyderm presentation publishing code, there is a step where it compiles the various versions of images for use in the final product – resizing as needed, wrapping in the .swf file and burning in the metadata. It uses an XML format, provided by JSwiff, to replace the freeze-dried content of a templated flash file wrapper with the dynamically defined data (image and text).

We just do a simple find-and-replace, looking for special tags that we’ve placed in the templated .swf xml version – looking for things like “{tombstoneTitleShort}” and replacing it with “My Most Excellent Photo”. Seems simple. But I just came across a case where it failed. The extended text for an image included a $ – which would be fine, but it’s a Magic Regex Character, symbolizing the end of a line of text (likewise, ^ symbolizes the beginning of a line). And, it was unescaped (and not at the end of a line), so the String.replaceAll() method was barfing appropriately. I think this is what was happening… Looked like it from the debug output, anyway…

I just switched that bit of string replacement to use the Apache Commons Lang StringUtils replacement method (org.apache.commons.lang.StringUtils.replace(String, String, String) ), and all appears fine now.

As an aside, there are a lot of handy little goodnesses in the Apache Commons Lang library (as in the other Commons libraries). I need to make sure I’m taking advantage of it more, rather than writing my own utility code…

Update: Nope. That didn’t work as cleanly as I’d hoped. Now it was complaining that some of the replaced characters were invalid UTF-8. So, I’m now replacing characters in my replacement string to attempt to escape them properly before feeding them to String.replaceAll( pattern, value ), using the “oldReplace” method from this tip.

In the Pachyderm presentation publishing code, there is a step where it compiles the various versions of images for use in the final product – resizing as needed, wrapping in the .swf file and burning in the metadata. It uses an XML format, provided by JSwiff, to replace the freeze-dried content of a templated flash file wrapper with the dynamically defined data (image and text).

We just do a simple find-and-replace, looking for special tags that we’ve placed in the templated .swf xml version – looking for things like “{tombstoneTitleShort}” and replacing it with “My Most Excellent Photo”. Seems simple. But I just came across a case where it failed. The extended text for an image included a $ – which would be fine, but it’s a Magic Regex Character, symbolizing the end of a line of text (likewise, ^ symbolizes the beginning of a line). And, it was unescaped (and not at the end of a line), so the String.replaceAll() method was barfing appropriately. I think this is what was happening… Looked like it from the debug output, anyway…

I just switched that bit of string replacement to use the Apache Commons Lang StringUtils replacement method (org.apache.commons.lang.StringUtils.replace(String, String, String) ), and all appears fine now.

As an aside, there are a lot of handy little goodnesses in the Apache Commons Lang library (as in the other Commons libraries). I need to make sure I’m taking advantage of it more, rather than writing my own utility code…

Update: Nope. That didn’t work as cleanly as I’d hoped. Now it was complaining that some of the replaced characters were invalid UTF-8. So, I’m now replacing characters in my replacement string to attempt to escape them properly before feeding them to String.replaceAll( pattern, value ), using the “oldReplace” method from this tip.