Blog

My Favorite Failed Game Projects

From a young age, I was exposed to Sierra and LucasArts adventure games, and became completely enamored with Quest for Glory and Space Quest. I’d spend hours exploring every nook and cranny, finding many ways to die along the way.

At some point, I learned about a nifty little tool called Adventure Game Studio, which provided everything a person needs to develop retro-style adventure games. You could map sprites and animations to characters, make people walk around and say things in dramatic sequences, and even build a custom point and click interface from scratch.

Here’s a peanut gallery of some of my failed personal projects. This is not a comprehensive list! There are a number of games that don’t have any assets on the web anymore. I’m actively scouring the web for them, but haven’t had much luck. Keep in mind, the art assets in each of these are pretty unpolished, because game development for me was more of a sandbox where I learned to improve my skills along the way.

Space Quest 3 VGA

Somewhere into my early years of using the tool, I decided to try and collaborate with a bunch of volunteers to develop a VGA remake of Space Quest 3. Because when you’re 15 years old and want to start up a game development team, fan games seem like a great way to bootstrap.

Space Quest 3: The Pirates of Pestulon VGA Remake

The remarkable thing about this is that our development efforts were organized entirely on a forum, and we had no easy way of managing code or assets. It was basically a long process of attaching things to a forum message, pinging the right person who needed it, and uploading archived builds of the game for people to test out.

Eventually, that project petered out, and the upload services for assets all went dead. As a favor, a copy of one of these early builds was held by Steve from Infamous Adventures. Although it’s not the final product of what we released, it does give some insight into the implementation and general art direction.

No One Likes You

No One Likes You (or NOLY for short) was an edgelord comedy game that I developed during my years lurking on the Linsux forums. At the time, I was going through a major breakup with someone, and developing a game served as a welcome distraction.

The premise of NOLY is relatively simple: you’re an emo kid named Peter, you have ultraconservative religious parents that aren’t happy with how you’re living your life, you’re failing at school, and you’re not particularly popular. It’s your last two weeks of the semester, how do you turn everything around?

In a way, the game was meant to be a response to Willy Beamish, replacing the hip kid in a wholesome 90’s family with a depressed kid in a dysfunctional 2000’s one. Same as Space Quest, I constantly uploaded new builds to a forum for people to play with. I actually got pretty far with developing this one, but a hard drive crash led to me losing all of the game data and art assets.

Sojurn: City of Meteors

Sojurn remains a game that I wish I could go back to and finish. Realistically, very little code ever got committed for the project, but I spent a lot of time with plot development and world-building. It served as a love letter to games like Space Quest, but was intended to take a much more serious tone…generally…

Yeah, that’s right. His mohawk spikes go outside of his helmet. His hairgel freezes to plug the holes in his helmet.

The basic premise of Sojurn is that humanity is finally living in space, Star Trek-style…but, economic and environmental problems have effectively caused the Earth to become a toxic wasteland. Human beings have yet to wander out of its own solar system, as technology never advanced enough for interstellar travel. This new society relies largely on mining and barter, struggling to keep the lights on and life-support systems running.

Sprite sheet and character tests.

You play a young man named Billy, a grumpy punk who works for a waste management company. Your mission is to go from station to station picking up trash and toxic waste, fighting sewer mutants and uncovering a huge conspiracy along the way.


Why am I sharing these failed projects with you? Well, truth be told, I still love them for what they were. Game development was a great hobby in my teenage years, and my hope is that one day I might be able to revisit these different projects and maybe re-make them.

The biggest take-away, of course: BACK UP YOUR FILES.

Free Software Audio Production, Part 1: Setting up JACK

A few months ago, I became very curious about audio production. The idea of writing, recording, mixing, and distributing my own original music has long been an enticing fantasy. But most of all, I wanted to know: is it possible to use only Free Software to produce good music?

The short answer is, ultimately: yes, you absolutely can! It’s entirely possible to use a Linux distribution as a daily driver, and leverage a workflow that only contains Free Software applications.

The longer answer is, again, yes. But there are some fundamental quirks to consider, and you’ll need to expand your knowledge a lot in order to get a usable workflow. I’d love to talk about my own setup, what tools I use, and what things I had to do to get the whole stack working.

Today, we’re going to focus on the basics: getting JACK audio set up with a desktop GNU/Linux distribution.

Linux Distribution

