The Intellectual Wilderness There is nothing more useless than doing efficiently that which should not be done at all.

2020.09.22 14:22

Erlang: [ビデオ] ZXでGUIプログラムの作成と実行のしかた

Filed under: Computing,日本語 — Tags: , , , — zxq9 @ 14:22

2020.09.20 21:01

Erlang: [Video] Creating and running GUI apps with ZX

Filed under: Computing — Tags: , , , , , , , , — zxq9 @ 21:01

I had a little bit of time to make a video on how to use ZX to create GUI applications, but not enough time to do any post processing. Hopefully the video demonstrates the basic use case well enough to make the purpose of the tool itself obvious. (The audio isn’t great — hopefully I’ll have to either go back and dress that up a bit or make a better version of this video.)

2020.09.11 16:05

Hardware Development VS Software Development Budget Allocation

Filed under: Computing — Tags: , , , , , , — zxq9 @ 16:05

It is funny to me that hardware engineers are able to test the bejeezus out of essentially solved problems like how many keypresses a keyboard can take before mean operations to failure and document every minute aspect of their development, but software developers are pretty much prohibited from being given the time to document code.

In fact, it strikes me that hardware engineers’ actual job is to produce a specification from which hardware can be built, nearly always by people other than the engineers developing the product. That is to say, the product of the engineers’ labor is documentation.

The software developers, on the other hand, have the ability to document their product in coordination with its development, but are almost always forbidden from taking the time to do so, despite that documentation effort costing far less than the process hardware manufacturers have to go through to tool up a production line for a physical product.

This is a pretty insane state of affairs. If I could only show the public some of the chewed-to-crap, undocumented, wazoo code I’ve seen in production on closed source projects…

2020.09.9 12:51

Erlang: Barnsley’s Fern

Filed under: Computing — Tags: , , , , — zxq9 @ 12:51

A mathematician friend of mine asked me the other day whether we used many techniques from fractal theory in game development. I told her that I didn’t think so, at least not formally. She asked me if I had ever implemented “Barnsley’s Fern” (Wikipedia) and of course I never had. So she asked me to implement it and tell her what I thought.

Her plan seems to have been to get me to recognize that we do use techniques derived from fractal theory all over the place by implementing a famous fractal by hand myself. The plan worked: it was immediately obvious to me that Barnsley’s Fern makes use of a technique that is central to the way random map generators work in game development, but I had never realized this was actually from “fractal theory”, having stumbled on the technique myself because it was a useful shortcut to making game maps that were interesting and felt natural(ish).

Here is the interesting part of the code:

The interesting part about that is the fact that the plotting of points is actually a random function, not a concretely defined rotation of an existing pattern. The constants involved in the fern1-4 functions are found here:

My Barnsley’s Fern implementation is available on gitlab and can be run using either ZX or Vapor if you have ZX on your system. The most recent version as of this post, 0.1.2, uses OpenGL to render the image and seems to work much more reliably across platforms than the previous implementation using a WX graphics context (some versions of WX don’t like the way I drew the points). In Vapor you can select the version with the version drop box if you want to see the WX implementation:

Or you can run it directly from ZX using the command line with:
zx run barnsley_fern

Here is what the OpenGL version looks like at 100001 iterations:

The OpenGL interface allows you to rotate and move the image around a bit, though in v0.1.2 the center of rotation is a bit off center. Also, if you have more than a few hundred thousand points it becomes cumbersome to render repeatedly in animation because it is actually re-plotting each frame (I didn’t go to the trouble to plot the points to a buffer or texture and simply rotate that instead).

The previous version looks like this at the same number of iterations:

The coordinate systems are different for the two implementations, hence the difference in the direction of the curve.

Hanging around mathematicians lately has made me realize that there is a tremendous amount of higher math involved in a lot of what we do in programming, but that the mathematicians rarely talk to the computer science people, and computer science people are living on their own little planet with little connection to what actual developers are doing in industry (all of us little people just “trying to make it go”). Further, the semantic map of what words are used to mean what in which context is an absolute mess, so it takes some patience and explanation to understand what the other person is saying half the time if you are talking outside your tribe.

Keep the patience! Explain exhaustively! Listen carefully! It is so much more interesting when you have a chance to confer with people outside your tribe!

2020.08.30 19:58

Erlang: R23.0 Doc Mirror Added

