COS 333 Project Timeline

Wed Feb 17 17:13:34 EST 2010

This timeline was produced by the SmarterTiger team of Beth Danaher, Jeff Bigham and Bismarck Paliz, all of the class of 2003. SmarterTiger was one of the neatest projects of 2002 -- a chat-based system for providing Princeton information for students. The timeline that Beth, Jeff and Bismarck produced was fun to read and very instructive in describing what worked and what didn't.

One thing that worked very well is not mentioned: the timeline itself. The tiny effort that went into maintaining it was paid back many times over by being able to see where they had come from and what they had accomplished. The very act of updating the timeline helped them to make steady progress every week, and it made writing the final report much easier.

I told them at the time that I would steal their good idea for future versions of COS 333. Accordingly, this year each project group must maintain a timeline analogous to this one. It doesn't have to be in great detail, but enough that one can see what's going on. The timeline must be posted on your project web page and it must be kept up to date -- you can't write it all at the end.



SmarterTiger Timeline

March 10, 2002
Initial Meeting. Discussed goals and features. Registered SmarterTiger name.

March 16, 2002
Installed GAIM 0.55 and wrote simple autoresponder in both C and perl. Decided to use mainly Perl to write the program, however, because of our prediction of the need to parse a lot of strings and and perform many regular expression matchings.

March 18, 2002
Added regular expression matching that allowed SmarterTiger to respond to simple queries with somewhat intelligent responses. For example, "hello" from the user would result in a matching "hello" from SmarterTiger and "what's up?" from the user would result in "not much" from SmarterTiger. Also added simple matching features that we planned to implement later. For example, a user query of "weather" resulted in "fetching weather from web" although no actual weather information was being fetched.

March 20, 2002
Added simple map fetching functionality. SmarterTiger gives a link to the correct address for a picture of the map to that building if given the precise name of the building. This will later be fixed to do more fuzzy matching and to provide written directions from a database.

March 25, 2002
After much difficulty, a MySQL Server is finally installed at It looks like maybe we should have just used the CS Department's MySQL Server, but we learned a lot about linux and mysql in the process of getting it to work.

March 28, 2002
Finally able to load the DBI module into the perl GAIM plugin scripts. Apparently Perl scripts loaded via GAIM do not have the same environmental variables set as those loaded from the terminal. A helpful hint on the web clued us in to the fact that we needed to add the path to the DBI module to the @INC array before we tried to use DBI. After this problem was solved, it didn't take us long to start using the database. Tonight we managed to store the user's real name based on his IM name. This allows SmarterTiger to refer to "Jeff 2 926" as Jeff or "BikerMan" as Jimmy, for example. Because this information is stored in the database, SmarterTiger only has to ask a user for his name once. We plan to implement a feature later that will allow users to change their names (and other information about them that we plan to store) via simple messages such as "My name is X" which would set X to be their new name.

April 1, 2002
Added a state for each user that keeps track of what stage of the program each user is in so SmarterTiger knows how to respond to each query it receives. For example, if a user asks for weather and Smarter Tiger doesn't have that user's zipcode it would then ask for the zipcode. It would then be in an "enter zip code" state so it could know to interpret the next message it receives as a zipcode for weather.

April 2, 2002
Added the user's zipcode to the list of a things we store about each person. Once we are able to return the weather information this will allow us to fetch the weather without having to ask the user to enter a zip code each time.

April 7, 2002
Cleaned up some bugs that had crept into the code. Changed the representation of states to strings to make the code more readable. Fixed the a problem we were having with "weather" having to be typed three times before the weather would actually be retrieved.

April 14, 2002
Added simple weather retrieval. We hope to find some sort of web service to fetch the weather, but as a rudimentary first attempt SmarterTiger just parses the information directly out of a page on

April 15, 2002
Installed SOAP::Lite module to allow our Perl scripts to access the web services such as the weather and google.

April 17, 2002
Researched web services and found one for weather that looks promising. Also found a Google web service that looks interesting. Perhaps we could add Google searching as an additional feature to SmarterTiger.

April 18, 2002
Integrated the weather web service into the main SmarterTiger script. Now responses dealing with weather get their information from the weather service instead of by parsing through the pages on It's all good: faster, more information, and less copyright infringement.
Wrote seperate directory script that fetches information about a given person from the Princeton Directory web site and parses that information so it only returns the relevant information. Still need to combine this with the main SmarterTiger plugin script.

April 19, 2002
Made the database for the map directions and started the initial integration into SmarterTiger.

