Soul Cycle free today.
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 29 June 2015, 8:34 am
Soul Cycle is free today on Amazon. Please take a moment to download it.

Good Programers Think In 4D
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 4 August 2013, 6:10 pm
I was musing about the different developers I meet, and I began categorizing and labeling people. Never a nice thing to do out-loud, but something that can help you understand why some people are so much more successful than others as software developers.

So, this is where I get theoretical, metaphorical, and a little pretentious.

I think that in college they teach you syntax. If an application was a plane, syntax would be what gives it lift -- it gets your code off the ground. If you don't know syntax, the program won't compile and writing working code is hopeless. Every professional developer knows the syntax of the languages they work with. It is fundamental.

Another skill you are taught in college are solutions or patterns to typical problems. Problems can be broken down to smaller problems and each smaller portion solved with simple bits of code. Everybody makes a big deal out of design patterns and algorithms, but they are simply the fundamental tools of solving problems. The more tools you have, the quicker and more readily you solve problems. If we stick with the airplane metaphor, this is the skill that gives your development cycle thrust. It propels you forward.

A skill you aren't likely taught in college, but learn either on your own or by having coworkers nag the crap out of you, are destructive habits and patterns that lead to bugs. This area of development tends to be filled with subjectivity, misinformation, and good intentions. Poor developers will cling as tightly as they can to the building block patters they know, but not understand why that -- when they put these perfect patterns together -- they don't get working software. In our airplane metaphor, the ability to avoid common obstacles gives our development cycle lateral movement, allowing us to bank left or right and find a workable course toward our destination.

The fourth and most common mental skill to be a "good programmer", in my estimation, is the ability to see ahead of your current position in the development cycle. You've plotted your course by laying out a great design, avoided habits and anti-patterns that might making your application fail to work properly, and it is syntactically amazing. Then everything goes wrong because you didn't see the ramifications of one little change. You put in a line of code in one file to adapt to a new requirement and -- wham! You smash into a wall of bugs. First, one other completely unrelated feature stops working, then you put a bandaid on that only to notice more issues. A good programmer will know before they make a change to the code (a change necessary due to requirements or other bug fixes) what the ramifications are and whether the change will cause future issues. In our airplane metaphor, it's about the pilot thinking ahead, seeing problems before they are really problems and avoiding them. For our development cycle, that see-and-avoid mentality when making a change saves time, money, and a lot of late nights at the office.

That's all it takes to be a good developer. Sounds easy.

There are people who are more than "good developers" though.

Not everybody has a mind for five, six, and seven dimensions. So this may not be the best way of describing this whole concept. I've given you four dimensions so far, and I hope it wasn't too much of a stretch. Don't feel bad if it is. It doesn't make you dumb. It's just a concept that isn't natural to everybody. Unfortunately, I'm doomed to continue this description. That fourth dimension of time -- seeing ahead of the development cycle assumes that if you make the changes you plan to make that no outside factors beyond your current knowledge will influence your development cycle. So, we must continue on!

A fifth dimension is the lateral possibilities. The ability to see alternate patterns that achieve the same goals, but have different tradeoffs. Sure, you know a few design patters and can string a few algorithms together to make something happen. Good for you. But solutions aren't black and white. Every solution has tradeoffs. Seeing which perform better, save memory, and cost less time or money to develop give us a whole line of possibilities. What problems might arise from each choice, and what are you going to do about it? This dimension is simply about understanding that no one solution is perfectly right or wrong and that every one has tradeoffs.

A sixth dimension is the forward possibilities. The ability to prepare for features that nobody has thought of yet. To provide the extensibility and forethought in your design and choices of lateral possibilities that you account for the likelihood and needs around requirements that may someday exist. These are the non-technology possibilities -- the business and people factors that impact the development cycle by creating new, profitable, and interesting directions for the software you build.

The seventh dimension is the vertical possibilities. The ability to look at the two dimensional array of possibilities in the fifth and sixth dimension, and see the impact of evolving technologies and the ecosystem in which your software exists and must adapt and survive in. When a project starts, you might think you know what hardware your application will run on, which database you'll use, which browsers you'll support... whatever. It is easy to take this for granted. Knowing that some of your choices will be more restrictive and unforgiving to changes in the technological ecosystem your application lives in could be costly.

Do the best developers think in twelve dimensions? I don't know. I thought of these seven while eating a burrito at Chipotle for lunch today without any real effort into digging for deeper arrays of meaning. Seeing an eighth dimension is actually a fair amount of mental gymnastics and too much heavy lifting while enjoying lunch.

I look at the young people coming out of college and the people on their second or third career, and I want them to know that there is more to development than syntax. That they can be a good developer, but that we should strive to be more.

I tried to break down and simplify that which I don't really analyze when I myself am making choices. I simply study the problem and evaluate the myriad of choices before me and select what I think is the most pragmatic and likely choice. After all -- being able to see all of the possibilities, if there is such a person, isn't as important as being able to find the most probable and pragmatic path through to the successful release of your software.

