EVE: Nothing to report

I’ve spent a couple of months not doing a lot of active play in EVE; some shipping through high-sec and just a couple of brief dashes into wormhole space. (But that was fun, because it was my first trip to a wormhole!) I avoided Burn Jita 2 primarily by not having time to play that weekend, though I DID read minerbumping.com for something like five straight hours, and I think it’s pretty awesome in that whole “emergent gameplay and also they are funny” way that EVE has.

During these couple of months, I’ve hit a couple of personal milestones! I participated in some actual crafting (mostly shipping components/materials in one direction, and piloting finished ships back to market), bought a few PLEXes, and trained up to fly both a Covert Ops frigate and a Strategic Cruiser. I’ve assembled a cruiser, and next time I have the leisure to peruse going rates on the market, I will have to fit that bad boy up. In keeping with my traditional non-combat theme, I am attempting to trick this ship out to be a nullsec blockade runner, specializing in stealth and speed and not getting bubbled or scrambled. We’ll see how that goes!

Posted in EVE Online | Leave a comment

7 Years, IV Worlds, 0 Game Developers

It’s hard to imagine that this blog has been kicking around for seven years. And yet, the very first blog post was published on April 10, 2006.

In April of 2006, Vanguard hadn’t launched yet. SWG hadn’t closed. We wouldn’t see an iPhone for well over a year. Not only were we not all farming on Facebook, but Facebook wouldn’t even be open to the general public for almost six months. And we thought MySpace was pretty neat.

Tuebit and I were aspiring game developers who thought we could argue, act sophomoric, and hack our way to some kind of recognizable MMO cobbled together from third-party middleware. Oops. It sure was fun to try anyway.

Today, I am fortunate to have a small handful of released games, and some of them actually succeeded for a time. I’ve survived both the failure and the successful sale of a startup — and both at the same one! Tuebit and I still have never finished and released a game. And as of this month, I’ve moved on from professional game development to spend some time taking a stab at other cool things in technology (which is a blessing in disguise, as I suddenly find games relaxing again). Tuebit is officially a PHB-in-training, and is far too important and busy to MMO any more. Also he seems to spend time in that “RL” place.

Times have changed. In 2006, it was exciting to think that networked gameplay was within reach with just a little bit of third-party help. These days, it would be nothing short of silly to even think of writing an entire game from scratch; tools and frameworks and all sorts of other helpful bric-a-brac abound. The ludology elite live in a mecca of relatively inexpensive and easy game development, with occasional smash hits like Letterpress arising from nowhere to prove that easy, low-cost game development sure does enable a whole lot of cool stuff. A self-taught programmer these days can drop under a thousand dollars for hardware AND software AND hosting, and release a location-aware mobile game with social network integrations, in-app microtransactions, and data that floats magically in The Cloud. Also, e-books are the new blog.

It is a strange and wonderful future we live in. And now, back to our regularly-scheduled game dreaming!

Posted in WorldIV | Leave a comment

Return to New Eden

eve-freightinI am slowly coming to realize that I play online games pretty much in complete sync with friends. As such, when a number of my friends began playing EVE (and redoubled interest from other friends who were already playing), it was easy to be talked into joining up. Therefore, I have reactivated one account (thanks to a charity PLEX from an eager buddy) and resumed my career as a SPACE TRUCKER. This is where I would love to spin tales of the exciting life of a career freighter in EVE, but I’d be lying. It is very rarely exciting, as I’m spending all of my time freighting through high-sec these days. Pick up stuff. Set Autopilot. Pilot away from Jita. Warp first stargate at 0m. Hit autopilot. Go play another game (or otherwise find something to do) for a couple of hours. Return trip. Repeat. The biggest decision I make is how to split up cargo so that I’m not a very appealing target in terms of ISK value.

But what did get fun? Well, the changes to blockade runners have made things interesting. It’s a rare skillset in my corp, for some reason, and the recent changes that both rendered Orcas incapable of carrying “incognito cargo” AND made blockade runners un-scannable have suddenly made this skill quite valuable. We DO seem to have enough low-volume, high-value goods that it’s worth scuttling about in a cloaky, quick runner. Plus, now I ALWAYS feel like a target in that ship — after all, if nobody can tell whether I’m empty or not, they might always decide to pop me and see. Plus, as best I can tell, the Viator is constructed from balsa wood and tissue paper. So this is fun! Even if nobody actually IS sitting there with an itchy trigger finger, I still perceive that they MIGHT.

