There have been periods of my life where I stopped reading. I don't mean that I stopped reading entirely - I still read articles and blogs and journals, but I could not find the time to read fiction novels. Fiction makes you think and feel in a way that other writing doesn't. I've noticed that my own writing comes much easier and fresher when I'm reading fiction regularly. I think I've figured out…
Kanban TODO is a markdown based kanban board implemented in a single index.html file. You can download the index.html and the helper kbtd script from GitHub. Or download the zipfile containing both I made this because I was frustrated by a feature missing from GitHub Projects - you can't see a count of completed sub-lists on a project issue card. Many people have asked for it and it doesn't look…
An LLM will never kiss somebody for the first time. It will never taste wasabi, or smell a newborn baby, and its skin will never goosebump in a cool breeze. It will never walk quietly in the hush of giant sunlit trees, feel a surge of anger at getting tailgated in traffic, or crack open an old book and sniff the pages. An LLM will never watch its own mother die in a hospital bed. LLMs don't know…
There are few situations in life which offer a win-win-win outcome at low cost and without any real down side. Publishing search data is one such situation. It's good for the people searching, it's good for the people producing, and it's good for the platform. Search data means aggregated anonymous data about what people typed into the search box. For example, how often a particular word is typed,…
Jsfxr Pro is a retro 8-bit sound effects generator for game developers and musicians. It's an enhanced version of the free sound effects generator at sfxr.me . To use it, you click the generators to create different sounds like power up, explosion, laser, coin, or jump. Then you can tweak the sounds using the sliders to get the exact sounds you want. The main Pro feature is sound packs. You can…
I've been working on Eucalypt , a frontend library for building small web apps with Squint -ClojureScript. It features a Reagent -compatable-ish API. I'm not implementing the full Reagent API, just a useful subset, and so I was interested in which parts of Reagent are most used. no r/track? -- HN User To figure this out I used GitHub as a data source, performing searches for common patterns and…
Two years ago I started working on Beat Maker . I thought it would take a week or two to build. Classic programmer estimate. My goal with Beat Maker was to make the best free online drum machine on the internet. A tool that gets you going fast. Simple enough for beginners and powerful enough for serious producers. I spent a bunch of time researching existing online drum machines to figure out…
Announcing Eucalypt ! 🍃 This is the story of how I replaced React & Reagent with 720 lines of slop-coded Squint-cljs and got a 10kb build size. 😹 I wanted to enter the js13k game jam . I wanted to use "ClojureScript". I wanted to use "Reagent". Is there some way I could build a <13kb artifact to satisfy the rules with these constraints? It seemed impossible. Solution: I forked Mr Clean and…
Well our year long sabatical in London is over. We've been home for just over six months now and we're all settled back in. We had a great trip full of amazing experiences; daily life, new schools, art and theatre, making new friends, and exploring Europe. We grew closer as a family. Grass was touched. The whole point of doing this was to get out of our comfortable bubble and a year in a big…
Watch Later is a 100% client-side web app you can use to save a list of YouTube videos without logging into YouTube itself. It syncs across devices using the Nostr protocol and relays, making it fairly decentralized. You can find the app at mccormick.cx/apps/watch-later . Because it's a 100% client-side web app, you can self-host it on any static web hosting provider. You can get the source code…
A way to make sense of it is this. The universe can be a cold hard place. Sometimes it seems meaningless and harsh. But we are a part of the universe. We are woven into it's fabric. We are made of the same stuff as the whole, not separate, and it is made of us. Because we think, the universe can think. Because we love the universe can love. It's because we exist that meaning and compassion and…
The good folks at defn podcast recently had me on as a guest for some reason. Topics we covered: Laziness as a core developer value. Preferring Node.js over JVM with Clojure(Script). Deployment tools like Piku . Using nbb for scripting. The Nostr decentralized social media protocol . Different meanings of "crypto". Using LLMs for code generation. View on Zencastr
CodeShow is a code presentation tool I just released. It's a simple open-source static frontend web app with no backend that you can self-host. Visit mccormick.cx/apps/codeshow in your browser to use it. Get the sourcecode on GitHub . Features Syntax highlighting (CodeMirror) Adjustable color themes (CodeMirror) Full-screen display Filename display (optional) Window dots decoration (optional)…
Your thumb depresses the microphone button with a soft click. You speak: "Beep loudly if the pot boils over." "Send me an SMS when you see the fox in the back yard." "Count the number of people who walk past every hour and email me a spreadsheet." "Email me any updates made on the whiteboard." Watch It For Me is an AI device that can watch things for you. It's a camera you talk to. You press the…
"How long until it's done?" It's the question every software developer dreads. John Carmack famously responded with "when it's done." He knew the inherent complexity of software development. Software estimation is hard. It's not impossible though. Carmack walked back "when it's done." Scopes are flexible. There is data. We have shipped before and inferences can be made. Why measure? Knowing your…
So far Clojure is not the best choice of language when it comes to generating code using LLMs. This is probably because it is a niche language and so it is less well represented in the training set. LLMs frequently hallucinate functions that don't exist and other problems when writing Clojure code, and they seems to simply have more trouble writing good Clojure code. However there may be some…
We have a tendency to view things as fungible. That's a fancy way of saying "substitute one thing for another." It's how we make sense of the world. We say "that thing is like that other thing, let's compress them into a single category." Fungible is a term from the world of economics. When we look at a coin with one value on it and a different coin with the same value, we treat them as the same…
ClojureScript Tiny Slides is grug-brained presentation software. Write your slides in Reagent Hiccup. Static web app you can upload to any web host. Tiny hackable codebase. No setup or config, just clone the repo to start. It's built with Scittle so it is developed and runs 100% in the browser. Source code: https://github.com/chr15m/clojurescript-tiny-slides I made a video about it . Origin story…
Developers optimize for different things in different situations. Developers at big companies with big teams optimize for process and unit tests and scaling. I optimize for building web apps fast and getting them out into the world. One of the best ways to do this in the 2000s was with PHP. You could very quickly build a small web app and get it live on the internet. It would be good if we could…
tl;dr : you can play the new version in your browser here 👉️ https://asterogue.com This is just a quick note to let you know I re-released my sci-fi roguelike Asterogue for the web, so you can now play it in your browser. It works on phones and desktop browsers. The first few levels are free to play. Asterogue is a "juicy" graphical coffeebreak roguelike that is pretty much directly inspired by…
makesprite.com is a simple open-source online app I made for generating sprites for games. The first time you open the app it downloads a set of default prompts and sprite sheets. These are a useful starting point for generating your own. You can click the "Re-run prompt" button and the prompt that was used to generate that spritesheet will be loaded. You can also use the "Copy prompt" button if…
Claude AI has a mode where it can generate something called "artifacts". One of the things you can do with this is generate simple single page web applications. It generates the web app and then mounts it in an iframe so you can quickly test it and give feedback. This gives you a fast iterative process using the AI to refine the web app incrementally. This is pretty cool but I would much prefer a…
Last week I installed Xubuntu 22.04 on a Dell XPS 13 (9305). It was flawless. Everything just works out of the box. 🤯 This is completely amazing for me because I have been installing GNU/Linux on computers since some time in the 1990s when Pentium was a thing. I remember staying up all night tweaking xfree86 modeline configs just to try and get a terminal window to appear without looking squashed…
tl;dr: check out LuaVST on ChatGPT if you want to generate some VST plugins. I've been doing weekly beats this year and it has been a lot of eustress fun (my best song so far is "smectite canyon gambit" ). I found a nice positive feedback loop between composing electronic music and writing software for dopeloop.ai . Composing helps me figure out which features are important on the software side.…
On the last day of 2023 we hopped on a plane to London. We've been here two and a half months now. Michelle and I lived here in 2009 and we've come back again with kids. I guess you could call this a kind of digital nomadism, except we're doing it the wrong way around moving to a country with a higher cost of living. We've already had some wonderful experiences exploring the UK and Italy, and…
tl;dr: have some CSS animations to make your browser games juicy ! My favourite game engine is the browser. You get so many batteries included when you use the browser as your runtime. Sprites, animation, sound, mouse, keyboard, touch, gamepad, fonts, text handling, localization, concurrency, networking, 2d, 3d, and a weird XML based scene-graph called "The DOM". The list goes on. I'm not even…
Today I put together a small test repo to check how much space is saved when replacing React with Preact in a ClojureScript project. I used npm init shadowfront prtest to get a basic project up and running. This creates a simple one page Reagent app with a button you can click. (ns prtest.core (:require [reagent.core :as r] [reagent.dom :as rdom])) (defonce state (r/atom {})) (defn component-main…
Hello! Today I am very excited to announce a thing I've been tinkering with for the past month or so. You can find it at https://livereload.net . It's a simple online utility that enables live reloading web development for your local HTML/JS/CSS projects. It's easy to use and you don't have to install anything. Just drag your web project folder onto the window and your index page will show up.…
tl;dr: you can generate very small (less than 1k) JS artifacts from ClojureScript with some tradeoffs. I worked out a list of rules to follow and made the cljs-ultralight library to help with this. Most of the web apps I build are rich front-end UIs with a lot of interactivity. Quite often they are generating audio in real time and performing other complicated multimedia activites. This is where…
Hello! Just in time for 7DRL , Roguelike Browser Boilerplate is now open source . The boilerplate is a JavaScript based game template that takes care of all the annoying stuff like splash screen, start screen, credits screen, instructions screen, settings screen, menus, pixel styled UI, win/lose condition screens, sound effects, animations, etc. so you can get on with making the actual game. It's…
I predict Python will be the most used programming language among developers world wide by 2032. This post contains my reasoning. First take a look at this chart. ( Chart source . In the chart Javascript is #1 with 65%, HTML/CSS is #2 with 55%, SQL is #3 with 49%, Python is #4 with 48%.) It looks this way because of the web. The world has chosen web tech over everything else because it is fast and…
My first app of the year is out, hooray! \o/ It's a simple app to sync pocket operator devices. It outputs a sync signal from your phone which you can plug into your pocket operator's left input to drive it using a 2.5mm male-to-male stereo audio cable. It works well with the p0k3t0 Sync Splitter . You can get it for Android and iPhone: PO Sync for Android PO Sync for iPhone This was a fun app to…
2022 was a fun year for side projects. My indie apps made $2500 USD . I also hacked on a lot of open source code , doodled a fair few drawings, and started a new sci-fi lo-fi beats music project . \o/ Here's a spreadsheet of income from different software I made: All of the revenue came from projects that I barely worked on. The "Git days (2022)" column shows the number of days for each project on…
Mastodon is a real breeze to develop for. I was able to use nbb (Clojure scripting on Node.js) to post an image using the API in a few minutes. Here's how. Step 1: Create a new Mastodon app. Go to Preferences -> Development -> New Application , or visit /settings/applications/new on your Mastodon server. Step 2: Store the access token Once that is done copy the "Access token" and your server's…
It's been a while since I posted an update. So this is it! The tl;dr is I'm working on a sound effects generator micro-SaaS and I am nearly ready for launch. In February this year I was working on the iOS port of one of my music apps when I decided to pivot. Safari iOS bugs were taking a lot of time and really dragging me down. I decided to focus back on pure web based music applications. I love…
Dear YouTube, What the actual heck? Here I was, innocently demonstrating how to install Nextcloud on a Linux VPS server. I just want to help other people liberate their data. Nextcloud is super cool and powerful and I want to share the good news. My video got a bunch of views and people seemed to find it really useful. Hooray! Then suddenly, without warning, you can cancelled my completely…
Gather round friends for a true and epic tale of glorious Indie Hacking. How I built and launched a micro-SaaS product in 26 weeks. How I discovered the quiet joy of incremental progress . How I weathered a Hacker News ban and a barrage of sniping comments and landed the first paying customer, only to come undone at the last moment, defeat snatched from the jaws of victory. 26 weeks of work…
The other day I released Doodle CSS . It's a simple hand drawn HTML/CSS theme. You can use it make a web page look like a hand drawn mockup. Since then it has garnered an astonishing ~500 GitHub stars, blowing past all of my other open source project repos. It made it to the front page on Hacker News and friends tell me it got featured in multiple tech newsletters. It only took me a couple of days…
Hello reader! I'm excited to announce the release of the Doodle Rogue tileset. It's a free hand drawn tileset containing tiles and sprites that I used in my game Smallest Quest. I thought it would be fun to set the graphics free and see what other people do with them. Let me know if you make something using Doodle Rogue! Doodle Rogue Tileset by chr15m
Sitefox is a back-end web framework for ClojureScript. I built it because I wanted to use ClojureScript to build websites and apps instead of Python and Django. It's inspired by frameworks like Django, Rails, and Flask. The easiest way to try it is to use one of the npm create scripts. Use npm create sitefox-nbb for a simple website with no Java tooling dependencies. Use npm create…
After many days of debugging (and filling out a bajillion forms) Melody Generator is finally available as an iOS app! It's also available on the Google Play store . You can still use the web app without installing anything at dopeloop.ai/melody-generator . Enjoy!
It's a simple fact that most startup ideas are not going to work out. Just like most tweets never get a retweet, most GitHub projects have no users, and most Hacker News posts never get an upvote. That's the simple truth. If most ideas are no good the most efficient way to find good ideas is to discard the bad ones as quickly as possible. People talk about "validating" their business ideas by…
Bootstrapping a one-person software business is a long and winding road. I have the luxury of time and resources on this quest but I know others aren't so lucky. I'm interested in uncovering the secret sauce to launching businesses that work. I love open source and I want to open the sauce, pop! I have three developments to report. Two experiments and one free tool you might find useful. Here…
We're just over half way through 2021 so I thought I'd post an update about the projects I'm working on right now. tl;dr: music apps, a new game, and a micro-SaaS app . A few months back I was feeling frustrated. I had a bunch of projects on the boil and I kept switching between them. I'd switch to whatever was most exciting at any particular moment. I felt like I wasn't making any progress.…
Recently I hit a milestone. My procedural melody generator became the number one result for the Google search "melody generator". Even better, I beat out Google's own product "Chrome Music Lab". Ever since I set my sights upon the "melody generator" keywords I knew it would be an epic struggle. I knew that Google themselves held the top position. I knew that I would have to pull out all stops and…
The word "meme" was coined by Richard Dawkins in his book The Selfish Gene. A meme is an idea that replicates itself from mind-to-mind, just as a gene replicates itself through organisms. The word "meme" is itself a meme, and it is spreading from my mind to your mind through the medium of this post. We are in the midst of a pandemic caused by a real virus, and simultaneously, we are in the midst…
In 2020 I made $693 USD from side projects. I contributed to several open source projects and made about a thousand commits on GitHub. I shipped a commercial game, a SaaS product, an IDE, two music apps, a handful of open source utilities, and a couple of websites. I love building stuff! What I learned: Find demand before building something. Single-pay products are easier than SaaS. Build in…
I've been working on a free hand-doodled roguelike graphics tileset called Doodle Rogue. It's an alternative to the standard console and pixel roguelike graphics tilesets out there. I'm relatively new to drawing. It's taken a couple of years of drawing badly to get to the point where I am comfortable enough for a tileset. This post is to show you some betas of the tileset I'm working on, and also…
I've just released a melody generator that I've been working on for a while. It's a small web app that you can use to procedurally generate looping MIDI melodies and then use them in your own music. The fractalesque algorithm it uses to generate melodies is one I came up with when I was writing a lot of algorave music a decade ago. The MIDI melodies are rendered to sound using the wasm port of…