Andy's Fun House


Weekend Projects Gone Awry, Part 2


The Idea: Outmoded

A friend visited me recently in Boston, and while we were being typical lazy gentlemen, the prospect of developing a game together at this year’s Global Game Jam (GGJ) surfaced. Though lately I’ve found it hard to be interested in anything to do with games or game development, but we agreed we’d like to make something without “graphics” that simply ran in the console. And so it was, that I created a project called “Outmoded.”



The first revision of Outmoded was done over two days while at the Barker Engineering Library in MIT. I chose C# so that I could finish the work in a few hours, and I’d estimate a total effort of about 5 hours was put into the project. The system worked within acceptable constraints and only had problems if you found yourself clearing the entire screen repeatedly for animation effects.

However, as the GGJ drew gloser, Alex asked if it wouldn’t be more performant to build the system in C++. Anyone who knows me well knows that I have an addictive relationship with C++, so ultimately it took very little for him to convince me this was the obviously correct path for the project. I created an experimental branch, scrapped the code, and got to work.

Over a couple work sessions I rewrote everything and had a simplistic proof of concept working on both Windows and certain flavors of Linux/BSD/OSX.


Tech Notes

As it turns out, moving to C++ was potentially a final nail in the coffin for the GGJ collaboration. Though I got to relearn things I hadn’t used in well over a decade (potentially closer to 15 years), makefiles were never a strong suit and OS X appears to have some fascinating ideas on development, which is no surprise to anyone who has used XCode. Also, there was a lot of struggling with Clang as the compiler on Linux, eventually forcing me to revert to g++ in order to get the makefile working.

This was excellent practice for some upcoming cross-platform C++ work I’ll be doing before the summer, and I’ll be very thankful for the rust removal this work provided. There’s a very obvious advantage for using Windows as a development environment, I was much more productive/effective there than on Linux.


Conclusion & Reveal

The GGJ theme, “Ritual”, seemed like a great opportunity to build an interesting yet simple game, but the fatigue of debugging the engine’s production proved too much of a negative for some of the team. Thus we have opted to bury the project and explore other avenues. What does that mean for Outmoded? Not much, frankly. I’ll probably fix the remaining bugs if they aren’t too troublesome and maybe add a frame feature, but I’ve gone well past the amount of time I intended to pour into this trivial thing.


- Andy


Question of the Month – 2013-11-26 (Archive Repost)

Years ago while working and living in North Carolina, my friends and I attempted to start a series of thought experiments together for tackling purely hypothetical questions. This was the one question we managed to complete, posted in the hopes that we can again try turning this into a monthly occurrence.



“Assuming time is non-linear, what is a better way to notate the age of an entity?”


LS (Liam S), AM (Andrew M), MH (Matt H)



Proposition: give up on measuring time. Time is usually a proxy for experience, or for progression through a known process (like a chemical reaction, or the steady draining of sand through a hourglass). Whenever we forget that, we create rules that end up making very little actual sense. Like the ones that make it illegal to drink alcohol on one day, but perfectly legal a mere 24 hours later (or if you know your exact time of birth, from one minute/second/etc to the next). In fact, time is a truly crappy proxy for deciding how responsibly someone will act in relation to alcohol. It’s a truly crappy proxy for deciding how responsibly a given person will be in relation to just about anything.

Give up on judging things by the proxy of time, and do direct measurements of what you want to know, on the particular case you want to know about. Somebody has been out traveling at very near the speed of light and they have returned? Well, who cares what their clock said or what your clock said. Are they showing signs of being mature enough to engage in whatever your proposed activity is? Did they experience the things they will need in order to react appropriately to a given activity? Note that those two answers might be different for the same person, and the same activity.

Time isn’t just a crappy proxy for human maturity. it’s a crappy proxy for a number of the things we like to think it’s a good proxy for, like the breakdown of unstable nuclei. All you can say about that, is that if nothing unexpected happens, then it will take X time for half the nuclei to decay. But in reality, there are a number of things that can happen to speed or slow the rate of decay from the one expected. So, sure, in a lab’s controlled conditions, you can make assumptions about breakdown given the time, and knowing how much lead shielding you need to keep from giving yourself cancer. But anywhere else, you better not assume anything and instead just measure with your Geiger-counter.


We interpreted the question as asking to devise a scientifically consistent and tangible measure for expressing the duration of a period. Put more simply: what’s another way to measure time without using the made-up construct that is time?