There are a couple of Linux distributions available today that focus specifically on audio production, such as Ubuntu Studio or the more contemporary KXStudio. That being said, you can pretty much use any general Linux distribution you please.

In my case, I ended up sticking with elementaryOS, which is a great generalist distro that focuses on visual design and usability.

Low-Latency Kernel

One important tweak that I made was that I installed the lowlatency Linux kernel, which is a must if you’re working with real-time audio applications. Most deb-based distributions have a package for this, which makes installation easy:

sudo apt-get install linux-lowlatency

After installation, you can load that kernel specifically by rebooting and choosing your kernel options in GRUB. You should boot to this kernel whenever you intend to work on audio production.

Understanding JACK

The sound system situation in Linux has historically been a mess in one way or another. Despite the existence of backends such as PulseAudio, or perhaps because of it, users can find it challenging to get different audio applications to play nice with each other.

For example, you might be using ALSA to play an audio track in a music sequencer, while simultaneously using a PortAudio application to record microphone input. If you’re trying to use real-time microphone monitoring, this can confuse applications such as Audacity!

One great way to work around this is to use JACK, which is specifically geared for audio production work. The project describes itself as infrastructure for audio applications to communicate with each other and audio hardware.

Have you ever wanted to take the audio output of one piece of software and send it to another? How about taking the output of that same program and send it to two others, then record the result in the first program? Or maybe you’re a programmer who writes real-time audio and music applications and who is looking for a cross-platform API that enables not only device sharing but also inter-application audio routing, and is incredibly easy to learn and use? If so, JACK may be what you’ve been looking for.

It’s a bit of a beast to work with, and can initially seem intimidating to newcomers, but JACK is extremely versatile and makes up for a lot of shortcomings one might feel when trying to use ALSA or PulseAudio.

There’s a few steps to setting JACK set up, so let’s run through them.

Step 1 – Install JACK

JACK is pretty widely packaged across Linux distributions, so you should be able to easily obtain it from your distribution’s package manager.

In a deb-based system, you’ll likely want to run:

sudo apt-get install jack-tools qjackctl

Step 2 – Add Real-Time Permissions

This part is a little more hairy, but we only have to address it once. Basically, we need to make sure that the system gives the JACK daemon permissions for real-time capabilities. The official JACK site has a really great guide that makes this process pretty cut-and-dry. Here’s what I did specifically:

Create a file at /etc/security/limits.d/99-realtime.conf

Give the file these contents:

@realtime   -  rtprio     99
@realtime   -  memlock    unlimited

Then create a realtime group:

groupadd realtime
usermod -a -G realtime yourUserID

Where yourUserID is whatever your system user id is.

After that, just log out and log back in!

Step 3 – Use QJackCtl

The easiest way to use the JACK system is to use a frontend – otherwise, you’re going to have to do everything in the terminal. qjackctl is a great app that makes this process mostly transparent.

The UI for QJackCtl, an interface for handling JACK audio
qjackctl, a qt-based frontend for handling the JACK system

All you need to do is click Start, and the daemon will begin. During this time, it may block audio coming from other backends, such as YouTube videos playing in Firefox. I’m not sure whether this is a bug or intended behavior, so as a rule I simply turn JACK on when I need to work with an audio application specifically, and turn it off when I need to use other programs.

Moving forward, I’ll dig into what audio apps I’m using specifically, and some lessons learned in getting them to play nice with JACK.

The Long Road Back to Work

“How in the hell could a man enjoy being awakened at 8:30 a.m. by an alarm clock, leap out of bed, dress, force-feed, shit, piss, brush teeth and hair, and fight traffic to get to a place where essentially you made lots of money for somebody else and were asked to be grateful for the opportunity to do so?” – Charles Bukowski

It’s been three months since I was let go by my last employer. To me, it was a grim situation – it’s all too easy to define ourselves by our work, and what we bring to the table. Feeling a breakdown in understanding, a dismissive reception towards the things I was struggling through, and a massive amount of burnout, I felt a bitter sense of acceptance in taking the severance check and signing a corporate agreement to sever ties.

I had tried everything to make it work. I sat in on difficult meetings and broached uncomfortable subjects in the hopes of improving my situation. I signed papers, followed Performance Improvement Plans, and simultaneously trained and interviewed my replacements while also developing an on-boarding program for corporate clients. I held meetings, booked business expansions, shared systems of elaborate knowledge, and sat in on early-morning security review calls with prospective buyers. I answered every beck and call, and somehow the pressure only ever increased in intensity.

