There was a Simpsons episode, I can’t recall correctly, but I think Bart recorded Lisa when her heart broke and he watched it in slow motion to stop exactly at that point.
I thought of this episode yesterday while playing around with my laptop’s webcam and a Python shell. Finally I wrote a little fun script that does almost the same: Just register it as a hg hook and it takes a picture of you exactly at the unique moment when merging fails and it sends it directly and without any further questions to Twitpic and Twitter:
#!/usr/bin/env python
import os
import sys
import tempfile
import time
from CVtypes import cv
from twitpic import TwitPicAPI
DEVICE = 0
TWITTER_USER = 'xxx' # CHANGE THIS!
TWITTER_PWD = 'xxx' # CHANGE THIS!
# This is the time in seconds you need to realize that the merge has
# failed. When setting this consider that it already takes about a second
# for the camera to take the picture. "0" means no delay ;-)
EMOTIONAL_SLUGGISHNESS_RATE = 0.0
def grab_image(fname):
camera = cv.CreateCameraCapture(DEVICE)
frame = cv.QueryFrame(camera)
cv.SaveImage(fname, frame)
def how_do_you_look():
failed = bool(os.environ.get('HG_ERROR', 0))
if not failed:
return # hmpf, maybe next time...
fd, fname = tempfile.mkstemp('.jpg')
if EMOTIONAL_SLUGGISHNESS_RATE > 0:
time.sleep(EMOTIONAL_SLUGGISHNESS_RATE)
grab_image(fname)
twit = TwitPicAPI(TWITTER_USER, TWITTER_PWD)
retcode = twit.upload(fname, post_to_twitter=True,
message='Another merge failed.')
os.remove(fname)
if __name__ == '__main__':
how_do_you_look()
You’ll need the CVtypes OpenCV wrapper and this Twitpic Python module. I’ve patched the twitpic module to support messages. Have a look at this issue if it’s already supported, otherwise a diff that adds the message keyword is attached to the issue. To use it as a Mercurial hook just add to .hg/hgrc:
[hooks] update = /path/to/the/above/script.py
and make the script executable.
The results are pretty good :)
Have fun!
BTW, the way how to access the camera is inspired by this nice blog post about face recognition using OpenCV.
Edit (2009-05-12): It was Ralph, not Lisa. Thanks Florian!