Devon Strawn
Design + Computers

The Rodeo, #3

I had to start this week with this epic 1-bit lofi game prototype:

This is just…perfect. I love it so much!

It adds several bits of visual language to the Juice it or Lose It paradigm:

It’s like an even simpler, more potent distillation of Canabalt.

Io is a new JavaScript UI framework that just launched. It’s already got some great ideas.

First, a really, really cool UI intereaction: a “sliding number box” with vertical axis for increasing orders of magnitude, horizontal axis for fine adjustment.

Second, Io supports rendering a widget via a shader, for speed and encapsulation.

TabNine is an ML-based freemium code completion tool ($50 - $100 individual / pro license). GPT-2 for code completion is very promising.

Getting this right at scale is basically a minefield of edge cases, but this will be a big deal after many iterations.

IP issues are a concern. TabNine only indexes source code with liberal licenses. But then there are the “unique” licenses like Facebook React’s patent grant that complicate matters.

A strong endorsement for using Rust instead of C++, from Rik Arends:

Rik makes an interesting case for Rust as ‘bare metal hardware super-glue’ (or duct tape, if that’s your jam). C/C++ is/was basically the only game in town for this. It’s a good beachhead for Rust adoption: tackling ambitious projects that would be too hard in C/C++.

I’ve coded similar ‘highly-integrated’ hardware projects in the past, and was is indeed a problem. I used various approaches to make the whole thing simpler (most notably, careful use of LuaJit), but overall system complexity was still a nightmare. If Rust can pull off what Rik’s evangelizing, then I’ve got a couple of projects in mind that would benefit. Dying to try it out!

Rik is creating Makepad, a web-hosted Rust-based live-coding IDE for 2D design. It’s all WASM and WebGL. The IDE at that link is being used to view (and edit!) Makepad’s source code itself.

Makepad is experimenting with some new ideas that I’ll have to dig into later:

Ilmari Heikkinen continues work on Qframe, now with even more features, still in 300 LoC!?:

I’m planning to double-back and study Qframe in-depth, because it’s rare to see so many essential backend features in such a tiny codebase.

And it’ll be a treat because Ilmari even went and commented every single line of Qframe’s source code.

I went back through my old blog and found that I had written about Ilmari’s ‘mugen’ project (over 10 years ago!).

Ilmari shared even more amazing ZUI apps he had built in addition to ‘mugen’:

And a higher-resolution image of ‘mugen’:

The Russian-owned, privacy-destroying FaceApp reveals archetypal caricatures of hyper-femininity and hyper-masculinity:

Reminds me of some MSR work in the 2000s where the researchers extrapolated along some kind of ‘image regression’ model applied to faces. They found that the resulting faces indeed looked like archetypal caricatures, just like these.

I love level designers:

Blender Cycles vs. Eevee render:

Speaking of Blender, a fantasy of ‘default cube’ heaven:

Pacpong = Pacman + Pong + Space Invaders. A brilliant combination of three classic games:

This is why buying virtual objects makes no sense. Virtual objects + profit motive + irrational consumers.

The many, many uses of optimal transport

Like many others, I stumbled across the incredible power of optimal transport recently.

This was the ‘gateway tweet’ that introduced me:

Optimal transport is…amazing. Simply amazing.

I started collecting more notes about it, but my notes were too numerous for the roundup. So I wrote up a dedicated article on optimal transport.

Procedural Earth in PICO-8:

A cool data-driven dialogue system:

I like how this illustrates a “sum that’s more than the sum of its parts”: by combining minimal design, emotion content, cuteness, and animation.

The source code is basically markup:

Another cool 1-bit game prototype:

An interesting use of SDFs for “sticky particles”.

It’s similar to “The Unfinished Swan” game. Instead of particles, you could dynamically splat onto a texture. Or splat onto an alpha map which reveals parts of a static texture.

I love nmap:

Funny

Cute

More reasons to roundup

This week, I found more evidence for the pro-roundup “roundup as breadcrumbs” argument from the previous edition.

There just isn’t a good tool to organize tweets. So the roundup is kind of a nice way to:

So far I haven’t come up with any good reasons not to roundup, other than time involved. But reviewing the previous roundups shows me that there’s enough value in doing this that I’ll continue for the moment.

One benefit of the roundup that I predicted but haven’t experienced until now is accreting enough material to generate entire articles from.

This week was the first time that happened, with my article about the many, many applications of optimal transport.

Thank you for reading, and have a great week!

– Devon