None of it was enough. I felt like a failure.

I’ve been taking a slow pace for the sake of recovery because I’m burned out. It’s a frustrating process: I’m not used to resting for extended periods, and sitting around doing nothing feels unpleasant after a while. It’s becoming increasingly apparent that I need to get back out there. Day by day, a little more money slips between my fingers, and I grow increasingly concerned about how I’m going to make ends meet.

I’m left to reflect on what I actually want to do professionally, and I begrudgingly accept that the only way out, in the short term, is to get back on that proverbial treadmill. Only…it can feel all too tempting sometimes to only search for that elusive, magical job that’s going to fulfill you.

“Fulfillment?!” my dad asked incredulously during a birthday phone call, “it’s a job, for Christ’s sake. I worked at a factory and a slaughterhouse to put food on the table for you kids. What is it with millennials whining about work?”

He sort of has a point. While I’d love to find something precious and incredible, like a Mozilla or Wikipedia job, the truth is that the Ciscos and the Salesforces and the financial startups of the world are the ones who are interested right now.

I just need to get back on that horse.

The Story So Far

For some time now, I’ve wanted to publish something, but have felt at a great loss to express the things I want to say. Often I would feel ambivalent about the subject, what voice to use, or the scope of the addressee(s).

After a long period of dragging my feet, I’ve decided that I will try to write, every day,  in a format more like a diary than a thinkpiece platform. The goal is to ultimately provide something honest, open, and intimate, where I can express a myriad of interests at length and let it clutter the pages in a minimally-edited form.

Who am I? What do I love? What are my successes and my struggles?

Who is this guy?

I’m a space cadet, 29 years old, living in San Francisco. I have a life-long obsession with computers, and have been using one since I was three years old. By the time I was six, I was assembling my own tower.

Me, enamored with Command and Conquer: Red Alert

In my early adolescence, I fell in love with the idea that something other than Windows or macOS existed, and began researching alternative operating systems. Discovering Linux felt like a revelation to me at the time, and I proceeded to use it as a daily driver for nearly 15 years afterwards. It was a lot of fun to experiment with, and I dove into many different kinds of OSes, ranging from traditional Unix to funky microkernel systems.

The field of Computer Science in general is something that I could talk about for hours. I hope to publish an abridged history of it some day.

My exposure to Free Software (and later, Free Culture) opened me up to the idea of making things and giving them away for free, and this is a value I hold for all of my creative output, whether it’s art, code, or media. This applies to music just as much as it applies to videos or games. If I make something, I want to give it to the world.

Professional Experience

I’ve been living in San Francisco for nearly three years, and hail from the Midwest. Five years prior to moving, I worked full-time over the Internet from my home in Peoria, Illinois.

The majority of my professional experience could be described as problem-solving for grumpy customers. This particular role is more than it seems at first glance – it involves developing an intimate technical understanding of a given system’s capabilities, and developing emotional opinions on how certain parts of it work (or in many cases, don’t). In this job, I took video calls, answered technical questions, interacted with product designers and engineers, and project managed technical fixes.

Also, this.

The tech industry generally refers to what I do as “Customer Success”, although the vision for what that means is highly tied to financial outcomes, leading to lots of customer metric-tracking, quarterly business reviews, and endless digging through online filing cabinets such as Salesforce.

After years of enduring this, I’m less than enthusiastic about the business side of the role. The part of the role I like – helping customers, building knowledge, training people, solving technical problems, and working cross-functionally – are all things that I can take to any job, because they’re part of who I am. Letting those get dwarfed by paywalls, upsells, and transactions feels pretty soul-crushing.

I’m not going to lie. I’m actually severely burned out. At some point, it becomes very easy to feel cynical about where things are going,and how things are run. For a while, you can stave off those feelings with blind optimism and hard work, but eventually, you’ll be crushed under the wheel.

It can feel as though your entire consciousness is dedicated to nothing but work, and there’s often a misalignment between the things you think are important, and what the company tells you is important instead. Things slip through the cracks, and it’s all too easy to become encumbered by performance reviews and awful conversations with inexperienced managers who are just trying to climb the ladder and look good.

I was let go about two months ago, and I can’t say that I didn’t see it coming. I’m living off what I could afford to save, which will be gone by the time I get back on my feet. For now, I’m healing.

The Price of Freedom — A Review of the Librem 15 v3

Edit: Thanks so much for your feedback! An earlier version of this article missed a few key points — check out the FAQ on the bottom of the review.