Filed under: Computing — Tags: , , , , , , — zxq9 @ 19:58

Erlang R23.0 docs have been added to the doc mirror list on the Erlang Stuff page.

2020.08.15 20:35

Building Erlang R23.0 on Debian/Ubuntu

Filed under: Computing,Science & Tech — Tags: , , , , , , , — zxq9 @ 20:35

As an update to my previous notes on building R22.2, my current notes for building Erlang R23.0 and installing ZX using kerl on a fresh system (Kubuntu 18.04 LTS) are below. The same instructions (or very nearly the same) should work for any Debian or Ubuntu version within a few years of 18.04 LTS.

sudo apt update
sudo apt upgrade
sudo apt install \
    gcc curl g++ dpkg-dev build-essential automake autoconf \
    libncurses5-dev libssl-dev flex xsltproc libwxgtk3.0-dev \
    wget vim git
mkdir vcs bin
cd vcs
git clone
cd ..
ln -s ~/vcs/kerl/kerl bin/kerl
kerl update releases
kerl build 23.0 23.0
kerl install 23.0 ~/.erts/23.0
echo '. "$HOME"/.erts/23.0/activate' >> .bashrc
. ~/.erts/23.0/activate
wget -q && bash get_zx

[NOTE: ~/vcs/ is where I usually put “version control system” managed code and my backup and sync scripts know to never copy or update that one.]

And that’s that. If you’re on a full desktop installation some of the packages in the apt install [stuff...] may be redundant, of course (who doesn’t already have wget and git?), but that’s no big deal.

2020.05.22 18:31

Getting started in DayZ Standalone v1.07

Filed under: Computing,Games — Tags: , , , , , , , — zxq9 @ 18:31

Happy free weekend! DayZ is be free to play from 2020-05-21 to 2020-05-25. What better way to spend your weekend while a pandemic sweeps the world than playing a post-apocalyptic zombie survival simulator… bwahahahahaha!

(Note: This is not a paid article and I have no connection to Bohemia Interactive — I just really like this game and wish more people understood what it’s about instead of suffering from the “expected Coke but got beer” shock and wind up missing out.)

Be warned: DayZ is hard mode all the way and you’ll die all the time at the beginning until you figure out how things work. This is actually hilarious, but not if you develop some pointless emotional investment in a freshly spawned character. Laugh at it. There aren’t any levels and you can gear back up pretty easily once you learn the basics of survival. Learning the basics of survival, though, can be hard. There is no manual (except for this post and the previous one) and the game is surprisingly realistic, making for an incredibly hostile environment (hence the “survival” part) and a near vertical learning curve.

This is a (relatively) quick guide on how to get your character from their initial hungry and thirsty starting condition to being well fed with a quenched thirst and hopefully enough gear and knowledge to start heading inland. A few critical details that directly affect survival have changed since previous versions of DayZ, so trying to follow guides for previous versions might leave you in even more shock than you’d already experience on your first visit to Chernarus (or especially Livonia).

First: Understand what DayZ by understanding what it isn’t

It isn’t an action shooter. It isn’t Rebel Fortress or Unreal Tournament or Battlefield. It isn’t WoW, either. It is none of those things. It is a hardcore zombie survival simulation. The all important noun there being “simulation” and the critical adjective being “hardcore”. I say “simulation” instead of “game” because there are no quests, no global map HUD, no global chat lobby, no ranking or guild system, no equipment “bank”, no auction house, none of that stuff. Comparing DayZ to an action shooter is like comparing a real flight simulator to Gradius III.

Your DayZ character must eat, stay hydrated, keep warm, avoid illness if possible, etc. There are 900+ items in v1.07 that actually have a function — so be mentally prepared for some things you didn’t think were possible or sometimes need to do things you’re surprised are necessary. Suffice to say there is a ton to learn and a single short guide like this written on the occasion of a free play weekend on Steam isn’t going to cover it all.

Picking a server

The first thing that trips up the freshest of fresh freshies is picking the wrong server. The basic mechanic is simple, you press “play” and the launcher links in whatever mods you’ve selected (if any) and launches the game. From there you will want to select “change server” and sort by ping to find one that has the lowest possible ping to your location. Anything under 200ms is workable (though not ideal) for PvE, and anything under 100ms is workable for PvP, though 50ms or less is best no matter what you’re doing.

