Tom 7 Radar
Back to tom7.orgRecent comments Other ways to read
x
Other ways to read Tom 7 Radar:

[rss] RSS feed for aggregator software
Entries from August 2021
p
e
r
s
o
n
a
l
Mostly, vaxcation (31 Aug at 22:57)
Hello! It's vacation season around here, this time a trip to see some vaccinated and covid-tested friends in northern Michigan on a lake. I thought maybe I'd get some recreational programming done while I was up there, but the atmosphere was a bit more like kids, commotion and party than it was like meditative retreat with just a typewriter and an acoustic guitar, but that was okay too.

Earlier in the month, I worked on adding stuff to my bespoke machine learning setup ("tom7flow"), since I have recurring urges to use this for wacky projects, and a specific thing in mind to try for Destroy FX (of course this very hacking distracted me from just finishing the one last piece of the Buffer Override UI, after which we can just release those bad boys!). I added support for convolutional layers, a classic trick for reducing the number of parameters by repeating the same pattern over and over. For example when trying to do some processing of a NES video frame, of size 256x240, instead of having a layer with 256x240 "pixels" on it with independent weights, you might instead learn weights for an 8x8 block but repeat that 32x30 times. In fact I revived some earlier failed NES ML project (it looks like I never posted about it?) as an example to develop with, and I can at least show you the pretty ways that it distorts NES graphics:

INVENTOR?
INVENTOR?


I love those dirty pixels. I even "wasted" an additional afternoon building a real-time version that lets me play games through the model at 60fps (also with sound; unnecessary!), and then played glitchy Nintendo games for a while. Unnecessary! And speaking of pixels, with my new high-DPI monitor I've been futzing again with the fonts I use, and I've decided to go back to the venerable FixedSys (my all-time favorite bitmap font), but to use it at 2x size. I like the giant fonts for my aging eyes, but also to reduce the visual distractions when I'm writing or programming. (To be clear the draw of a big high-resolution monitor for me personally is mostly about the visual quality of images, video, and games, not about 'screen real estate' to pack full of blinkenlights and multi-pane IDEs.) In order to revive this font I manually converted it to a fake-bitmap TTF (using previously described convenient tech) and fixed some of the few flaws with the font (e.g. I think the [] characters descend lower than they should) and added some missing unicode characters that I'd like to have around, yielding FixederSys. I managed to get it rendering perfectly in emacs, and I'm really happy with it now! Since I'm using it at 2x, I have in mind that I may be able to improve this font further using the increased bitmap resolution, while still keeping the chunky pixel character that I admire. So I will try that out on some rainy day.

In media news, I finished up Sniper Ghost Warrior II: Contracts: Ghost Killer Snipe Wars or whatever, which was what I was in the mood for, I guess. I finally got around to playing Ghost Trick since they fixed some serious playability issues on iOS. It was creative and great and I endorse the consensus that it's an oft-overlooked gem. Then I started Filament, which is a pretty neat puzzle game that I'm enjoying so far, although I'm not sure I will 100% this one with Psychonauts 2 just sitting there teasing me to be played!
  [ comment ]
Entries from July 2021
p
e
r
s
o
n
a
l
Summer programming 2021 (31 Jul at 22:20)
Hellooo!

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):

Con<i>grad</i>ulations
Congradulations


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:

SIGBOVERIDE
SIGBOVERIDE


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.
  [ comment ]
Entries from June 2021
p
e
r
s
o
n
a
l
22:33:44 (30 Jun at 18:36)
Here I am again! I was going to say that month went by quickly, but when I re-read last month's post it seems like ages ago.

