Filter:  
Apache  
C  
C#  
C++  
CGI  
Linux  
Node  
ObjC  
Python  
React  
Unity  
Unreal  
iOS  
jQuery  

Andrew Plotkin: Portfolio

Contact

Filter:  
Apache  
C  
C#  
C++  
CGI  
Linux  
Node  
ObjC  
Python  
React  
Unity  
Unreal  
iOS  
jQuery  

Technology: Python


Seltani

Multiplayer text world (2013)

A screenshot of a window. The main pane has a text description of the shore of an underground lake. The side column shows a list of locations, with "Seltani District" at the top.

I designed and built experimental multiplayer hypertext user-extendable environment. Imagine a hybrid between an Twine and an old-school text MUD.

The front end is jQuery; the back end is Python and MongoDB; they’re connected by a websocket. Players can build new content using a wiki-style text editor and Python as the game scripting language.

To make this work, I had to implement a safe subset of Python in Python. This was surprisingly easy. On the down side, since this is a 2013 project, it’s Python 3.4. The prototype works great but it would need a lot of reworking to scale beyond a few dozen users.


IFTF

Launching and supporting an IF nonprofit (2016-2024)

The IFTF logo, an abstract arrangement of circles joined by lines.

In 2016 we brought several interactive fiction services together under the legal umbrella of the "Interactive Fiction Technology Foundation", a 501(c)(3) educational nonprofit.. This let us combine hosting resources and legal backing — and of course gave people a way to donate money to support IF.

I was a founding board member and the organization's first treasurer. More importantly for this portfolio, I wound up in the role of tech lead for the organization. I set up servers, managed our DNS records, and acted as admin for our AWS, Slack, and similar tech accounts.

I was by no means the only admin for IFTF. Each one of our services — the forum, the wiki, and so on — had its own admin. Mostly they managed things on their own. I was the coordinator and backstop "I don't know how to do this, can you help?" person.

As the organization grew, it outgrew various long-standing hacks. I had to research and set up scalable solutions. (Open-source and self-hosted, where possible.) Email was the first of these; I oversaw the transition to an organization-wide Fastmail setup. I also replaced Mailchimp with a self-hosted solution and set up an org-wide password vault.

After eight years, I managed myself out of that role by heading up the search for a replacement tech lead. (And treasurer as well.) I trained up my replacements and stepped down at the end of 2024.

(I was also the long-time admin of the IF Archive; I am still wearing that hat. But I'll list that role separately here.)


IF Archive

File repository web service (1999-present)

PythonCGILinux
A screenshot of a browser window showing the top-level directories of the IF Archive.

The IF Archive is an open-access, fan-supported repository of interactive fiction history, games, and tools. It's been running since 1992. (Before the Web! It was originally an FTP site.) I created an HTTP mirror in 1999, and then took over as primary maintainer in 2001.

The Archive is part of IFTF, but my work for IFTF is a separate role (with different dates!) so I'm listing them separately.

The Archive was originally a purely static web site. I built a script to generate HTML index page for every directory. Over the years, we brought on more volunteers to help organize files. In 2023 I built a web-accessible file admin interface. This allowed volunteers to move files around and edit metadata without needing root access to the server.

(The admin interface is for Archive staff only. You can try it out in test mode by building this Docker container.)

I've also added features such as search, an XML index, and so on. But the most important feature is keeping the service alive and stable over decades of use.


Bloggor

Static site blog generator (2024)

I created a static site generator tool for my blog and imported my long-running blog into it. I used to use Google’s Blogger.com service, but Google likes to cancel services and I didn’t want to be caught short. Static site generators are the way to go, but existing solutions are either heavyweight or so thin that you might as well do it yourself. I did it myself. I also built a photo repository in a similar style.

The hard part was not building the site generator, but exporting fifteen years of posts and images from Blogger.com and massaging them into a good format for my site generator. Google has a data-export service (full credit there) but a surprising number of details had changed over the years, so I had to handle several different HTML and uploaded-image idioms.