In the server selection screen you’ll see at the top “Official | Community | Private”. It isn’t obvious to everyone at first glance that this is a clickable control (UI fail) but it is. If you can’t find a nearby official server, click on “Community” and sort by ping.

Example: I live in Japan. The official servers with the best ping times are in LA with around 130~250ms ping times from my location. That’s a bit annoying (but workable) for PvE, but hopeless for PvP. There are community servers local to me, though, with 30ms ping times (and fewer regional spoken language/accent issues). Note that with community servers you might pick one that has a great ping time but has mods installed. You’ll need to install and activate the same mods as the server to join it (mods are allowed to change the game in arbitrary ways, so the server and the client need to be on the same page). Starting out with vanilla DayZ is my recommendation your first time around, though.

With that out of the way, let’s get on to survival.

Hello, Freshie! A bit peckish?

You just spawned. Your character starts out with a sated appetite and hydrated, but that will change very soon. You’re a little more than halfway to getting hungry when you start out and you’ll get thirsty almost as soon as you start jogging somewhere (and jogging is totally OK — you don’t have to walk everywhere, but sprinting will wear you out and waste lots of precious water). You will have an apple or pear in your inventory to start with. Various types of food and drink provide both hydration as well as energy, water being the only one that provides only hydration and no extra nutrition.

Eat something

There is no manual (but I have made a cheat sheet for the controls), so it is useful to note that pressing <TAB> toggles your inventory screen. You can drag/drop things here. The square below your character’s image represents whatever he’s carrying. Drag a fruit to it, then press <TAB> again to get out of the inventory screen. You’ll notice a tool tip that has the left mouse button highlighted that says “to eat [HOLD]” or something similar, and this means if you hold the left mouse button down your character will start eating the fruit in his hand. Try it as soon as you spawn. It isn’t a big deal to lose your starting fruit, and that water and energy do more good in your body than in your pocket (infantry rules apply!).

Manipulating inventory

Inventory and item manipulation is pretty intuitive. Mess around with it and you’ll figure out what’s going on quickly enough.

The only counter-intuitive point is that the “tacky” point of a dragged object is the upper left corner of the item and that will be dictated by where the mouse pointer is, not necessarily where the item’s outline appears to be. Mess around with it and this will become obvious quickly. Also, note that items in inventory may be oriented the wrong way to fit, even if you have enough slots available — press the spacebar to rotate them while selected so they fit.

When you’re near a container (or a body) you will see those appear as inset containers in the “Vicinity” area on the left side of the screen. This is how you get stuff off the ground, out of containers, and off of bodies (of zombies, dead players, or unconscious saps that have been knocked out).


Now that you’ve had something to eat and if you haven’t been killed yet you should take your bearings (and if you did already die for whatever reason, just respawn and try again — it’s not a big deal). There is no map in the game interface but the environment is accurate enough that you can get your bearings from observing your surroundings. (There are maps in the game that your character can find, but nothing that is magically visible to the player).

The sun rises in the east and sets in the west, just like you would expect. If you can tell whether it is morning or evening you can know by the shadows which direction you’re moving. If it is morning and the sun is to your right (shadows point to the left) then you’re facing north, and this reverses in the afternoon. If shadows are super short (directly under trees) then it’s about mid-day and the short shadow tip is pointing north (or sometimes not quite visible).

The stars in the sky are actually placed accurately, and this makes the night sky a gigantic, free compass, just like in real life (Polaris, the North Star, is prominently visible and easy to navigate by on nights that aren’t overcast). On cloudless nights the light outside is actually quite good enough to see your immediate surroundings, so don’t be afraid to turn off any lights or extinguish any torches and navigate. Sometimes it’s much easier to see distance this way and is far less likely to give your position away to any zombies. Use the stars! If it is raining out and you don’t have a full rain suit, though, stay indoors for the night periods.

Time moves pretty quickly in the game (of course), with days seeming to be significantly longer than nights (perhaps this is on a planet with two suns? no idea). We’ll just handwave that away, but keep in mind that night isn’t to be dreaded and it doesn’t last too long.

There are billboards with maps with a big red “You are Here!” dot on them, usually somewhat close to a bus stop area out on the coast, or sometimes near a water pump in a larger town. There are also military and hiking maps you can find as loot drops that are extremely detailed. Get familiar with the map. If you do a web search for “DayZ map” you’ll find many nice ones, even interactive maps that have spawn locations listed. It is important to get the basic map in your head and figure out where you are as soon as you can.

