Sunday, April 10, 2011

Anti-Resume

One of my favorite non-fiction writers is Nassim Nicholas Taleb. Everyone should read his "Fooled by Randomness".

I was reading the second edition of his "The Black Swan: The Impact of the Highly Improbable" (note: this is not related to the recent Natalie Portman film). In it, he points out that it is far more important to deal with what we do not know than to focus on what we do know. He writes about writer Umberto Eco, who has a huge personal library and categorizes people by how they react to it. The majority focus on how many of the books he has read, and the (tiny) minority of wiser ones who..
"get the point that that a private library is not an ego-boosting appendage but a research tool... We tend to treat our knowledge as personal property to be protected and defended. It is an ornament that allows us to rise in the pecking order. So this tendency to offend Echo's library sensibility by focusing on the known is a human bias that extends to our mental operations. People don't walk around with anti-resumes telling you what they have not studied or experienced..."
This really got me thinking about how to become smarter. Perhaps I could benefit from building an anti-resume for myself. List out all the important stuff I'm ignorant (unlearned) or innocent (inexperienced) of and prioritize changing that according to what I hope will have the greatest impact on my brain-power.

So work on my anti-resume begins this week. I'll post one soon.

Resuscitating the Blog

I've decided to resurrect this blog, with a better-defined focus. Since the title eludes to my perception that I'm not quite smart enough, I've decided to try to rectify the situation. I rededicate this blog to that pursuit.

I'll be posting my search for ways to become smarter and the results of my experiments.

By the way, to follow up on my last post, some 4 months ago, I'm now down about 20 lbs. and 13 inches off my total "orbit". My body fat is down 2.35%. I'm about 20% of the way to my goal weight. The last month has been a rough one; I've made little progress.

Health has been shown to impact intelligence and mental ability. So, this is an area I cannot ignore. Really, it's an easy way to make some brain-gains. So today I renew my efforts to get in shape.

Saturday, January 1, 2011

New Year, New Body

I'm fat and I will no longer allow it to continue. I think I qualify as "morbidly obese", isn't that lovely?

Ok, I just checked. My BMI (body mass index) is 37.2, which puts me in Class II obesity, also known as "Severe Obesity", but not quite "Morbid Obesity". Whew! Dodged a bullet there. Makes me feel SO much better.

The Starting Weights and Measures are as follows:

