I'm a computer science professor, data scientist, and web geek.

Welcome! Scroll down for the latest blog posts, find out a bit about me, or check out my projects.


The Essential Elements of Geek Culture (March, 2008)

Office Space Movie Poster

I was talking to my web programming seminar about regular expressions and made an allusion to the xkcd comic on that topic. Unfortunately, none of them had seen it, probably because none of them were familiar with xkcd.

Students should become familiar with the concepts and practice of the discipline, but also with the culture and in-jokes that will help them fit in when they get into industry or graduate school. I also like to get people to laugh in ways that are relevant to the subject material (yes, I use a lot of cheesy geek jokes — ask me to tell you my LISP joke sometime).

I asked the Twitter community what other geek cultural elements I should introduce the students to, and here are the answers:

This list is thanks to (in order of appearance) @mediacrisis, @rubaiyat, @techpickles, @mattgillooly, @hempstyle, and @inkedmn.

March 26, 2008   7 Comments

LSL: Notecard Selector

One of my friendly librarian colleagues in SL asked if I had a script to generate dialogs and allow users to select notecards handy. I didn’t, so I coded it up. It seems like it could be useful to others, so here you go:

This script is in LSL, for Second Life. Just copy and paste it into a script, throw a few notecards into the object, and you’ll be ready to go!

//  Notecard Selector
//  by Ann Enigma
//  This script presents users with a list of notecards in a dialog box, and allows them to select one
//  Note: The names of the notecards must be less than 24 characters long
 
// This script is licenced under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States License
// http://creativecommons.org/licenses/by-nc-sa/3.0/us/
 
// configurable options
string message = "Which notecard would you like to read?"; // the message on the dialog box
integer command_channel = 616; // the channel on which to listen for commands (you probably won't need to change this)
 
// the script
list notecards;
 
default
{
     state_entry() {
          integer i = 0;
 
          // read the title of each notecard into a list
          for(i=0;i<llGetInventoryNumber(INVENTORY_NOTECARD);i++) {
          notecards = (notecards=[]) + notecards + [llGetInventoryName(INVENTORY_NOTECARD,i)];
          }
 
 
          llListen(command_channel, "", "", ""); // listen for a dialog button press
 
          }
 
     touch_start(integer total_number)
     {
          llDialog(llDetectedKey(0), message, notecards, command_channel); // present the dialog
     }
 
     listen(integer channel, string name, key id, string message) {
          if (llListFindList(notecards, (list)message) != -1) { // this is a valid notecard
          llGiveInventory(id, message); // give the user the notecard
     }
}
 
     changed(integer changed_bitfield) {
          // if the object's inventory changes, reset the script
          if (changed_bitfield == CHANGED_INVENTORY) {
               llResetScript();
          }
     }
}

March 17, 2008   14 Comments

Following a group of Twitterers without exhausting SMS

I’m at SXSW, and I want an ability to see the latest Tweets from the group of Twitterers that I follow who are here in the area. I also have a limited number of text messages on my phone (1500, but still).

I coded up a quick app that allows you to great a group of twitterers and see their latest tweet on a mobile-friend page. Check it out.

Comments are welcome!

March 8, 2008   No Comments

How to Control Second Life with a Wii-mote (on a Macbook Pro)

wii + SL = cool

My research group had some fun controlling SL with a Wii-mote a few weeks ago. It’s easier than you think! Several people have asked how we did it, so I hope these quick instructions might come in handy.

  1. Download, install, and run DarwiinRemote.
  2. Turn Bluetooth on on the Macbook. You can do this by opening the Bluetooth Preferences Pane (Apple menu, System Preferences and choose “Bluetooth” under Hardware) and clicking the big “Turn Bluetooth On” button. If Bluetooth is already on, you can skip this step!
  3. Hold the Wii-mote in front of the Macbook and press buttons 1 and 2 simultaneously. The LEDs on the Wii-mote will flash.
  4. As you move the Wii-mote, you’ll see your movement plotted on the screen, as you see below.
  5. Drop down the option box and choose “Mouse Mode On (Motion)”.
  6. Load up Second Life.
  7. Fly! By default, you can control the direction with the direction keys at the end of the Wii-mote.
  8. Laugh with glee, because this is cool.

darwiinmote

January 28, 2008   4 Comments

Create a group Twitter account

Twitter rocks. It’s useful for all kinds of things, but especially for chronicling a live event as it happens, including the pre-event discussion and post-conference wrapup.

We’re very excited to be hosting NewB Camp here in Providence, RI on February 23rd. In preparation for the event, Sara created a NewBCamp Twitter account and I coded up this quick script to pull in all tweets related to the conference.

It examines all of your followers tweets for a particular phrase or tag, and then reposts those tweets containing the tag to its own timeline with the author’s name prepended. I’m running this as a cron job on my hosting account. You can see it in action here.

This is a quick hack. It has a couple of issue that I’m aware of:

  • Someone has to log in and manually add followers.
  • The Twitter API only returns the previous 20 friends posts, and it’s possible we might miss some if we have so many friends that the post rate exceeds 20/50 secs (our permitted API request rate).

I do hope that you find this useful for creating your own Twitter event monitor!

include("twitter.php"); // Twitter API class
// Available: http://twitter-development-talk.googlegroups.com/web/api_class.phps.txt
 
// configurable options
$twitter_user = "newbcamp"; // Twitter username
$twitter_pass = "passwordgoeshere"; // Twitter password
$tag = "newbcamp"; // tag for friends to use
 