April 20, 2002
Integrated the directory service into the SmarterTiger Script. Decided to just include the main v(version #).pl as a seperate script for simplicity.  This also allows SmarterTiger to be run from the commandline with the command "perl v(version #).pl 'IMUsername' text" for testing purposes, which greatly assists in debugging. 

April 23, 2002
Started work on making the directory fetching more robust. Currently it is possible to cause errors by entering queries that are too vague. Searching for "Jon" for instance returns hundreds of results and attempting to return all of those results violates the AIM's maximum allowable message size, but doing the obvious thing and breaking them into pieces isn't straightfoward either because if you send them all immediately you violage AIM's sending rate limit. We'll probably have to settle on some sort of compromise in which we send the first few results, spacing them out timewise.

April 26, 2002
Wrote a script to access the Google web service. All that is left is to add this script into the SmarterTiger script. Problems with differences in how the SOAP::Lite module is used is making this less than straightforward, however.

April 27, 2002
Changed organization of the script a little to make it cleaner and less jumbled. Added a function that makes sure SmarterTiger doesn't send messages over the AIM maximum message size of 512 characters. In doing so it became necessary to limit the rate at which SmarterTiger tries to respond to queries so it doesn't exceed AIM's maximum sending rate. As part of this, fixed the directory responder so it can return a maximum of 5 responses to a user's query with each distinct directory entry constituting a new message.

April 27, 2002
Added Google search feature.  Problems with using the required schema fixed.

April 29, 2002
Added random response for queries that fall through the rest of the if/elsif's contained in the do_reply() function.  Started writing random responses like mad.  Added plenty of fun little Easter Egg responses for fun.

April 29, 2002
Fixed some glitches with the directory search functionality.  Now returns first five names returned in the event that more than 5 match the query with the option to view more.  If less than five results were returned, all of them are returned spaced out with one second in between.  Made it more robust and now allows searching by username/email address.  Also finished adding buildings to the map function.

April 30, 2002
Found database correlating city/state combinations with zipcodes.  Integrated this functionality into the weather feature so now you can enter cities as well as zipcodes.  Also checks the zip code entered to ensure that it is a valid zip code as suggested by Christine.

May 2, 2002
Added a calucation feature that allows SmarterTiger to perform simple arithemetic operations.  It just uses the perl interpretor launched as a new process to do this.  Now that we have the basic stuff working, adding new features has become rather simple and most importantly fun.

May 3, 2002
Added date/time feature using the EzDate module.  SmarterTiger can now tell you the date and time and everything is nicely formatted. :)

May 6, 2002
I've been playing around with WordNet for CS 435 and decided that it wouldn't take much to add a dictionary feature to SmarterTiger based on that, although the definitions that it provides as part of its synsets aren't really that great.  Installed Wordnet and the Lingua::Wordnet module to make the retrieval of the Wordnet synsets more straightforward.  This also required the conversion of the Wordnet database files to one that Linqua::Wordnet likes via an included perl script. 

May 8, 2002
SmarterTiger was occassionally crashing when asked for Google and weather information.  According to the error messages printed to the terminal the script was dying if it couldn't contact the google or web services so after some searching we found a way to fix this with Perl's version of try/catch - eval{}; if($@)  {}.  It now prints out a pretty error message if it couldn't contact the services.

May 8, 2002
Added a word puzzle feature implemented in a module.  It's pretty neat and can actually come up with some difficult least as difficult as a 10x10 puzzle can be.  Demo tomorrow so hopefully everything will work :)

May 9, 2002
Messed some stuff up with the map feature when the eval{} code was added yesterday.  Luckily we caught it before the demo (15 minutes before in fact) and fixed it in time.

May 10, 2002
Demo is done!  and it went pretty well.  At least SmarterTiger didn't crash...  Anyway, we saved a copy of the dialogue we had during the demo and fixed some problems encountered (of course we wouldn't notice them until then).  Directory's "more" state fixed so it's not confused with Google's more state.  Also added a check to the calculate function to make sure that it only runs mathematical operations and the function log(), sin(), cos() so Joe doesn't hack my system.  Also, fixed some stuff with the weather that was making zipcode lookup from city somewhat flaky.

May 11-14
Finished all of this pretty documentation - including the crafting of an excellent "SmarterTiger" image pieced together from a picture of a tiger and the Dean of Ohio State on graduation day.

May 14, 2002 (5 pm)
That's all folks!
for now...