The general layout of Charnarus is that the east and south are relatively straight coastlines, and this is the lower-risk/lower-reward area people spawn. As one heads northwest loot drops improve (military gear, more car chassies and parts, etc) and risk increases (to include hostile wildlife like wolf packs and bears, in addition to PvP-minded players looking for those sweet, sweet M4s and bodyarmor…).

Spend your time near the coast gearing for survival and then move inland to gear up for combat, base building, camping out, linking up with people, going cannibal, or whatever else it is you might want to do in the game world.

Survival priorities

You need to stay hydrated, eat well, keep warm, don’t get sick, and keep the red stuff in your body (don’t bleed out!).

To stay hydrated drink and eat.

To stay well fed eat and drink.

To keep warm wear well-maintained clothes and stay dry.

To stop bleeding when you’re hurt use rags or bandages to bind your wounds (put them in your hands and hold the left mouse button). You can have multiple wounds, so you may need to do this several times in succession (the “I’m cut” icon has a number on it representing how many open wounds you have).

To keep from getting sick don’t eat rotten food, don’t drink untreated water from rivers (or the ocean), and stay warm. To increase your immune system and reduce the recovery period for illnesses take vitamins if you can find some.

Survival tools: Water containers

If you can find a few water bottles, canteen, or a cooking pot, you’re set! You will eventually run across these. Almost every town has a water pump in it, at which you can fill your water container. These can be reused, so hold on to them after they are empty.

Survival tools: Bandages and rags

To make more rags (useful for more than just bandages) you can cut up clothing items you find as long as you have an edged tool in your hands. Do this frequently.

Survival tools: A trusty sharp thing

Tools are more important than weapons, and most heavy tools are very effective weapons anyway.

The biggest priority is having a blade of some sort. You need an edged tool to open canned food (or else you can’t eat it), strip bark from trees to use as kindling for starting fires, to craft fishhooks from bones, etc. The better suited the edged tool is to the job you’re doing the better it will work. For example, an improvised stone knife can be used to open a can of food, but you’ll spill 20~40% of it in the process because it’s sloppy. An axe is much better, and an actual can opener is perfect every time.

If you see a shovel, axe, hatchet, or pickaxe: GET IT

If you see a knife: GET IT

If you can’t find a knife, make one with two small stones. You will find these on the ground if you run down any forest trail or along the train tracks. Place one in your hand, then put another on in your hand (in the inventory screen you’ll get the option “combine” or “replace”, pick “combine), and then use the action button to craft an improvised knife. Stone knives wear out really fast, but they are free. They can get you by until you find something better.

Survival tools: Give a man a can of tuna, feed him for 12 hours; teach a man to fish, feed him until the bears show up

Besides a bladed tool and maybe something heavy to kill zombies with (can be the same: splitting axe, pickaxe, etc.), the next thing you need is a reliable source of food. At the very outset you can scrounge for canned food and soda in houses by the coast or killing zombies and looting their bodies, but eventually you’ll want to get into fishing and hunting.

Fishing is much lower risk than hunting, but you’ll need a fishing pole. Find a bush and get near it. You’ll see the option to cut down the bush by using the action button. This will happen in two stages, first you’ll strip a “long stick” off it, and if you keep going you’ll knock the whole thing over leaving some more sticks (there are a few varieties of this depending on the type of bush or small tree you target and whether you have a tool or are using your hands — experiment). You want the long stick. Now find a rope or make one if you have enough rags. Combine the stick with the rope and viola! we have a fishing pole. (Note: This is also the way bows are made, but they are disabled in v1.07, but will be returning soon.)

Now you need a fishing hook and some bait. To get fishing hooks you can either find them in random loot (I seem to never find them) or, more reliably, make some yourself out of bones. On the coast there are many places you’ll find chickens wandering around. Listen for them. Follow the sound the same way zombies follow you and SMACK! Kill yourself a chicken. Put a knife in your hand (or make a stone one if you haven’t found one yet) and butcher the chicken. You’ll get a few pieces of glorious chicken and a pile of bones. With your trusty knife in hand you can work those bones into fishhooks!