We drove the car on a road trip; other than when I drove twice to West Virginia in a Zipcar to get vaccinated this was my only time significantly far from my house in a year, so that was kind of weird, but good. Still trying to stay outdoors or masked if around potentially unvaccinated people. The main event was to go to southern Connecticut to visit my family, since there is a new nephew (1 year old!) since last we met, and the other nieces and nephews have also grown at least a year, which is a lot for kids. They were excited to show me their video games, and I was excited to show them some science stuff (turns out you can get perfectly decent handheld microscopes for less than $20, which were a hit with the kids, at least for a few minutes), and the siblings were excited to drink beer together. We even got some real New Haven pizza, which is the main reason that most people would consider going to Connecticut. Driving straight through takes over eight hours, which is doable but very tedious, and I'm trying to get in a mindset of not hating driving so much (I mean the act of driving; I don't think I'll ever really "like" the idea of driving, especially the obsession with car infrastructure in cities), so we stopped "on the way" in Watkins Glen, which is in the Finger Lakes. I can recommend this place for a day, especially the state park. It's this mile-long gorge that has stone walkways and bridges and caves built into it where you go up the spiral stairs and emerge behind the waterfall that spills into the giant basin, and then you keep going and again there's another better waterfall that you could just slip and fall into, and soon you are just so completely over waterfalls, not like in a bad way, but say where you feel judgey if you see anybody take a photograph, because like, come on, there are SO many waterfalls. Aside from its many wineries and beereries, I discovered that this town has some kind of car racing history, and if you pay them $30 they let you drive around their race track, so I did that also in the spirit of trying to hate driving less. That is definitely more fun than driving on the highway.

Still working on the Pac Tom endgame, which I have done some significant construction on, although I made one discouraging mistake that set me back a bit. The main problem is that to finish the project and the filming, I need a decent weekend (like: not on a road trip, not hosting visitor, not 95°F, not raining) and these have not been forthcoming. I did a redesign of the Buffer Override UI for Destroy FX (mostly because the current one is so dang tiny) but it's not quite ready to share. Part of that was distracting myself by using my newly minted abilities of generating TTFs to make some bitmap fonts for this project, instead of clicking the pixels by hand (??), which I am pretty efficient at, but jeez. I've been using Aseprite as discussed in the previous post, for both the UI work and the fonting. I do like it, although its similarity to Photoshop keys/behavior does put a spotlight on some of the things I expect to be there but aren't (say, holding shift when drawing with the pencil to constrain it to a straight line). It's great to be able to write scripts, though, and have native support for animation!

