RSSAmplifier

Blog

Josh On Design

Art, Design, and Usability for Engineers

joshondesign.comRSS feed ↗20 posts

Latest posts

Can we still make software that sparks joy?

A diatribe in when I am greatly disappointed in my industry. Vibe Coding For the past few weeks I’ve done some "vibe coding" with Codex and Claude in my free time. As a lifelong software engineer my feelings on the results are, well, mixed. LLMs definitely let me put together a prototype faster, which is great for iterating on ideas quickly. The generated code is definitely an improvement over…

A Senior Engineer Tries Vibe Coding

If you live on planet earth and you are at all connected to software you've probably tried out 'vibe coding', ie: using an AI tool to write software for you. As someone who's been writing software for close to four decades I've seen code automation tools come and go. Believe it or not, people used to talk about Visual Basic in the same breathless tones of today's vibe coding tools. The outcome has…

Embedded GUI Layout Algorithms

Layout is one of the hardest problems in UI toolkit design because there are so many different ways to design a layout. Creating a system that supports them all is practically impossible. Even creating a system that merely makes them all possible to implement (even if difficult) is a challenge. And making the layout fast is even harder. However, given that we are targeting embedded systems, rather…

2025 JS13K WebXR Entries

This year's JS13K Entries . Midnight Heist Cataway XR Clawdia 9 lives: An Escape Room AL13YCAT Wake the Cat Black Lantern CatSlap CLAWZ Inside Cat Kittens Crossing COD: Black CAT Wild Catch

Embedded Rust GUI Progress report

As part of my ongoing research with embedded Rust on ESP32 devices, (starting with the T-Deck but eventually branching out to other devices), I started creating a simple reusable UI toolkit to automate the boring code that I end up writing over and over for every example. The code is on github but I haven't made a crate for it yet. Goals The goal for this embedded GUI lib is to be able to quickly…

Accessing the Keyboard and Screen on the LilyGo T-Deck with Rust

I’m really enjoying using no std Rust for embedded programming on the [Lilygo T-deck](https://lilygo.cc/products/t-deck?srsltid=AfmBOooByFjhRNf0GYZImQ4xz2IpCBm ELtidro9PzSlUJ90iCgWRWSA) and I want to share what I’ve learned so far. There are many excellent tutorials and docs on Embedded Rust in general and the ESP32 in particular, so I’m going to cover things that are specific to the T-deck or…

Slaughterhouse Five

I don't know why I waited until I was almost fifty to read Slaughterhouse Five. I'd always heard it was a groundbreaking work of sci-fi, but I didn't know why. Now that I've read it I can say that it's not really sci-fi, but it certainly is groundbreaking. If you haven't read it, Slaughterhouse Five is a sci-fi (ish) novel by Kurt Vonnegut about the bombing of Dresden in WWII. It tells the story…

Rust on the LilyGo T-Deck

I've been having a lot of fun with this little device called a LilyGo T-Deck . It's built on an ESP32-S3, has a 320x240 touch screen, a funky little track ball, built in wi-fi, and a seriously nostalgia-inducing physical keyboard. I bought the T-Deck about a year ago but because I was sick (with undiagnosed Type 1 Diabetes) and haven't done much with it until the past few weeks. Whenever I see a…

Thoughts on LLMs and the coming AI backlash

Thoughts on LLMs and the coming AI backlash I find Large Language Models fascinating. They are a very different approach to AI than most of the 60 years of AI research and show great promise. At the same time they are just technology. They aren’t magic. They aren’t even very good technology yet. LLM hype has vastly outpaced reality and I think we are due for a correction, possibly even a bubble…

Remembering Mixed Reality

Working in the Mixed Reality group at Mozilla was the most fun I ever had in my 30 year career. Helping to usher a new technology into the world. One with such potential. I’d really love to go back there. Unfortunately it seems there isn’t really a there to go back to. Cue memory fade. WebXR Mixed Reality (MR) refers to the spectrum of interfaces between and including Virtual Reality (VR, fully…

My Areas of Interest for 2025

I’ve been quiet lately, not because I’ve had nothing to say but because I’ve not felt well enough to say it. That changes today. I’m starting to get a handle on my adult onset Type 1 Diabetes (T1D for the cool kids), including taking more control of my medication and standardizing my food choices (it’s less what I eat and more about consistency of amount and timing). I’m not quite ready to look…

IdealOS Thinking

One of my original IdealOS blog posts from 2017 showed up on the front page of Hackernews the other day (comments here ). This got me thinking about IdealOS again. I haven’t worked on it in a couple of years, but as I read through the comments and links to articles by people with similar ideas, I came to a realization. I am still working on it. Maybe not directly, but I’m still exploring ideas…

Circuit Python Watch Status

It's been a bit since I've posted on my round screen watch project. Most of my time has been taken up by work, travel, and family stuff, but I did have a few seconds to add a feature or two. New Screens The Waveshare board I'm using has a lipo battery charger inside it, but until now I hadn't exposed it. There is now as screen that shows the current battery percentage, though I…

CSS Text Style Builder

It’s a truism of the web that when something becomes free it turns to crap . This is largely due to advertising, tracking, and SEO hackers getting their crappy version of something to the top of the search index. When this has happened to a tool I want to use I can’t fix the underlying problem, but I can make my own non-tracking version and share it with the web, doing my little part to make the…

Fonts and Icons on Circuit Python

I’m continuing to work on a little smartwatch prototype using a little round LCD and I want to have nice looking text. The default font for CircuitPython is fine, but it’s very tiny. This LCD has a pretty high DPI compared to other hobbyist screens( > 200 ppi ), so I need to find a new font. CP has a way of importing new fonts, but there are a few pitfalls and tricks I discovered, so that’s what…

Performance Limitations of CircuitPython's DisplayIO Graphics

For my next project with the WaveShare Round LCD I want to create an animation of Dr Strange's Eye of Agamotto . Here is my first attempt in JS (looks more like the comics than the movies). Not bad, I think. When it animates the eye lids come down. I built them with quadradic curves that change over time using Canvas. Canvas is fast enough to let me make the animation very smooth. Once…

Playing with a Pico based Round LCD screen

I'm enamored of all of cheap and hackable screens and embedded CPUs coming onto the market. I'm frustrated, however, that despite embedded computing being more accessible than ever, the mass manufacturers products are all becoming more and more the same. Where are the phones with oval screens? Where are the steam punk pocket calculators? We have the technology to make devices that are…

Canvas Scaling and Smoothing Tricks

I love HTML Canvas. I even wrote a book about it once. Canvas is good drawing API and it runs everywhere. However, despite the magic that is the Canvas API, it can still be tricky to use when it interacts with CSS. I often have people ask me how to make their canvas fill the screen , or resize with the window , or to have a fixed aspect ratio but still scale to fit inside the window without…

One Hour Pong

I’ve been teaching my nephew to code for the past few years and we did a game jam together over the winter break. He said to me: “Uncle Josh, you sure can code fast.” I reminded him that I’ve been programming for 30+ years, and one day he’ll be even better than I am. My nephew struggles to come up with ideas and often goes down rabbit holes on one feature or tool instead of working on the rest of…

Why you can’t build a web browser and why you should anyway.

In the last couple of years I’ve seen a lot of lamenting about the browser mono-culture . I even wrote about it myself . Some complains focus on how complicated the web specs have become . So big that only a few companies can implement a browser from scratch. I think these complaints are misplaced. Even if the web platform didn’t have such a large API surface it still wouldn’t matter. You can’t…