Hurray! Now the last thing to get is some bait. If you find some soft dirt, put a knife, shovel or pickaxe in your hand and you’ll see the option to “dig for worms”. Give that a try a few times. Once you have some worms, head over to the ocean or a river or lake (if you’re already inland) and give fishing a try. Fish provide a lot of nutrition, are unlimited in supply, and are safe to handle (unlike hunting wolves and bears).

How to combine worms with the fishing pole is not as obvious as it should be. Here’s a step-by-step (assuming you already have a pole, a hook and a worm):

  1. Remove the hook from the pole.
  2. Put the hook in your hand.
  3. Drag the worm to the hook to “combine”.
  4. Exit the inventory menu.
  5. Hold the left mouse button to “make fishing bait”.
  6. Once the fishing bait is complete, pick it up.
  7. Equip the pole.
  8. Add the baited hook to the pole.
  9. Go near the water (sometimes you need to look down toward it) and click and hold the left mouse button until you’ve caught something (hopefully not a pair of Wellies).

It goes a bit faster if you get a few hooks and worms ready all at once, and then commence fishing. This procedure should, in my opinion, be shortened to where you can combine a worm directly with a hook-equipped pole, but that’s not how it works at the moment. In any case, enjoy fishing! Fish are a super food, and after you prepare it with your knife it doesn’t even need to be cooked to be eaten.

Survival technique: Jacking zombies

Once you have a heavy thingy (sledgehammer, pickaxe, splitting axe, etc.) or pointy thingy (combat knife, spear, etc.) or just a bit of experience punching zombie heads in, you’re ready to jack zombies for loot, to clear routes, and for pleasure.

If you don’t sprint or make loud noises zombies generally won’t notice you until you get quite close. If you’re listening for them (use headphones) you’ll notice them long before they notice you. If you see a single zombie you can approach it from the rear or side at a sprint before it can react. As you near it, ready a blow with your weapon or fists and smack that sucker in the noggin until he goes down, then take whatever he has on him. You can find quite a lot of early loot this way (can openers, flashlights, soda, water, canned food, etc.).

Just don’t get cocky when a bunch of them are around. A single zombie isn’t hard to take down at all, even unarmed, but two gets interesting unless you have a weapon, and three or more can be the end of you if you get unlucky.

Whatever you do, don’t shoot in town unless you have a clear and immediate route out of there. A common beginner experience is “Oh, two zombies, I have a gun, simple [BANG!] … [5 seconds later] ZOMG WTF 15 ZOMBIES!” You’ll do it eventually. It might even be a good learning experience to try it on purpose just to see how fast things can get messed up when you’re wandering around alone!

Paramount to survival: Mindset

This is a toy. Remember that. You will die. Mess around the coast a bit and use your first few incarnations to figure out how things work. Familiarize yourself with crafting knives, fishing poles, finding and butchering chickens, fishing, getting solid shots with an axe on inattentive zombies, building fires (need wood, 2 or more rocks, and kindling (paper, tree bark, rags), and a firestarter (matches or a lighter)), basic cooking (need some meat and a long stick or a cooking pot), etc.

Don’t get invested in your character, get invested in the experience. When you die it doesn’t take long to gear up to survival level again, because “survival level” is really a skill not a piece of gear.

Once you are over the survival hump you’ll start meeting players and having wild experiences. Some people will kill you on sight (aka “KOS”, generally a jerk move, but lots of people think this is an action shooter because that’s been the way to make AAA titles without innovating or having any new ideas for the last 30 years).

Have fun out there, use voice chat with other players when you meet them, and always look on the bright side of life.

DayZ SA v1.07 Controls Cheatsheet

Filed under: Computing,Games — zxq9 @ 16:55

Just to make DayZ even more hardcore than it already is there is no manual and no tutorial area to cut your teeth. Instead, you just get your teeth smashed out and die until you figure out what’s going on (then you die in more interesting ways). Here is a cutdown of the basic default controls in the game.

For a more complete reference check your options menu.

Control Table (defaults)

