I currently work on social computing and human-computer interaction in Stanford's Mobisocial and HCI groups. My Ph.D. thesis 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. Muse is also being deployed by Stanford to provide researchers and the public 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.
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)
Tehelka e-mag, Global Post
My undergraduate alma mater. (Honor a mentor at IITD's golden jubilee celebration).
My Sun blog is out of date
and probably going away soon.