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.
Still keeping up the no-pants streak
(31 Aug 2020 at 23:47)
Not too much interesting to report this month, which ended so abruptly that I again missed midnight and backdated by an hour.
I'm spending a lot of time each day running, 10k+ pretty much every day, which has been good for me physically at least, and uses up a lot of energy. I've kind of let myself start trying to run "all the streets in Allegheny County," but it's such a stupidly large area that all this really means is that I'm doing some long runs where I weirdly pace around the streets in some neighborhood, like the old days. I remember thinking once that Pittsburgh was too insane to ever finish, so maybe one day I'll feel the same about the county, but it's 745 square miles and I'd need to do dozens of 40 or 50-mile round-trip runs, so like ????. Still putting off the last few trips for Pittsburgh proper, partly because I'm trying to figure out my strategy for making a video (or something) to commemorate the project's completion.
In hacking projects, the Destroy FX plugins are all working in 64 bit on Windows now, with some additional modernization, and so that's likely to go live pretty shortly. I also upgraded my server spacebar.org, which broke some ancient stuff I've been using since the year 2000, and wasted much of my life force fighting with decades of database data that had been "converted" during the "automatic" upgrade from UTF-8 bytes (not correctly marked I guess) to Windows-1252 and then "converted" again to UTF-8. I feel like busted character encodings are a story I'm destined to replay for the rest of my life, really. Doing that kind of reminded me that my ancient functional web scripting language called "Aphasia" is perhaps a ticking maintenance time-bomb. I wrote the thing in college, now over 20 years ago, back when testing (this == NULL) was thing reasonable people did. And although I've rewritten the compiler itself to something basically acceptable, I'm still using the original version of the compiler to compile a bunch of old apps that I never ported. So this last week one project has been to try to port everything to "Aphasia 2" (new, far less insane compiler, only one decade old). For example, play the new version of Hangsnoot, which behaves exactly the same as the old one. (It was also funny to revisit my old to-do list app, which I hadn't looked at since grad school, but I did get to legitimately check some items off while testing it!) After I port all the apps I can delete "Aphasia 1" for real, and then maybe clean up some of the rickety stuff that runs inside the web server. Such are the burdens of the Tom lifestyle. But it is straightforward work and basically relaxing, and better to do it now than when the site's actively falling over!
In games, I played Terminator: Resistance since it was on sale and the reviews led me to believe it would be a good dumb shooter, but it was not very good. Then I played The Pedestrian, which was a nice clean puzzle game with a lovely visual presentation. Only took a couple hours and none of the puzzles were frustrating, so I can recommend this one. (Well, the inability to invert my y-axis in one part was frustrating! Come on, some of us are old guys!) Now I am onto Control, which is finally out on Steam, and it is good so far.