You don't have to build a solution that can be extended in every possible way -- sometimes it is enough to know that if that possibility exists, you haven't made it impossible. Acknowledging and knowing what you are doing is part of it. We mitigate risks, we do our best, and in the end, we make the best choices we are able to. I don't always make the right choices, but with every passing project I become better at it. You learn from experience what outcomes are more probable and it helps you make those best decisions.

I won't say "correct" decisions -- because saying that one solution is right or wrong is something that only a person who doesn't see possibilities can dare say.

Pen and Paper Birthday Adventures
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 4 August 2013, 4:58 pm
My birthday is coming up in a few days and, to celebrate the big four zero, a few friends came over to play games. We started off with some League of Legends, in which the twenty-one year old in the group promptly crushed us senior gamers, and then transitioned to the cooperative game Torchlight II. Both of these endeavors were a ton of laughs and good times.

At the beginning of our get together, we spent a little time ogling the pictures for the next Everquest... er... Everquest Next. (

After daydreams of old EQ raids, we started playing some LoL. I had never actually played a 1v1 against any of my friends in League of Legends, despite having played it countless hours and owning all of the champions. I knew that I would get crushed and that outcome was not a surprise, but still a great and fun experience.

Torchlight II is so fast paced and frantic that it is tough to really absorb the storyline in a multiplayer setting. You grab quests in World of Warcraft-esque click-accept-as-fast-as-you-can fashion and then continue on hacking and slashing. The game is attractive looking and it was just entertaining to spend time with friends, but I think that as a game, it wasn't very immersive in this format. We moved at breakneck speed and there wasn't time for reading quest text or even really making detailed and informed decisions about which skills might be best. Just keep pushing and clicking. We would have had an equal amount of fun playing Monopoly.

However, after about seven hours of digital gaming, my good friends indulged me in a little old fashion pen and paper gaming. In anticipation of this get together, I had invested about three hundred dollars in all of the latest core Dungeons and Dragons books, dice, and tools. A very expensive investment for one night of fun with little chance of using those books ever again (if my purchase of the third edition of Dungeons and Dragons books is any evidence. I think we played one time.) Forget the money, though. It was a blast.

I suspect that if you were trying to play on a budget, you could get away with buying the Player's Handbook, the Monster Manual, and then getting a one month subscription to the D&D online site that lets you build characters. ( This tool, though a little buggy, is totally worth the ten bucks. Hell, if you really know the rules, this is the one and only thing you need to play in many situations -- well besides either dice or an app for your phone/computer that acts like dice.) Having the official Monster Manual is not essential, but I would definitely recommend it. If you don't really know the rules, you probably should have the Player's Handbook handy.

I spent roughy twelve hours rolling up characters this week in preparation for the get together. Why so much? Well, I hadn't played in ages, and I know from experience that it normally takes a long time to roll up characters by hand. So, I wanted to make sure that we had a bunch of pre-built characters ready to go before starting to play.

How many times have you and your friends gotten together to play D&D and then spent the next 6 hours creating characters on that first night, without killing a single kobold?

As this was likely the only time I'd play in the next decade, I wasn't going to let the entire evening be about rolling new characters. So, I made a slew of choices for my friends to pick from. Once I got good with the character builder tool, I was able to go a little faster. Still, as I wasn't familiar with the fourth edition classes, races, or any details of them there was a lot of reading to do to make every decision. You could have the character builder generate decent characters for you, but I really wanted that handcrafted feel.

Because I was perfectly aware that this was not an ongoing campaign, I decided that all loot and experience would be accelerated and that we'd level up after each major milestone of the night -- about once every two to three hours. We'd go back into the fancy online character builder, level up, have new loot assigned and equipped, and then print up brand new character sheets. Yes, we went through a fair amount of paper. Had we thought about it more carefully, it might have been easier to distribute PDF copies of the characters after each level up. However, it is so nice to have real paper sheets to write on during combat, encounters, and to take notes on about the adventure. By the end of the night we were printing two pages per sheet in landscape mode, just to save ink and make the stack of used paper smaller.

On the whole, I think this accelerated advancement was a good choice. It kept the game interesting and allowed players to continually do something they like to do: develop and improve their characters in dramatic fashions. We were leveling up and roughly the same rate you might in World of Warcraft, and for this occasion, I think it was perfect.  Even if this was going to be an ongoing campaign, I think I would still choose to advance the characters faster than traditional -- and if we reached some pinnacle of power, then simply start new characters and a new story.

In general, the latest edition of Dungeons and Dragons is better than older versions. There were a few gripes that I had. The indexing was horrible. If you wanted to know about a rule that you were certain you saw five minutes ago... good luck. Between the table of contents and the index, you might have to dig through three to five books and still not find it. It was easier to do a Google search about the rule. On the plus side, most of the new rules are much simpler and once you got the hang of it, you didn't need to consult tons of ridiculous charts and tables to do things. It was a more streamlined process than the D&D of yore. I won't say that the Dungeon Master's guide was worthless, because that would be mean, but really, if you've been a DM at any point in the last thirty years, you probably don't need to see it. They actually have two Dungeon Master's guides now. Complete waste of money in my opinion. They seem more like feeble attempts to pick gamer's pockets than to actually provide real value.

The new Monster Manual was, in many ways, superior to older versions. It gave tips on encounter groups and offered encounters by level that let me put together many impromptu ambushes. It lacked the detailed charts by terrain types and such that you might have found in the old Dungeon Master's guides from back in the day, but it was still functional and contained a lot of my old favorite monsters. For the new DM, it might be a little overwhelming to find monsters appropriate to the climate, geography, and setting that your adventurers were in. As an old hand, I wasn't hindered. I do think this was an oversight on the part of Wizards of the Coast.

We played until sunrise -- roughly twelve hours of hacking, slashing, and falling into pits that were completely avoidable. Laughing and giggling like teenage boys. The time was definitely well spent. Now I itch to play again, knowing how unlikely that is.

I just played Jax
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 5 January 2013, 11:51 am
So, I've been playing some League of Legends lately. I have been so immersed in writing my last book for so long that now that I've come up for air, I admit that I would probably be enamored with anything more entertaining than bubble-wrap. I typically play MMOs, though I have played RPGs (like the Torchlight and Diablo IPs) and RPGs (Starcraft, Warcraft, and all the way back to Dune.) I don't have almost any experience with MOBAs. I think I might have played DotA one time in its original form. 

I think the most essential part of playing League of Legends is to join the Low Elo community. They encourage a helpful, "stay classy" attitude that makes playing a pleasure. The solo queue is filled with people who will rage and blame and do anything but play well. When you login, simply join the "lowelo" (or "lowelo2") chat to look for people who aren't jerks. Just remember, it goes both ways. Don't blame other people when they die and try to be supportive. The game is more entertaining when everybody is laughing and enjoying themselves rather than swearing at each other and assigning blame.

I think my favorite format is the 3v3 Twisted Treeline map. It is non-stop action and entertainment. The 5v5 map is slow and a bit tedious. I really don't like that the "meta" (at this point I hate the word because everybody misuses it) where it has become a requirement to have a support character. Being a healer is boring in most games, and it is beyond my comprehension why Riot would encourage this mechanic.

I'm sure there are a few people out there who would immediate scream at me for how much they enjoy being the healer. I'm glad you enjoy it, but I think you are in the minority. I think that there is nothing heroic about being the healer. Sure, you make the team better and it is a team game, but you are the first one blamed when things go wrong and the last one to get credit when things go right. It's an awful position simply asking for blame assignment. This brings me back to the 3v3 games, which don't seem to have room for characters dedicated to full support. Maybe this will change, but I hope not. I probably will stop playing if it does.

Despite all of the things that Diablo III did wrong, this may be one of the things they did well. Nearly every character was capable of finishing the game on their own. Well, that's mostly true. With the proper gear they were able to finish the game. There was an issue where you relied on more sturdy characters to first put those items up for sale and you had to farm gold to buy it. That actually is a similar issue. People want to be self-sufficient, even in a team. Well, I shouldn't speak for the entire universe of gamers. I'll say that I like to be self-sufficient, even if I'm playing a squishy character.

If you have a spare hour to play a game, check out League of Legends. I think it is a lot of fun if you can find people to play with that aren't rude and obnoxious. I'm lucky to have a number of friends who play, but we've filled in empty slots from the Low Elo chat whenever we've needed more.

Before I sign off, I wanted to mention that my first book (Tritium Gambit) is still free on Amazon and iTunes, so get out there and pick it up if you haven't read it.

Initial reactions to League of Legends
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 1 December 2012, 6:04 pm
I love the art style of League of Legends and the gameplay seems pretty good. I was pretty excited about this RTS, right up to the point that I tried to join a player verses AI game.

After 10 minutes of waiting for a game to start, there were finally enough people to make a match and then after everybody accepted, nothing happened. At all. After a few minutes, I closed the client, restarted it, and it immediately prompted me to rejoin the game that I "abandoned." Presented with no other choice, so I clicked the "rejoin" button. The computer still shows that screen 30 minutes later. Ah well. The tutorial games are educational and the game looks really good.

My oldest son has been playing the second tutorial mission repeatedly for a few hours now and he's been having a great time. As my machine is simply stuck waiting, I've had plenty of opportunity to watch him duke it out with the AI. I think his Starcraft II micromanagement skills are shining through.

There do appear to be somewhere close to a billion choices you have to make when it comes to picking mastery points, skills, items, etc. It makes the game appear to have a lot of depth. I am a little concerned that my son is too young to really understand the repercussions of each of the myriad of decisions he's making at lightning speed, but maybe that's just because I'm too old and too cautious.

If you are looking to play this game, I recommend it. It's free, which is a pretty good price, and despite the fact that it hasn't worked very well for me with cooperative play, I think the game has a lot of potential. I'll warn you now that the install time is fairly long. I have a 50 megabit connection and it still takes a pretty long time to install and patch. I have friends who play PvP, so I know the game works, even if I have yet to experience it. I'll give it another try once the client allows me to play again.

First book free on iTunes
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 23 November 2012, 11:57 am
I know, I know. I haven't talked enough gaming lately. I've been busy with writing.

If you haven't read my first book, Tritium Gambit, it is free on iTunes today:

The second book is on Amazon and Smashwords and will be on iTunes and Barnes and Noble soon.

Thank you for downloading it.


My new book
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 18 November 2012, 5:46 am
I am pleased to announce that, after months of toil, I have released:

The Kindle edition of Mercury's Curse is available on

Eventually, I expect it will also be available on Barnes and Noble, iTunes, and Smashwords. I do not have an ETA. The paperback edition will be available in roughly a month on

The most expensive game I've ever played (other than EQ)
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 4 November 2012, 7:24 am
I can't even recall how many EverQuest expansions I've purchased. I lost track somewhere around Omens of War, but I've paid full price for most of them and then when I four-boxed, I had to purchase new copies. Hands down, I've spend more money on EverQuest than any other game. With the years of monthly subscription and in-game purchases of XP potions, I'm going to guess conservatively at over $1000.

However, I have a new runner-up. As I mentioned recently, I purchased copies of Torchlight II for my two boys, but the router kept crashing. Since the router worked for every other game we've played (and between the three of us, we have play a fair number of games), I was upset.  I ensured the firmware was up-to-date and checked the settings, but the best I could do was get two players in a group for ten minutes before the router crashed. If I tried to join their game, it would crash instantly.

Since my boys really wanted to play together, and I was planning on playing with them once I finished my manuscript, I bought a replacement router--the same near top-of-the-line $180 router (an Apple Airport Extreme) I had previously. (Why the same brand? Because it had always worked flawlessly in the past and it had the nice feature where I could transfer settings effortlessly. Hindsight being what it is, I should have known I was making a mistake.) Well, that didn't fix the situation for my boys and they were unable to play the game over the Internet. I was empathetic, but also busy trying to finish revisions on my story, so I didn't have enough time to really dedicate myself to solving the problem.

So, this weekend rolls around and my manuscript is at the editor leaving me with far more time than I've had since August 1st when I buckled down to finish that novel. I have plenty of work to do around marketing and distribution for my book, but I wanted to take a little time off and play games with my kids. Determined to solve the networking issue without resorting to Tunngle, I pulled out old routers from the cabinet where all discarded and extra computer parts go, waiting for that glorious day that they can be reused.  I don't think any of those spare parts ever get reused, but this was their chance. Pushing aside SIMM chips, I started with a 90s-style single-purpose 10/100mb switch, figuring that it would at least allow local play. By the time, I walked upstairs, I realized the flaw in my plan: Of the three computers only two actually had ethernet ports--the other one was wi-fi only. 

Irritated, but not to be deterred, I dug further into my cabinet of discarded toys, only to come up with a cable bridge and two ethernet-only routers. I must have recycled or given away past wi-fi routers, or my wife has been slowly and clandestinely clearing out the cabinet like Tim Robbins

Already $240+tax into the game (one router and three copies), I decided to buy a new router. So, I put another $180+ dollars down. The three of us played flawlessly for over an hour before the Major League Gaming Starcraft II matches sucked in my older son. Not that I mind. I love watching MLG.

I'm not sure if there is a moral to this $420+tax story. Maybe, don't buy the same router you already own if it didn't work the first time. Or maybe, put a lock on your computer-parts cabinet. However, now we should be able to get in some good, quality family time beating up monsters in Torchlight II. It was fun, even on the normal difficulty setting to just march around and slaughter hordes of monsters. With the blood splatters turned off, it reminded me of the original Diablo more than Diablo III.

Networking woes of Torchlight II
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 29 October 2012, 9:22 pm
My two sons have been playing Torchlight II (with the blood splats turned off) and are having a great time with the solo game. They've been begging to group up and play together, but the game's out-of-the-box multiplayer capabilities are useless. The first 4 times I tried to set them up for internet play our router crashed. I've never had that happen before with any other game, so I didn't realize what was happening initially.

Now, I'm going to have to dig out an old router and set up a lan game for them on the internal network that I can safely disable all the security on.

Despite the game's high entertainment value, I feel like the online play aspect was completely neglected. I believe the game uses UPnP exclusively for multiplayer without any other options for route traversal. I haven't researched the issue very long, but frankly, I expect modern games to work out of the box.

I give Torchlight II five stars for single player fun and zero stars for multiplayer. Once I have my book safely out the door, I plan to spend some quality time with my boys playing the game, but I really hope that we come up with a better multiplayer solution than hooking up to an old router.

An Agile Story
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 29 October 2012, 7:03 pm

Applying a development methodology to storytelling

I write software. I have been a developer on games, databases, distributed queues, web browsers/servers, proxies, voice over ip clients/servers, VNC clients, and even a search engine. However, in my spare time, I write stories.

With both my books, I followed some of the principles of the Agile development process:

  • Maintaining working a copy. From day one, I started with a one page summary of the story, and then, rather than start at chapter one and write to the end, I wrote sketches of each chapter all the way to the end. When I say "sketch", I don't mean that I pulled out Crayons. I wrote brief summaries for each chapter that summed up the action, the motivations, and the plot. Then each pass through the manuscript, I would flesh each of those sketches out more. At any point, you could read my story from start to finish and know what was going to happen. Were each of the half-dozen phases as dramatic, funny, or exciting as the final product? No. However, it was complete and told a story.
  • Iterate. I chose short two week periods that I set goals for myself on what I would accomplish on the story. Early on, I designed the characters with their motives, yearnings, codes of conduct, and for major characters I established what dilema they would face. Each iteration, I fleshed out different aspects of the story and brought it closer to completion.
  • Simplicity. Rather than focus on every possible detail of universe building, I waited to sketch out details until I needed them. I keep spreadsheets and documents with nothing but these universe building details, however I didn't write up anything that I didn't have to use for the current story. Not really the Tolkien way, I'll admit.
  • Focus on the customer. With every chapter, I try to pay attention to the entertainment value of the story. Is it funny when it needs to be funny? Sad when it needs to be sad? Exciting? Engaging? I happen to be my first and most critical customer, so the story has to entertain me. I know that I can't please everybody, but I try to be consistent with my work so that people who found my first book entertaining will find my second equally enjoyable.
  • Share with the customer. I selected beta readers and let them see the story in its form starting with the first draft that was rich enough to resemble the final product. This was around 45,000 words. The final product, after iterating through, is more than 70,000 words. This aspect of the process was probably not ideal. Stories take a long time to read and tales that resemble sketches lack the same entertainment value that a finished product will have. I'm not certain how I will address this in the future, but I see it as a weakness in my process.

I would say that, with the exception of utilizing beta readers too early in the process, I think that the process has been successful for me. I'm going to continue to refine how I write. I think the strength of starting with a working story and iterating over it to refine a finish product reduces the risk of making major mistakes that require rewriting the whole manuscript. I think the disadvantage is that you have to know when to call it done because you could spend your whole life polishing.

Pen & paper
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 19 October 2012, 9:23 pm
I'm not sure where this feeling has come from, but lately I've had an itch to play one of the old fashion pen and paper RPGs. Any of the classics would work for me right now: D&D, Shadowrun, GURPS, or even Paranoia (the game where everybody is your frenemy.)

I don't remember the last time we faced the insurmountable odds of a frontal assault on Tiamat's lair while being improbably flanked by Orcus on one side and Strahd von Zarovich on the other. A battle that would take four hours to fight with the use of many twelve and twenty siders (that would frequently--and quite accidentally--fall to the floor whenever they teetered on the edge of a one), and six more hours to roll loot using the complicated treasure table where everybody would groan when they found art.

Our characters would then face the daunting task of trying to lug the billion electrum back to our castles. There would always be at least one girdle of giant strength and one girdle of gender change...and despite our abilities to alter realty at will, nobody could determine which was which.

Oh, and why is the effing rogue passing notes back and forth with the DM and smiling so much. Sure, we all should be happy we won the day against impossible (and rather unlikely) odds... well, except the paladin who died to friendly fire (oops), but the rogue seems more pleased with himself than usual, which is saying something. And to think, the entire adventure began in a tavern after a brawl with dwarves who didn't like the smell of our beer. No matter what devious attempts we made to avoid the DM's well laid plans, he kept his smile. Though, how we found ourselves in the fifth circle of hell, I'm still a little confused over.

Sometimes I wonder if MMOs are robbing the teenagers and twenty-somethings of the experience of playing games fashioned only in the absurd imaginations of their friends. These adventures, no matter how ridiculous they were, have left an enduring impression on me, even after twenty years. Unfortunately, these games take so much time to play and require physical proximity, that getting the guys together from across the city, state, or country is nearly impossible to schedule. Add in the scheduling complexity of the kids' ballet, basketball, soccer, karate, and then there is the all important wife-time. I'm not blaming kids or wives for the lack of RPG time. I'm just saying that growing up and having a family makes it difficult (and maybe a little, tiny-bit irresponsible)  to waste 40 hours in a weekend on fighting imaginary demons. At least I have those memories from college and high school.

Before they grow up, get real jobs, and get married (which if you are reading this you probably are still safe for a few years), I hope that kids today get a chance to get off their computers long enough to waste time with their friends IRL, eat pizza, drink soda, and laugh so hard that they made somebody very uncomfortable about touching that twenty-sider that's just been spit on.

On a personal note, I'm spending nearly every waking hour finishing my latest book. If you are interested in seeing what I'm working on, please consider stopping over at my kickstarter project:

I'm offering the book for $1 for the first hundred people.


City of Heroes, Guild Wars 2, Torchlight 2, and Pandas
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 2 October 2012, 12:28 am
So, I'm behind the times. I read today that City of Heroes is going away. At first I felt saddened by the news and then began examining why I hadn't logged in in ages, even though they went free to play some time ago. I bought the game to play with my friends and it initially had seized my imagination.

What I think eventually turned me away from the game were a few factors. First, they attempted to build group roles into characters rather than let people explore completely new sets of abilities and finding a way to work together. I think this is one of the more recent flaws with other games like World of Warcraft. Early games like Everquest didn't so much set out with the goals of having a character be a tank or healer or whichever. The characters were designed around an idea. Some point of imagination and the roles sprung up around those ideas. Part of the fun and enjoyment of those early MMOs was discovering the characters, getting caught up in their uniqueness and flaws and then making them work. Sure, the games could be horrifically unbalanced at times, but it wasn't about balance. It was about having our imaginations run wild. To have possibilities and to sometimes abuse them a little.

I have played a little Guild Wars 2 lately. Very little, since I'm spending nearly all of my "free" time  working on the sequel to Tritium Gambit. Still, a guy has to play a little, right? Unfortunately, the game might be pretty, but it runs far too slow on my laptop to be enjoyable. The only reason I haven't uninstalled it is because even if eight-frames-per-second is agonizing, at least I get to spend time talking to a friend on Skype. Should I get a new computer? Probably. First, I need to sell a whole crap load more books.

Related to Guild Wars 2 being a complete turd on my machine, a friend of mine pointed out how much fun Torchlight II has been for him. He and I had spent quite a few hours playing Diablo III and that was enough to get me to install the game. I haven't had time to play it yet, but the first hour or so that I experimented with it were excellent. I'd highly recommend to folks to at least download the free demo from Steam. The game was built on the Ogre rendering engine, which I think is a fantastic accomplishment. Runic has said they will release a Mac version of the game eventually and I'll be first in line to purchase it.

I still play World of Warcraft weekly with my dad and two sons. My boys are loving the Pandarians. I think this really breathes new life into the game for them. Personally, it didn't really stir enough emotion in me to want to commit any extra time to the game, but I do appreciate that it gives my kids new material to explore and enjoy. From what I can tell, the starting quests aren't as painful as the ones for the Worgen or Death Knights. Yes, yes. You did the starting quests for both the Worgen and the Death Knights in less than two hours. However, you aren't six-years-old, like my youngest, and you didn't need to have your (very patient) dad read all of the quests forty-billion times whenever you decided to delete your character and start over. Why would anybody delete their character and start over? Apparently, because that's what you do when you are six-years-old.

The Nature of “Good” Code
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 14 September 2012, 7:44 am

Developers who are young and still starting their career often focus on semantics and formatting to help separate good code from bad code. They lack the ability to easily parse and absorb code at a glance and rely on formatting differences to create their definition of what is considered good or bad code in their eyes. I’m here to tell you that where you put your curly braces or your line length doesn’t offer clues as to the quality of the code.

When introduced to a new team with an existing codebase, you can expect most developers to start off making tactical changes. They don’t know the codebase well enough to have absorbed it all in one day, but if they have a reasonable amount of talent and knowledge, they’ll pick up on patterns that they’ve seen before and quickly find a reasonable place to insert logic that achieves the goals of a specific task set out for them. Meeting the requirements of a task doesn’t require understanding the entirety of a codebase. We want to cheer on these people for adapting and being productive quickly. Hold the applause for a moment.

Tactical changes—changes that don’t account for the overall health and quality of the codebase—are at best benign and at worst harmful. It is the job of the technical lead and other developers of that codebase to review new changes and offer strategical advice to that developer as they grow in their understanding of the codebase. I expect developers on my team to transition to more strategical thinking at their own rate—depending on their experience, the size and complexity of the codebase, and how many other people are in the codebase changing it from day to day. Developers who cannot make the transition as a strategic partner or who don’t have the same vision as the technical lead of the project can be a drain on the project as a whole.

Tactical code has a place in every project. In the interest of time and budget, we are often forced to create code that is strictly tactical in nature. We call this type of code “technical debt” because we know that someday we’ll have to pay to bring it into the fold.

We each may have our own strategic goals and I believe we should each set them for ourselves. The enduring goals of every codebase I contribute to include being maintainable, concise, specific, efficient, and self-documented. Strategic code furthers these ends. Tactical code completes a task without regard for any other factors. I’ll elaborate on my goals in the hopes that you may find your own.

Code that is concise needs to be legible. I’m not trying to incite people into using ternary operators and embedded incriminators in their array indexes. I’m trying to say that methods, functions, and classes should be short, to the point and directed at achieving a small amount of functionality. This makes the code more testable and legible. If we name things appropriately, we should see what a method is setting out to do and then see it do it by calling other methods named in such a way that we know what is in the box before we look. Long methods and classes take time for developers to mentally parse and absorb their meaning. With descriptive names, the code should read easily and without the burden of comments that will only go out of date and eventually be inaccurate. 

This leads me to self-documentation. When you are writing a framework for others to use, you may have to document APIs to offer a starting point, but even something as public as a framework should be usable by the names of classes and methods. If others can’t tell the behavior of a method or purpose of a class by its name then it must be renamed. If it cannot be renamed to be meaningful, then it should be broken up into smaller pieces or discarded entirely. 

Code should be specific in that it doesn’t set out to achieve every goal and make waffles, too. Achieve the goals set out for your application and don’t write a line of code more. Too often, I see people adding methods, interfaces, and classes for some future day that doesn’t come. IDEs are powerful and extracting an interface when you need it is easy and modern mocking frameworks don’t require you to have an interface to create a test. Make them when you genuinely need them. All the fluff only clutters up a codebase and makes it more difficult to understand and trace through. We aren’t in the 90s any more when refactoring code was a more manual process. I’m begging you: stop creating stuff we’ll never use. A smaller codebase is better for everybody.

Efficiency is something that is easy to go overboard on. I’m saying that, strategically, code should be efficient, but I’m not saying that every line should be optimized, rather I’m saying that it shouldn’t be wasteful. Assigning default values to be reassigned in a constructor? Creating order n^2 complexity functions? Bubble sort? Seriously. There’s no reason to be wasteful of memory or CPU. I’m not advocating that you profile every method and try to tune it to perfection. I’m simply asking people to use common sense. If the application needs to be profiled later, there will be less noise. Efficient code can be legible and should be. However, attempting to reduce one line of code while joining strings with commas is a pet peeve of mine. It won’t make it more legible. We’re computer scientists, we can read a loop with a single if statement in it.

When I say that code should be maintainable, I mean that it should be both testable and tested. Code that is testable can be refactored and, once tested, can offer new developers insight into the code. I am not an advocate of Test Driven Development. I believe TDD lends itself to tactical development. Some of the least strategic code I have ever seen has been done TDD and has also been the most error prone. It is easy to live in the moment of the one test and the one goal and lose track of the big picture. You can do TDD and be strategic, but the less experienced developers are easily focussed on edge cases and a specific goal. With mocking frameworks being what they are, you can force nearly any code to be tested but simply having a test doesn’t make code good either. Even if you can’t agree with me about TDD, I think most developers can agree that code must be written to be testable. Whether you write your tests first or second, I will leave that up to you.

You may find and value other strategic goals in your codebases. I think defining those for yourself and sharing them with your team may help everybody on your team be more successful.

The best items in Diablo 3
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 26 July 2012, 10:04 pm

Diablo 3 is not as entertaining as it was once you've beat Inferno difficulty and the only thing left to do is collect socketed rings. I have to admit that defeating Ghom was a huge pain in the butt.

I beat Ghom by spending about 200,000 gold in armor repairs and patiently learning to kite him very slowly around the small room. I had 40k health, 21k dps, 1200 loh (life on hit), 3% life steal, 6000 armor unbuffed (about ~10k buffed with keen eye), and 800 all resists. Here's the build I used against most act 3 and 4 bosses including Ghom. Here is the build that I used to kill Diablo three times (twice I helped friends and once I killed him myself -- and I feel like I could probably kill him solo whenever I wanted to get crappy loot.) Here's the build that I used for just killing elite packs in act 3 and 4. If I want to wander around act 1 or 2 to play with friends, I would go with a more agressive build. As a monk, I'd say a combination of life on hit and damage reduction (both from resists and armor) were my primary focus when looking for gear. Most of my skills served offensive and defensive rolls -- to boost my dps and still offer some aid in a fight. Using the terrain (doorways, stairs, etc.) was important. Also, using blind strategically to protect against the freezing balls from elites helped dramatically. (It's all about timing.) Good luck. Diablo was mostly a push over. Use Dashing Strike to get the heck out of the way of his firebreath, or out of the circles of fire, etc. He was nothing compared to Ghom who took hours for me to figure out.

