|Summer programming 2021
(31 Jul 2021 at 22:20)
We participated in the 2021 ICFP Programming Contest. I have done a lot of these (including organizing the 2006 contest some 15 years ago) although it has been a while (recently someone always seems to be getting married etc. that same weekend). This was a well-designed problem which I can summarize briefly: Given a graph and some simple polygon, find an isomorphic graph that fits within the polygon, (mostly) preserving edge lengths and trying to get edge vertices near vertices of the polygon. Everything takes place on an integer grid, which makes the optimization problems much harder, especially for instances where the edge lengths have to be preserved almost exactly. I worked with David and Jason and Ben, working virtually/extremely-online (as is the fashion these days) and spent most of my time on a C++ optimizer based on a blackbox optimizer that I have been using for projects recently. Blackbox optimization is not a good way to solve this problem (it's a bit like "just throw machine learning at it" except less capable) but it is a fun way to make progress without beating your head against various frustrations. Jason also made a web UI for solving the problem manually, and most of our solutions were some combination of human solving and computer optimization. Here's a screenshot of the debugging UI improving a solution (or nolution):
We certainly didn't win, but we found a valid solution to every problem and had a good time! I actually liked the problem enough that I kept tinkering with my optimizer after the contest ended, since I kept getting ideas while running that I just wanted to see whether they'd work.
I also basically finished this pixely UI for the classic Destroy FX plugin Buffer Override. I drew it in Aseprite, which I'm trying to develop my muscle memories in, and used the NES palette as an unnecessary challenge:
This one is best viewed with crisp pixels, so maybe click that bad boy. The only missing part here is the programmatic visualization of the state, to go in the brown box on the top left. After this one's done I think we'll be ready to launch the new versions of all the plugins, all 64 bit, and after that I have some other in-progress plugins and ideas I'm itching to try. For the plugin UI work I also made a pipeline for generating TTF (based on code from the Uppestcase and Lowestcase project) pixely fonts, and created three specimen for the plugins, including a new version of "snoot.org pixel10" with some problems fixed, like missing ∞ and ± symbols. I like making bitmap fonts so perhaps I shall find a place for these my Divide By Zero Fonts site, although I'm not sure they really belong in that series. Completists can just snag 'em out of the DFX repository, though.
Speaking of crisp pixels, I also got a new monitor, since these 120hz 4k 32" displays that were supposed to be coming out like 18 months ago are finally actually available. I'm still getting used to it, with one major bummer being that 4k (even at 32") is probably a bit too high-dpi for my aging eyes to read comfortably at normal UI sizes. But I kept getting mad at the various other imperfections with UI scaling turned on (especially when working on developing pixel-perfect UI above!). So I have been going back and forth on settings until I get used to something. High-res photographs, video, and games look just fantastic on it though. I was playing ScourgeBringer, which I think is a very polished roguelike that I did like, but I was at the point where I unlocked all the help and I either needed to invest a lot more time to get good enough to actually beat it, or move on, and for this one I (wisely?) moved on. I consider this a kind of maturity like when I bought the well-liked pixel art software instead of "just" writing my own, but maybe it can alternatively be seen as a kind of softness. Anyway, to make good use of the big new monitor I switched to some 3D games that can at least pretend to be 4k, first Sensorium. This was a first-person puzzle game that I ended up rather enjoying. It's similar to The Witness and Antichamber (although I think both of those are better; prefer them) with some ideas I've seen before, and a handful of very good new ones. The postgame puzzles were the most up my alley, including that I found my way out of the map and off to some stray geometry on the horizon in search of one of the octagons. Good stuff. Now I am playing Sniper: Ghost Warrior: Contracts II which is exactly what you'd expect.