Archive for October 9, 2006

Schoolwide Conversation Via Blogging

Chris Lehmann, principal of Science Leadership Academy in Philadelphia finds the time to keep up a rich blog while running the school. The blog is an integral part of his daily administrative life, reading like the notes to a school community that are usually kept internal to the school. Chris reflects on issues of school development, funding, and operation with honesty and urgency that reflects the importance of his undertaking in Philadelphia.

Last week, Chris posted a statement of concern about student self-segregation to the school’s internal discussion forum. He received a flurry of replies from within the school and shared them anonymously on his public blog.

Every good school administrator strives to achieve this level of broad conversation within and beyond the school. In a wired world, this blog may represent the new form of reflection, transparency, and professional development essential to good administrator practice. On with it!

Elgg as Alumni Web Site, Part 3

I have previously written about efforts to design an alumni web site for Maru-a-Pula school around Elgg. At the time, I thought it would be a long time before Catlin Gabel School was ready to open a web site to mostly unmoderated alumni contributions. Then, our development office took on a new hire — a recent graduate — who informed us that alumni have already been asking the school for social networking support (MySpace, Facebook, eVite) for reunion classes! This has suddenly opened the door to using Elgg here at Catlin Gabel. So, I present to you, Catlin Gabel Alumni Online (a work in progress)!

Catlin Gabel Alumni Online

The big difference between the Maru-a-Pula and Catlin Gabel alumni sites is that the latter site must be fully integrated with LDAP and Raiser’s Edge. LDAP is needed so that current faculty, staff, and seniors may have full access to the alumni conversations. Contact with former teachers is of high interest to alumni. I activated the Elgg LDAP authentication module (it’s built in with recent distributions) and added a little of my own code to autogenerate a new user account for each new successful LDAP login.

Raiser’s Edge integration is necessary in order to keep the database restricted to alumni and show information the school currently has in its alumni database in each user’s online profile. To achieve the first goal, I quickly validate the name and email information that Elgg requests of new users against Raiser’s Edge before allowing new user registration. For the second, I plan to pull RE information whenever it is newer than the information in Elgg. When new profile information is submitted in Elgg, I will generate an email to the alumni office so that they may make individual changes and/or make the data available for download and import into Raiser’s Edge.

We are excited about the potential for alumni users to engage in reunion conversationss through this tool and then continue individual updates and group conversations ongoing. Now if only my old high school were to make such a tool available for my reunion!

We Live In a Very Physical World

With so much talk about online communities, it is easy to believe that we now live in a virtual world, in which the flow of bits and bytes completely determines how we interact with others. Three recent experiences reminded me how very physical our world still is and how far we are from a truly virtual experience.

Normally, I don’t do much hardware repair, but today I removed a hard drive from a Powerbook G4 to attempt to recover data off it. The sleek, Apple aluminum case itself was dinged and bent all over from so many collisions with who knows what. I removed plates, plugs, modules, keys, and countless screws. My hands turned grey from contact with dirty aluminum and steel. The instructions repeatedly cautioned me to take care with this wire and that cable. When I finally had the drive in my hands, I heard it attempt to spin up … and fail … over and over again. The drive wouldn’t spin — the bytes trapped on the magnetic medium with no way out.

We live in a very physical world.

I recall a film I used to watch with students called Secrets of Silicon Valley. The film weaves together two stories set amidst the economic boom of Palo Alto. One conerns the struggle of PluggedIn, a local community technology center, to locate a new site for its program. Their old rental property is sold, then bulldozed for a large chain. The organization secures funding, buys a property, and refurbishes an old building so that kids can have a space to access free computers and training. The second storyline describes one HP employee’s struggle to battle the giant company over the health hazards of working on the printer assembly line. Injured backs, cardboard cuts, and respiratory ailments all accompany the grueling work of getting new printers to customers.

We live in a very physical world.

I am reading Let My People Surf, the Patagonia story as told by its founder Yvon Chouinard. He talks of the enormous environmental cost of shipping goods across the United States. The act of shipping a piece of clothing from California to Massachusetts consumes as much energy as does manufacturing the article all the way from raw materials to finished product. The financial cost of shipping is cheap, but the environmental cost is very expensive. I think of all of the computers and peripherals that ship from China, Texas, and California. Thank goodness we at least buy projectors and displays locally.

We live in a very physical world.

While cleaning up, we recently discovered three old, heavy projectors that are of no use to us anymore. I found the original documentation (1996) on the web. State of the art at the time, the unit boasted 640×480 resolution and 250 lumens. My 1997 Civic still feels perfectly useful and current. This projector is practically from the stone age. Thankfully, FreeGeek is willing to accept, refurbish, and find a useful home for the unit. Otherwise, it would be off to the e-waste recycling center.