In unrelated news, my book (Tritium Gambit) is available for Nook on Barnes and Noble's website:

Free book (shameless plug)
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 25 April 2012, 8:13 am
The Kindle edition of Tritium Gambit is free today. Tell your friends who don't have a copy!

The monk joins the party
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 10 April 2012, 10:53 pm

The new monk class for World of Warcraft wasn't on my mind, but if you'd like to read about it, look over here.

The monk class for WoW does look interesting to me. I'm sure I'll roll one up, even if it's just to experiment with the class for awhile. I like the idea of healing the group as you do beat the crap out of baddies. Definitely a more exciting way of contributing than watching health bars. 

I'm typically the healer in our regular WoW adventures and would love to actually get in the fight. My guess is that the monk won't offer the serious healing capabilities that other true healing classes offer, but I hope that for non-raid situations the monk's healing will be adequate. I can't wait to test it out.

Obligatory Easter Comic
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 8 April 2012, 2:04 pm

I had a moment to whip up a comic for Easter and the day isn't even over. 

I played both EQ and WoW this weekend, which is quite a bit more than I can usually manage. I feel a little guilty because I should have been writing rather than playing games.

Regarding WoW: My dad and I went to Hellfire Peninsula with my boys and we managed to kill some 
bad guys in an instance.  We did wipe near the end of the instance and the kids were ready to call it a day.