eve-peepchatBut what is a bored Space Trucker to do? Well, that might include some conjecture about how everyday items might factor in to EVE life. For instance, if this assertion about the size of a Marshmallow Peep and this one about their rate of manufacture are both true, then it seems a capsuleer with an Obelisk and Freighters V can ship a decade’s worth of Peep production in a single run. Let’s hope the Goons don’t decide to start shipping Diabeetus Missile Boats.

Posted in EVE Online | Leave a comment

Hello, 2013

I ran my first half-marathon today. Well, run-walked. Gotta start somewhere… and that’s a great start for the year.

Posted in Chatter | Leave a comment

Farewell, 2012

It’s been a long, strange year. Like so many other bloggers, I’m now assessing how the last year went while looking toward the next. The result is, as usual, mixed and interesting.

Games

Strangely, this is the simple part this year. Life has interceded and reduced the amount of time I spend gaming, so this has become less of the focal point than it has been in the past. (Yes, 2+ hours a day is cutting down. It’s all relative!) My Star Wars Galaxies guild reformed for SWTOR, levelled up a few characters, started raiding, and slowly disintegrated as we crossed server move after server move. I dabbled in Guild Wars 2, The Secret World, and a host of other online games but none stuck. I still suck at League of Legends. I played the biggies like Diablo 3, and finished the Starcraft 2 single-player campaign a bit late. X-Com was a surprising hit for me. I’m slowly limping along in WoW:Pandas, but without the gusto I’ve had for MMORPG grinding in the past. I liked Mass Effect 3, didn’t think the ending was all that bad, and haven’t found the time to check out the extended ending. And for some reason, I picked up Magic: the Gathering as a new hobby that combines gaming with actually seeing people face-to-face.

Projects

I mostly failed at projects this year, as is par for the course. I got scooped on a diabetes app idea — which is fine by me, because the people who built what I wanted to build were way better at it than me. I started and failed at a couple of projects and learned some neat stuff along the way. And I actually “finished” my microcontroller Christmas tree (though of course, I have another half-dozen changes I’d like to make, if only time allowed). This blog is still kicking, if being updated a great deal less often than in the past.

Work

Work stayed on a mostly even keel this year. I transferred from a production role on a game development team to a technical production role on a central technology team. (Also, congrats to that game development team, who released a successful Facebook game after I was gone, and even still gave me a production credit. Classy!) It was nice to have a quiet work year, for once, but I sure hope it doesn’t become a habit…

Life

Life was a great deal less simple this year than it has been in the past. There were downs, such as losing a former boss / mentor / friend to cancer. There were ups, such as seeing good friends get married and completing my first ever 5k race (and then a bunch more). This year had more focus for me than ever before on my health and medical stuff. I underwent jaw surgery in late summer as part of a multi-year corrective orthodontics effort; this project is within months of completion, finally, to which I say, “Wait, you mean chewing was always supposed to be like this?” 2012 also marked my first full year adapting to life with diabetes, which has proven to be a strangely mixed blessing — it’s amazing what learning that you have a chronic health condition can do to provide motivation for living healthy. Since I’m a straight-up Bartle Achiever type, I immediately set a bunch of realistic and not-so-realistic exercise goals, and learned what an amazing amount of time, effort, and money can go in to rebuilding your health when you’ve spent decades aggressively giving healthy living the finger!

2013

It’s hard to predict what’s next. More body-hacking and running — there’s a half-marathon looming in just a few weeks for which I am oh-so-unprepared, and I could still stand to see 10-15 pounds dropped. I’ve long since given up trying to predict work, and will just keep pouring effort in there. I swear I will complete a mobile project of some sort, which is different from the last few years because seriously guys, I mean it this time. My wife is attempting to launch her own business, which promises to be an interesting time.

And I have this funny suspicion there will be games involved, too.

Posted in Chatter | Tagged | Leave a comment

The Tree is Done