We live in a very physical world.

Recently, the Apple tech support center was shut down for the good part of a day because of a burst water pipe in their building.

We live in a very physical world.

I recently attempted to help a vision-impaired faculty member expand his computer use. He is masterful with Outlook, filtering email correspondence by student name so that he may keep track of conversations. When browsing the web, however, he is completely lost. His screen reader dutifully marches down the sidebar of the New York Times, reading each link in turn: “politics … washington … education.” The blaring headline article in the middle of the page catches my eye first, but his screen reader never gets there. After listening to 20 sidebar links, he attempts to click on an article but just ends up in another section. He gives up. I cannot find a shortcut key that will get him to the main article in the center of the page … so apparent to me.

We live in a very sensorial world.

Elgg as Alumni Web Site, Part 2

Last week, I got frustrated with attempting to modify Elgg core code to make cosmetic changes. There were two problems. First, the language settings are only partially abstracted, so the text strings that appear within Elgg are actually hard-coded within core code. Second, text strings are spread out throughout different parts of the Elgg directory structure, so items are often hard to find. Contrast this with the east of modification of Moodle or phpBB, as I have found in the past. Hopefully, the good folk within the Elgg development team will abstract the language file soon, making it easier to use Elgg for a wide range of purposes such as an alumni web site.

I was dead in the water until I discovered this command-line trick from Rob Fisher to perform full-text searches of the Elgg codebase.

grep -lir "some text" *

I put each of the strings I wanted to change through this command to find the variety of locations on the server where the revelant items were located.

MAP alumni

I made a number of changes to make the site more useful as an alumni web site.

  • Changed all mention of “blog” to “post.” Most users won’t actually be blogging here but rather posting occasional updates on there whereabouts and activities. I didn’t want to scare off prospective participants with a loaded term that didn’t really match the purpose of the site.

  • Removed “Dashboard” and “Resources” to simplify the site and narrow its focus. Test users were confused about the purpose of these two items. Remote RSS feeds didn’t work anyway due to fopen() being disabled at Dreamhost. I would like to get this working one day.
  • Made graphic design shorter and more people-oriented (based on Northern stock template).
  • Provided some explanatory information on home page for logged-in users.
  • Eliminated “public” restriction type and made “logged in users” default. (Because this is a closed network, posts are not “public.”

One outstanding question is what to do about RSS feeds on a private site. Ideally, some users will follow the site through RSS feeds. But with the “walled garden” setting turned on, RSS feeds don’t work. One solution is to make the site wide open, though this won’t necessarily best serve the alumni who want to freely chat with each other without posting lots of information in a public space. Another is to modify code so that RSS feeds are public though the rest of the site is not. This is probably the best solution.

I still have not heard of other schools using Elgg for an alumni web site, though I did find that the Elgg development team certainly has it in mind: Elgg Alumni Spaces. I wonder what code modifications they are up to?

Moodle: Display full names for logged in users

Here is a tiny hack to show full names for logged in users and first names only for guests. This setup, which is not available in Moodle config, allows the public to view some courses in our Moodle without getting too much information about student identities.

Modify function fullname at line 2301 of /lib/moodlelib.php

if (!isguest()) {return $user->firstname .' '. $user->lastname;} else {return $user->firstname;}

If you use a different fullname format (e.g., lastname, firstname), then you should modify a different line of that function.

Next, I would like to enable a “guest” option for registered users, so that they don’t have to enroll in a course in order to view its contents. Or, I could automatically enroll users in courses they select without asking, but that would not be as smooth.

Portals and Portability

Today, I released a new portal home page based on the one I ran for four years at University High School. This upgrades the previous system in which Moodle handled everything, including home page presentation.

insideCatlin home page

The new home page was inevitable in order to coordinate links to multiple services as we introduced new tools besides Moodle. I accelerated the release of the new page in order to solve a few problems with Moodle-as-CMS. If you have enrolled in a course, then Moodle presents you with a link to it on your home page. However, if you have not yet enrolled in a course, then its link is hopelessly buried among dozens of other courses. An independent portal home page is essential to bring important schoolwide programs to the surface where they belong.

Now for the “portability” part. In this design, I successfully created a feature I had wanted to introduce for a while: a customized home page with links directly to the user’s own resources. This is possible through mySQL queries to the databases for different services. In the left column, I decrypt Moodle’s userid cookie and then query Moodle to find the user’s courses. In the middle, I query our custom public-facing web site to display the school’s current calendar and news items. On the right, I query Active Directory in order to customize program links by one’s security group (e.g., upper school library link only for upper school students). I could also query Blackbaud here for one’s schedule information, but that is on a sub-page for the time being.

Content portability is essential to the success of a good school intranet. As long as data is trapped within each separate system within the site, then content remains fractured. Users have to first know the format of a particular kind of content before they can go get it (e.g., “I know this content is in Moodle, so first I click on Moodle). Since it is unlikely that you can find a single solution that will meet all the needs of a school, multiple solutions are necessary. Getting the multiple solutions to talk to each other is the challenge. Thankfully, good people are working to make it easier. Authentication and subscription plug-ins are becoming more common in major open-source releases, and initiatives such as OpenAcademic promise to make single-sign on and object portability a standard part of commonly available packages.

Security is handled in a manner similar to the Yahoo! model. The Moodle cookie persists longer than the Moodle session, so it is available for use more of the time. Even when you are not logged into Moodle, the portal still knows who you are. This enables the site to personalize your home page content even before you have logged in. Once you actually request one of these personal resources, then you log in. This gets you access to non-sensitive personal resources as quickly as possible.

Screen Sharing Student Desktops

It’s a real challenge to find screen-sharing software that meets our requirements. Apple Remote Desktop only works with Macs or VNC-enabled PCs, and network admins typically do not consider VNC to be sufficiently secure. Altiris is only available to domain admins.

Enter Bosco’s Screen Share. It’s free, cross-platform, and application-based, which provides much better security. Bosco’s allows you to connect to another person who is running the same software and either view, control, or project to their screen. It’s a quick and easy way for a teacher to show the screens of individual students during class. Your computer is only available when the software is running, and you are always asked for permission when someone wants to connect to your computer.

There are two small downsides. The teacher cannot quickly see the screens of all the students (in order to choose one, for example), and that the students may also connect directly to each other (which can become a distraction).

Two tech tips: Sharing your screen is a two-step process: 1) “Dial” the IP address of the other user or select it from the Favorites menu. 2) Choose whether you want to View, Control, or Project to the other user’s screen. Projecting to a teacher’s machine automatically puts you in full-screen mode, which is the quickest way to get student work on a data projector screen. Finer image quality is an available preference.