Regarding EQ: I played my mage. My friend Mark and I went to Blackfeather Roost and beat up harpies. Lag was really bad at points. You'd think a 50 mbs connection would be enough to play a game from the '90s. I know that latency isn't the same as bandwidth, but there's an implied amount of performance when you pay extra for a connection of that size. At least my mercenary pulled her weight.

aggro management
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 29 March 2012, 8:26 pm
I have found time to play some World of Warcraft with my kids and my father, but I haven't played EQ with my friend Mark in at least a week. Doing an instance with a 7-year-old, a 5-year-old, and your dad can be a lot of fun. I'm the healer, which can be a little hectic because the kids don't understand aggro management very well. They also have the highest level characters in the group, so they really pump out the damage. I'm the lowest level because I play the least, of course. Half of the time I play, I'm in the auction house helping the kids make money for their next mount. (They like to have a variety of different color mounts, despite the fact that they all fly/fun at the same rate and serve the same function.)

Sorry that I haven't been actively posting lately. I've been swamped trying to polish one book that is mostly written but needs a lot of T.L.C., and get traction on a new book that I started a few weeks ago. To make things more crazy, my wife and I have been interviewing remodelers to have our bathroom redone. Ugh!

I want to get a new comic up, but it might be a few days before I have time. Thanks for your patience.

In the meanwhile, if you work an office job and want to read a comic, check out snrky:

Believe it
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 19 March 2012, 9:47 pm

It's so fun to see so many folks playing EQ again. I hope they stay for a few months.

EverQuest... Full?
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 19 March 2012, 9:17 am
I'll post a comic tonight. I'm writing this from my phone because I'm too excited to wait.

Last night, I played EQ with a friend and it was crazy busy! It reminded me of the old days where you had to look at the ground to walk through PoK.

There were people claiming camps and groups walking around. It felt very nostalgic.

If you haven't logged in since they have gone free: do it!

In unrelated news, my book hit the scifi best sellers list on Amazon for its second time this weekend. I keep waiting for them to add a scifi/comedy category.

Book Giveaway
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 28 February 2012, 7:19 am

Goodreads Book Giveaway

Tritium Gambit by Erik Hyrkas

Tritium Gambit

by Erik Hyrkas

Giveaway ends March 03, 2012.

See the giveaway details at Goodreads.

Enter to win

Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 22 February 2012, 9:48 pm

The advent of computer run companions has redefined "multi-player" in massively multi-player games.

Picking flowers
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 19 February 2012, 7:08 am

Economics is an amazing thing.  Too bad that Stone doesn't get it.

Top "Last Plus Nineteen" of Awesome
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 17 February 2012, 5:23 am