A few more hours and a few more tribulations with the Arduino tree project yielded great success. As mentioned last time, I lookeed into building my own audio interface, but after a bit of snooping, found the SparkFun Spectrum Shield that cheaply built what I wanted for an audio interface. In fact, it was actually a great deal better; the Spectrum Shield has stereo input (something I planned to skip), an audio passthrough (so I could plug in speakers, saving me an ungainly additional Y-cable hanging off the end), and runs both channels through MSGEQ7 Spectrum Analyzer chips, providing ready-to-go spectrum analysis and saving me from the pain of getting some kind of audio transform like an FFT coded and working. So, what next?

First, after a week away, I coded up a new display mode with faster cycling of the lights for more of a “twinkle” effect. Then, I tried to connect the Spectrum Shield. About this time, I realized that this shield came without plugs built in for attachment to the Arduino Uno board. Or rather, I’d already realized this (and ordered a set from Amazon), but had not grasped the impact. A quick run to the local Fry’s was in order so that I could snag a soldering iron and spool of solder. Somehow, despite the fact that I haven’t touched soldering equipment in about a decade, I managed to wire things up without frying them, installed the shield, and began my Very Scientific Experimentation* with the audio analyzer chips.

* By Very Scientific Experimentation, I mean that I used Serial.println() to dump spectrum values to the debugger, and then ran the chip for a while with no input, and then again with different songs playing.

Armed with some baseline data, I came to a few conclusions. First, the range of the input was pretty arbitrary, and could swing wildly — I’d need some sort of automatic gain control (AGC) running. Second, there was a hefty DC bias; with no signal at all, I got readings from 50-80 consistently. Finally, the MSGEQ7 has 7 bands, but I only set up 4 PWM-fadable bands, so I collapsed a few together and decided on odd rules for the two digital bands. The bright white twinkling LEDs would be triggered by any single channel going very high, while the color-changing LEDs would be triggered by there generally being a stable, mid-volume signal as evidenced by the sum of all 4 bands. Finally, I would allow the PWM channels to rise very quickly based on the music, but clamped the decay rate to be fairly slow, in order to achieve a more pleasing visual effect. From here, I went on to tweak numbers. Again, this was done in an incredibly unscientific manner; I’d adjust threshold values and gain targets, and then play a few songs to see what I think of the results. I’m pretty sure that by the end of this experimentation, my code quality was suffering, but everything came out… Surprisingly, working quite well, even when things got messier and I started bringing in magic numbers (boo! hiss!), like in my AGC processing.

    if (silent == 0 && silenceLock == 1 && (time - gainTimestamp) > GAIN_TIME_TO_ADJUST)
    {
      float newGain = 128.0 / (float)maxAudio;
      if (newGain != gain)
      {
        //Serial.println(gain);
        gain = 0.8 * gain + 0.2 * newGain;
        gainTimestamp = time;
        maxAudio *= 0.75;
      }
    }

And finally, I added silence/signal detection so that the tree can seamlessly swap from music to rotating pre-programmed effects if no input is applied (and if no mode is explicitly selected with the pushbutton toggle).

Results

I’m relatively happy with the color organ effect now. It responds very well to jazzier songs, or anything with very discrete elements. As mixes get muddier, such as with most rock and harder feels, the fading PWM effect mostly disappears, though there’s still a bit of activity in the twinkling LEDs in particular. Very quiet sections can sometimes inadvertently trigger the 5-second silence detection, and it occasionally has difficulty re-establishing a lock on incoming music (which also requires a 5-second locked period — in retrospect, perhaps the pickup period should have been slightly shorter than the drop period). Overall, though, I’m stunned at the ease with which I could hack together a functioning solution with the tools provided by Arduino. Even if it IS brutish and ugly at times.

Speaking of brutish and ugly, I’m happy to share the code I generated: xmastree.ino — bugs, ugliness, and all.


Behold the Arduino Tree as it responds to MUSIC!

Posted in Making | Tagged , | 1 Comment

Arduino Grows on Trees

I’ve been nursing a bit of a bug for a while to do something crafty, in addition to all of my other fast-fail software efforts. In so doing, I reawakened a silly thing I’ve wanted to try since college. For some reason, I always thought it would be fun to write my own Christmas tree light controller. Well, originally, I actually thought more “build” and was looking into constructing lots of hardware circuits — amplifiers and bandpass filters and so on. Back then, I was a big fan of the PIC microcontroller, but when I used them, they required a bit of dancing and planning to pick up a board, a clock, build a programming cable, etc. These days, it’s nearly as cost-effective to go overkill and just buy boards and pre-made gear to do everything. Also, I am a nerd who likes buying nerdy toys. Therefore, I decided to jump into the hardware side by picking up an Arduino starter kit and to go from there.