Bosco’s Screen Share appears to offers a great balance of features, ease-of-use, affordability, and security.

Raiser’s Edge Query for Alumni Site

I am making great progress on our self-made alumni web site. Having dropped NetCommunity a few weeks ago, this solution will provide most of the functionality of NetCommunity while we build a more ambitious long-term vision for the site. This project well predates my arrival to the school, so I think that the alumni and the development office will be pleased to have a site up and running shortly.

catlin alumni menu
New items at the bottom

I spent the first few hours refining a test query to pull most of the necessary information for one record in Raiser’s Edge. I still have to add a few items (ensure alum is not deceased, for instance), but here is the query so far. You may find this useful if you are considering writing your own queries against Raiser’s Edge. The optional RODBA (read-only database assistance) module was very useful in helping me piece this together.

SELECT
RECORDS.ID, RECORDS.FIRST_NAME, RECORDS.LAST_NAME, RECORDS.MAIDEN_NAME, RECORDS.MIDDLE_NAME, RECORDS.FULL_NAME,
ADDRESS.ID as ADDRESSID, ADDRESS.ADDRESS_BLOCK, ADDRESS.CITY, ADDRESS.STATE, ADDRESS.POST_CODE, ADDRESS.DATE_LAST_CHANGED,
PHONES.PHONESID, PHONES.NUM,
TABLEENTRIES_phones.LONGDESCRIPTION AS PHONETYPE,
EDUCATION.ID AS EDUCATIONID, EDUCATION.CLASS_OF,
TABLEENTRIES_school.LONGDESCRIPTION AS SCHOOL,
CONSTIT_RELATIONSHIPS.RELATION_ID AS RELATIONID,
CONSTIT_RELATIONSHIPS.IS_EMPLOYEE,
CONSTIT_RELATIONSHIPS.IS_SPOUSE,
CONSTIT_RELATIONSHIPS.DATE_FROM,
CONSTIT_RELATIONSHIPS.DATE_TO,
CONSTIT_RELATIONSHIPS.POSITION,
RECORDS_relations.FIRST_NAME AS RELATION_FIRST_NAME,
RECORDS_relations.LAST_NAME AS RELATION_LAST_NAME,
RECORDS_relations.ORG_NAME AS RELATION_ORG_NAME,
TABLEENTRIES_industry.LONGDESCRIPTION AS INDUSTRY,
TABLEENTRIES_profession.LONGDESCRIPTION AS PROFESSION
FROM
RECORDS,
CONSTIT_ADDRESS,
CONSTIT_ADDRESS_PHONES,
ADDRESS,
PHONES,
TABLEENTRIES AS TABLEENTRIES_phones,
EDUCATION,
TABLEENTRIES AS TABLEENTRIES_school,
CONSTIT_RELATIONSHIPS,
RECORDS AS RECORDS_relations,
TABLEENTRIES AS TABLEENTRIES_industry,
TABLEENTRIES AS TABLEENTRIES_profession
WHERE
RECORDS.LAST_NAME = 'Kassissieh' AND RECORDS.FIRST_NAME = 'Richard' AND
RECORDS.ID = CONSTIT_ADDRESS.CONSTIT_ID AND
CONSTIT_ADDRESS.ADDRESS_ID = ADDRESS.ID AND CONSTIT_ADDRESS.PREFERRED = '-1' AND
CONSTIT_ADDRESS_PHONES.CONSTITADDRESSID = CONSTIT_ADDRESS.ID AND
CONSTIT_ADDRESS_PHONES.PHONESID = PHONES.PHONESID AND
PHONES.PHONETYPEID = TABLEENTRIES_phones.TABLEENTRIESID AND
PHONES.DO_NOT_CALL = '0' AND
EDUCATION.RECORD_ID = RECORDS.ID AND
EDUCATION.SCHOOL_ID = TABLEENTRIES_school.TABLEENTRIESID AND
RECORDS.ID = CONSTIT_RELATIONSHIPS.CONSTIT_ID AND
CONSTIT_RELATIONSHIPS.RELATION_ID = RECORDS_relations.ID AND
CONSTIT_RELATIONSHIPS.INDUSTRY = TABLEENTRIES_industry.TABLEENTRIESID AND
CONSTIT_RELATIONSHIPS.PROFESSION = TABLEENTRIES_profession.TABLEENTRIESID";