Purism is a wild startup located in South San Francisco. Their mission? Providing a superior hardware experience for people who love privacy and software freedom. Purism is building and shipping GNU/Linux laptops, and is interested in developing a phone as well.

The Purism campaign originally launched on CrowdSupply late 2014. Since then, the company has shipped two revisions, and now offers three different models to choose from: an 11-inch convertible tablet, a 13-inch laptop, and a 15-inch powerhouse.

For a few years, I have strongly desired having a quality Linux laptop that has great hardware. So, I’ve taken the plunge on getting the latest 15-inch Librem model from Purism.

Buying Experience

Purism is a much newer brand compared to other, more established computer companies. So far, this company has largely dealt with a crowdfunding purchase model — in short, you donate X amount to the campaign, and receive physical hardware as a contribution reward.

Generally, this model of fulfillment takes a lot longer than more traditional on-demand methods of manufacturing a product and shipping it.

Purism seems to have outgrown this way of doing things, and now takes orders directly from their site. I placed my order on June 28th, with an estimated delivery in July 2017.

Because I was traveling in the middle of July, I reached out to their support team for when I might expect the order. An agent got back to me in less than 24 hours, and cheerfully informed me that the team would bump up my order in the queue.

Sure enough, my laptop arrived ahead of schedule.

Hardware

My first impression of the hardware was pretty positive. The v3 ships with an anodized black finish, and the frame feels sleek and solid. The only downside here is the color — it immediately attracts smudges.

Purism branding is completely nondescript — there’s no logo of half-eaten fruit on the lid. Only a humble brand sits on the bottom of the device. I’m vaguely reminded of Soylent.

Smudges aside, Purism has really done their homework on hardware. Everything works out-of-the-box, and with a few minor adjustments I found myself getting comfortable.

Coming from a world of Macbooks, I was initially disappointed with the trackpad, which felt less smooth and much slower. Gnome applications don’t all deal with multitouch in the same fashion yet, either. The good news is that the trackpad’s responsiveness can be managed by adjusting the cursor speed.

Power management in laptops has long been an achilles heel for many GNU/Linux distributions out there. Many laptops offer motherboard configurations and hardware combinations that are under-documented, which can lead to issues with suspend and waking from sleep.

Happily, Librem wakes from sleep with no issues to speak of. Wireless drivers pick up right where they left off, and the whole system feels smooth and responsive.

The device ships with a 3.1GHz Intel Core i7 CPU. This is from the Skylake family of Intel processors, and it works favorably well. By default, this laptop comes with 4GB of DDR4 Memory and a 120 GB SSD. For the purposes of my convenience, I upgraded to a 250GB SSD and 8GB of DDR4 for $138 extra, bringing my overall cost to $1,737.

The Atheros wireless hardware is well-documented to work with Linux-based systems, and performance of the Intel HD Graphics 520 is perfectly comparable to a mid-range 2017 Macbook Pro. That’s important, because those graphics have to support a 1920 x 1080 matte display @ 60Hz, and the picture looks all the better for it.

Bluetooth does not currently work without installing proprietary firmware, but the hardware does indeed ship with a bluetooth module. Purism is currently trying to hire a developer to write a libre driver for it.

In the third revision of the 15-inch, the number of kill switches has been reduced to just two, and they have been moved from the side of the computer to the hinge of the monitor. The kill switches can disable wireless, bluetooth, the microphone, and video all on the hardware level.

The web cam and microphone work well, and the video quality is comparable to a high-end Macbook. In good lighting, images look vibrant, and the picture remains sharp with a decent framerate. Video calls should for the most part be smooth, though that still depends on what app you’re using as well as your internet connection.

Additionally, if you’re coming from a 13″ Macbook, the keyboard will feel strange to you for about two days. I had to retrain my fingers to account for a change in key spacing and hotkey combinations.

Software

PureOS running stock Gnome. Theme customizations set by me.

Purism’s laptops ship with PureOS by default, which includes a stock Gnome 3.22. PureOS is based on Debian, and generally seems to work with Debian/Ubuntu packages. For proprietary debs (Slack, Steam, Skype, etc) you may have to do a little detective work to determine their dependencies to get them to run properly.

By default, the system runs on Wayland, the new display successor to Xorg, and you’ll barely notice. Overall, the new display server works perfectly well with Intel graphics, and the Mutter compositor in Gnome runs quite smoothly. A basic glxgears demo can pull somewhere between 66 to 76 FPS — part of this is because Wayland has excellent support for running classical Xorg applications in a wrapper (XWayland).

