The title of the post is 'February 2022'
(28 Feb 2022 at 23:05)
Here we are again! Aside from the usual, my "SIGBOVIK" project is well underway and several parts are already done, so all I really need to do is figure out how many more additions I'm going to try to squeeze in before the deadline. (If there is one! It currently seems like the global malaise / anxiety is afflicting the SIGBOVIK organizing committee (If there is one!) and it's not clear that it will be in full force this year. Hopefully a hero will emerge. In any case I will at least make a video of my silly project for my silly YouTube channel.) I still have two much longer-lived projects close to the finish line, but it's harder to work up the energy when the lines ain't dyin'. Who knows what that's about. Anyway, here's a mysterious image from the new project, which contains almost no information and certainly no spoilers:
Mysterious image from project 'Pingu'
As predicted we finished up this homemade stool made of trash:
Ampersand stool on dry workbench
In addition to being made of trash, I only used leftover other crap, like instead of using the official fiducial tape for the Shaper Origin (you gonna charge me $17 for a roll of tape??) I used my homemade reverse-engineered pirate markers printed on the laser printer (this is partly responsible for the gouges on the project, no doubt), old sandpaper that's all worn down and loaded with sawdust even though I have stacks of brand new sandpaper, old glue that had dried out but still had one moist part when you peeled off the crinklies and gum, old polyurethane that had a bunch of dirt and rust in it, old wood stain that came with the house and which we applied with old socks that had holes in them, and so on. I think it adds to the fun to use leftovers, and I still think it came out pretty nice. You can compare to the cyber version in post 1201.
Speaking of Cyber I'm still playing Cyberpunk 2077, now at the point where I'm trying to 100% it I guess, which is not challenging except for the grind, which is mostly about moving from place to place since my personal Cyberpunk is just absurdly powerful now. Like even when the bad guys tricked me and took all my clothes and weapons (it was really obvious that they were going to trick me—I'm no Cybernoob—but like I said I want to do all the missions) and put me in the ice bath to steal my cyber-organs, I could still kill everybody in one hit just by breathing on them. To make things more "challenging", a recent update (which is otherwise very nice) made it impossible for me to "fast travel," because I started playing FPS games before the world had standardized on WASD control schemes, so I got used to using the mouse LMB and RMB for "forward" and "back," which is actually a very good control scheme if you ask me (for example easier to temporarily play one-handed if you need to touch your beard, which I do) even though it strikes many people as weird. It also strikes many games as weird, since although they usually let you configure them this way, they also sometimes hard-code on-screen stuff like menus to treat the left mouse button specially as "click this element" (which does of course kinda make sense, although it would be easy enough to just use the "fire" button for this, right?). So a common frustration for me (and sometimes a game-breaking one, alas) is having to use menus or maps where clicking also makes your character move forward or pan upward or something. I imagine it must be what it's like for people who committed themselves to the Dvorak keyboard in 1997. That was definitely happening in C2077 until this latest update but now I can't even click on stuff on the map at all, for example to initiate fast travel. I would probably have figured out a way to work around this or whatever, but since I seem to be close to the end anyway, I'm now just driving myself all the kilometers between missions. Driving around in this game is quite good, at least, owing to the very well-done architecture and scenery. Anyway, I can't help myself but finish, but I'm also itching to be done with this thing since there are a bunch of enticing games enqueued, like the Outer Wilds DLC and Undertale XVII or whatever.
Happy 2022! December seems to often be a time of hibernation for me, but January has me feeling energetic, despite the deep cold. Possibly it's because I start getting in the mood to "do something quick" for SIGBOVIK instead of fiddling endlessly on one of my many multi-year projects. I do now have a feasibly-scoped thing underway for this year's Bovik, and even some leftover energy for long runs, side projects, and chores (like for example our refrigerator just died after its own long run!).
A few years ago, my Ph.D. advisor Bob Harper became old enough that we threw him a Festschrift (this is fun; please do one for me when I am 2^6 if you deem me worthy), and finally the slow slow wheels of academic publishing resulted in the articles being "printed" (basically this means someone put the PDFs on a website). I wrote a bit for the "On being a PhD student of Robert Harper" reminiscences. My bigger contribution was assembling them all into an unauthorized printed book (as academic publishing no longer "prints" "publications"), including the unbelievably complicated (despite its apparent simplicity) task of concatenating the PDFs with the correct margins and page sizes for print. But also making some nice cover art, which looks like this:
Robert Harper Festschrift Collection
Even though I have printed books before (e.g. thesetwo) I always get a kick out making something on the computer and then having it exist in the real world. This was my first time doing hardcover prints. They come out great, just like "real" books!
Actually two of my other in-progress projects involve computer designs that become real objects. One of those is part of the aforementioned secret "something quick" SIGBOVIK project, but the other is a simple piece of household furniture. Here's an early render of that thing, known as the "Ampersand" stool, on the dry salt bed as traditional:
Ampersand stool on dry salt bed
This one is made from a single tabletop (some engineered wood I don't know the name of; it's like finger- and end-jointed boards of some soft wood which I just spent way too long trying to figure out the species of; maybe beech?) that I found in the sidewalk trash and rolled home for future such projects, cut with the Shaper Origin CNC. It still needs some staining and finishing, but I don't mind sharing before it's complete because (a) the real version will have all sorts of imperfections and won't be on the dry salt bed (b) the point of this project is not to "finish" and "post" but to have a stool that we can step on to reach the high shelves.
Just a few days ago a prominent bridge in Pittsburgh collapsed dramatically. From the crumbled pictures it's hard to get a sense of how high up it was. It was pretty and one of my favorites, and I ran across it several times a week in 2020 as part of a regular route. I never was able to claim the Strava crowns for those segments (especially the short one—I guess my all-out sprint is not that competitive). But it seems my records are now locked in for a long time (2nd place; 7th place) unless the construction crews want to really show off. Ironically I never knew the name of this bridge until it fell; R.I.P Fern Hollow Bridge! 😢
"Hiney" of course being the proper pronunciation of "HNY," being the laziest way to wish someone a Happy New Year. Getting this post done "early" since with 20 years of experience I foresaw the trap where the ball would be falling (actually I don't care about that ball at all but it's serving a metonymic function here) and I would do that face from Sudden Clarity Clarence and invariably lose 1,000 points for lateness.
I did get a few things done this month, although unfortunately I can't actually post about them until they first appear in their proper venues. So in this short post I will only tell you about video games. I let myself get sucked into Cyberpunk 2077, which is GTA In The Future. The game got a lot of complaints at launch, but I think it's pretty good now; the main story has several great ideas and setpieces and the only bugs I've encountered is stuff like cars floating in the air or scripted sequences playing out with unexpected preconditions, both of which basically make the game more fun. Right away, I spotted my font Action Jackson in the game:
Action Jackson in Cyberpunk 2077. Here NC as in I ♥ Not Contacting Tom 7 when I use his font
I was excited when I found this in a corner of V's apartment, but it's actually EVERYWHERE in the game. You can probably find it in 90% of street corners, and one of the shittiest guns that you keep picking up has this sticker on it. So I keep getting distracted by it, and also of course now I'm hyper-aware of the graffiti since I would like to make another spotting of a rarer child, if possible. I actually think they did a great job with the graffiti in this game (in fact in general the art is very good) so it's fun to study, but there is SO MUCH of it and many red herrings.
OK, I have to go rejoin the HINEY "party" now! SIGBOVIK season is approaching so more to share soon. :)
Oops! November slipped through my fingers so I actually wrote this on December 1, and backdated it, one of the more egregious misses in my silly life-long pursuit/curse to fill every cell of the calendar at the bottom of radar.spacebar.org. -1,000,000 points!
At the beginning of the month it got cold and my heat immediately failed, as is traditional. It was challenging to get time from any professionals to come out to fix it this time (seems everyone is very busy and short-staffed), and due to multiple previous ceiling waters I am very nervous about my pipes freezing when the temperature drops, so I took matters into my own hands and fixed it myself. Fortunately the problem was basically entirely electrical (where I have some modest understanding): The power-stealing Nest thermostats had finally destroyed the transformer they had been DrACulizing for years, and "all I needed to do" was buy a new zone relay controller and rewire the 12 wires that were going to it, and run new common wires to the Nest thermostats so they could drink normal blood the safe way. Even though I would rather have not spent my own time and stress, it was gratifying to feel like I can do such a repair myself, rather than just slowly freezing to death or whatever normal people do when this happens and they can't find someone to come fix it (?). The other good news is that my homemade distributed temperature and humidity sensor network is getting ever stronger and ever more complicated as a result of increased anxiety here. One downside, though, is that I now realize that if I just redesigned and built my own zone relay controller, I could fix one moderately annoying persistent problem with the heat that was the original reason for the other complicated thing.
Speaking of the thing where I curse myself with my own home-grown technology, I continued hacking on this ML thing that I described in the previous post. The main thing was to work on performance, since otherwise you have to spend a lot of time waiting for it to do its thing while training. I made it several hundred times (!) faster for some smallish toy problems. There were several things I did, but the main thing was to provide OpenCL with more internal parallelism by also parallelizing the kernels over training examples rather than just the e.g. nodes. I had a TODO since the beginning to try this, but it took some delicate rewriting, so I'm not surprised I procrastinated it and glad it paid off. (It can be quite hard to know with GPU workloads. I'm still developing intuitions. Prior to this, the card was still showing "90% utilization"!) I also did a variety of more interesting / fun tricks, even poking at the PTX intermediate code for the first time. Mostly I was working on toy problems, like something that was trying to simultaneously learn a word embedding and use that to predict a missing word, like on this successful example:
✂ clip 'n save
input: [it has been (proposed) that a]
output: [it has been (said) that a]
Here the words "it" "has" "been" "that" "a" are provided as inputs, and must all be encoded with the same function to a 64-place vector. Then those vectors must be used with a simple network to predict the missing word's vector, and then each vector must be decoded the same way to a word. Here it decoded all the given words correctly (not hard, but it has to learn this task simultaneous with the harder one) and it predicts a reasonable guess for the missing word ("said" instead of "proposed"). Others have done much more impressive things with language but this was fun to see happen from scratch. Unfortunately if I let that run for several more days it will all of a sudden start diverging. The time series (of weights, gradient) looks like this, for example
To the left, a sensible distribution of weights with some gentle snowdrifts, then all of a sudden it goes through a series of abrupt regime changes where the error gets super large. I still don't know if this is a bug or I just haven't prayed enough to the dark wizards of hyperparameter tuning, or what. Since I don't even care about the toy problems, I did move on to some of these audio applications I had in mind in the first place (which I do care about), but I'm also experiencing similar problems there. I'm sure I will try to debug once I get some energy back, or else keep rolling the dice until some magic happens.
A quick font sighting. I like this band Snail Mail (especially her album Lush) and took a screenshot of this upcoming concert in Pittsburgh so I guess I could feel bad about not going to it because it still seems a bit too much coronavirus for me. Just now flipping through my phone to look for pictures of my zone relay controller I saw it again, and I'm like yo wait is an ultra rare font sighting?
Snail Mail - Donner
It absolutely is my font Donner, which I made in A.D. 1997, two years before this indie rock prodigy was born! It of course is a terrible-looking font (I wrote, as a Freshman in college, "I would recommend this for headlines only, and it is somewhat difficult to read at small sizes.") although it makes sense for what they were going for here. I think I was thrown off on the first look by the fact that the repeated letters were edited (I appreciate this touch, even if it was intended to obfuscate font copyright!), but I'll also accept the shame for not recognizing one of my children immediately, even if it is one of the worst children. -1,000,000 points!
I finished up Metroid: Dread, which was fun. It has this map system where every pixel of the map remembers whether you've been there, and I can't help myself but catch 'em all. I can confirm that (a) there is no in-game acknowledgement that you are a completely bonkers map completionist and (b) you can't even do it because the escape sequence absolutely does not give you enough time to cover areas that are only accessible during that sequence. Maybe the speedrunning geniuses will figure out some trick. (Actually the speedruns for this game do not disappoint. My favorite trick is "axis skew", where you abuse some animation in order to make Samus face the screen (rather than left or right as would be normal in this "2D" game) so that she has plenty of space to charge up her hyper dash by running in place. See this breakdown for example.) Right now I am working on Garlic which is a precision platformer in the vein of Celeste. Not as magical as that game but it is pretty funny and the challenges are well-designed.
This is the busiest time of year for me, and several weekends were filled up with activities. For example as mentioned in post 1197 we did a trail Ragnar race in New Jersey at the beginning of the month. I have done a few Ragnar-type races before (e.g. post 1162 or 1174), but only the kind where the team drives the course in a van and it covers several hundred real miles. With the trail style, you have a camp site where you stay the whole time, and all the running starts and ends near there, with team members all doing the same three routes. Since we had a last-minute dropout I ended up doing one of the loops twice in quick succession, even. The distance was mild but the terrain in this park (Wawayanda) was pretty bad, with tree roots and loose boulders everywhere. I got sick of hearing the word "technical." It was especially ankle-sprainy in the dark (since it runs continuously, everybody has at least one middle-of-the-night run with a headlamp) but I was somehow unscathed. I missed the component of actually covering a lot of ground, but it was nice to not be cramped in a smelly car so much. My 4th leg was noticeably easier than usual, perhaps because I was able to walk around and sleep reasonably to recover. We were helped by perfect weather and it was low on COVID, being pretty much entirely outdoors.
I did find a little time for projects. I'm still hacking on this custom ML package with some audio applications in mind, although I'm letting myself get distracted by some simple toy problems (e.g. word embeddings) since with those it's easier to understand whether it's working. One of the main things I did recently was to make it possible for layers to mix various configurations (e.g. a dense component and two convolutional components with different window sizes), which is basically straightforward but required me to gut the whole thing and deal with a lot of fiddly bits. (When I'm programming for fun I really do like problems where performance matters, and this is one of them!) Since I was having some disappointing results on these toy problems I tried adding some known techniques (e.g. adaptive per-feature learning rates), which helped. It helps even more to find bugs: Several times it was "kind of working but disappointing," but when I investigated there was actually some serious problem. (Example bug: I was zeroing only the first quarter of a vector because I forgot to multiply by sizeof (float). But it was still able to learn effectively with 3/4 of its brain damaged. Other bug: I separated a kernel into two passes, but then forgot to call the second pass. It was still able to learn something because the gradients were only wrong half the time, and only on earlier layers.) Fixing those bugs is even more satisfying than performance fiddling. Makes you kinda want to add bugs on purpose like little puzzles for yourself. But, nothing of interest to share from this endeavor yet; I'm mostly just staring at homemade visualizations like this:
This actually ends well, believe it or not
Video gaming: I finished Deathloop, which I definitely enjoyed, although it had several flaws and doesn't quite live up to its premise. Certainly it was no Outer Wilds! I also played through Axiom Verge 2, which was okay but not as good as the first, and had some serious problems (pretty much all the "boss" fights you could just brute force, at least if you had been collecting the fairly easy "secrets" as you played). It was a reasonable appetizer for Metroid: Dread, which I am playing now. The Alien: Isolation aspect is a good fit for this aging genre, I think.