My book Tritium Gambit finished yesterday at 119th on the best sellers list of free Kindle books yesterday.  Which is roughly as cool as finishing at "Last Place Plus Nineteen."  I extended my free promotion an extra day to try to break into the top 100.  For a Science Fiction book, that's tough to do.  Most top 100 books are anything other than Science Fiction.  

Tritium Gambit did finish in 3rd on the Science Fiction list, but that's a lot like saying "bronze medalist", which is cool, but not as cool as saying "gold medalist."

The Dark Tower
Posted by Erik Hyrkas [HTML][XML][PERM][FULL] on 15 February 2012, 9:46 pm

I've been reading Stephen King's The Dark Tower lately.

· Older Entries >>


Updated Today:
A Green Mushroom [HTML] [XML] [FULL]
Bethesda Blog [HTML] [XML] [FULL]
Engadget Gaming [HTML] [XML] [FULL]
Massively Overpowered [HTML] [XML] [FULL] [HTML] [XML] [FULL]
Reign of Gaming [HTML] [XML] [FULL]
Tobold [HTML] [XML] [FULL]
Updated this Week:
Anyway Games [HTML] [XML] [FULL]
Bioware TOR Dev Blog [HTML] [XML] [FULL]
Lineage II [HTML] [XML] [FULL]
mmocam! [HTML] [XML] [FULL]
Ogrebear's Thoughts [HTML] [XML] [FULL]
The Instance [HTML] [XML] [FULL]
Zen of Design [HTML] [XML] [FULL]
Updated this Month:
Blue Kae [HTML] [XML] [FULL]
Erik Hyrkas's MMO Blog [HTML] [XML] [FULL]
Heartless Gamer [HTML] [XML] [FULL]
Morphisat's Blog [HTML] [XML] [FULL]
No Prisoners, No Mercy [HTML] [XML] [FULL]
Raph Koster [HTML] [XML] [FULL]
The Old Republic News from Bioware [HTML] [XML] [FULL]
The Ramblings of JoBildo [HTML] [XML] [FULL]
Wolfshead Online [HTML] [XML] [FULL]