I am a techie. Please, tell me what you transfer and how you transfer it. I'll make sense of it myself.

If transfering things over the internet is a problem for you or your company, we have a super-easy to setup virtual machine image. You can install this locally or on a server in your company. Please contact us in that case.

WatchDog centers around the concepts of intervals and events. Based on what event WatchDog receives from the IDE, it closes or creates a new interval or debug event. We have intervals for when you start your IDE, when you change focus to it, when you change your perspective, when you run Junit tests, when you launch the debugger and when you read or type code. When you read or type code, we see if we can figure out whether that's production or test code. When you type, we try to figure out how much code you changed in each typing interval (by calculating the Levensthein distance). That's all we do. So we will never see one letter that you type.

In addition, we have events for when you add, change or remove a breakpoint, when the program you are debugging is suspended or resumed, when you inspect or modify a variable value, when you perform a step into, over or out action and when you define a watch or evaluate an expression. The same holds for events as for intervals: we never see a letter you type.

Still not convinced? Alright, here's a JSON-ified TypingInterval (the most interesting one, really) as we transfer it to our server:

{ " endingDocument " : { "sloc" : 3, "dt" : "un" }, " diff " : 425, "doc" : { "sloc" : 31, "dt" : "un" }, " it " : " ty ", " ts " : NumberLong("1408110488025"), " te " : NumberLong("1408110508039"), " ss " : NumberLong("-7490789694621659010"), " uid " : "935d7573c056c424f668d935ef18b4a0bf96c365", " pid " : "efdcb880844893f847d70907174315d95c50caa6" }

Events are transfered to the server in a similar fashion, as the following JSON-ified StepIntoEvent shows: