Thought Pieces
Planning out a linear VR experience requires thinking about where the viewers attention might be. Thinking about the focal points…
In traditional cinema, TV, or even the more modern phone screen, there’s limited screen real-estate. But removing that limitation creates a design problem…
Let’s not pretend the importance of prompt engineering is ubiquitous. The most prevalent power of generative AI is in the way it adapts to us, not the other way around…
A deep dive into carefully considered date formatting, line length and general typography attributes of filenames…
Rapid authoring tools like Articulate Storyline and Evolve Authoring make sharing projects possible across a team of non-programmers, but your design must often adapted to the limited range of possibilities the tool allows…
Projects
Technical Articles
Vite’s auto refreshing can sometimes get in the way. Here’s a way to stop it…
React Native apps using Expo won’t connect to your physical device on locked down networks without tunnelling…
Most examples online define defaultProps after the class or function. Here’s why I define it before…
Obsidian plugin development allows you to add support for new filetypes…
Pulling the extension from a filename in javascript can be done in many ways. And it’s easy to do in a way that will create errors…
A quick reference for creating a new file type in Obsidian plugin development…
WebViews will become transparent iFrames when compiling for the Web, but won’t be transparent by default on iOS or Android…
Accessing the Obsidian plugin instance from a CodeMIrror view plugin extension isn’t immediately obvious from the Obsidian docs…
tlDraw let’s you tie into listeners that fire whenever the user edits, moves, or selects something on the canvas, but they also fire when making changes programmatically…