This is the weekly thread to discuss what you’ve done recently and are working on this week.
Please be descriptive and don’t hesitate to ask for help, advice or other guidance.
I don’t supposed TIS-100 can count as work huh?
Context: TIS-100 is a game -> http://www.zachtronics.com/tis-100/ “It’s the assembly language programming game you never asked for!”
For work: working on speeding up some OpenCV routines; bringing myself back up to speed on C++ (C++11 is a much, much, much nicer language than I’d feared); beating my head against a rectilinear polygon tiling problem – it’s times like this that I wish I hadn’t dropped out of university.
For non-work: baby #1 is coming in twelve days, so … yeah. That. Also, band practice tonight, and then swimming lessons later in the week.
Noisebridge Dead Tree Library: Working on the Go program to take the ISBNs from the books in the library, query for them using the OpenLibrary API and record them in our PostgreSQL database to serve a public searchable index of the books.
Separately I’m working on bringing back a noisebridge 311 service for people to use in the event that something is going on in the space that they’d like help with.
Exercise, lots of exercise. The sun is out in the UK currently so I’m taking full advantage of it. At work we’re also taking part in https://www.gettheworldmoving.com for the second year in a row, which kicked off a couple of weeks ago. Loving being in the outdoors regularly again.
On the computer side of things, I’ve decided rather than spinning up different VMs with puppet-git-receiver set up in each one, I should bite the bullet and just run a damn puppet master for the LAN/VMs already. (There’s enough of the things with enough shared configuration between them that it makes sense.)
Also had a fantastic idea for hiding all my network devices, which involved mounting them all on a length of 3x1 and fixing it to the wall behind the wall-mounted TV. TV is far enough away from the wall (movable arm) that there’s adequate ventilation, and generally it’ll hide all the devices on the wall behind it. Photo
Last week I was wiped out by bad sleep and did nothing but the basic work + social obligations. This week I’m writing a blog post about dangerous ActiveRecord methods, writing an email about imposing hierarchy on Rails soup, laying my talk notes into my book outline. For all the English I’m typing and will be typing, I wish I could’ve stuck with Norman but I end up back on qwerty often and was totally wrecked.
Playing a lot of TIS-100. I’m enjoying being stuck on the “signal pattern detector”. I drew a state machine. It didn’t help. This game is awesome.
This week so far has been implementing a binary format parser in C#, which I hadn’t used before. I actually really enjoy it (compared with my old Java days), but some things (like the lack of easy endianness handling in MemoryStream and BinaryReader, the state of out-of-the-box JSON) are kind of a bummer.
So, we’ve got this sort of binary tree structure, which can contain zero or more child nodes. Nodes are tagged with information that might mean “Oh, I don’t care about the child nodes”. So, in our design, we decided to prefix every node with the length (in bytes) of itself and its child nodes, so when parsing you can skip over. The alternative would’ve been mentioning the count of the child nodes, instead of the absolute size.
The annoying side effect of this is that, during parsing, you can’t just foreach over the child nodes–you need to basically do a while() and keep incrementing until you hit the end of the buffer for that node. It feels super clunky.
Also, after a bit of reflection, I think I figured out that you cannot parse a tree without lookahead/lookbehind, and so doing streaming parsing of tree formats is a non-starter. Obvious in hindsight, but kinda fun to figure out. So, if you ever want fully streaming formats, denormalize all the things.