Monday, September 26, 2011

making supermemo drills a little more fun - with the help of a PS3 controller

Currently, my main task is actually not to be heads down in development, but rather to be reading documentation. My reasoning for this is that a lot of the time spent in "heads down" development is really just wasted in figuring out how to do this or that, and as a consequence a lot of mental context switching occurs and many otherwise valid ideas are not able to surface. If, on the other hand, the how is completely known and understood, the what is able to flow much more freely, thereby enabling not only faster results (at least in the mid- to long-term), but better results, because those sometimes hard-to-reach and rare-to-find veins of gold within the subconscious can be mined much more effectively. Much more complicated ideas can simply be prototyped in a much shorter timeframe than before. More upfront work can actually be done on the machine, rather than on paper or on a whiteboard. Dreams are able to become reality much faster and more efficiently. Practice and iteration occur more rapidly, and the path to mastery is accelerated. In the long term, ultimately, this means bigger and better games, while still being able to stay small and focused, which is full of win.

What this means right now, though, is that I have a lot of documentation to read. Too much, in fact. It's not enough to just read the documentation, though - the idea here is to memorize it, completely. Every class, every function, every variable, enumeration value, default, setting, and all the little nuances and gotchas. At the moment, I'm focused solely on Unity3D, because that is where the rubber meets the road with what I do. It is the one tool I can use all by itself to make a pretty well-featured game and be able to have it run on pretty much every platform that I care about right now. I might add some other tools like 3DS Max or GIMP later, but for now Unity3D is where it's at.

The editor itself is pretty straightforward. Where there's a ton of meat to digest is in all the components, especially the scripting, as well as in the shader language it uses for creating custom materials.

The tool I use for all of this is called SuperMemo. I highly recommend for anyone taking on a lot of memorization-type material. If nothing else, it is good for random introduction of material - the serendipitous discovery of things-you-didn't-know-you-wanted-to-know - and the subsequent committing to memory of (they purport) 95% of said material. Of course, this is all done by selecting just the relevant bits of the material to memorize, which is a lot of what goes on in the "processing" phase, and then drilling you flash card-style

This is all very useful, but I do often find myself making a lot of repetitive keystrokes in the process, and sometimes find my mind wandering off over to Twitter or a can of soda as a result. In contrast, when I'm playing a good video game, I'm really into it, and even the slightest distraction is either completely tuned out or, failing that, really irritating. My theory on this is that the brain doesn't have to exert as much effort in navigating a gamepad as it does with a fairly complex keyboard/mouse setup, especially one that may be switching around between several programs, typing things in, switching back, etc, while simultaneously doing some pretty hefty reading and recall work.

What I noticed about my usage of SuperMemo is that, for the most part, especially during the "final drill" phase of each day's worth of material, there's a lot of repetitive button pressing. Even during the regular repetitions, where there may be somewhat more processing - following up on a lead, downloading a web page and importing the HTML, breaking things down into smaller chunks, there's really not a whole lot of variety in the space of inputs being fed into the computer by me. A lot of the time it's just pushing a button to say "next", and then right/left once or twice to press another button to grade myself. That's Enter, and the right and left arrow keys.

Enter the handy-dandy PS3 controller:

A nice feature of the Dualshock 3 controller is that it can be plugged into a PC via USB (or bluetooth, if such an adapter is present) and used as an HID gamepad. For the actual driver, I installed the MotioninJoy Gamepad tool. The key-mapping functionality on this, however, is pretty non-existent. The top result on Google for this is Xpadder. Granted, there are a lot of other cheaper/free gamepad-key mappers out there, but I was in a hurry and the fact that it actually costs money($9.99, via Paypal) led me to believe that it would have at least some level of professionalism to it.

A couple hours later - after some confusion probably related to a driver conflict caused by installing another PS3 gamepad solution prior that didn't work as expected, and subsequent manual uninstallation, I did manage to get to work quite nicely, even after a system reboot and device unplug/re-plug. Be sure to run that test on your setup.

I did (finally) get the controller to (mostly) work with my system, enough to do what I wanted to do with it, and the result is the above-pictured mapping in Xpadder. The d-pad is mapped to the direction keys (via the joystick x/y-axes, which surprisingly is not as much of an issue as I had initially thought it might be), alt-tabbing via R1/L1+(L2 or select), enter mapped to the X button, a simple Play/Pause mapping to Start for music playback while I'm SuperMemoing, and Windows system access via the PS button. The Square button maps to L-Ctrl, which maps to "Fire1" in Unity games. It's for after I'm done with Supermemo for the day :)