$twitter = new Twitter($twitter_user, $twitter_pass);
 
$last_post = json_decode($twitter-&gt;getUserTimeline("json",$twitter_user,1), true);
$last_post = $last_post[0]['created_at']; // get the datetime stamp of the last post to the account
 
// get new posts from friends since last update
$friends_posts = json_decode($twitter-&gt;getFriendsTimeline("json",$twitter_user,$last_post), true);
 
foreach($friends_posts as $key =&gt; $post) {
 if (stripos($post['text'],$tag)) { // if the tag is present
  if ($post['user']['screen_name'] != $twitter_user) { // no infinite loops, please
   $new_post = $post['user']['screen_name'] . ": " . $post['text'];
   // post the new post to the newbcamp account with the user's name prepended
   $twitter-&gt;updateStatus($new_post);
  }
 }
}

Update 10.16.2009: This script is basically superseded by Twitter’s lists feature. Use that instead!

January 22, 2008   12 Comments

What’s wrong with this hat?

hat

The vendor containing this hat was recently deleted from Virtual Morocco by an employee of Linden Lab without any notification to me. Why? Because an anonymous person complained that it is “broadly offensive”.

Virtual Morocco was created to be both a tourism promotion platform and a space for cultural exchange. It was built entirely by undergraduate students as an educational service-learning project.

We give space in the Marrakesh Marketplace to several Moroccan artisans with virtual goods for sale. Our only requirements are that they keep everything appropriate to the sim’s theme and to the educational context of the space. The vendor selling the hat was owned by a college student (not from our institution) who specializes in items appropriate for the Morocco of the 1940s.

This hat does appear to be in the Nazi style. Even if it is, it is historically and thematically appropriate for Virtual Morocco.

Managing a space for cultural communication is not always an easy task. We have dealt with anti-Muslim intolerance, anti-American intolerance, and other forms of inappropriate behavior. When an incident occurs, I try to use it as a learning opportunity and prompt for discussion for my students and the members the our Virtual Moroccan community.

This incident has implications far beyond one college student and an ambiguously offensive hat. How can we create an academic space – a space for the free exchange of ideas – if our content can be deleted arbitrarily, by a third party?

I’m posting this now because my support request has gone unanswered for several weeks. I will post updates as the situation develops.

January 22, 2008   8 Comments

Teen Second Life College Fair

teen SL college fair

I was immensely privileged to participate in the first ever Teen Second Life College Fair. The event was on the Eye4You Alliance TSL island. At least 18 institutions were represented (see some of the booths in the image to the left), and approximately 200 teens attended.

I gave a short presentation on my own educational experiences and the incredible possibilities for careers in technology, but my favorite part of the college fair was the casual conversations that took place outside of the sessions and in the booth area. We talked about everything from education in Europe vs the US to tagging to SL building and scripting to politics… you get the idea!

For educators and recruiters, this was a fantastic event for connecting with young people who are excited, passionate, and resourceful. The students were able to talk directly with representatives of various institutions, and were not shy about asking difficult questions and getting the answers that they were interested in. I’m looking forward to the next one!

The event has been written up:

October 24, 2007   1 Comment

An Experience with Using a Wiki for a Collaborative Classroom Documentation Project

webmonkey thumbnail

I’m teaching a basic web design course this term that covers design concepts, XHTML, and CSS. The students are from a variety of backgrounds – some have knowledge of HTML, some are non-majors or non-credit students looking to pick up a useful skill, and many are complete beginners who are required to take the course as part of their degree programs.

Only a few students knew what a wiki (distinct from Wikipedia) was before beginning this project. The students were given a month to make their contributions to the wiki. They were each assigned primary responsibility for one page at random, but were graded both on the success of their page and their contributions to other pages.

43 students across two sections of the class participated in the project. Of those, five (or 11.6%) didn’t participate by the due date, which is a higher than normal percentage for a homework project. Eleven (or 25.6%) contributed only to their own pages. Another thirteen (30.2%) maintained their own pages and made meaningful contributions to other pages, while fourteen students (32.6%) made numerous contributions well in excess of the requirements.

I will be continuing the project for the second phase of the class – CSS – and I’ll see if participation increases as the usefulness of the wiki as a resource increases. I also plan a project postmortem survey at the end of the course to see what the students thought about it.

October 7, 2007   4 Comments

Autoscript Creates LSL Scripts Without Code

This week, I created autoscript, a simple LSL script generator for Second Life. The concept is to translate the way you think about interactive design – what should happen, and when – into functional code.

Scripting is one of the most creative parts of designing immersive spaces, and I hope this will make it accessible to more people. Please feel free to use this code however you like!

Writing a program like this requires a balance between simplicity and flexibility, and I’m erring on the side of the former. I do plan to add more functionality to it and would love your suggestions and ideas! Also, if you encounter anything that doesn’t work, please let me know in the comments here.

The link: autoscript

September 2, 2007   144 Comments

Second Life Community Convention

I just returned from the Second Life Community Convention in Chicago. I really appreciate all of the wonderful people that I had the chance to meet (or smeet) or just spend time with. There wasn’t nearly enough time for all of the conversations that I wanted to have!

There were a wide variety of presentations. We’ve come a long way since last year! The diversity of disciplines was astounding. I think the strongest work presented was in the sciences and medicine, and I was particularly impressed with the Second Health machinima.

Here are the slides from my presentation on Experiential Learning:

I’m hoping it inspires people to think about how we now have this capacity to create learning experiences that were simply never possible before. What do we do with it? How do we measure it?

August 27, 2007   2 Comments