Welcome! You will find here a growing collection of digital experiences and content by Max Irwin. All code on this site is lovingly handcrafted by yours truly. If you like what you see here and would like to get in touch, you can contact me on twitter @binarymax.

This site is a portfolio of all my fun hobby stuff. To learn more about my professional skills, please visit my profile on LinkedIn.

PROJECTS

Kriegspiel

A web-playable version of the classic chess variant. Like chess, in order to play, you need two players for a game. In-depth rules and guide are available on the site. The entire game was built as a side project over 4 months time, and is fully open source under the MIT License.

Shape Experiment

A single player shape identification game for mobile devices (and also browsers). An exercise in interface and minimalism and intuition, to be quickly understandable and playable by anyone. The game was written in a single day, and tens of thousands of shapes have been identified since release.

Bashfill

A tool to draw 7-color 80x20 artworks that can be exported as a bash script to display in a *nix terminal. Useful for creating graphics that identify servers upon connection, or just for fun. Images can be shared as easily as links. Here is the image in the thumbnail which I quickly drew for this card.

Auto Jewels

A fully working jewel game set to zero players, and plays itself with a simple AI. An exercise in a case study game application as a "Todo list" of example projects. See both small jewel and big jewel versions.

Palette Extractor

jsCube

An experiment in data cube structures in javascript, used to efficiently calculate aggregate results of an arbitrary dataset of several dimensions. Two structures are shown, each one having pros and cons, depending on use case.

Reality Remix

A video remix experiment, with a resulting video run through a custom filter coded in C#. The filter splits a video into frames, remixes the frame using a bitwise Sierpinski carpet algorithm, and stiches the frames back together.

Square Chase

My javascript entry into the first JS1k competition, with a concept based on a video game I wrote in Pascal in 1995. The demo consists of 4 squares of different colors that leave trails as they flee from the observer's mouse. Clicking a square increments the score by one and the square respawns. The demo is 1024 bytes of hand-golfed javascript.

Tree Generator

An interactive art project that creates a genetic tree starting from a single seed of observer-defined parameters. The observer can specify trunk size, branch count, leaf size, growth rate, and other parameters. Each generated tree is unique. The piece was displayed as an installation at a show, and participants ordered their printed trees on A3 paper. The resulting image is SVG and can be printed to keep pure vector resolution.

Randriaan

My Entry into the 2013 Victory Boogie Woogie code competition. Artists were asked to recreate the last work of Piet Mondriaan in Utrect Netherlands. The piece uses a genetic algorithm to slowly recreate the box-like work with circles, lines, or squares. The longer the algorithm runs, the greater the likeness. The resulting image is SVG and can be printed to keep pure vector resolution.

RayTrace

tRand

An experiment which used the Twitter stream API as entropy for randomness to generate a brownian motion image. The resulting images are beautiful and discerning clumps of information. The applicaton no longer works, due to restrictions Twitter placed on its public API, but a screenshot and the code remains for archival purposes.

ARTICLES

A year ago, I created a small demo of animating guilloches as two dimensional graphics on an HTML5 canvas. In this post I revisit the beautiful and elegant patterns as 3d constructs that resonate with sounds from the physical world. read more

This article outlines the process for porting Andrew Trask’s (aka IAmTrask) 11-line neural network from Numpy (Python) to Torch (Lua). I’ve documented my progress here, for those who are interested in learning about Torch and Numpy and their differences. As I started from scratch I hope this can prove useful to others who get stuck or need guidance. read more

Having recently read a blog post on guilloches, I became intrigued and the post inspired me to recreate them. They are beautiful patterns, and the starting formula to draw a rosette looked very simple to replicate in an HTML5 canvas. The 30 minute project quickly took off into a several hour excursion into the beauty of animated guilloches. read more

The mechanisms for storing data in the client are inadequate and unprepared for the next generation of web applications. A new solution for persistent state management in the client is needed that is based on well understood foundations long prevalent on the desktop and server. read more

After some hammock driven development, Harissa is mature enough to release some results. Originally intended for entire videos, I found the process better suited for only several frame remixes, usually of an identical source image. read more

I am slowly working on a side-project that makes a video into a mishmash of circles for each frame. I have an early version running, that manually takes a video, splits it into frames, remixes each frame into the circle mishmash, and recomposes the video with the new remixed frames. The project is called 'Harissa'. read more

Artificial Expression(AE) draws a parallel to Artificial Intelligence(AI), in that an artificially expressive program will display sentience relating to creating original subjective aesthetics. I explore the ideas behind these complexities, as well as techniques in use today to generate art, and set a standard to use in deciding whether a work is an artificial expression. read more

I'm not entirely sure why I never open sourced it in the first place. After 25 years of coding I've only recently become active in opening my code for others to see and use. I have a cathartic story to tell about a previous project, which I've never told anyone about, and silently open sourced this past winter. read more

'What is art' has been debated ad infinitum, and some like to draw the line and say something is not art if it cannot be expressed - as art is, by definition, expression. My argument is that one not even need express the idea outwards with our own voice, hands, or otherwise. The idea can exist purely in one's own mind and still be a work of art. It is expression to oneself, therefore it is art. read more

REPOS

A good deal of my work is available as Open Source on Github. Much of it is available under MIT license. If you have any questions regarding any package or repository, or would like to contribute, please get in touch! A curated selection of some of my projects on github are summarized in the other cards in this section.

Heimdall is a type-safe, documentation oriented, and security minded API library for Express. The goal of Heimdall is to provide an easy way to create reflective and secure REST resources, to enforce documentation standards, to separate req/res from the MVC pattern, and to ensure all incoming and outgoing data is registered, validated, documented, and tested.

Playground and benchmarks for hand-coded 2d graphics in asm.js. Written to test the feasibility of outsourcing entire graphics jobs to a pixel manipulating engine, by rewriting fundamental canvas API methods such as arc and line. The short answer: faster than canvas in FireFox, slower in Chrome (as of November 2014).