Aesthetic images, Skidder 2021, and c.
(31 Jan at 22:21)
So goes January. That went by simultaneously quickly and slowly, as is the way of our times. Definitely looking forward to winter being over and getting vaccinated, although I'm hanging in there and finding ways to be healthy and modestly productive.
I spent most of my weekends on the latest secret project. It's a machine learning one, which has the usual contours: It does kinda work, but it's not magic, so you spend so much time fiddling with things. It takes forever to run because of the worldwide shortage of GeForce 3080s (thx scalpers) so you're still using the venerable but aged (pronounced age-ed) 1080. And since you're me, for some reason you have to write everything from scratch, so that takes also extra-long, and you don't benefit from decades of expert ideas and tuning, but on the other hand it's a different (and perhaps more pleasurable) kind of work, and perhaps you have a genuinely new idea from the naive exploration. But probably it just comes out mediocre. Anyway, my software has some nice visualizations; here's an aesthetic image:
Now I have at least three videos well underway, but as you've no doubt sussed this year has ushered a new kind of constipation in actually finishing them!
I took it a little easy (like 5k a day instead of 10k) on the running since 2020 ended, since I was having some knee trouble, and that seems to be completely better now. Nothing interesting there; winter isn't the greatest time for adventure runs, though I have made a few long trips out in my basically-infeasible new project to run all the streets in the county. I'll tell you one thing, the absurd hilliness is not confined to the city limits!
Like I've mentioned before over at Destroy FX HQ we've been updating our audio plugins to modern times, and de-squinting some of the tiny cruddy old UIs. I finally got done this redesign of Skidder:
Skidder redesign 2021
Up next is the venerable but aged Buffer Override and then the never-actually-released classic BrokenFFT.
Gamey-wise, I played through ZeroRanger, which is a stylish and fun bullet-hell shooter, although towards the end I did get tired of its mean streak. I'm still in the midst of A Monster's Expedition, a great puzzle game. It reminds me a lot of Stephen's Sausage Roll, although the puzzles are much easier (they are still very pretty, but most of them are small enough that you can completely wrap your head around that feeling of "this must be impossible! unless....!") so it's less of an endeavor to play. Still need to get back to SSR one day! I'm also playing INFRA, which is an indie walking simulator about a city infrastructure inspector who goes around photographing code violations in its venerable but aged physical plants. I love the concept and I'm having some fun, but I wouldn't really recommend it. Finally, I finished the new Paper Mario on the Switch (was like you'd expect) and just took up Cadence of Hyrule. This is a sequel to Crypt of the Necrodancer, which I liked a lot and got fairly expert at, set in the Kingdom of Zeldaland. It's way more forgiving than Necrodancer—it's barely even a Roguelike since you keep a lot of stuff when you die (and other generosities). So it's already feeling quite easy, but it has many charms and lots of great Zelda pixel art.
It's NYE and I'm supposed to be partying it up (from the comfort of my home of course) so let's not dilly-dally too much. Accomplishments in December:
I 100%ed Spelunky 2 (all achievements)! I loved this game. It's really a masterpiece from a design point of view, and even as a Spelunky 1 veteran I found it really fun to work through all the challenges. When I started I didn't think I'd ever do the most difficult ones, but one great thing about its design is the way it teaches you how. (Like I said it was reminiscent of Celeste in this way, although as a randomly-generated game the particular contours are pretty different.. a lot more starting over!) The last thing I got was one of the character unlocks, which happens only in the last level, and is annoyingly just a random drop that you could do everything right and still not get (this is one of only a handeful of gripes I have with the game... I don't think an unlock should work that way!). The no-money run is harder than it was in Spelunky 1, but I think still my favorite. I have a particular fetish for gameplay like "visit familiar ground but everything has a different meaning now" (Other favorites in this genre: Monkey Island's second sword fight; Castlevania: Symphony of the Night; Cave Story second playthrough) and the various ways that the normally-helpful $$$ immediately ends your run is very cool in Spelunky. Anyway, I heartily recommend this game if you like hard platformers, especially if you consider "roguelikes" to be lazy from a design perspective—this was the series that changed my mind.
After finishing that I beat Disc Room and Superliminal in about a day each. Disc Room was a nice small bullet-hell dodger with great artwork and some good "how is this even possible?" puzzling. I thought it was a little grindy and would have probably been more fun if the levels were deterministic so that you could practice a route. (As it is, you need to be both good *and* lucky for some of the harder things.) Superliminal has some good ideas, but has a bunch of Portal cliches that rub me the wrong way (like somehow it's fine with me if I need to collect the 7 Star Spirits, but the glitchy AI voiceover in the broken-test-facility trope is hard for me to enjoy any more). But I think it has just enough ideas to make it worthwhile, most of which come towards the end.
In Running, I met my goal of 2020 miles running in the calendar year; the vast majority happened after the shelter-in-place order started in April (the treadmill runnning before that doesn't count!). Actual total was 2175 miles. In Pac Tom I am truly almost done now: There are just two short street segments left (probably ~200 feet) that I deliberately left scouted but unfinished so that I could make sure my last run is really my last, and prep for some kind of commemorative video. So, presuming I can get out of the 2020 not-finishing-video-projects funk, expect some closure on that one soon! On this penultimate run, I slipped on some gravelly mud and faceplanted, which was my worst ever fall in the thousands of miles that I've run, which is a strange thing to happen so close to the end. (Also kind of surprising that it was on a warm day, given how much ice running there has been recently!) Fortunately I didn't break my teeth or phone or need to go to the hospital, and the face scrapes/cuts seem to be healing ok! As I've mentioned, I've already gotten myself into the probably-hopeless Pac Tom Level III challenge of running the entire county, and so I made a few trips out for that kinda thing too. My knee has been acting up, so I may tone it down now that 2020 is on the books, and perhaps complement the running with some other athletic project?
The other main thing I've been working on is a new Secret Project that seemed like it would be a small thing I could turn into a quick SIGBOVIK paper or video, but of course is getting out of hand (in a good way?). Not much to say about secret projects, but they do fill up the days.
All right, I am going back to the party. Happy New Year!
This month I did some UI work for our Destroy FX plugins, mostly on the Rez Synth plugin, which now looks like this:
Since the plugins often need to grow as we add new features, I've been experimenting with automatically generating the background images, at least. Here that allows for some fancy details that nobody will ever notice, like how the thingies that span two cells don't ever cross certain zones. Was also recently turned on to "blue noise" as a much better way of creating random graphics but avoiding detectable lumps. That set me on a tangent of building a little tool that let me see the live Fourier Transform of image data while drawing it, or conversely to draw directly in the Fourier domain and have it reflected in the image, but it turns out that this is completely unintuitive and less fun than it sounds!
Continued running >10k every day this month, usually doing about 50 miles per week, and 90+ days on the 10,000 steps/day streak. I'm on track for 2000 miles in 2020 (I just realized I should probably make it 2020 miles?), with the main obstacle being the increasingly shitty weather and short days. In Pac Tom I finished the whole North Side (including Herr's Island). Yesterday I ran 17 miles to New Homestead to do 157 feet of ambiguous road that had been haunting me for years, since it was so far away and not obviously a real road. But better safe than sorry. So that definitively finishes New Homestead too. Only a few straggling streets in a few neighborhoods in the South Side are left now. It's probably doable in one trip but I think I'll leave something so that I can be very confident that the final run is indeed the final one (there's always some chance I'll miss something and only discover it when I curate the map data later).
I only played Spelunky 2 this month. It's a fantastic game. I finally got the speedrun achievement (7m58s) after a few extremely close calls (like one finish 4 seconds too slow, or having one of Tiamat's bees kill me as I was approaching the final door!). Now I've gotten close to the medium-hard ending. Dunno if I'll ever have the skills for the hardest ending, but like Celeste, one of the best things about this game is the design of its smooth but lengthy difficulty curve.
Over Thanksgiving break I did let myself start a small-ish programming project, this one involving fonts! We'll see if it goes anywhere.
Happy Halloween everybody! I didn't even think about dressing up since we're still staying home, due to the plain fact that coronavirus is as bad as it's ever been here (for several definitions of "here", including say, Earth). I hope you're staying safe, keeping others safe, and if you're in the US, have already voted or have a good plan!
This is the busiest time of year at work, so I haven't had much spare time, plus as you know my project efficiency is low this year. But I did accomplish a few things:
Have kept up the running, averaging about 6.5 miles a day. I've been doing some silly Garmin badges too, like I just finished a 60-day 10,000 steps/day streak. One thing this caused me to notice is how few steps I get other than the running... it's typically around 600 when I head out for a run at 5pm!
One reason I have been putting off finishing Pac Tom had been that I wanted to capture some running video (plus footage of my process on the map software), for the commemorative short film I plan to make. With a burst of motivation last week (probably due to an overdue vacation day) I managed to do all this stuff. So now there is no real hazard to continuing that, except maybe that I should have something in mind for the very end. On that run I finished the neighborhoods Perry South, Fineview and Central Northside. 7 neighborhoods remain, but each has only a trivial amount of cleanup left.
destroyfx.org is now hosted on my own server, and the plugins continue to shape up. I have the never-released classic BrokenFFT working; I mostly just need to build a GUI for it now. We're going to try to reskin the ones with some questionable design choices or outdated assumptions about what constitutes a readable size.
I went on a spree improving Aphasia 2, mostly building a bunch of optimizations in the compiler backend. This is something I find fun. My benchmarks went from taking about 3 minutes to about 2.6 seconds! This was mostly because I was able to get the memory consumption down to the point that the benchmark stopped swapping, but that does make a difference in real practice too because this virtual server only has 512mb RAM. Maybe a fairer stat is that the compiled code size for all of the apps dropped from 2.4mb to 1.7mb, largely by just doing things with less code. Done with this for now, though please let me know if you spot anything weird on the site (bugs so far have all been mistakes I made when porting code, thankfully not compiler bugs, though those can be fun too!)
I beat Spelunky 2 the easiest way (shortcuts) and then also without shortcuts. Took a while to stop feeling rusty! Now I'm working on the various alternate harder things. I've come very close (like the last few levels) on the speedrun and moneyless runs, which are two I enjoy (they are generally faster than the "do everything" runs). The "do everything" endings are still somewhat outside my grasp, although I've at least done most of the parts in separate runs.
Hiya! It was my birthday again. This was predictable.
Projects this month are a continuation of what I talked about before. I finished porting every Aphasia 1 program to Aphasia 2, and retired that thing. Even though it's "open source" I'm pretty sure I'm the only Aphasia programmer (and if this is not true, my condolences!) so it is a bit of a compiler/language luxury to be able to evolve the language by just updating every program in the world. There are a bunch of apps that are incomplete or that I'm pretty sure I will never need to use again (e.g. 20 years ago I made a content management system for my then-girlfriend's The Sims 1 fan site) but once I was on a roll I just did these too so I wouldn't need to agonize over whether or not to do them or delete them. So now I've started fixing various problems with the interpreter (it's running this very blog you see before you), memory leaks and things forbidden since C++'s standardization, performance trainwrecks, and so on. It's basically fun and feels good to not have that maintenance hazard in the back of my mind, like fixing a slightly leaky pipe in the wall.
We moved Destroy FX to github and are continuing to modernize that code and fix bugs, which is along those same lines. I'm making an effort to give git a chance because I know a lot of smart people like it, but mostly finding it really obtuse. And I keep having situations like this: "Hmm, I want to do basic thing X, which surely every programmer must want to do."
1. Search "git do X" on Google-brand search engine
2. Find "Q. How do I do X in git?" on StackExchange-brand Q&A site
3. (I'm like, perfect)
4. Accepted answer has 600 upvotes: "Technically, what you really want to do is Y." (This sounds the same to me but ok). "Type these commands:"
✂ clip 'n save
git reset --hard --delete origin/main git unstash --interactive -u -a -m --rebase # will drop you into vi shell. follow the instructions git rebase -i HEAD~3 # do this for each change. do NOT use HEAD git push --force-with-lease
5. Next answer has 19,000 upvotes: "Since git 2.6 you can use the command:"
✂ clip 'n save
"... but git will issue a warning that you are using git wrong and shall be punished."
6. All comments on this answer are "This is WRONG. It will CORRUPT your precious HASHES" or people arguing about that.
I suppose this is probably what it feels like to many people to use a language like ML (or maybe do anything with computers), so maybe I should be more sympathetic. But when doing version control I guess I'm just not looking for a super opinionated technology that prides itself on solving problems I don't have (like semantic symmetry between my working version and the hosted "main" repository). In comparison, I use Mercurial at work and it seems to do all the same stuff, but somehow managed to be mostly intuitive in a short period of time (although to be fair this may be because of some nice extensions). Maybe git will just take longer to click, or I need to make my own wrapper tools, or something like that.
Anyway! It can't all be computers so I've also been doing a lot of running, including fairly serious efforts at coverage of municipalities neighboring Pittsburgh. Running the whole county is still seeming pretty nuts, but some part of me wants to get deep enough into it that I start taking it seriously because of the sunk costs. For a sense of what's involved, here's where I'm at:
Allegheny County, PA
... with the majority of the red blob being the existing effort towards Pittsburgh. One positive is that the streets are less dense outside the city, but sidewalks are much more rare, and of course everything is much farther to even get to in the first place.
This month I finished Control, which was great. As if for my birthday, Spelunky 2 just came out, so I played that late into the night yesterday and will do so again now! So far it's great, but it's funny how my skillset from Spelunky HD (one of my favorite games of all time, and I 100%ed it) is so far not transferring to this one very much at all, because of all the new surprising ways to die.