deconstruct conf 2018
I was at Deconstruct, a little conference. It has no sponsors, a single track, no lunch, no public schedule, and no particular focus except computering. It was quite nice. Some notes from the talks.
Building impossible programs. In this case, an out of process ruby profiler. This sounds like it may be difficult if you’ve never done it before, but that’s ok. Build a prototype. If it doesn’t work, it wasn’t really supposed to, but if it does work, you’re awesome. Don’t be fooled by the fact that nobody has done the thing you want to do. It doesn’t mean it’s impossible, it just means nobody’s done it. Although we didn’t get too deep into the details of how this profiler worked, basically ptrace equivalent, I think more people should write toy but for serious debuggers. You can prototype what you need in gdb, then perform those operations in your own code. Another implicit takeaway could be that even complicated programs like gdb are just programs, and you can write programs that do the same thing they do.
Using OO correctly and going from simple to complex designs. It’s easy to continue programming in a certain style once you get going. Function takes four arguments and needs to do something else? Add a fifth. This quickly gets crazy. A better idea is to pass down smarter objects (if you’re into OO, but one can presumably use other abstractions) so now your complicated function simply composes operations instead of containing any logic of its own. In order to make this work, you probably need identity operators. I thought that was probably the most useful insight. It’s easier to always perform some operation, even a null operations, than to pick and choose what to do.
Web accessibility could be easier than you think. Four principles to consider. Perceive, can the user recognize what’s on the page. Operable, can the user interact with the page controls. Understandable, is the information organized. Robust, does the page still work with other user agents or input devices. In practice, this means sprinkling some aria tags in the HTML. Test with a screenreader. Test using only a keyboard.
How to banjoify music. The banjo can’t sustain a note for very long, and so one typically fills in the gaps by playing additional notes, which gives the banjo a distinctive style. This used to be done by hand, but we can use computers. This was a neat application of using a very simple grammar to generate possibilities. We start with something like 12, which can become 3 3 3 3 or 4 4 4 4. Then 4 becomes Adgd or A-dg or whatever. And before you know it, there’s nine billion different ways to play Happy Birthday. A good exercise in starting very small and then building up. The final effect was pretty fantastic, but very accessible at every step.
Multi path ping. Mostly just background on how a CDN works. How do you know which link is best? Ping them all. I guess the takeaway is if you build a slackbot you’ll get lots of fun feedback from people on slack?
How are all of your relationships? Pretty wide ranging talk on climate change, racism, and imperialism, with the occasional swing back to technology. Not exactly my cup of tea, but got a standing ovation. On a personal level, I probably buy more new computers than I need to, but I also try to make sure the software I write runs fine on much older hardware. I’m not sure how many climate change refugees are interested in reading flak, but I’d like to believe it wouldn’t be unusually difficult given the computing and networking resources available to them. Based on the T shirt logos around me, I’m not sure everybody can say the same.
Database migrations. Your database has locks, and some are big and some are small. You don’t want to hold the big locks for a long time.
Software is not additive. I thought this talk was ok, but it’s hard to extract much from it. Sometimes your implementation leaks into your API, and then extending the API later is hard because you can’t really change the implementation.
Doug’s demo. A long time ago, Doug Engelbart demoed hypertext and copy and paste, among other things. Everybody else was using punch cards. Not sure I can summarize, except to say go watch the video and imagine everything Doug is doing was thought close to impossible.
Interpolation and poetry. This was really fun. Thanks to programs like word2vec, we can turn words into numbers. And given two numbers, we can interpolate between them. This gives some surprising and often amusing results. Hard to summarize, since it was a bit more performance art.
Making decisions. Yes or no decisions aren’t really decisions, because there’s really only one option. I don’t think this is strictly true, but it’s useful advice. Consider opportunity costs. Find real alternatives.
Reverse emulating a Nintendo. This was a great hack. Instead of emulating a Nintendo system, we can stick a tiny computer in the cartridge slot and emulate a game. In theory, a game is read only, but the hardware reads the same memory locations repeatedly. If the returned value changes, we can achieve graphical effects that exceed original specifications. Presentation given live on a Nintendo, of course.
Distributed systems are too hard. Use go. No, wait, use erlang. I might proffer to make a not distributed system, but that’s not web scale.
Voting machines and election security. A bunch of evoting machines went to Defcon and had a terrible, horrible, no good, very bad time. Go read the report.
Aim small, miss small. Aim: Write down your plans. Small: Use functional data strucutres. Miss: Use logging. Small: Use the scientific method. I thought this was going in a slightly different direction, and would have given a very different talk given the prompt of aim small, miss small, but this was still good.
Programming is language. Code is like any language, a social construct meant for communicating. A few points were made here, but I liked the introduction of prescriptive vs descriptive. Prescriptivists tell you not to split infinitives. Descriptivisits observe that lots of people do that. Programming is filled with lots of prescriptivists, and maybe this isn’t always helpful. To make my own example, we might tell people to seed their random number generator very carefully, or we might observe that despite instruction people don’t.
It was a fun conference. A friend asked why I’d attend a conference for fun, and I made the analogy that it’s like watching a cooking show. I may not even like scallops, but I can appreciate watching a good chef perform their craft. There weren’t any bad talks, but a few of them transcended into mesmerizing cooking show territory. All I could think was wow, that’d be fun to play with.