Podcast By Phone

Our seventh grade world cultures teacher Paul is researching easy-to-use podcasting techniques for his session at this Friday’s PNAIS annual conference. Together we have just found a number of free, phone-based podcasting services that the rest of you probably already know about. For the moment, Paul has settled on gCast, where you can call a toll-free number, record a podcast, and the site will automatically post it to your blog or podcast! You can even include a web-based player on your blog web site. Brilliant. Gabcast appears to offer a similar service.

This solution has great potential for student podcasting, where the main obstacle is a quiet place to record. An active classroom or computer lab is impossible — too noisy. Outside of class is difficult, because a class full of students must schedule time on one or two available computers. Home computers are not reliable, as many don’t have microphones, or their audio input settings are not correctly configured.

Phones are ubiquitous. All of our students already have one or can easily gain access to one at just about any hour. The instructions couldn’t be more simple: call up this number and record your assignment. Only the teacher must do the slightly more technical work of creating the gCast account and pointing it to the class blog. We tested it today for one recording, and it worked brilliantly. They even have a simple area to copy a bit of HTML and post it in your blog to get an audio player.

Here’s another potentially great application: podcasting of sports or other live events. Students are usually very keen to broadcast school sports (remember, Ben?), but this is difficult to do at outdoor venues with regular recording equipment. Then there’s the lag time while you find a computer and upload the files. With a cellphone and this automated service, one could podcast an event in segments straight from your phone, and listeners could pick it up right away.

What about school-sponsored trips? I have always hoped that students traveling on interesting school trips would blog or report back in some way. With a cellphone, one could send a quick summary of the trip during the bus ride home!

The only catch we have discovered so far is that you must register your phone number on the site, and we feel ambivalent about students posting their phone numbers there. However, gCast also has an option that you can call from a different number as long as you key in your primary phone number. It seems that if the teacher provides his phone number and gCast PIN as part of the assignment instructions, then this should not be an obstacle!

We will soon give this a try and see how it goes. More details to come here later. Wish us luck. Has anyone else tried this technology?

Permanent Redirects

You may know how the web address for Outlook Web Access always ends in /exchange, which is okay in a link but not if you’re trying to tell people the address. If anyone happens to go to the home page of the site, they get a “no home page” error.

Exchange default home page errorExchange server default home page!

Since the webroot for IIS on Exchange server is just about empty, so you can easily replace the default page if you like with a permanent redirect. I also found a great summary of this technique applied in different programming languages at Permanent Redirects with HTTP 301. Here’s the code for ASP, which is enabled by default on your Exchange server.

<%@ Language=VBScript %>
<%
' Permanent redirection
Response.Status = "301 Moved Permanently"
Response.AddHeader "Location", "http://www.yourdomain.com/"
Response.End
%>

This technique is useful anywhere you would like an easy redirect to another directory and you don’t have access to a .htaccess file (Linux) or the IIS admin interface (Windows).

Of course, it’s easier in PERL with CGI.pm or in PHP.

header("Location:http://www.yourdomain.com");