282 pounds,
Waist 52.5,
Hips 50,
L. Thigh 27,
R. Thigh 26.5,
L. Arm 16,
R. Arm 16.5,
which adds up to a total of 188.5 inches around my parts (that's roughly the distance from the earth to the moon, I think).
I'm a bit over 73 inches tall.

On Tuesday, I'll have measures for body fat percentage when my new bio-impedance scale arrives. I'll be taking measurements daily. Since I'm a database programmer, you can expect charts and graphs and ratios and such as the data comes in over the year. I want to lose 110 lbs of fat, while adding 10 lbs of muscle, ending up at 182. I don't know if I can do that in a year. It'll probably take two years. But I intend to be well on my way by 1-Jan-2012.

The Launch starts today with a 21-day green smoothie fast. I and my wife and my brother-in-law are all doing it. That's certainly not a sustainable change, and it's not intended to be, but doing this will cleanse and detox our systems. So far today, I've had about a quarter pound of chard blended together with some berries. Can't say the kids breakfast of fried eggs and potatoes didn't look enticing, but I'm OK. I can do anything for a mere three weeks, right?

After the initial green cleanse, I'll be trying various diet and exercise combinations. I've been studying and compiling a plan. I've now got three weeks to solidify it.

Turns out I'm not travelling until the 24th, so this is a perfect time to have a weird 3-week diet.

Wish me luck.

2011 Predictions and Goals

2010 was an interesting year. I'm declaring it a success, though somewhat limited. We have spent exactly 1 year in our new home, now, and we're loving it. Still no deck and no garage, but the house itself is quite pleasant.

I'm not prone to new year's resolutions. I learned at an early age that I'm unlikely to follow through with too much and therefore I'll just be embarrassed. But this year I'm going to do it anyway. What the heck.

1. I'm obese. This year, I'll be doing something about that. As the hilarity ensues, I'll post my progress here. Hope you find it entertaining.

2. My contract work with DataSphere will improve, both monetarily and in terms of enjoyment. 2011 will be the last year of heavy travel, as we grow our Rose & Thorn database business large enough to hire someone to travel for us starting in 2012. I expect my income to rise 25% over 2010's showing, and only dip by 10% in 2012 when we hire some help to reduce travel.

3. I will have a playable version of my CSG product and be play-testing it by Thanksgiving 2011.

4. Keep doing what I seem to be getting right. My wife and kids are happy and love me. I've got a few friends that I admire and enjoy.

Wednesday, November 10, 2010

More CSG

My Coded Story Game project is just on my mind, so here's some more of that. If my kids are reading this someday in the future (decades from now), this should illustrate the way my brain works. I get on a topic and sort of obsess over it for a while. Then, when I've thoroughly exhausted myself, I can walk away from it.

Not exhausted yet.

I've been thinking about how I'll want to market the CSG. It may seem premature to think about marketing a product before it's even built, but I think now is exactly the tiime to do so. By defining marketing goals, I'll help drive the design of the product itself. It's got to conform to the way I want to sell it.

I occurs to me that the game play I'm envisioning would be just as easy to do for any genre or style of story-telling game. So I'll want to have the base game system, which I'm calling the "Effect System", be generic. That way, I can package as many individual games as I can think of. I can do a classic high fantasy, a sword and sorcery, a space opera, a hard sci-fi, a western, a WWII, a super-hero, horror, and anything else I set my mind on. I can do multiples of each of these, selling each setting/genre/color as its own game.

All of these can be stored in the same database. All I have to do is categorize the effects properly. That way, I can market varying games as their own subscriptions, or bundle them together in package deals.

Friday, November 5, 2010

Coded Story Game

I'm a gamer, into the old-fashioned role playing games. Not the computer ones, like World of Warcraft (those are ok, too, I guess), but the cool ones where people get together in a room and tell each other stories and roll funny-looking dice and look stuff up in books.

It's pretty hard to get any gaming done these days. As an adult, it's hard to find the time. I'm not likely to leave the wife and kids and go game once a week. Family time is too precious. Plus, coordinating everyone's schedules is nigh impossible. My old gaming buddies are scattered across the globe, as well, and finding a new group is like starting a new garage rock band. You won't like playing with just anybody. They have to like the same kind of music, at least.

In the last few years, most of my gaming has been done on the road. I gamed in hotel rooms with friends while on business trips. We all figure, hey, we can't be with the family anyway, so might as well make the most of it. To make this convenient, we switched to PDF versions of our books. I even created some simple dice rolling applets.

So there we were with everything we needed to play contained on our laptops. It worked great. At home, on those rare gaming occasions, I still found it easier to use PDFs on a laptop. Furthermore, I altered my little dice applet to handle the peculiarities of the new game system we were using, which made use of multiple dice types, where the highest of exploding pairs was selected. It had a to-hit roll and a separate damage roll, but the to-hit roll could influence the damage roll.

I spent an hour or so and coded these complexities into a little applet (did it on the plane ride, actually). Over several sessions (and more plane rides), I kept adding more detail and refinement to this little software tool. The more I automated the game system, that is, the number-crunching part of it, the more fun we had, the more story we completed, and the better our role-playing became.

The math and bookkeeping called for by this game's rules was easy, but any such stuff requires some share of a gamer's cognative powers. It's distracting, drawing your attention away from envisioning the scene and the actions of your character.

I know that in game design, there's always a trade-off between the versimilitude (call it “realism”, if you want) that you get from the simulation-focused rules and the complexity. In other words, taking into account all the variables makes if feel more “realistic”, but that added complexity makes the game unwieldy and slow. But computers can handle all the complex calculations in milliseconds. Using a computer, you can allow for vast complexity and not pay the price (except during the programming).
How far could I take this, I wondered. So this is my experiment.

I'm actually getting pretty excited by the idea.

I call it a "Coded Story Game".

Getting Specific
There are lots of computer-assisted tools available already. I'm tryiing to create something specific here, and it doesn't fall into some of the established categories.

My coded story game is close to traditional face-to-face pen-and-paper role-playing. I'm only taking the mechanics of the game system and expressing them as computer software tools. And not in the pages of a book that players must learn and master.

Almost everybody uses computers to handle their character sheets, write up notes about adventures, create maps for printing, etc. But mostly, the rolling of dice and the calculation of combat results gets done the old fashioned way. I'm going to provide tools that let the GM and the players click a button and generate results of actions, whether that be an attack on a foe or the use of a lockpicking skill. Furthermore, because the computer can instantly do the math, lookup untold complexities on reference tables, and  so forth, those generated results can be more specific and more interesting than simple numbers.

If your character is attacking an orc, for example, the computer can, at the click of a single button, account for a multitude of variables: your strength, your weapon type and its interaction with the orc's armor, the orc's defensive abilities (parry, counter, dodge, etc.), your agility, your skill level, and the orc's, both your health conditions (injuries, stun effects, poison, fatigue, etc.), your combat stance and style vs. that of the orc, and so on. Then it can make your attack roll, the orc's defense roll, compare the two (adjusted for all the variables mentioned), look up the results on tables that store juicy descriptions of the damage possible from such an attack, and present you, the player, with as many of those results as your attack roll qualifies for. You then choose which to read to the GM and game group.

Even better, since the complexities of the game system are contained in the software, players and GMs need not concern themselves with learning it. The player never needs to know what dice to roll, how to calculate damage, how precisely armor absorbs damage, or any such thing.

They simply run the software, make up their character (again, using an automated tool), and click buttons to do things. This frees the GM and the player to concentrate entirely on making decisions about what the charcter should do, what it looks like, how they react, etc., without the distraction of all the math and lookups.

Now I really want to have this thing be a product. I want it to be a database online that people can use to make and store their game worlds, their characters, custom monsters, magic items, spells, etc.

It should cost a subscription fee. Free to casual players, cheap for serious players, More for GMs.

Thinking outside the book
It's important to make this thing different. It must stand out. But without losing what is best about pen-and-paper experiences. Each of the elements of game design: character generation, task resolution, advancement, combat simulation, and such must be done not as per usual, but by leveraging the computer's power.

The computer makes you powerful as game designer. You can do stuff that you can't in a manual game system. Complexity is not a problem, lots of rolls is no problem. Difficult math is no problem. Large numberrs are not problem.

All the stuff you have to abstract becomes fair game again.

1. Complex interactions (armor type vs. weapon type),
2. Detailed injury tracking (blood loss, detailed wounds, disease),
3. Detailed movement and encumbrance rules,
4. Vast and numerous result tables (e.g., wound charts by monster and attack form),
5. Huge arrays of variables, all accounted for (e.g., how strength mitigates encumbrance of armor, for example),
6. Weird, fun, and creative character generation (simulated back stories)

The GM side of things should be pretty cool, too. What if the GM can have a database for designing his world and campaign.

If I properly categorize all the entries on the content tables (say, like monster attack descriptions, and magic effect descriptions, and weapon damage tables), then it should be possible to allow the GM to customize the experience he will provide his players.

There can be "dials" for setting his preferences as far as lethality of combat, the rating of damage descriptions (tame, bloody, or total carnage), language used (allow profanity? how about simulated profanity like "frak"?), what kinds of magic effects are possible, strength of magic, effectiveness of missile weapons like bows, technology levels allowed, monsters allowed, player character generation rules (how many design points, what sort of randomness to allow or demand), and so forth.

I intend to start on a prototype immediately.

Thursday, November 4, 2010

Simple

So the thing I tell myself, over and over, every day of developing code is this:

Keep It Simple, Stupid.

This little maxim is important for everybody, of course, but for us programmers it's the most important thing there is to remember. You see, programming is hard. Software is hard. It gets complicated really fast. Programmers tend to be really smart people (not like me, I'm just a little smart), but even they cannot handle the kind of complexity that software demands. Not remotely.