Drills in SuperMemo now seem like a breeze. It does really feel a bit more like a video game now than typing up a book report. The more keyboard/mouse-intensive repetitions are still done with a keyboard and mouse, although even those seem a bit more fluid now. It's like the usage of the keyboard/mouse is more focused, a la the McIlroy principle of "do one thing really well."

If this allows me to get through the material faster, awesome. What matters more to me, though, is that I do so with less mental friction. My thinking is that will help me learn the material better - more effectively. If I get more time during the day, more than likely I'll spend it putting this stuff into practice via one or more game projects focused more on implementation and practice than of design. And of course, if one or more of those happens to get to a finished state, and seems awesome enough, I'll be sure to put it up somewhere

Thanks :)

Wednesday, September 21, 2011

working / not working

i'm doing this because i want to.

creativity is emergent by nature, requiring a vast interconnected network of knowledge that is often times very disparate.

what separates this from any other job i've had in my life is that, because i have no boss, i answer to nobody but myself. in a way, this is freeing. it can also be argued that this can result in laziness. i think there's some truth to that. but i'd hardly call what i'm doing right now "laziness", even though there is no clear result being sought after at the moment.

what will happen is the creativity process. vines will grow from the seeds and entangle together into a tight mesh, and something new will form. if it's something good, i'll put it out there for you.

on a side note, i tried playing Patience again after a while of having not played it, and realized it is shit buggy in some spots. i'll have to fix that when i get time. if you happen to have any other feedback about it, please feel free to let me know.

just as the saying goes in the startup world that it's never about the idea, but rather the implementation of the idea, in the art world, a painter is only as good as their mastery of their technique. this used to mean being able to produce more and more photorealistic renderings on the canvas, but this changed radically with the invention of the photograph. traditional artists were now rendered obsolete for the most part by technology. instead of having your portrait painted to be hung on the living room wall, which required you to stand still for hours, perhaps days at a time, you only had to pose for a photographer, which took mere seconds. now it is done in an instant with our camera phones and posted straight to our facebook pages for all our family, friends, sorta-friends, and various not-so-strangers we've met along the way to see, tag, comment on, like, retweet, and who knows what else. art has become more in-the-moment and contextual now than about trying to render some still image of our so-called "reality".

i believe that games, with the advent of a number of new technologies in recent years, is on a similar cusp.

i am learning my craft, and look forward to mastering it some day, and sharing the fruits of it with you.

Sunday, September 18, 2011


I bought my first LED lightbulb today. Billed as long-lasting, energy-efficient, eco-friendly, and more pleasant on the eyes than CFLs, it doesn't take a huge leap in thought to see these as part of a "wave of the future" that is going on all around us. It's 2011, after all - maybe soon we'll be seeing flying skateboards and big-screen videophones on the walls, too. But this wave is no accident, despite having been prophecized for quite a while. It is the result of a lot of hard work done by a lot of super-smart people with often-times crazy work ethics.

The lightbulb has come a long way since first being made practical in 1879. Legend has it that Edison created several thousand prototypes before finally arriving at his finished designed, and only slept a couple of hours each day as he worked on these, presumably through a polyphasic sleep schedule. I don't know how true these are, and really don't like to be using history to justify present actions; however, the context in which I hear these statements is usually in regard to being extraordinary. If this legendary Edison were alive today, he'd be considered a bona-fide weirdo, and probably be laughing all the way to the bank (perhaps literally )

To be extraordinary, one must have the courage to not be ordinary - for that is the very definition of extraordinary. One must be able to not sweat the stares and quips about one's so-called "odd" behavior. If what you're doing works for you, then damn "ordinary" all to hell. One must have the courage and ability to fail - over and over, relentlessly, until, eventually, one reaches their goal. Because while the journey is certainly more important for one's personal development, it is the destination, the result, that everyone else will remember and aggregate into history.

"If I find 10,000 ways something won't work, I haven't failed. I am not discouraged, because every wrong attempt discarded is another step forward." -Thomas Edison

"He had no hobby, cared for no sort of amusement of any kind and lived in utter disregard of the most elementary rules of hygiene. [...] His method was inefficient in the extreme, for an immense ground had to be covered to get anything at all unless blind chance intervened and, at first, I was almost a sorry witness of his doings, knowing that just a little theory and calculation would have saved him 90% of the labour. But he had a veritable contempt for book learning and mathematical knowledge, trusting himself entirely to his inventor's instinct and practical American sense." —Nikola Tesla, on Thomas Edison