The last few posts have been heavy on the structural elements of what I’m doing and how I’m working to make LLMs work for me effectively without micromanagement, and seeing how far I can push things before that begins to come off the rails. This post is going to include a little bit of an update on the structural element, but it’s also a chance for me to show off a bit more…
Quality requires visibility. You cannot fix — or even trust — what you cannot see. That’s true in any project, but it becomes even more urgent when the team doing the work is a software factory and you’re not reading every line of code. When I’m not micro-managing the implementation, the thing I’m actually managing is my own insight : the gap between what the system was…
(Image credit: Hang Xu ) Three issues emerged that warranted some manual intervention this week. All three have prompted me to refine the process a bit more. After auditing the codebase for needless defensive guard code, neither Claude nor Codex managed to find any. The overhaul to how sources / destinations are specified silently broke the Fleeing mechanic for burning orcs. Low usage of Haiku and…
The original Hordes of Orcs games were pretty simple things. Everything was available straight away — every map, every tower, every upgrade, every spell. That’s not a bad thing, and I don’t regret it. But it does mean people burned through all of the content pretty quickly. For this game, I want the experience to last longer. That means two things: there needs to be a meta-game , and…
Three posts in, this series has been almost entirely about process — the factory, the sub-agents, the invisible work that keeps a codebase from strangling itself. Every one of them ended with some variation of “the game continues to come along nicely,” and asked you to take my word for it. This post is me finally showing my work. Here is roughly a minute of Hordes of Orcs 3 as it stood…
A lot of engineering is invisible work. Work that never surfaces to a manager, and that either doesn’t show up in a PR diff or isn’t explicitly explained for what it is. It’s often work that the engineer doesn’t consciously register as work at all. Because it doesn’t get talked about, very little of it ends up written down. Because very little of it ends up written…
A week ago I wrote about the software factory I’ve been running for Hordes of Orcs 3. Claude, Copilot, and Codex in their right lanes. Five layers stacked on top to keep the output coherent. I said I’d come back in 30 days. I’m coming back in seven, because the process has continued to evolve quite rapidly. This post will cover what’s changed in the process, and…
In 2007, the first – and hardest – hurdle to shipping my first game was getting orcs to spawn on one side of a board and pathfind around obstacles to the other side. That took me six weeks. Last month I started the project over from scratch — Unity 6.3 client, Rails 8.1 backend, almost none of the original code carried forward. I hit the pathfinding milestone on day six. And I had a…
Jon Frisby Email: jfrisby@mrjoy.com Cell: 408-898-7702 Location: Vancouver, WA Senior IC who builds things from zero, scales them, and does the hard work others avoid — security, cost optimization, data architecture. 25+ years across distributed systems, data warehousing, DevOps, and full-stack product. I have led architecture and shipped the keystone code at five companies — from…
My name is Jon Frisby. I’m a coder, and I’ve co-founded launch five startups, the most notably being Cloudability Inc . My happy place is making a big impact on the business whether I’m in a senior IC role, an executive role, or something in-between. GPG Key Fingerprint: 7DCB12A7 Keyserver: pool.sks-keyservers.net Name: Jon Frisby <jfrisby@mrjoy.com>
Annotate is a gem for annotating ActiveRecord models with schema information. It can be used with virtually any project using ActiveRecord, and can additionally hook into Rails to run every time rake db:migrate is executed. Changes Accepted Upstream Change formatting to allow wider output, avoiding cutting off output. Fix behavior for model sub-classes. Improve dependency handling. Implement…
Provides patch-level published-vulnerability verification for Bundler. Checks for vulnerable versions of gems in Gemfile.lock . Checks for insecure gem sources ( http:// ). Allows ignoring certain advisories that have been manually worked around. Prints advisory information. Does not require a network connection. Changes Accepted Upstream Add coverage analysis. Be clear in the README about allowed…
Based on When Orcs Attack , Epic Tower Defense was a 3D tower defense game aimed at the browser-based gaming market. In addition to everything When Orcs Attack offered, it was tailored to fit a 5MiB transfer size limit, and featured a much simplified tutorial. Epic Tower Defense was followed by Hordes of Orcs , a much refined version published by Freeverse and Hordes of Orcs 2 , also published by…
A Ruby implementation of an SSDP (UPnP) client. Originally forked from playful , this gem reduces the scope to just being an SSDP client , reducing dependencies considerably and making it easier to declare this stable and ready to use.
Launched on 2008-04-15, Harmonic Convergence was MrJoy’s second franchise. Inspired by Lumines , it featured 10 unique skins each featuring lush visuals and a distinctive soundtrack that responded to how you played the game. We actually developed 16 skins for it with over an hour of music in total, but 6 were cut for the final release. Requirements Mac Windows CPU 1.0 Ghz 1.0 Ghz RAM 512 MiB…
Based on When Orcs Attack , Hordes of Orcs was a 3D tower defense game aimed at the Windows and Mac download market. On top of everything When Orcs Attack offered, it featured a polished user interface, improved graphics, the “Gem Drop” game mode – a CTF variant in which gems fall from the sky to random board positions, and an orc needed only to carry a single one across the…
Building on the success of Hordes of Orcs , Hordes of Orcs 2 was a 3D tower defense game aimed at the Windows and Mac download market and launched on the then-new Mac App Store. On top of everything Hordes of Orcs offered, it featured a completely new user interface, major graphical improvements, the new “Railgun” tower, the new “Skeleton” enemy type, new game modes and new…
Extensions to the Lita chat-ops server to make adding custom functionality easier. Lita::Ext adds a number of extensions to Lita to make it more Rails like. It adds the concept of multiple environments, Rails like initializers, and provides structure for your Lita handlers. My Fork Migrate from Lita 4.2 to 4.3+, including removing duplicative / conflicting functionality.
Octopress is a Jekyll -based blogging system aimed at the particular needs of programmers. Changes Accepted Upstream Please note that most of these were on the now-abandoned 2.1 / 2.5 branches! Fix a few items turned up by Rubocop. Add Rubocop and a whitespace cleaner. Enhance test suite to be more robust and less verbose. Add coverage analysis. Plugin installer fails when a plugin doesn’t…
Generative event lighting in Ruby with Philips Hue and Novation LaunchPad. This began its life as a system I used to make a nifty lighting system for my wedding reception. It’s designed to use multiple Philips Hue Bridges, with about 6-7 lights per bridge in the main “simulation”, and physically arranged in a line – with a handful of other bulbs for the dance floor, and…
SSSS is a slightly tweaked version of B. Poettering’s implementation of Shamir’s Secret Sharing . SSS is a mechanism by which N people may each have a piece of of information, such that when any M people come together the pieces can be used to reproduce a secret – but if only M-1 pieces are brought together, you have zero bits of the secret. My fork brings more consistent use of…
A gem for accessing various MIDI controllers, including the Novation Launchpad, and Numark Orbit programmatically and easily. This was originally forked from launchpad but has diverged considerably, including a change of purpose: Abandon support for Novation Launchpad Mk 1. Add support for Novation Launchpad Mk 2. Add support for Numark Orbit. Improve allocation efficiency to reduce pressure on…
UnityColorBlindness is a set of tools to let developers play their game as it would be seen by an individual with atypical color vision (“color blindness”). It can simulate all the major forms of color blindness, and even applies to UnityGUI interfaces, which are not normally subject to image effects. A Pro license of Unity is required.
UnityGUIExtensions is a set of UnityGUI widgets. It provides extended widgets for both game-mode and editor-mode: Game Mode Auto-Select Text Widget. This is a text field widget that auto-selects existing contents when it receives focus. Various helpers that provide GUIStyle instances with specific properties set, such as fixed-sized (w/ or w/out stretching), clipped, etc. Editor Mode An…
UnityREPL is a “Read, Eval, Print, Loop” tool for Unity3D , based on Miguel’s CSharpRepl . In short, it gives you a window that lets you type in and execute C# code on the fly. Grab the .unitypackage here , or see the readme in the source repo for instructions on installing it via git. Using It As a Calculator UnityREPL can be used as an ad-hoc calculator – with variables!…
UnitySVG is a library for reading SVG files and producing Texture2D objects from them at runtime. The intent is to allow some of one’s art assets to be reduced considerably in terms of the net time needed before the user can begin playing the game. Compatibility A very limited subset of SVG is supported, specifically excluding: Animation Text Fonts ICC color profiles Bindings Compound…
UnityTest is an xUnit-style unit-testing framework for Unity3D. See the blog post about it for more details. Grab the .unitypackage here , or see the readme in the source repo for instructions on installing it via git. Screenshots of the testrunner UI as seen in the editor:
A fast-paced 3D tower defense game aimed at the Mac and Windows download market, and published by MrJoy Inc. When Orcs Attack brought several RTS mechanics to a more casual audience including pathfinding and spellcasting. It offered a variety of interesting game modes, including the more traditional – such as open maze, fixed maze, and capture-the-flag – and more novel ones –…