<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="https://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2009-04-14:61366</id>
  <title>jack</title>
  <subtitle>jack</subtitle>
  <author>
    <name>jack</name>
  </author>
  <link rel="alternate" type="text/html" href="https://jack.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="https://jack.dreamwidth.org/data/atom"/>
  <updated>2021-09-30T16:02:39Z</updated>
  <dw:journal username="jack" type="personal"/>
  <entry>
    <id>tag:dreamwidth.org,2009-04-14:61366:1137863</id>
    <link rel="alternate" type="text/html" href="https://jack.dreamwidth.org/1137863.html"/>
    <link rel="self" type="text/xml" href="https://jack.dreamwidth.org/data/atom/?itemid=1137863"/>
    <title>Do you want a Time Travel Debugger</title>
    <published>2021-09-30T16:02:39Z</published>
    <updated>2021-09-30T16:02:39Z</updated>
    <category term="work"/>
    <category term="tech"/>
    <dw:security>public</dw:security>
    <dw:reply-count>3</dw:reply-count>
    <content type="html">I never got around to talking about what my current work do: &lt;a href="http://undo.io"&gt;http://undo.io&lt;/a&gt;  There was some previous discussion on the topic on facebook: &lt;a href="https://www.facebook.com/jack.vickeridge/posts/10103938681712440"&gt;https://www.facebook.com/jack.vickeridge/posts/10103938681712440&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What is a Time Travel Debugger&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;It records everything that happens in a program's execution, so you can step backwards as well as forwards, or rewind execution and then replay it again more carefully. Or you can "replay" it &lt;i&gt;backward&lt;/i&gt;, e.g. going to the end of time, seeing your program crashed with a null pointer &lt;i&gt;and then setting a watchpoint on that pointer and reverse-continuing until you find out where the pointer was set to that value&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;There's two main modes of use, using it like a debugger sitting in front of a program, or using a companion recorder (which is actually an executable with much of the same code but packaged differently) to record your program in your overnight test suite, or running to replicate a bug that happens in a very long running process. Then once you've reproduced the bug &lt;i&gt;once&lt;/i&gt;, you've almost finished, you can just load up the recording and step forward and back in a debugger until you figure out what went wrong.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;That sounds impossible!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Yes, it does sound impossible, but it works.&lt;br /&gt;&lt;br /&gt;It records literally everything the program does that interacts with the outside world in any way, e.g. any system call (including any file access, network access, gettime, even getpid, etc, etc), any instructions which write to shared memory, etc. That can get large for some programs (but customers do use it successfully!)&lt;br /&gt;&lt;br /&gt;It saves a snapshot at several points during history (by forking the process there), so it can create the state of any point in history by forking another process from that snapshot, and playing it forward using the saved events instead of actually doing any of the things that interact with the outside world.&lt;br /&gt;&lt;br /&gt;It does all this by rewriting the compiled program in memory, and maintaining a mapping between the rewritten memory and the original assembly. So you the user see the original source code and original assembly, with whatever level of debug info you originally compiled the program with. But behind the scenes, almost any non-trivial instruction is rewritten to do something else, to either to save the result of the instruction in the event log, or to replay the value from the event log.&lt;br /&gt;&lt;br /&gt;That means that you can attach it to any program, compiled &lt;i&gt;any&lt;/i&gt; way, just like any debugger can. You don't need to compile it with some magic -- people keep expecting this, and it could have been written that way, but instead, you can just connect it to any program you could attach gdb to.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Caveats&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Recording multiple threads is slow, and recording multiple processes doesn't exist yet. We're working on it, but right now can help with some multithreading bugs but can't help with others.&lt;br /&gt;&lt;br /&gt;Program execution is slower, between 2x and 10x. We are working to improve that. Replaying through execution can be faster than that (and you can usually go directly to the beginning, end, etc without any replaying).&lt;br /&gt;&lt;br /&gt;This is all on linux only.&lt;br /&gt;&lt;br /&gt;The interface and implementation is based on the gdb forntend/gdb server protocol. So by default it looks like debugging with gdb but with "reverse-next" as well as "next". And it works with any program which uses gdb backend, e.g. visual code, emacs, although some of those are tested extensively and some aren't.&lt;br /&gt;&lt;br /&gt;But no linux debugger has a very good UI, so currently it is mainly used by people who have to debug using something like gdb anyway, but want to be able to solve harder bugs quicker. We are trying hard to make it easy for languages like python and java where the translation has to understand an interpreter as well as the code. This works in the sense that it can be recorded and replayed, but getting a good user experience is a lot harder.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Worth and Price&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I always describe it as, the difference between "not having a debugger" and "having a debugger". If you have a debugger, maybe actually 90% of problems you can solve with print statements. But the 10% that you can't fix with print statements could take months to solve without a debugger, or hours with a debugger. It's hard to describe why you need a debugger to someone who hasn't tried using one. But almost no-one would go back to not having one.&lt;br /&gt;&lt;br /&gt;A time travel debugger makes trivial the small proportion of issues that still feel impossible even with a debugger. You say, "yes, it fails intermittently but we don't know if we'll ever track it down unless someone wants to study the failure for nine months", but that might be only hours with the right tool.&lt;br /&gt;&lt;br /&gt;Unfortunately, this tool takes a large amount of programmer effort to create, and is only viable if it's sold commercially. If you view it as "The 5% of bugs we have that take 9 months to track down, instead get solved in a few hours", you compare the cost to the salary for an extra programmer or two, it's very reasonable. But most people including me hate paying for tools, so it's hard to sell.&lt;br /&gt;&lt;br /&gt;It has a great retention rate -- any companies which have subscribed to a contract, have almost always kept it, and programmers who have used it regularly (including me) are very very eager to keep having it available.&lt;br /&gt;&lt;br /&gt;Currently there are several introductory offers. There's an educational license which is cheaper or free. There might be an offer of free licences to the right open source project if you're interested. There's a 30 day free trial, and a personal license, in the hopes people will become converts and persuade their employer to adopt it. There is standing offer that if you have an intractable hard to reproduce bug that's you'd like to see just go away, we can arrange some sort of trial to have someone come and help capture and diagnose that bug, and see if that leads to a longer term arrangement.&lt;br /&gt;&lt;br /&gt;Ask questions in the comments. Feel free to download the trial -- if you've used gdb, it's fairly straightfoward to try out, and it's magical to see "step back, step forward".&lt;br /&gt;&lt;br /&gt;Or if it sounds like you might be someone who would actually benefit from acquiring a license, I can put you in touch with helpful people -- we used to focus on big clients because there was a lot of shakedown, but now it works more reliably out of the box, it's plausible for a wider spectrum of companies and people.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=jack&amp;ditemid=1137863" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-04-14:61366:1075123</id>
    <link rel="alternate" type="text/html" href="https://jack.dreamwidth.org/1075123.html"/>
    <link rel="self" type="text/xml" href="https://jack.dreamwidth.org/data/atom/?itemid=1075123"/>
    <title>Jobs at Adder</title>
    <published>2018-07-09T11:46:07Z</published>
    <updated>2018-07-09T20:12:52Z</updated>
    <category term="life"/>
    <category term="work"/>
    <category term="invitation"/>
    <dw:security>public</dw:security>
    <dw:reply-count>6</dw:reply-count>
    <content type="html">The exact combination of jobs advertised varies over time, but work are looking to hire junior, intermediate and senior software engineers and (I think) testers.&lt;br /&gt;&lt;br /&gt;We mostly do low-and-medium-level embedded programming, with audio/video and networks. Although for the graduate software engineer jobs, probably any programming background is fine.&lt;br /&gt;&lt;br /&gt;I'm not shilling for them as the most amazing company ever, but they've been reasonably good to work for so far.&lt;br /&gt;&lt;br /&gt;If anyone is interested I can put you in touch.&lt;br /&gt;&lt;br /&gt;I also wonder, is there anywhere I should be advocating they advertise to reach an appropriately diverse demographic of engineers?&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=jack&amp;ditemid=1075123" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-04-14:61366:1074799</id>
    <link rel="alternate" type="text/html" href="https://jack.dreamwidth.org/1074799.html"/>
    <link rel="self" type="text/xml" href="https://jack.dreamwidth.org/data/atom/?itemid=1074799"/>
    <title>Do I know anyone who does UI work?</title>
    <published>2018-07-09T11:39:40Z</published>
    <updated>2018-07-09T11:39:40Z</updated>
    <category term="invitation"/>
    <category term="work"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">Work are contracting out some UI work. Basically, there's a fairly good idea of what features are needed, but are investigating the possibility of handing off the work of what different screens there are, what options on each screen, etc, etc to someone else.&lt;br /&gt;&lt;br /&gt;It will likely be implemented through a web-browser inside, but not be interacted with as a webpage as such.&lt;br /&gt;&lt;br /&gt;They already have one fairly promising contact, but are interested in having at least two choices. (Pro: they will probably make a decision and not dither. Con: they may go with the existing contact.)&lt;br /&gt;&lt;br /&gt;Do I know anyone or any company who does that sort of work?&lt;br /&gt;&lt;br /&gt;I can't vouch for what they're like to be a contractor for, but as far as I know from the inside, they're looking to get the work done, not to cut costs. And they're not specifically looking for future work, but if they find a company they get good results from, there's other projects it might make sense to do a similar thing with.&lt;br /&gt;&lt;br /&gt;If there is anyone I can put you in touch with the relevant people.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=jack&amp;ditemid=1074799" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-04-14:61366:886904</id>
    <link rel="alternate" type="text/html" href="https://jack.dreamwidth.org/886904.html"/>
    <link rel="self" type="text/xml" href="https://jack.dreamwidth.org/data/atom/?itemid=886904"/>
    <title>Working without internet</title>
    <published>2014-04-08T12:41:13Z</published>
    <updated>2014-04-08T12:41:13Z</updated>
    <category term="life"/>
    <category term="work"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">On Friday, I turned the internet off (well, just my main sources of procrastination) while I was working. I immediately felt massively better. I've kept it up for two days now with reasonable success -- can I keep it going?&lt;br /&gt;&lt;br /&gt;I've tried that before, but it never worked. I think it helps when I've reached the point where I _can_ work, but am being distracted, but didn't make much difference when something was preventing me working whether I was distracted or not.&lt;br /&gt;&lt;br /&gt;Although I'm still not working as consistently hard as when I had the goad of working closely with someone else every day.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=jack&amp;ditemid=886904" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-04-14:61366:879054</id>
    <link rel="alternate" type="text/html" href="https://jack.dreamwidth.org/879054.html"/>
    <link rel="self" type="text/xml" href="https://jack.dreamwidth.org/data/atom/?itemid=879054"/>
    <title>Work trip to Germany</title>
    <published>2014-02-09T15:19:50Z</published>
    <updated>2014-02-09T15:19:50Z</updated>
    <category term="life"/>
    <category term="work"/>
    <category term="travel"/>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">Work trip to Germany was quite good. The travelling was easy, as was spending three days in the company of people from work (one from my office, one from one of the German offices).&lt;br /&gt;&lt;br /&gt;I coped in Germany only speaking a few tourist phrases, although I need to get better at sometimes jumping into conversations when I know the people speak English, but don't automatically switch to English when I enter the room.&lt;br /&gt;&lt;br /&gt;I managed to spend a couple of hours walking around the old parts of the town and looking at the river, and to go to a couple of different places for meals, since most places had some vegetarian dish, but not a very interesting one.&lt;br /&gt;&lt;br /&gt;For the first time I had to ask myself what's normal to put on expenses. I have to keep reminding myself that my time is valuable to work, and that if it's worth sending me abroad at all, it's not worth saving a few extra pounds by being extra frugal. But I have to force myself not to think "oh no, surely that's just gratuitous". I think work clothes you don't have any other use for, and meals when you're away from home are the normal standard? And beer with meals when it's cheaper than the water?&lt;br /&gt;&lt;br /&gt;The work itself was generally a success, we did everything we intended to, and didn't screw everything up, and I've a good idea of what we want to achieve. But it still feels like banging my head on a brick ceiling that 90% of what I say we need to do is dismissed, I think I should persist with the last 10% but I'm not sure. I'm not sure how much I'm bad at sounding like I know what I'm talking about, and how much I should better have figured out which decisions were taken several months ago but I wasn't told about.&lt;br /&gt;&lt;br /&gt;The factory was really interesting. It's like a tutorial in best practices, eg. most of the furniture is on wheels and COULD be anywhere, but there are strips of tape on the floor showing where it SHOULD be. It's about half robots and half people. And people have to ride bikes around when they're going round the whole thing.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=jack&amp;ditemid=879054" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-04-14:61366:714536</id>
    <link rel="alternate" type="text/html" href="https://jack.dreamwidth.org/714536.html"/>
    <link rel="self" type="text/xml" href="https://jack.dreamwidth.org/data/atom/?itemid=714536"/>
    <title>Laptop</title>
    <published>2011-05-26T12:00:23Z</published>
    <updated>2011-05-26T12:00:23Z</updated>
    <category term="work"/>
    <category term="life"/>
    <dw:security>public</dw:security>
    <dw:reply-count>3</dw:reply-count>
    <content type="html">Got drunk ✓&lt;br /&gt;Bought laptop ✓&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=jack&amp;ditemid=714536" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-04-14:61366:639477</id>
    <link rel="alternate" type="text/html" href="https://jack.dreamwidth.org/639477.html"/>
    <link rel="self" type="text/xml" href="https://jack.dreamwidth.org/data/atom/?itemid=639477"/>
    <title>Resigned from work</title>
    <published>2010-04-30T16:06:42Z</published>
    <updated>2010-04-30T16:06:42Z</updated>
    <category term="work"/>
    <category term="life"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">We couldn't agree anything so I've just resigned as of now, and am leaving immediately as of this evening! However, we parted very amicably so YAY even though EEK!&lt;br /&gt;&lt;br /&gt;That's awkward because I'm jobhunting as of NOW but that's life. I feel good about it, and think and hope work do too.&lt;br /&gt;&lt;br /&gt;(Now I'm looking for a job immediately, and don't know whether or not I will be able to do the contracting-from-Stoke option, I need to sort logistics on that immediately!)&lt;br /&gt;&lt;br /&gt;OK, am off to London for Mum's graduation. Love to you all! J.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=jack&amp;ditemid=639477" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2009-04-14:61366:608589</id>
    <link rel="alternate" type="text/html" href="https://jack.dreamwidth.org/608589.html"/>
    <link rel="self" type="text/xml" href="https://jack.dreamwidth.org/data/atom/?itemid=608589"/>
    <title>Snow</title>
    <published>2010-01-06T14:59:45Z</published>
    <updated>2010-01-06T14:59:45Z</updated>
    <category term="snow"/>
    <category term="work"/>
    <category term="travel"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">I came back to work at home because of the snow. I have to work out of Cambridge and drive home, so if the snow got really bad this afternoon, it'd be really really annoying (or dangerous). Unfortunately, a few years ago, snow was exciting and pretty, but now it's more stressful and annoying.&lt;br /&gt;&lt;br /&gt;Two days ago, working at home would be great, but I'd just got set up to work on the desktop, and now I have to switch back to the laptop, and the transition isn't seamless yet, so every context switch feels like an annoying leap backwards.&lt;br /&gt;&lt;br /&gt;On the other hand, English towns, trees, lanes and fields are really, really pretty in the snow.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=jack&amp;ditemid=608589" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