I finished Project Hail Mary and I think I basically liked it; a few things fell better into place than I was expecting, or at least it didn't fall apart like the (somewhat similar) "Seveneves" did. By the way I always pronounce that Se-VEN-eh-vess. Now I'm reading The Utopia of Rules which isn't what I was expecting but is interesting, and in some Wikipedia rabbit hole (I think it was about cryogenic brain preservation) I was reminded of how much I like Nick Bostrom's brand of bonkers but nonetheless hard-to-refute writing, and so I have been catching up on some of his papers since I last thought about that guy. I did in fact finish the game Caveblazers (it's no Spelunky or Isaac but it was a very solid Roguelike) in time to pick up Nifflas's new Ynglet. I think Nifflas made some of the best indie "Metroidvanias" out there, with the creative movement and clever hidden challenges, and I was sort of expecting this one to be in that vein. It's not, but it was a very good short game anyway, with a really cool presentation style and vibe. Then I finished Slime Rancher too (charming), and now I am on to Outbuddies DX (I expect to finish it, but I think it has too many rough edges to recommend).
(6 comments — almost 2 months ago)   [ comment ]
Entries from May 2021
p
e
r
s
o
n
a
l
Summer! (31 May at 23:18)
Aw jeez, that month went by fast. Partly because the weather has gotten good here, and with the vaccines kicking in we have been doing some stuff again, like some outdoor dining and hikes and hosting some vaccinated visitors. All of that is good, though.

My aforementioned game / tech demo thing was my main hacking project, now all cleaned up from a javascript prototype mess to some almost reasonable TypeScript. I'm taking the opportunity to play with that since several have recommended it as likely an upgrade over JS for my sensibilities. I do find that it is catching some bugs and is probably worth using, but I am not loving it, for these reasons:

I think I actually want a compiler that uses the type information to do optimizations/transformations (like say variable and property renaming). I think when I write code I'm often thinking about easy transformations that the compiler can do (discarding unused code, for example) and making use of that; without it, I find I need extra discipline to keep myself from optimizing by hand.


The very first thing I wanted to do with it, which was to parameterize some class by some set of types with operations, was quite awkward to do. This seems partly because of the way TypeScript is committed to erasure-based features (see prev), but also more annoying than it would need to be due to several ergonomic omissions (like, why can't I say "type T = F<T1, T2>" inside a generic class?). jcreed did help me figure out a livable approach though.


The type system is not complete (normal) and I kind of knew it was not actually sound either, but I was surprised to immediately find out how unsound it is. For example, consider this trivial program:
 let a = [];

if (a.length != 0) throw 'no';

a.push(5);

if (a.length != 1) throw 'no';
This program is correct JavaScript and I encountered a similar situation trying to unit-test my code, so I don't even think it's weird? And it is fine for TS to not be able to type-check all correct JS (as type systems are generally incomplete). But here the error message represents an unsoundness; on the last line: "This condition will always return 'true' because the types '0' and '1' have no overlap." This is just wrong. What's happening is that, if we get to the second if statement then the first if must be false (otherwise we'd throw an exception). Because the first if is false, a.length must be 0. This is OK so far. But then TS assumes that nothing can change the length property of a other than the code it's looking at right now, and so a.length must still be 0 in the second if. Incorrect! It thinks the branch must not be taken when in fact it is always taken. This means that it allows programs that would actually have runtime errors (unsound) or in this case, rejects my program with a useless and false claim. What's particularly annoying with this setup is that even if I fix it (e.g. a = a;) my program could typecheck fine in 2021, but then if TypeScript's type system gets "smarter" in 2022 and is able to track an expression's type in more situations (incorrectly), the same correct program might later be rejected. Bleh.


Kinda makes you want to just make your own language, right? But aside from that, I needed to do some pixel animations, which Photoshop is only minimally suited for. I was proud of myself for buying the well-liked Aseprite sprite editor (still need that tilemap mode though!!) instead of "just writing my own," although it was a somewhat agonizing decision.

I made some progress on my Pac Tom endgame strategy (video, CAD, basement workshop, and software work) and some other miscellaneous hacking, but a relatively project-light month.

I started reading Project Hail Mary (same author as The Martian), which is fun in its way. I really like the setup of "problem-solving sci-fi where the problems and solutions are compelling," although the writing is mostly just tolerable and the disbelief is inherently (to the genre) fragile if you notice something conceptually wrong with the fiction part (like, why not one waking crewmember and two in comas?). I think it's part of what drives me instead to non-fiction problem solving like "Eight Amazing Engineering Stories." Happy to hear recommendations along these lines though. In video games, I finished Blasphemous (decent exploration platformer with stiff combat/movement but excellent atmosphere), Rite (small hard precision platformer with great controls), Willy Jetman (silly exploration platformer that nonetheless had its charms), and Sayonara Wild Hearts (beautifully stylish animation and music with good-enough gameplay; recommended!). Wow, that's actually a lot. I'm letting myself play another roguelike now, Caveblazers. Might be a mistake though. It's quite fun but the difficulty curve on the later levels is starting to worry me.
(3 comments — almost 3 months ago)   [ comment ]
Entries from April 2021
p
e
r
s
o
n
a
l
SIGBOVIK 2021 and other things of April (30 Apr at 18:25)
Yeah! Several newsy things from April. First up is my SIGBOVIK project, published on the first of the month (that's right, at Tom 7 Radar you can find out about the newest Tom 7 Projects a mere 29 days after they are announced in other venues!). This year's conference was virtual again, although they mercifully allowed for both audio and video in the submissions. From me the main artifacts are the 24 minute video Uppestcase and Lowestcase Letters and the 18-page paper of the same name. The project site also has some additional downloads. I'll let them speak for themselves! For SIGBOVIK, the presentations were limited to 5 minutes, so there's a highly truncated/ruined version of the video (not recommended unless for some weird reason you gotta catch 'em all) and a "double-blind" Q&A afterwards in the SIGBOVIK 2021 recording. There are some other good parts in there from friends and strangers; I especially liked Jim's "Dada" presentation (29m05s mark).

As usual I was feeling fairly sick of the project as I completed it, so it's nice encouragement that upon completion, it seems that others were not yet sick of the project and were willing to spend 24 minutes on it. It's not like the video is a viral hit at 73k views, but it was nice that it found an enthusiastic audience, and I definitely feel like it was successful. I've come to realize that I get a much bigger kick out of a viewership who is smart and "gets" the technical stuff and strange form of humor more than I do from simply making the numbers go up. Hopefully I can keep up the mood/momentum and finish a few more nearly-complete projects soon.

Speaking of momentum, I got my second vaccine shot, again driving to a Rite-Aid in a tiny town in Ohio for it. Possibly inspired by these two driving day trips but probably more a directly a consequence of cabin fever from staying at home for a year, I ended up buying a car! I've owned a car before (for example Van 7 and Van 7 2) but always a crappy car that was nearly dead, like for example before I donated Van 7 2 to NPR it could only be entered or exited through the back sliding door, and when the car was on it would always and forever play the one CD that was stuck in the CD player at slightly-too-loud volume because the CD player's faceplate was malfunctioning, which at least would cover up (for the unwise passengers and driver) the various scraping, shimmying, and structural unsoundness sounds that the van would make whenever it moved. Among other things. This time I got something that I thought would be fun to drive (we will pretty much only use this thing irregularly for trips or for picking up things at the hardware store that are a bit too large to carry home running, but nonetheless not too big to fit in the actually quite tiny back seat/trunk) and got a Mini Cooper convertible that looks like this:

Vanity license plate idea: POOPERS
Vanity license plate idea: POOPERS


Actually that lens angle makes it look bigger than it is. It is a tiny, silly car. And it is more fun to drive than the minivan indeed. We'll see whether it ultimately ends up being a foolish idea, but it should at least let us see family and do some safe outdoor activities as we try to mentally survive through the extended coda of the pandemic.

You know what else was annoying? A few weekends ago I tried rebooting the server that hosts various of my websites including this very blog, and it just failed to come back (dashboard just says like "ERROR" with no diagnostics) and none of the standard things gave me any information about what was wrong. Emergency console gives some internal error. Backup images wouldn't load either. I spent an hour+ on the phone with Rackspace support, who finally concluded the server was "just too old" to turn on. I had been upgrading the OS in place for many years, so this was a pretty annoying outcome (like they could have warned me at some point that the container image or whatever was going to fail to come back?). I never particularly liked Rackspace anyway (they bought the hosting company that I had started with), so I used the "opportunity" to switch to DigitalOcean, which is probably faster and a better deal and their website is certainly way better. So, it was a weekend down the drain, but spacebar.org has a new exoskeleton now. I think that I've gotten everything restored, but partly because some people have nicely sent me bug reports (e.g. muddle was behaving as though no boards had any words, because it couldn't find the dictionary file). So if you see anything amiss, please do lemme know.

I also took the "opportunity" of struggling to get my decades of legacy software running on a new system again to rewrite some of the guts of Escape to separate the UI from the server components a bit more. Now there is a subset of the game that can easily be compiled as standalone standard C++ (e.g. for the server-side components) without needing SDL, which is nice. The main thing I need to do with that before doing another release is to make it compile again for Mac OS and for the new ARM chips, which is somewhat daunting, but I left it in a reasonable state for the next time I have such energy, at least.

Current programming project is something between a game and an overly-complicated technology demo; we'll see how it goes!
(7 comments — 4 months ago)   [ comment ]
... Apr 2021 continued
2
0
2
1
Posts from 2021
Aug Jul Jun May Apr Mar Feb Jan
2
0
2
0
Posts from 2020
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
9
Posts from 2019
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
8
Posts from 2018
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
7
Posts from 2017
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
6
Posts from 2016
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
5
Posts from 2015
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
4
Posts from 2014
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
3
Posts from 2013
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
2
Posts from 2012
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
1
Posts from 2011
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
1
0
Posts from 2010
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
9
Posts from 2009
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
8
Posts from 2008
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
7
Posts from 2007
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
6
Posts from 2006
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
5
Posts from 2005
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
4
Posts from 2004
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
3
Posts from 2003
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
2
Posts from 2002
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
1
Posts from 2001
Dec Nov Oct Sep Aug Jul Jun May Apr Mar Feb Jan
2
0
0
0
Posts from 2000
Dec Nov Oct Sep Aug Jul Jun May Apr Mar