The goal of metrics are to provide understandable and convertible figures by which we can understand things that happen within the universe. Be it how long it has been since an animal has been born, the period which encompasses one object’s passage around another’s in space, or how quickly an object is traveling relative to another distant object. Linear time is, as far as we currently know, not a verifiable substance in the universe. It is an abstract concept we have created to provide common measure when discussing the passage of existence.

There are certainly relative measures you could use for each object. For a human being you could count the number of heart beats they have produced, the number of breaths they have taken, or the amount of steps they have traveled since their birth. Orbiting objects could be measured by both the distance they travel in their orbit and the number of times they have orbited. Finally, determining the speed of an object in space relative to another can be measured in combinations of distance traveled per rotation on the item’s axis.

The problem, though, is that each of these relative measures is fantastic at giving metrics specific to that object, but terrible at translating them into something that is usable for communicating those differences among disparate objects. Just as an example, basing your age off of the number of heart beats fails to communicate to others measuring similarly how different your heart rate is to theirs, how often your heart rate varies based on fitness levels, etc. There are analogous problems with the other measurements for orbiting objects and relative speed. Each measurement on its own is useful but is almost hopeless for making comparisons between even remotely equivalent objects.

Given the above and the circumstance of the question, finding a better way to notate ‘age’ for an object is about finding a common measure for how long the object has existed. In needing it to be common or universal, you are limited to things such as distance and energy. The
system you would create to provide convertible measurements for everything based on something like distance or energy would be extraordinarily complex and likely eventually found to also be just as relative as any other system.

All of that being said, it is important that Liam receive credit for coming the closest to an actual solution with his idea to measure the number of neutrinos that have passed through the object. It is known that the number of collisions experienced with neutrinos is extraordinarily small with known matter, thus making it fairly reliable assuming neutrinos are equally present in all parts of the universe. It’s not a perfect solution, but it’s pretty interesting!


Weekend Projects Gone Awry, Part 1

Lately I've been spending a lot of time at home, which has produced an odd side effect.  It seems the more time I am left alone, the more I get stuck on ideas without real merit.  Generally speaking, these are passing thoughts at best, but sometimes one takes root and seems dedicated to obstructing real productive thought.

In past years, I've simply bided my time until the thought eventually passed.  The more recent thoughts, however, don't seem to be following the pattern.  Whether because of changes in my personal life, or the ongoing process of maturing, I find myself having to invent new methods for clearing my mind.  And so we find ourselves here, dear reader, where I will attempt to quickly bring these concepts to life and subject you to the process.


The Idea: SlimSocial

At heart I am most comfortable playing the role of an introvert.  As such, the world of social networking is irksome to say the least.  Don't get me wrong, I have met many great friends thanks to the internet, but I also think they talk too much at times.  With that in mind, I'd like to introduce you to "SlimSocial," my solution to social-overload on the internet.



Instead of allowing everyone to talk so much, I wanted to create a simple network that limited the number of posts someone could make per day.  Initially, I'd envisioned limiting everyone to one post per day, and most of my prototype work has been done with that in mind.  If I were to put more work into the system, it would be more appropriate to generate a system on top of the "likes" and "dislikes" a person accumulates.

Speaking of likes/dislikes, since I'm robbing people of the ability to flood the network with their idle musings, I certainly can't take away their ability to show support or disdain for their fellow network members.  Still, I couldn't quite re-use the terminology of sites like Facebook, Reddit, etc.  I spent a while racking my brain on what to call this feature, and eventually got a helping hand from Jordan.  He took the "Slim" in the title a bit more anatomically, and suggested the system use weight loss or gain to represent likes and dislikes, respectively.  Imagining the confusion this could cause, I quickly jumped on the idea and the chance to further solidify the network's uselessness.


Tech Notes

There aren't really any interesting tech notes for this project, except to say that there aren't any interesting tech notes.  What I mean by that is that I decided to forego utilizing any frameworks outside of jQuery and Boostrap on the UI.  This was the first PHP project I've done in years without my framework (N2F) save for a game to keep tallies of annoying phrases on phone calls I did for a friend over the course of 2 hours.  The whole experience was...enlightening.  I can now say I know what parts of my framework are the crucial ones that really do save me lots of work.  Beyond that, I might say I got to practice a little more with build/release automation in TeamCity, but that was less a goal for the project than it was a result of my server outage.


Conclusion & Reveal

I had hoped to make the prototype for this project over the course of a weekend.  The mockup took about an hour after I found a template, but the remainder of the work was broken up due to said server outage, the holidays, and of course my day job.  I'd estimate I spent 4 full days of work (32 hours) on the project to get it to where it sits today.  The prototype is essentially complete, and though there is obviously more work to do, it is time to move on...or so I hope.


- Andy