Most of what programmers do, in fact, is work out ways to simplify the vast complexity that is their code. We do things like "refactoring", which is a fancy word for re-writing code to make it clearer and simpler.

We have tons of little sayings, maxims, truisms, and so forth to remind us how hard it is and what tricks and disciplines we need to practice to simplify it all. We remind ourselves to DRY (Don't Repeat Yourself). We encapsulate and modularize. We loosen our coupling. We abstract. We hide implementations. We make and use frameworks. We maximize code re-use). We use (and analyze and debate endlessly) best practices.

We have formating standards and naming conventions and color-coded coding and integrated development environments with advanced intellisense and just-in-time compiling and graphical object and data modeling languages that look like complex flow charts (but they're much more complex than they look) and tools that can generate code from those diagrams (but nobody really does that).

We have many languages, each with advantages and drawbacks, each with a religious following and an equally religious opposition. When structured programming (FORTRAN) wasn't good enough anymore, we moved to procedural programming (C). When procedural wasn't good enough, we moved to object-oriented (C++, then C#). Now that's not good enough and we're wondering if we should go to functional programming (F# anyone?). We have low level languages and high level languages and visual languages and database engines and web servers and communications protocols and standards galore. We have debuggers and version controls systems and user interaction conventions and change requests managers and virtual machines and automated test harnesses (that we really should write first, before the thing they'll test). Did I mention the competing methodologies? Waterfall (blech) vs. Iterative Rapid Development vs. Extreme Programming vs.... Oh never mind, it's endless as the accelerating and expanding universe. And that's just the computer stuff, I haven't even touched on the complexities of any given problem (business) domain.

So, I need to simplify.

Here's the best way to write simple code:  don't write any code at all. Use your head and figure out a way to do what you need without code. If you utterly fail at that, try again. Try harder.

If you still fail, try even harder to work out a way to accomplish your goal with very little code. Even less than that, if you can. That would be very, very, very little code.

The less code you write, the fewer bugs you'll create.

This is the thing I did today. I went at that Meta-Manager program and figured out a way to do it without writing any code at all. Subsequently, I'm finished. And it's bug-free. It doesn't have some of the features I was dreaming of, but the extra time it'll take to use won't begin to equal a tenth of the time it would take to write and debug the code those features would require.

I'm going to make do, and I'm happy. Because today, I actually managed to keep it simple.