MouseCharacter’s bearing
ALT/*Free look
V/ENTERToggle 1st/3rd person view (if 3rd is allowed)
W/A/S/DCharacter’s direction (foward/back and strafe left/right)
Q/ELean left/right
L CTRLWalk/Jog (hold for momentary toggle, double-tap to toggle)
L SHIFTSprint (hold for momentary, no toggling)
SPACEJump (character may use hands to assist)
CTap to toggle stand/crouch (hold to lay prone)
TABInventory screen
R MouseHold to raise/employ held item (raise gun, fists, etc.)
L MouseMain action (fire weapon, punch, select/drag item, etc.)
M MouseZoom (employs optics/weapon sights if at the ready)
FAlternate action (buttstroke with weapon, open door, etc.)
GDrop or throw held item
RChamber a round/cycle the action (clear a jam)
XToggle held weapon’s firing mode (semi/full auto)
PGUPElevate weapon sights (adjust zero up) if possible
PGDNLower weapon sights (adjust zero down) if possible
LActivate night vision/special optics
L CTRLHold breath (reduces aiming float)
(spacebar)Rotate selected/dragged item in inventory
` (backtick)Toggle item/action hotkey in HUD
09Item/action hotkeys (assignable in game)
Cycle voice volume (whisper/talk/shout)
/Text chat (you should really use voice if possible)
F1F11Gestures (play with this to learn them)
F12Screenshot (Steam default)


When driving vehicles the WASD movement controls work as expected, the mouse looks around, Q/E shift gears down/up respectively, and L Shift activates turbo (same as sprinting).


Many items in the game can affect other items or be used for crafting. To craft a stone knife from two small stones, for example:

  1. Open the inventory screen and place one in your hands (drag to the “held” box below the character)
  2. Drag the other one to the “held” box — the right side will say “replace”, the left will say “combine”. Drop it into “combine”.
  3. Exit the inventory screen and you will see the tool-tip tell you to press and hold the left mouse button (or “F” key) to craft a stone knife.

In the same way, fast loading of magazines can be accomplished by placing a magazine in your hands, then dragging the appropriate ammunition to “combine” and then holding the action button to pump rounds into it without dragging individual rounds in.


To eat an item, hold it in your hand. If it is a canned item you will need to open it before eating it. If it doesn’t have an easy opener you’ll need a can opener (best) or something with an edge like a knife (not too bad), an axe (spills quite a bit), or improvised stone knife (spills up to 40% of the contents, but better than starving).


To loot a container (locker, barrel, backpack/clothes on the ground, etc.) or a body (dead zombie or dead/unconscious player, etc.) simply stand near it and activate the inventory screen. You can freely move items around as long as they fit.

2020.02.3 15:19

X-Y Problems

Filed under: Computing,Science & Tech,Society — Tags: , , , , , — zxq9 @ 15:19

People obsess about their X-Y problems to the point of ignoring accepted wisdom, plugging their ears to the deafening silence of the solution’s instructive whisper, picking themselves up as hard as they can by their own knees and wondering why they can’t fly.

They then run off and formalize their wrong solution as a PR into a core project.

If core maintainers aren’t mindful they’ll incorporate these disturbances into a previously still space, and if they are indelicate they will piss off the misguided (but industrious) boob who made the PR who is already by this point fanatically dedicated to his wrong solution and the idea that nobody “gets it” but him.

Ah, another day at the Bazaar.

2020.01.29 17:27

Erlang: Minesweeper

Filed under: Computing,Games — Tags: , , , , , — zxq9 @ 17:27

I’ve been sick the last two days and utterly uninspired to do anything productive. I’ve instead procrastinated by writing a “minesweeper” clone in Erlang.

Why? I have no idea. I was just sort of thinking of simple desktop classics to mess around with that are de-facto standard to populate a GUI app launcher like Vapor… and several hours later I had this thing. By that point I figured I was invested enough to swap text for graphics, and poof! There we are.

I still need to add win/loss conditions, a wall-clock timer and some kind of score thingy, but anyway, this was actually a much more fun way to tool around on a sick day than I expected and makes me feel just barely less of a dirtbag than I would have been had I wrapped up in bed all day feeling crappy.

I hate being sick. Ugh.


I went ahead and finished it (except for recording scores — does anyone ever look at that since they can’t be sanely shared and aggregated?) and put it on gitlab just in case someone wants to see what a really hasty/disorganized codebase looks like.

It even has settings! Hahaha! “Settings” really being code for me messing around and seeing if I remembered how wxSlider widgets work (turns out I do and they are boringly easy to use).

If I find myself not feeling in the mood and going to the gym is out of the question, I suppose I could do one of these in 3D next time. Seems like “minesensor” would be a slightly more involved sort of game.

« Newer PostsOlder Posts »

Powered by WordPress