This works nicely as a glue layer for apps that have not natively implemented Wayland support yet themselves, but XWayland’s support for drawing tablets is only available in upstream Gnome. As a consequence, I’ll have to run a Xorg session any time I want to get some digital painting done.

On a similar note, Coreboot is present, but practically invisible in terms of system operation. It’s definitely on the Librem, but the boot process is quick and Coreboot mostly stays out of the way. Thanks to the use of open source graphics, the boot system is visually smooth and animated.

One nice surprise is that PureOS was able to play all of my backed-up music from iTunes, making this transition a million times easier than expected.

Web Experience

Most people would generally agree that desktops and laptops are increasingly using web applications in lieu of native desktop apps. If an OS is capable of providing a solid experience for web, the computer can meet most basic user needs, from social networking to processing tax returns. We can already see minimal examples of this taking hold in the market — take ChromeOS, for one.

How does pureOS stack up?

I ended up choosing Gnome Web as my default browser because it integrates directly into Gnome. Despite a few minor quibbles (why can’t tabs be pinned?), the WebKit support it ships with is very, very good. Multimedia plugins work out of the box (just install the GStreamer plugins), HTML5 media elements are incredibly smooth, and web applications all render correctly without any major issues…except for one.

When I initially tried to write this review, I found that Medium.com prevented me from creating or editing any stories. This is because Gnome Web, my browser of choice, is not officially supported. A quick application of a spoofed user-agent string completely fixes the issue, however.

Overall, the web experience works well. The Librem’s display lends itself to a high resolution, with fonts rendering smoothly and HTML5 sites working out-of-the-box.

One novel feature of Gnome Web is that it is possible to turn websites into web applications for the desktop. This is accomplished with a minimal wrapper, similar in fashion to Electron. This works particularly well for apps that don’t have Linux versions. Above is the team inbox Front, and it looks practically native.

Wrap-Up:

Overall, my experience with Librem has been highly positive, and I’m glad to switch away from a Macbook Pro for it. Though this is a system that will require some configuration to fit a person’s liking, it’s essentially a “set and forget it” affair.

Is it worth it?

For some people, this all may seem like some masochistic pursuit of technological asceticism. If you don’t have a reason to switch to a Linux-based system and don’t particularly care about proprietary drivers on your computer, this product probably isn’t for you.

Some people may balk at the price of Purism’s products, but I’m convinced that this was the right purchase for me. The dependent factor here involves two things: how experienced you are with using GNU/Linux, and whether you care about Free Software or privacy in computing.

In a way, this product is something of a philosophical statement for people who are interested in both. If you’re comfortable in a *nix environment, want to use a Free Software OS full-time, and prefer a premium build quality, this is a great laptop.


FAQ

A number of people wrote in with additional questions that were not covered by this review. I wanted to take a moment to clear up any ambiguous details that people wanted to know about.

Q: What’s the deal with the BIOS? Is it running Coreboot? Is it 100% free?

Librem v15 rev3 ships with Coreboot, and the experience is rather nondescript. Apparently, using the application me_cleaner makes it possible to get about 98% of the binary blobs free, though that means there is more work to be done.

Purism intends to get Coreboot support on all of their devices, and are working on improving me_cleaners capabilities to remove more of those blobs. At some point, it may be entirely possible Purism products will even support Libreboot by meeting the Respects Your Freedom certification requirements.

Q: How quick does a cold boot (power off, not sleeping) take?

The entire system can boot to desktop in under 10 seconds.

Q: How are the shortcut keys?

Overall, key placement and spacing is good, but Purism has made a few unusual design decisions with hotkeys. Volume has been superimposed on the up/down arrow keys, and there aren’t any dedicated keys for media controls. This can be fixed with a basic key remap, but it is initially puzzling.

Q: Is the whole body aluminum as the macbooks or does it have a plastic frame?

The entire body seems to be anodized aluminum. The only exception is the hinge, which is plastic and not noticeable.

Q: What’s the experience like on disassembly?

Although I haven’t dived into this too far yet, the laptop is designed to be 100% serviceable, meaning that you can take it apart completely and swap out components to your liking. The screws aren’t proprietary, nothing is sectioned off, and you can play with the guts of the machine all you’d like.