Getting started with Arduino was relatively painless. After unpacking my goodies (which still smell like fresh plastic, hooray), a couple of minutes of downloading from the Arduino website set me up me with an IDE that could compile C and ship an executable to the shiny new microcontroller dangling off my USB hub. Within a couple of minutes, I had the equivalent of “Hello World” running, and the pretty little built-in LED was blinking at me. Unsatisfied with that, I immediately had to slap some bits onto a breadboard and get a prettier, shinier blue LED blinking too! I also tinkered with the blink logic to make sure I was really changing the outcome.

This article is coming out a good deal longer than I had intended, so more nerdiness follows after the cut…
Continue reading

Posted in Making | Tagged , | 2 Comments

Failed Fast

I came up with a goofy idea that I thought could make a decent app. In furtherance of a typical modern, webby, agile agenda, I decided to “fail fast” and put together some barebones proof-of-concept to decide whether the idea was viable.

The idea: ASCIIgram

Think “Instagram” meets ASCII art. Take photos, convert them into ASCIIfied versions, and share them on Facebook. This meets my first test: I can describe the idea in one sentence.

My Secret Plan

I had no monetization plan for this app. It met all of my needs for a test project:

  • Self-contained — the scope is small and manageable.
  • Easy feature roadmap that could be instrumented for metrics (I was thinking “colorization”).
  • Niche market — users who liked it would probably be fairly invested, but there wouldn’t be so many that maintenance would be a nightmare.

The Project

I decided that the minimum viable first prototype would be a web page that could accept a raw image and convert it to ASCII art. Why do the conversion on the web? If I made it to the mobile app step, I was hoping to leverage the Lua-based Corona SDK, as I’m a pretty hot hand with Lua and could stand up an app faster that way. I spent 3 days on a handful of prototypes, starting with a hard-coded little beast and moving up to the aforementioned upload-and-convert page.

Learnings

I entered this project with only the barest minimum of previous experience with PHP, and none at all with Image Magick. Of course, I selected both of these technologies after a lengthy research session on Google, which I am completely exaggerating for artistic value, and the real reason is that my existing web host supports PHP easily. I managed to install and build Imagick and get it running happily under PHP. I got some basic image uploading / temp file pipelining and the like working, which was significant PHP learning for me. I even came up with a short, scripted series of actions that could transform an image into some kind of ASCII art. And here’s where my wonderful plans fell down.

Challenges

The performance of my methods for converting to ASCII were miserable. In order to complete within a 30-second window, I had to cut the sizes of images I was working with enormously. Too much detail was lost at that point to get clean output images. I lost a whole day’s work to a math mistake, as I was accidentally matching to double-width tiles instead of single characters. In the end, I concluded that the PHP-based approach itself was fundamentally flawed; I’d either need to rely a lot less on Imagick and do a lot more full custom encoding/decoding/pattern-matching, or abandon my hopes of using Lua and instead learn Objective-C and do my own image processing on the mobile device. I’m not saying this wouldn’t, in the end, be a better plan, but it completely whiffed on my actual goals for the project.

The Results

Here are some samples of a source image and three types of manipulation: preprocessing with some edge enhancement, a “per-cell match” that attempts to match each 9×8 image “cell” to the best match from the adjacent 25 or so glyphs ordered by approximate brightness, and a “hybrid” approach that used a faster “randomized nearest brightness match” 80% of the time and only attempted to per-pixel image match 20% of the time. As you can see, while general shapes are recognizable, too much detail was lost in the downsizing of the source image to produce the quality output that would be necessary to get anyone using the app.


In my source image, I used a picture of a friend’s injured (and surly) cat.


Various stages of manipulation revealed recognizable gross shapes, but none of the detail needed to make an ASCII-fied picture compelling enough to bother sharing.

In the end, I still think the idea was entertaining. If I had a goal of doing some lower-level coding for this project, it could still have been viable — I bet another week would conclusive determine that one way or the other. But in the end, the project clearly wasn’t going to meet my goals, and now I’m setting the idea free. Ideas are easy; I have a half-dozen more I’m ready to start experiments with. Onward to more fast failing!

Posted in Development | Tagged , , , , | Leave a comment