Update: I am looking for students to work with me on two research projects in the areas of data mining and HCI. Please contact me if you are interested.

I am a researcher in the areas of social computing and human-computer interaction, and an Associate Professor of Practice in Computer Science at Ashoka University. Formerly, I was the Associate Director for the Stanford Mobisocial Lab. My research explores novel applications for the digital life-logs that millions of consumers are collecting. These applications are demonstrated in a system called Muse which helps people look back and reflect on the years or decades past, using their email archives. An offshoot of Muse called ePADD is being developed by Stanford Libraries to provide access to the email archives of eminent individuals that are hosted in its libraries.

In addition, we have designed novel "experience-infused" applications that provide new experiences for users using the power of automatic recall from their archives. The personalized Experience-infused Browser is one example; the Slant custom search engine is another.

In a previous career, I worked on creating new methods to make computer systems more reliable. Broadly, my thesis was that hardware design can be improved by using many of the innovative ideas in the software engineering world; and software can be made more robust using the rigorous methods of hardware engineering. Here are 4 examples ideas (the first three were developed when I was with the microprocessor division at Sun Microsystems, and the last one at Stanford for my Masters').

Verification of multiprocessor systems
TSOtool is a program that helps in verifying the correctness of shared memory multiprocessors. It has exposed bugs in every Sun microprocessor designed in the last few years, and in 2004, was awarded Scott Mcnealy's chairman's award for innovation, the highest recognition for technical achievement at Sun.

Formal verification
One of the obstacles to using formal verification (model checking) technologies during hardware design is the need to manually write down properties to be verified. IODINE is a system that mines design simulations to automatically infer useful invariants.

Fast and accurate simulation
We developed a technique to checkpoint architectural state of a program on a fast processor simulator (written in, say, C) and restart it on a hardware (Verilog) model of the processor. It was used successfully to predict performance of the picoJava and UltraJava (MAJC) processors, and moreover exposed deep design bugs before tapeout. (IEEE Micro Paper)

Automated Debugging
DIDUCE (developed with my advisor, Monica Lam) is a debugging tool based on inferring dynamic invariants from program runs. "Presumed invariants" from DIDUCE can be used in in a variety of ways. One way is to turn these invariants into assertions or warnings to give programmers insight into what's wrong - or at least, unusual - when a large Java program is running.

I also co-founded Magic Lamp Software, which provides comprehensive audit solutions for detecting errors and security vulnerabilities in enterprise Java code, based on advanced program analysis technology.

Pet peeves and what's cool
   Some notes on Javascript.
   Bhimsen Joshi: tributes
   Suman Sangam, an ecological farm on the outskirts of Dharwad, India.
   Bangalore Walks
   RISKS is sometimes funny, sometimes sad, and always a good storehouse for ideas on problem detection.

News Media
   Deccan Herald e-paper (Greasemonkey script that re-lays out the pages and makes reading easier)

My undergraduate alma mater. (Honor a mentor at IITD's golden jubilee celebration).