This guy’s video on the Librem 15 v2 is super informative on the subject: https://www.youtube.com/watch?v=thjkyGIMlyc&t=19s

Q: What does the warranty look like?

By default, the Librem ships with a 1 year warranty (you can upgrade to a 3-year during checkout). I haven’t needed to use it yet, but if anything comes up, I’ll update my answer to this question.

Q: Where is Purism at in dealing with the Intel Management Engine?

It is now possible to neutralize Intel ME, and the Purism team is doing some extra QA on it to ensure that there aren’t any nasty performance or driver regressions that come out of enabling the fix. Here’s a post back from March about the team’ experience with it so far.

Turning the page

In about a week, I will be stepping onto a plane to begin a new chapter in my life. It’s pretty surreal to think about – to be frank, I never thought that I would get to this point.

I’m finally in the process of moving to San Francisco. This is five years after I started working for a little startup company in the SF Bay Area, a Mission Street company of people trying to hack together a social network on their own terms. That I even became employed there is an utter fluke, and is the fulfillment of a juvenile dream of mine.

Things have changed. Their focus has shifted, and over the last three years, we have worked together to help nearly 2,000 crowdfunding campaigns from Kickstarter and IndieGoGo. I was their first hire at this new venture, and have grown into a role where I get to solve hard problems every day. I have acted as a remote worker in all that time, from my dining table in Peoria.

Part of me is beyond excited. Part of me is terrified. Part of me is very, very sad. I wish that I could take the people involved in my life and take them all with me. Life doesn’t work like that, though.

In taking this next big step, I am leaving behind everything I’ve ever known and loved. I am saying goodbye to my closest friends, who have had a massive impact on how I live my life. I am saying goodbye to my family, who I already only see every once in a while. I am saying goodbye to a town that I am comfortable in, and I am saying goodbye to someone who I am madly, passionately in love with (and always will be).

I’ve cried a lot about this, because it’s painful. In fact, I’m still crying right now. But this move is something that I have to do for myself. You can’t finish a good book if you never proceed beyond a comfortable chapter. Otherwise, there’s not much of a story.

To everyone who has been present and close in my life – thank you for being here for me. Thank you for opening up and sharing so many beautiful things about who you are and what you care about. You have given me so much drive to keep living, even at the points where I felt like I didn’t want to anymore.

Random Thoughts on Making a Free Software Adventure Game

I’ve been wanting to get back into game development as a hobby for a while – I used to do it years ago, but can no longer rely on Adventure Game Studio as a tool, due to the editor being windows-only with little chance of a port happening anytime soon.

I have been looking at the Godot game engine, which is Free Software and has many powerful capabilities for 2D games. I’ve played a number of game demos with it, and I believe that it could be just the system I need. It’s very different from what I’m used to, and will take a long period of practicing tutorials and building stupid demo games before I start making any real progress anywhere.

I really, deeply, truly love adventure games in the style of the Sierra titles that I played as a kid – these include King’s Quest, Space Quest, and most notably, Quest for Glory. I have spent a lot of time attempting to better approximate the visual styles and the type of gameplay that these older titles used to offer.

I recently had an idea about implementing different cursor modes in a Godot engine. Although I know very little of how Godot’s internal code system works, I believe that I could effectively create different interaction cursors by declaring global variables. Something like:

