Fahd Arshad (logo)
Home
Résumé
Design
Development
Usability
Personal

For a multi-year research project at Dependable Systems Lab, I rewrote an experiment creation tool called MetriTextPrompter (MTP). A GUI written in VB.NET parses a configuration file and command-line parameters and presents various stimuli to participants, who respond by typing text into the tool. A DLL written in C hooks into the Windows event queue and captures the keystrokes along with timing information, both from the queue and from an ultra-precise timing facility called QueryPerformanceCounter. These are written to in an XML format called KeystrokeML, which comes with a DTD and tools that allow verification and parsing (example log file). MTP has a very rich configuration space, with tens of commands that can be used to customize the keystroke gathering data (example config file). It also comes with an excellent syntax checker and lots of documentation. MTP was used by students of a research methods class at CMU, and papers based on this work are being prepared for publication.

 

While working part-time for the Social and Decision Sciences Department at CMU, I wrote a networked client for a graduate Psychology student's thesis work called "War of Attrition". The researh's goal was to investigate how people made economic decisions in a competitive situation and with incomplete knowledge, under time pressure. A pair of participants started with $10, a prize of $5, and a randomly assigned bidding cost per second. Each player didn't know what the other's cost was. The longer they stayed in the auction, the more it cost, but whoever conceded first would pay the bidding cost from their $10 and get nothing. The winner would get the prize minus their bidding cost. This went on for 10 rounds.

The program's logic is more complicated than it looks. Written in VB.Net, the clients communicate over the Internet using UDP messages that pass each other's timing information (which must be synced) and the actual auction concessions. Race conditions had to be guarded against, since each client's progress depended on getting a message from the other, which may never arrive due to timeouts, network congestion, etc.


© Fahd Arshad, 2006-07
Last updated: 0657 hrs PDT, Thu, Apr 19, 2007