def cursorMode {
cursorMode() = c

function cycleCursor() {
  if cursorMode(c) = 0 & RightClick {
  setCursorMode(c) + 1
}

else if cursorMode(c) > 5 & RightClick {
  setCursorMode(c) = 0
}

Mind you, I’ve never been a particularly great coder, so there are probably some conventions that I am missing here in one form or another.

The main idea is that you have cursor modes 0-5, which covers Walking, Looking, Interacting, Talking, and Inventory. If a player right clicks on the final cursor mode, the mode variable is reset to the first one.

You could then define interactions with objects in their relative scripts, such as this:

// Rock
object Rock {

if cursorMode(c) = 1 {
  display("You see a rock.");
  }

if cursorMode(c) = 2 {
  display("You touch the smooth, cold surface of the rock.");
  }
}

Obviously, I will need to crack open some books to better understand the semantics, especially in relation to Godot system syntax, but I would be very interested in figuring out how to put these fundamental building blocks together.

Less than Zero, More than One

You started from the position of being a bunch of cells to being a living, breathing person, born into a family that has a history of its own problems and tragedies, and raised to follow whatever beliefs your parents and family instilled upon you. Your brain then goes through a feedback loop as it tries to build a worldview for itself, scrambling to put pieces together from experiences, anecdotes, and surroundings.

For all your high and mighty aspirations, you find yourself falling short of any ideal. The yardstick you were handed to measure yourself implies that you are fundamentally broken. It’s as if the natural processes that led to your creation were mostly misfires.

Hey, its me!

Somehow, you are the ugliest, dumbest, least helpful, least insightful, least useful waste of human flesh there ever was. Your nose is in the wrong place. You didn’t get good grades. You were too fat and gross. Your smile is asymmetrical because there’s a gap in your teeth.

Paradoxically, some part of you is beautiful beyond comparison. You’re often too busy hurting yourself to notice. You feel like you can understand many things without any real idea of how you know them. In your center lies a softness, a space all too happy to delve out compassion and love for the world.

You bear witness to injustice and cruelty, but are too paralyzed to do anything. Humans everywhere beat their chests in a primitive display of tribalism that reveals how little we’ve evolved. The loudest voices struggle to drown each other out in a chorus of anger. Division lines are drawn, and sometimes people die over it.

All we have is hunting, politics, religion, sports, sex, money, and warfare, all plastered in mental advertisements for the other corresponding things.

These tribes emerge in different arenas: iOS vs Android, Mac vs. PC, Ford vs Honda, Democrat vs Republican, Chicago vs Green Bay, Christianity vs Islam, Communism vs Capitalism. Both camps competitively push against one another, propping up their own heroes while highlighting the villains on the other side. One dynamic attempts to overpower its opposite, but neither makes much traction in the end.

Information Theory

Entire cosmologies and frameworks of ethics are forged in the process, and people love to remind each other that their own version of perception is the most correct one. Every tribe finds itself at war with its own opposite perspective. The irony, perhaps, is that many of these camps have more compatibility with one another than either is willing to admit.

Greater still is the notion that our very identities are comprised of an overlap of mindshare and symbolism stemming from our demographic roots. The self is constructed from millions of individual pieces, many of which are borrowed from someone else.

The brain puts together patterns that it believes makes the most sense, based on the what’s there. It insists that it is right, because its method of validation is based on what it thinks it understands.

To some, the pursuit of happiness can feel like a never-ending marathon with no real winners. The pursuit of money just makes you all the more thirsty for it, and the pursuit of truth is fraught with disappointment. You met with so-called spiritual gurus, only to discover that they were but plastic medicine men. Even the people you look up to will let you down.

Push that rock, Sisyphus, you tell yourself.

There are many reasons a person living in this world might want to end their own life. Someone has been struggling for too long — they are weighed down by the troubles of the world, and they are sickened by what they see in themselves and other people. Hopelessly trapped in agony over the world’s amount of pain and suffering.

To many, there is a strong case for choosing death over life. Such an action carries the weight of choice with meaning — in a chaotic and violent world, it can seem like an escape, drawing a curtain of misery to a definite close. Or at least, that’s how the assumption goes. Nobody really knows in the end.

The model of what a post-life experience looks like is poorly understood at best. Either you live forever, burn forever, are reborn forever, or just simply stop existing in any conscious form whatsoever. Other interpretations may include becoming a constellation, becoming the god of a world full of your own spirit children, or learning a new way to say hoooo-ray with inter-dimensional gnomes.

You can try to make peace with the idea one way or another, but when the very foundations of your beliefs fail you, it can feel as if all cumulative systems of value ultimately cascade and collapse into nothing. The beginning and ending points are pretty much the same.

For all you know, you might just end up being nothing with no sense of continuity, and the same thing will happen to everyone you’ve ever known and ever loved.

In the end, all you can really do is try to make the most of your time, and appreciate it for what it is. Life is transient, and you are up against an advancing wall of death.

Meeting Free Software Federated Folk in Meatspace

Meeting people in person for the first time is always kind of awkward – especially if you’ve never seen them before, and you also happen to really respect their work. You can find yourself walking down a long road with growing anticipation of things getting real. You’ve never been to this Mexican restaurant before, you’ve never met this person, who knows what could happen?

I got to meet Chris Webber from MediaGoblin while I was visiting San Francisco. I usually feel sort of antsy when I meet people in person for the first time, but that all evaporated as soon as we shook hands and said hello.

Chris has a great personality. It was wonderful talking about our different points of view on federation, and the schools of thought that have come up surrounding different implementations. We talked for three hours about Free Software, desktop environments, project philosophies, federation concepts, and our grand hopes and dreams for things we wanted to see succeed. He even told me a good Richard Stallman story!

There’s actually a lot of really interesting things going on in the Free Software space as of recently. Of note, GNU GUIX is under a lot of promising development, and could provide a better way forward for deploying packaged web applications, and rolling them forward or back from upgrades. To some effect, such an effort could make non-PHP open source web applications easier to package, install, and use with relatively little setup required on the user’s part.

Chris invited me to an SF Free Software Users meetup called Beowulf Cluster. We all crowded into a pie shop and many different kinds of conversations came up about what we did for a living and what we were interested in. Some guys talked about QA, others discussed semantics of their favorite tools and projects.

I got to meet Asheesh Laroia from the Sandstorm team. Sandstorm is extremely interesting to me, because it is a Free stack that effectively allows you to host and launch apps like a containerized Heroku – you can also host all of it on your own hardware independently. It feels a bit like Google apps, but with a much wider selection, and everything is sandboxed. The concept of an easy turn-key service for hosting a Diaspora pod is extremely appealing to me.

We talked a bit about packaging Diaspora for that platform – at some point, someone from their community had tried to package it. Some questions remain about how Diaspora’s components work in terms of in-bound and out-bound connections, and Sandstorm is a sandboxed environment for apps that can share data with each other from inside of a host. I hope to answer their outstanding questions sometime soon to get a better idea of what would need to happen.

All in all, these moments were the highlights of my trip this time. I was super glad to have met Chris and see a real Free Software hacker in the flesh.

A Stereo for Every Type

(This ramble was written in response to a Medium post, “Have You Encountered the Softboy?“)

In social media and blogs online, there are stereotypes for virtually every type of person. Rather than individual characters in a story, they are instead caricatures that symbolically represent a type of gross logical reductionism. This phenomenon is particularly rampant in social media, where one bad opinion of a person can transform to represent everything about that person as a whole. It’s easy to forget whether there was ever anything good about a person at all.

There’s Bill the Brogrammer, who talks up his sex game as he hammers together a Ruby on Rails application. Perhaps he looks up women’s skirts at work and wears sweatpants all day long. There’s Philip the Fuckboy, who breaks your heart and never returns your calls. He’s out every night with a new woman, and plotting on hooking up with every girl in a circle of friends. There’s Stephen the Softboy, who leverages his sensitivity as a weapon to play with women’s emotions, and pretends to be an Ally. Because of course, how could he really ever be an Ally to any group or cause?

Of course they can’t. They’re all bros!

None of these people are real human beings. They are archetypes; abstractions that tie together human behaviors into allegories that all pretty much say the same thing: there are awful people in this world, they will use you, and you cannot trust them. Usually, they are men. Sometimes, they are women. If you’re reading a particularly conservative publication, they can even be queer or transgender.

The problem is simple: in the mind of the reader, these archetypes can override representations for real people while reducing them to the most black-and-white interpretation possible. No longer is a person just a person, no, every part of their presentation is part of a calculating sham to get the pants off of the opposite sex. Or the same sex, depending on narrative. They are wolves in sheep’s clothing. With these characters, no element can be verified to be genuine. They have no real interests or passions other than breaking hearts, getting drunk, and using people.


Suddenly, an individual’s sociopolitical philosophy simply may not be what it is presented as. Maybe this person just goes to rallies to hook up with white skinny stoner girls that have dreadlocks. Forget what the sex-positivist side of Tumblr tells you, apparently having sexuality as a subset of one’s motivations for anything is wrong, wrong, wrong. Hell, maybe that’s a man’s only motivation to do anything in the first place.

“Everything in the world is about sex except sex. Sex is about power.” — Oscar Wilde

Maybe the art that they produce is little more than uncreative doodling posing as sophistication. Perhaps their music collection is little more than a series of popular selections specifically engineered to appeal to as many human beings as possible. Did this poseur even read Marx’s Das Kapital? Doeshe even read books at all? Every element is brought into question.


The irony here, of course, is that such a mindset devalues many aspects of an individual’s humanity. If we are to be truly progressive in breaking down barriers between people, then we have to admit that the human persona is more than two-dimensional. It is complex, and not always a manufactured package.

Yes, some people out there are terrible. But it’s much harder to derive enjoyment in human interaction if we are to assume that all people are completely self-centered sociopaths.