This is part 2 of my !epic 3-part series of how to use kdiff3 when something else wants to launch a graphical diff tool.
But no matter, it's worth doing just to get the right words into the site's search index.
As demonstrated previously, it's trivially easy to get bazaar to use the graphical diff tool of your choice, assuming the tool has reasonable support for command-line arguments. I discovered that Meld does not, which is why I'm now using kdiff3.
Anyway, just add the following to your
[ALIASES] diff = diff --using kdiff3
That fixed diff, and the following fixed merges:
[DEFAULT] external_merge = kdiff3
This is the first part of a 3-part series (of configuration trivia), wherein I describe how to use kdiff3 in a situation where you need to automatically invoke a graphical diff tool.
This part deals with gentoo's etc-update tool, which is used to reconcile changes made by portage to various configuration files (typically located in
/etc, hence the name).
etc-update defers to
/etc/etc-update.conf for some of its behavioral configuration, including the manner in which it invokes a diff tool.
So to use kdiff3, just edit
/etc/etc-update.conf to include the following:
pager="" using_editor=1 diff_command="sudo kdiff3 %file1 %file2" merge_command="sudo kdiff3 --merge --output %merged %orig %new"
Be sure to also comment out (with a leading '#') any existing line that has one of the keywords listed in the above assignments.
And that's it!
Note that the 'sudo' part is necessary because kdiff3 is subject to some kind of KDE policy that protects against root use of GUI apps. Or something... I never quite found a straight answer, but I know it won't launch if you're root without using sudo.
Good Ol' Games recently exited their (two year) beta in a very duplicitous manner, by pretending or insinuating that they were shutting down, only to relaunch a few days later with a revamped website.
Opinions of the stunt cover the spectrum from 'marketing genius' to 'f*** off and die'.
Someone started the requisite thread on the GOG forums asking: Did GOG.com’s PR Stunt Succeed Or Go Too Far?
Copied below is my contribution to that thread.
Yes. It did both. It 'succeeded' in the sense that it garnered the attention they were seeking, but it did so at the expense of the very people whose loyalty, enthusiasm, and good ol' fashioned money had allowed the service to even prosper in the first place.
Some are lauding it as a clever 'low budget, high impact' marketing campaign, but I would counter that it was only 'low budget' in terms of immediate capital cost. What they may have saved, monetarily, was bartered against the collective good will of their existing patrons. And that's a dangerous trade.
Attention is not the only currency that should be used to measure marketing. When the true ledger is eventually balanced, some attention-getting schemes just aren't a smart bargain.
I've been a GOG member from almost literally day one, and I'm not at all impressed with this stunt. In a few short days they burned through a huge amount of the surplus faith and affinity I had towards them. I hope it was worth it, I really do.
I'm still here, and I'm not going to stop buying games from GOG, and that's another facet of the 'success' of the stunt - it wasn't so heinous that it burned the bridge with me (though I'm sure it did for some). But going forward, when I buy games from GOG, I'll be doing so not because I genuinely like GOG, the way I did before. I'll do it because they remain the least evil option in the war of hostility and exploitation being waged against game consumers. They were always that, and it's the core reason why I rooted for them and will continue to root for them. But for now, anyway, they've become _just_ that.
The sting of being treated callously, of being staked as collateral against the promise of greater market share, will take a good long while to wear off completely, if it ever does.
GOG is become like the politician that you believed in, but whom you discover has been cheating on his wife. He may still vote the way you want him to vote, and wave the ideological flags you want waved, but you can't be proud to support him like you once did. Something was lost. Trust, perhaps.
And some will surely say (and already have), "pfft... you're blowing this way out of proportion. This wasn't a big deal. Get over it." It wasn't a big deal, true, not in the grand scheme of things. But it revealed something real that disappoints me nonetheless. GOG demonstrated its willingness to wager us in a bet for growth and media attention. That's changed my opinion of them, possibly permanently, and the change saddens me.
[edit: I attached an image from the GOG forums that I felt hilariously summarizes the whole episode.]
Occassionally you'll want to verify that your gigabit network is actually running in gigabit mode. Or, to futureproof this little post, maybe we're talking about kajigabits.
Anyway, normally there are little mode LEDs on your network hardware that indicate what speed it's operating at. However, if you aren't in a position to physically see these little lights on the back of your network card or router, or you are but you're too lazy to get off your cushy chair and go look, here are a couple of quick and totally unintuitive ways of examining things using nothing but your trusty shell.
- Use mii-tool (as root):
mii-tool -v eth0
- Look at the 'negotiated' value. It'll indicate what speed the interface is using. 'FD' means 'Full Duplex'. 'HD' means 'Half Duplex'. For example, '100baseTx-FD' means 100mbit Full Duplex.
- Use tcpdump (as root):
tcpdump -v -i eth0 -c 1
- Look at what it says for 'link-type', although I'm not convinced this is an accurate method for speed reporting. But tcpdump is awesome for other stuff, and maybe I just don't know how to interpret what it's saying.
- Use dmesg:
dmesg | grep eth0
- Look for a line similar to one of the following:
eth0: link up, 100Mbps, full-duplex
e1000e: eth0 NIC Link is Up 100 Mbps Full Duplex
- It may be that your dmesg buffer doesn't go back far enough to include that. If so, try one of the other methods. Or I guess you could cycle the interface down/up, and then peak at dmesg again.
- Use ethtool:
- Look for the 'Speed:' value. Lots of other good info is listed as well. This technique is the one that produces the most self-explanatory output, but it probably also the least likely to already be available on your system.
Obama's 2011 budget included a revamp of NASA's objectives. Namely, aborting the Constellation program, and prioritizing core research into scientific and mission-enabling technologies.
Apparently, some (and I stress some, not all) astronauts have gotten their panties in a twist over this.
Here's my response to them: Get over it. And get over yourselves.
Armstrong, along with astronauts James Lovell and Eugene Cernan, called the proposal “devastating”...
Yeah, devastating to their egos, maybe. News flash: NASA doesn't exist just so we can lob meatsacks through the exosphere. Manned space travel is sexy, sure, but contrary to popular cultural aggrandizement, it's not an end unto itself. The mere existence of astronauts, that is, being able to say "humans physically go to space", is not self-justifying. Sorry, Neil. Emotional side effects notwithstanding, it accomplishes nothing. More to the point, manned space travel has proven to be so error-prone and so expensive (and, arguably, so fruitless) that the long-standing single-minded obsession with it has become the Moby Dick of our collective efforts in space.
Pursuing manned space flight comes at such a high cost that it can only be done to the almost complete exclusion of all other space-related endeavors. And that alone is the reason not to do it. There are simply too many other legitimately valuable, achievable, cost-effective, and pertinent things we can be doing instead.
The availability of a commercial transport to orbit as envisioned in the President’s proposal cannot be predicted with any certainty, but is likely to take substantially longer and be more expensive than we would hope.
Really? It'll take longer and cost more than we think? Guess what, Einsteins, that's precisely why Constellation got the ax, since it was already obviously well on its way to being a classically bloated space program. That little maxim you just spouted about the unpredictability of developing manned space transport technology, as embodied by its predictable difficulty, is why we need to get OUT from under that burden for awhile, rather than heap more of it onto ourselves.
It appears that we will have wasted our current ten plus billion dollar investment in Constellation and, equally importantly, we will have lost the many years required to recreate the equivalent of what we will have discarded.
Yes, sure, call it 'wasted' if you like. Even so, I'd rather waste 10 billion than 50 billion. Stubbornly holding course for its own sake is called throwing good money after bad. A more formal name for it is 'Loss Aversion', 'Irrational Escalation of Commitment', or the 'Sunk Cost Fallacy'. Whatever you call it, it's a thoroughly proven way to make a bad situation worse.
For The United States, the leading space faring nation for nearly half a century, to be without carriage to low Earth orbit and with no human exploration capability to go beyond Earth orbit for an indeterminate time into the future, destines our nation to become one of second or even third rate stature.
Oh No!!! What will the neighbors think?
Surely we don't measure ourselves, nationally, globally, spiritually, or even anthropologically, by the capacity to put a handful of ourselves into the vacuum surrounding our little spinning rock. Please tell me we don't.
Even worse, still, is the insinuation in their argument that investment in manned space flight is for the purpose of underpining the reputation of the United States as ... what, the Big Man Around Town? Are we still comparing penis size with the Russians? I thought we'd mostly matured out of that adolescent puffery. Guess not. Apparently we need big rocket ships so that there's no confusion in anyone's mind just who's running the show down here.
That particular concept is what's called "Conspicuous Consumption" in sociology. And it's basically just the human economic equivalent of biology's ornamental sexual dimorphism. Are we really nothing more than nature's most obnoxious bowerbird? (Sadly, evidence convincingly suggests precisely that.)
Without the skill and experience that actual spacecraft operation provides, the USA is far too likely to be on a long downhill slide to mediocrity. America must decide if it wishes to remain a leader in space.
I'd much prefer that we choose to be a leader ON the Earth. Again, this 'mediocrity' scare tactic is only according to the people-in -space yardstick. And frankly I think there are far more valuable metrics against which we should judge ourselves. The bitter truth is that by those measurements we're already mediocre. Our education levels continue to embarassingly backpedal. Our physical health is among the lowest of any industrialized nation. I shouldn't need to even point out the dire state of our financial health. We have a well-deserved reputation as the most environmentally hypocritical country on the planet, as we point fingers and make haughty speeches on one hand, while clinging tooth and nail to our totally unsustainable and hyper-consumptive lifestyle (which, by the way, we're also busily trying to shove down the throat of every as-yet-unsubjugated culture left on the Earth).
So, no, I don't think we need to be wasting our time, energy, resources, and opportunities irrationally prolonging our long and glorious tradition as the planet's reigning Buck Rogers.
I used the following articles for reference:
- Power Consumption of Contemporary Graphics Accelerators: Spring 2010 (XBit labs)
- Tuning Cool-n-Quiet (Tom's Hardware)
- Athlon II X3 435 (Tom's Hardware)
- Radeon HD 5770 and 5750 (Tom's Hardware)
- AMD 890GX Unveiled (Tom's Hardware)
- Seven AMD 785G-based Motherboards (Tom's Hardware)
- Athlon II Or Phenom II: Does Your CPU Need L3 Cache? (Tom's Hardware)
- AMD Athlon II X4 620 (Tom's Hardware)
- Undervolting Your Phenom II and Core 2 Processors (Tom's Hardware)
- AMD 785G: The Venerable 780G, Evolved (Tom's Hardware)
- AMD's 785G Chipset - Revolutionary or Evolutionary? (Anandtech)
- AMD's 890GX Chipset - Same Graphics, Better Southbridge (Anandtech)
- AMD Athlon II X4 620 & 630 (Anandtech)
- AMD's New Year Refresh: Athlon II X4 635, Phenom II X2 555, Athlon II X2 255 & Athlon II X3 440 (Anandtech)
- AMD's Athlon II X3 435 & New Energy Efficient CPUs: Killing Intel Below $90 (Anandtech)
- AMD’s Radeon HD 5770 & 5750: DirectX 11 for the Mainstream Crowd (Anandtech)
I went with AMD for both CPU and GPU. (Could you tell?) Specifically, an Athlon II X4 635 (2.9GHz), and an HD 5770.
Activision, through their Sheriff of Nottingham - Infinity Ward, are stripping long-standing consumer benefits with the PC version of Modern Warfare 2. Purchasing the game is nothing less than a declaration of your willingness to loss those benefits, and you're communicating that fact not just to Activision, but to all of the publishers who are watching closely to see just how little they can offer gamers in exchange for their money. And don't pretend for a moment that this is just about PC gaming. The trend in all of gaming is away from game ownership and towards gaming as a rented service.
The publishers' utopian wetdream is a market where the gamer owns nothing. Instead, you pay explicitly for every hour of gameplay you experience, and even then are only allowed to play within the strict and permanent boundaries erected by the publisher. And when the publisher decides you should stop playing an old game because it is no longer profitable enough, they terminate it and offer you the 'choice' of renting a new game, or nothing at all.
I've read a lot of commentary that is dismissive if not outright disparaging of the passionate furor exhibited over the MW2 issue, saying things like, "what's the problem, just let the market decide." Yes, absolutely, the market should decide, but don't "let" it happen. Realize that you, as a game-purchasing consumer, *ARE* the market. The market is nothing but the cumulative purchasing decisions of all consumers. The only power you have as a consumer is to accept or reject the exchange offered to you. If you choose to purchase MW2, you are personally endorsing the continued erosion of value that gamers receive in their exchange with publishers.
A lot of people think that they can complain about issues like this, but then buy the product anyway, and somehow that influences publishers to react to their complaints.
The only thing that influences them is WHETHER OR NOT YOU BUY THE GAME!
Bitching about something and buying the game anyway is equivalent to buying the game and saying nothing -- it's equivalent even to buying the game and saying "Great job guys, keep up the good work and be sure to strip away more of my consumer benefits next time." Because the only thing they hear is the sound of you purchasing the game - registering yet another gamer tacitly accepting reduced benefits, lowering the standard by which all publishers measure the market for all games.
There are more games than I could play in a lifetime, and no single one of them is great enough that it's worth trading away the freedoms that I want to enjoy as a gamer. The only way I can compel publishers to respect and uphold those freedoms is by using my own incremental market vote to communicate the value of those freedoms. And to hope that others do the same in sufficient volume to convince publishers in no uncertain terms that it's more profitable to provide these consumer freedoms than it is to take them away.
So, no, I won't be buying Modern Warfare 2. Not on the PC, not on the console, not at all. Just like I didn't buy Spore or Mass Effect or a multitude of other games that were wolves in sheep's clothing, threatening my freedoms as a gaming consumer. And no, I didn't just pirate them either, so I could have my cake and eat it too. Like I said, there are more games than I could ever play, and I don't bat an eye when I choose to skip any one of them as a statement of principle. Fun is fun and there is no sole dispenser of it, nor is there any shortage. I don't need MW2. I'm not a heroine addict, unable to resist debasing myself just for the next high. Or to put it another way, if I am a heroine addict, there are plenty of other dealers offering perfectly good heroine at reasonable prices, that won't make me fellate them in the alley and shoot up right there using their own dirty needle that they charge extra for.
I found out the hard way that by default, plone maps all
image/* mimetypes to the ATImage content type. That's bad. Why? Because plone's UI for ATImage instances is heavily reliant upon the presumption that the object can be shown *AS* an image. While browsing. With a browser. And that's just fundamentally untrue for the vast majority of
image/* mimetypes. From relatively commonly-encountered stuff like
image/x-dib, to crazy things like
image/fax-g3, they all end up as ATImage objects in plone, despite the fact that none of them are directly renderable as an image by the browser. For all intents and purposes, they are nothing more than files, and there's a perfectly good content type for that, with a perfectly appropriate UI: ATFile. There are really only a handful of image formats that are conducive to rendering inline in http content, and even that subset is constrained within plone to the few that can be processed by PIL (in order to automatically generate multiple versions of the image at various resolutions).
image/* files stored as an ATImage is, in fact, not the end of the world. Your plone site won't blow up or anything. But, as I said, the UI is just wrong for them. Browsing to them gets you a page template that's expecting an <img> front and center, and offers no direct link to download the raw file. So to actually download this 'image' file that you can't see, you have to know a bit of plone magic and manually craft a URL that coaxes the file out of plone. Hardly a desirable user experience.
So, my solution to this problem was to just tweak the mimetype-to-content-type mapping in plone so that only types that were legitimately presentable as images would be stored as ATImages, and all of the rest would default to ATFile.
This was easily accomplished by visiting the
content_type_registry in the ZMI at the root of plone and doing the following:
- Change the existing
image/*to use ATFile.
- Add a new
extensionentry directly above the original
image/*and specify the few file extentions that should be ATImages:
jpg jpeg png gif.
See the attached image for what it should look like when you're done.
After this change, I get exactly the behavior that makes sense, at least to me. Formats that can be presented and managed as a viewable image to a user browsing the site are stored as ATImage objects, and all other image formats are stored as ATFile objects.
I brought this topic to the plone user forum and mostly just got harassed by the forum's resident bouncer, who I still contend wasn't paying enough attention to grok the issue. Oh well. What I did makes perfect sense for an upstream default fix, and if that never happens, I'll just re-apply it for each version of plone I use that exhibits the original policy.
Apparently Gentoo recently enabled a per-package license approval feature for portage. As with most things Gentoo, the feature was discovered unceremoniously when I tried to do '
emerge -uDavt world' and it complained loudly in new and confusing ways. But a quick investigation shed light on the issue, and I set about making the small changes necessary to become compliant.
Basically, Gentoo now maintains a (comprehensive) list of licenses with which any given portage package might be associated. And portage treats the licenses as opt-in, meaning that it doesn't presume that you're willing to accept them. Also, just like use flags, there is an emerge variable (
ACCEPT_LICENSE) that can be set for all packages in
make.conf. It defaults to '
* -@EULA', which means all licenses are accepted automatically except any within the 'EULA' group. A full list of licenses and groups is available in
/usr/portage/profiles/license_groups. Overrides to this variable can be made on a per-package basis using a dedicated file:
I elected to leave ACCEPT_LICENSE at its default, and use the
package.license file to individually manage non-free licenses. Thus I needed to create a
package.license file with the following contents:
dev-java/sun-jdk dlj-1.1 app-emulation/virtualbox-additions PUEL net-im/skype skype-eula
Obviously, those were only necessary because I have (or want to have) those packages installed. Your package.license file might contain completely different entries. With those exceptions in place, emerge went on its merry way and so did I. Note that this process doesn't alleviate the need to say 'yes' to certain package licensing verbage at emerge-time.
Unrelatedly, as of 20100131, the gentoo overlords have removed libGL.la, saying thus:
Eselect-opengl package now strips the libGL.la file. This file was broken and
thus we proceeded with its removal. It brings slight inconvenience on you fellow
users. After emerging the new version =app-admin/eselect-opengl-1.1.1-r2 please
emerge one more package dev-util/lafilefixer and use it for fixing all various
compilation issues by running as root:
# lafilefixer --justfixit
Note that not-running this command will bring you compilation issues so you
should really pay attention to this message and act upon it.
Oh, act upon it I did. By taking precisely the suggested actions.
I guess once the proverbial writing on the wall is large enough, even the zealots find it hard to continue pretending they can't see it.
What am I talking about? The realization that Apple, like Microsoft, Intel, Dell, and every other behemoth company (tech or otherwise), eventually bends to the crushing demand for year-over-year stock growth. And when you're so big you create your own weather, the only way to manifest continued growth is to become a psychopathic, malignant entity hell-bent on squeezing the market for that extra shred of revenue even if it means the ruin of civilization. Morphing from plucky, idealistic, everyman's company, fighting the good fight, to card-carrying agent of evil is not a transition that's instantaneous, but neither is it subtle. If you're not so busy kneeling at the obelisk, head bobbing back and forth, watering eyes squeezed shut, while you try to suppress the gag reflex, you generally can see your beloved company changing quite apparently.
With increasing frequency, Apple is demonstating just how far down the slippery slope they've slide, and that they're accelerating rather than arresting their descent.
And I don't blame them, not specifically anyway. Or, rather, I'm not in the least bit surprised. They're playing the corporate market-share game, and it's a ruthless, bloody, lawless-behind-closed-doors, game that is unfortunately the only game in town. Don't hate the playa, as they say. Well, I hate both the players and the game. Our economic systems, global and national, reward and encourage evil. Expecting corporations to not be evil under those circumstances is pure folly. And expecting the systems to change when they're controlled directly by the entities benefitting from them is equal folly.
For those who haven't been paying attention, here's a decent summary of the stuff Apple's been doing: Jason Calacanis makes the "Case Against Apple in Five Parts".
And of course the Google Voice App rejection fiasco is proving to be very effective at snapping many out of their hypnotic coma of Apple idolatry. Even so, some want to argue that it was just "out of character" for Apple, whereas I say that it was a textbook bellwether indicator, and there's every reason to expect more of the same.
One bit of irony in this that isn't lost on me is that the other half of the controversy (Google) is itself an entity tetering on the edge of morality. Which direction it will ultimately sway is not a mystery.
[UPDATE] Still not sure? Still hoping Apple's culture-shaping brand power hasn't taken root as a festering infection within its proverbial core? Well, apparently Apple is convinced it owns the concept of an apple, as in the fruit.
I still get Gamasutra's Game Developer Magazine, though it's just a 'webzine' now unless you pay for it, which I do not. Anyway, the fact that I'm still subscribed means they think I'm a game developer, or at least they pretend to not notice and/or care that I'm not, and as such they include me on their regular surveys (salary, publisher reputation, etc..). I just recently filled out the publisher survey, and since I figure my input to them will dribble into a black hole, I wanted to capture my signature industry vitriol here for posterity's sake.
After having the chance to numerically rate all of my most loathed publishers as low as possible, I was then given the opportunity to say a few words. So I did.
Recent behavior regarding perceived rights to broadcasting of starcraft games is indefensible and reprehensible. Also, the imminent monopolization of all games to battle.net is a blatant erosion of consumer rights.
They're not in the games business, they're in the extortion business. They treat their own paying customers as the enemy. EA is the poster child for what's wrong with mainstream game development and publishing.
Do they do anything new anymore, or are they just busy milking the back catalog?
Hurry up and die. Microsoft is a cancer on gaming. XBox Live is like eugenics for gamers, breeding out all the wholesome qualities of gamers and leaving only purely hedonistic selfish sociopaths.
Consciously and systematically alienating real gamers in the relentless pursuit of the profitable calculus effect of 'casual' crap.
Is it any wonder nobody ever sends me Christmas cards?
Finally fed up with the awful RAM consumption of the firefox 3.0.* branch, I decided to roll up my sleeves and convert to the Amazing New Wonderfabutastical 3.5 branch.
But it's not marked stable yet on gentoo, so I had to get out the ~x86 divining rod and navigate through the minefield of getting a major package and all its dependencies unmasked.
Here, for your viewing pleasure, is the result of that exercise.
media-video/vlc -nsplugin app-office/openoffice -nsplugin
www-client/mozilla-firefox ~x86 x11-libs/cairo ~x86 net-libs/xulrunner ~x86 dev-libs/nspr ~x86 dev-libs/nss ~x86
>=www-client/mozilla-firefox-3.5 >=net-libs/xulrunner-1.9.1 >=dev-libs/nspr-4.8 >=dev-libs/nss-3.12.3
Given all of that, a mere 'emerge -uDavt mozilla-firefox' should dutifully install the new browsing nirvana on your system. At least, it did for me.
And, at least thus far, I'm thrilled. Firefox runs leaner and meaner and nearly all of my plugins remained usable.
This is all transient minutia, since I imagine it'll only be a few more months perhaps before all of this percolates into the stable tree.
I'm acclimating myself to bazaar, in anticipation of migrating all of my subversion repositories to it in the near future. One of the first things I desperately needed to do was get bazaar to use xxdiff for diff'ing and merging, since I xxdiff so much. Turns out it was trivially easy -- much easier than the hoops I had to jump though to get svn to use xxdiff.
I just added the following to my $HOME/.bazaar/bazaar.conf file:
[ALIASES] diff = diff --using xxdiff
That fixed diff, and the following fixed merges:
[DEFAULT] external_merge = xxdiff
Aliasing is documented in the bazaar user's guide, but the external_merge option wasn't discovered until I did some googling. It looks like it started out as a plugin, but is now included natively in bazaar.
3D Realms closed.
Zero Punctuation ripped on the whole sordid story.
Honestly... I guess I don't care. My prevailing emotion is a sense of tragedy over the cumulative amount of time, energy, resources, and most of all opportunity wasted over the whole affair. Sure, it's a running gag to compare all of the things that have happened in the same time that DNF hasn't. But that just highlights the gross mismanagement involved. What saddens me is what could have happened. I have no doubt that very smart, talented, capable, and creative people were involved in the development of DNF at every step. Not necessarily all of the people, but I imagine the vast majority. And what we, as gamers, have to show for their collective efforts is precisely zilch. What they toiled for didn't need to be a Duke game, I honestly didn't care, but it should've been something that saw the light of day, enriched the gaming landscape, and validated their devotion and hard work.
I wanted to let the dust mostly settle before registering my feelings on the matter, as I was one of those that initially felt that things looked and smelled a lot like a very coy marketing stunt - the perfect setup for what would've been the announcement of all gaming announcements.
Instead, it was the just the obituary it claimed to be, and the only spectacle left is the inevitable lawsuits as the sharks circle in to fight over the carcass.
Here's another look behind the curtain of independent game development, this one courtesy of Vic Davis of Cryptic Comet, recounting the tale of Armageddon Empires. This is both similar and categorically different than Jeff Vogel's success story. Vic basically caught lightning in a bottle, experiencing an exponential upsurge of interest in his little nichey strategy game due to what amounted to a perfect storm of new games journalism. But it wasn't entirely, or even mostly, luck (though getting the Penny Arcade firehose pointed at you doesn't hurt). He took a decidedly non-mainstream approach to supporting his game:
- Keep your mouth shut until you've got something people can play and buy. Allowing a gamer to go instantly from 'never heard of it' to 'oh - it's done and I can buy it for $10' has a tremendously powerful effect. Hype has to be sustained, and that's why mainstream marketing budgets are so huge, they have to finance the hype crescendo. Curiousity is an itch and being able to scratch it immediately can turn casual interest into a sale.
- Never stop updating. The product launch is just that - the 'launch' of an extended voyage. It's not lighting the fuse on a sales bomb, seeing how much you can get in the first month after release, after which both you and the customers flee from ground zero.
- Make customer support personal and visible -- do it yourself on community forums. This will directly stimulate peer-to-peer word-of-mouth sales recommendations (what the article calls the 'infection vector'). An interesting point was that Vic didn't host his own forums (on his company's website), opting instead to defer the game's individual community germination to existing broader community sites. This put both his personal support of the game and the players' buzz about it in a more 'infectious' environment - he wasn't bootstrapping a new community out in some uncharted corner of the internet. He set up camp smack in the middle of the very people for whom he was designing his game. And as mentioned in the article, he recognized the importance of being genuine and not acting like a viral marketing person masquerading as a native. He was honest and helpful and it paid off.
The end result was that he turned an unflinchingly hardcore, niche, turn-based strategy game (made with Macromedia Director of all things) into a smashing indie success. And he's off and running on his next title. Godspeed!
Which is cool. Don't take my narcissistic comment the wrong way - everyone who blogs is narcissistic. It's cool because the more attention indie game development can get, particularly successful indie game development, the better. And I don't necessarily think there are really any trade secrets worth hoarding here, so why can't successful indie developers pull aside the curtain a bit more? Indie game development is hard work, besodden with failure and ruin, and almost utterly devoid of accolades. And in that sense, it's not really any different than mainstream game development. It's also risky business, but perhaps one 'secret' is that it might actually be less risky than mainstream game development.
Jeff's been making a steady living doing games for over 15 years. That's a pretty stout achievement, particularly given the nature of the games he does. He makes butt-ugly old-school RPGs only die-hards will love. But the 'trick' is that there are evidently enough die-hards to make the exercise profitable. Predictably and consistently profitable. Having read the two recent posts Jeff made as 'tell-all' confessionals of the financial numbers behind one of his recent games, I wanted to distill some of the key disclosures that were made. Again - these aren't trade secrets. It's common sense stuff for anyone who's not totally drunk on EA and Microsoft's relentless propaganda.
- The Long Tail is a real thing and it works. If you're not beholden to pay back someone else's huge initial capital investment, you can ride the tail to profitability. For the purposes of this discussion, the long tail is the steady, word-of-mouth driven sales sustained well after initial release, in contrast to the 'blockbuster opening weekend' effect that mainstream games tend to rely on to make it into the black, financially. I've referred to this as the 'spike economics' of the game industry, and mainstream developers and publishers alike live and die by it. Indies can't, because it requires huge (i.e. expensive) marketing campaigns, and it needs a steady diet of game releases allowing for the occassional blockbuster to pay for both itself and all the non blockbusters that 'missed'. Note that this model may ultimately prove to be the undoing of mainstream game development as well, but that's the a story for another day.
- Time is the most valuable thing you have.
- Making multi-platform games is like printing free money. You're already doing the design and implementation work. If you take the right approach from the beginning, it's only a marginal amount of 'extra' work to get one implementation to work on multiple platforms and you've just hugely broadened the size of your potential customer base. Which is critically important when your customer base is niche to begin with. Which brings us to...
- Serve an underserved niche. Mainstream game development is like a whale - it has to eat an ungodly number consumers just to stay alive. For that reason, many particular kinds of gameplay just get shoved aside categorically by the big publishers because the games simply don't exhibit the scale of consumer popularity necessary to offset the increasingly bloated development budgets. And so the world is rife with cliques of gamers whose true desires go unmet by the industry at large. And it is precisely these gamers that will forgive your pitiful little game its glaring deficiencies compared to a AAA mainstream game, if only your game scratches their specific itch when none others will. As Jeff put it: "You have to write something that they can't get easier and cheaper elsewhere." Because if they can they will. You may eventually nurture some consumer loyalty, but you'll have none initially, and never enough to offset the fundamental disadvantages you'll face as an independent. Like any successful organism, you have to discover an unclaimed part of the ecosystem.
- "Big budget games will ALWAYS look better." And "graphics are expensive. Really expensive." Moral of that story - don't even try to match mainstream graphics quality. You'll lose, and you'll just go broke/crazy trying. Your time and budget (which is mostly time) are better spent pursuing the handful of unique things that are going to attract that underserved niche. Good graphics aren't unique, and definitely aren't underserved. Yes, a certain percentage of people will ceaselessly hate on your game for how crappy it looks. Screw 'em. They're not buying your game anyway.
As usual, I'm so culturally disconnected that I get all my news from Penny Arcade, and a recent post made brief mention of Blizzard hiring 'Fargo'. I'll say it in question form, just as PA did, to convey the sense of perplexity that accompanied the concept: Fargo? Naturally I thought the reference was to one Brian Fargo, of former Interplay fame, whose name is associated with gaming classics like Fallout, Descent, Baldur's Gate, among others. That's odd, I thought, isn't he like the CEO of some studio or something? Yes, as a matter of fact, he is. But given his history, I guess it's not a bad fit: Blizzard & Fargo. But as it turns out, the entire concept is moot since the 'Fargo' involved is actually Dave 'Fargo' Kosak of (formerly) GameSpy fame. You'll forgive me the mistake, I hope, on the grounds that I have in fact never heard of Dave Kosak, a consequence no doubt of the fact that I basically hate GameSpy, don't read it, and have been known to opine it as a traveshamockery of gaming journalism.
It just so happens, though, that Dave 'Fargo' Kosak is really funny. I mean _really_ funny. Despite my better judgement, I didn't eject myself out of GameSpy after following the original link on the PA post to Kosak's farewell letter (at which point I realized none of this involved Brian Fargo). Instead, I proceeded to waste copious time reading archives of content authored by Kosak over his tenure at GameSpy, and it's good stuff. Genuinely entertaining. One part sophomoric teen gamer humour, and one part frustrated-literature-major-working-at-a-gaming-website, it adds up to some great comic content. I recommend browsing the archives if you've got nothing better to do.
I still hate GameSpy. Just so there's no confusion on that front.
Oh - I almost forgot, just to tie Blizzard back into this, I chuckled at the following comment posted to Kosak's farewell article:
For all it's polish, WoW is pretty much the worst MMO ever.
A handholding, dumbed down, grindfest of 'epic' proportions.
I'm sure this is a wise career decision, but that doesn't change the fact that WoW is a steaming pile of horse...poop.
I've recently been doing some internationalization work for a gui tool using wxPython, and was confounded by an apparent inconsistency in how 'common' dialogs adhered to the locale settings in effect. Everything worked as expected on Linux and OSX, but on windows the dialogs stubbornly ignored all of my efforts to enforce a specific translation on their widget strings. Note that I'm talking about the 'convenience' dialogs offered by wxPython, such as wx.DirDialog, not dialogs that I construct from scratch.
As it turns out, on windows some of the dialogs actually completely defer to windows shell API calls, and therefore aren't sensitive to any wxPython localization state. The dialogs simply reflect whatever language settings are in effect on the windows machine on which they're invoked. So if you have your application set to, say, Japanese, but you're running on a windows machine configured for english, the dialogs will always show up in english. Which is bubkis. But it's also 'just the way it is', unless/until the wx folks (whom are ultimately responsible for how the underlying dialog entities are implemented) change the affected dialogs to be constructed from other wx primitives rather than using a direct windows call.
After wrestling with the problem for bit, I had begun to suspect the reason behind it, and ultimately did find some verification of my suspicions in a forum post. Interestingly, it references an MSDN forum post which describes a .Net developer struggling with the same issue -- namely the inability to localize, within a .Net application, a common windows dialog.
For the record, I wanted to archive the letter that I sent to my Maryland representatives in the US Congress regarding the EESA (Emergency Economic Stabilization Act) of 2008, which I consider (then and now) to be a resoundingly bad idea.
Here it is in its entirety:
Dear <congress person>,
I would just like to register my severe disappointment that you voted in favor of the HR 1424 amendment (EESA) on Oct 1, 2008, and in so doing recklessly disregarded the long term sustainability of the US economy.
The seeds of this fundamental dysfunction of the global monetary system were not sown overnight, and any solution to it will not be found in the spasmodic and woefully impertinent flailings of a panic-riddled congress.
Furthermore, EESA is not merely impotent to the current problem, which would be shameful enough. In the long term it may very well be the equivalent of pouring water on an oil fire.
I find it tragically disconcerting that the Senate would choose to completely ignore the consensus opinion of not only this nation's best economists, but those of other countries as well, many of whom have first-hand experience characterizing the behavior of lending crises, and all of whom implore the pursuit of alternative solutions.
Instead, the Senate has stayed true to form and chosen to grasp at the most convenient bauble simply for the sake of appearing to do something, anything, as urgently as possible, sacrificing all pretense of informed evaluation and objective judgement.
Your complicity in this debacle of reason, foresight, and leadership is duly noted.
I particularly liked the phrase 'impertinent flailings of a panic-riddled congress'. Remember, the key to politicians isn't to make them your friends, it's to make them fear for their jobs. Plus, I figure there's probably only a 1% chance someone actually read it anyway. At best it got registered on a tally in the 'against' column for their feedback tracker. And it made me feel incrementally better to have written it.
[update - in the extended body of this post I've included the text from a blog post that did a great job summarizing why the EESA is a terrible idea.
Comments following the US Airways flight 1549 crash into the Hudson river provided today's Moment of Marvelous Mirth:
Ben: So why are some people standing in 12 inches of water, while others are being rescued in a raft?
ellen: because they're in first class. ;)
It's ok to laugh because noone died in the crash (at least, as of reports immediately following).
Of course, a hilarious irony would be if the crash was caused by someone on the plane twittering away during takeoff, screwing up the plane's electronics systems like they keep trying to scare us about. But no, that wouldn't happen because the threat of plane crashes from onboard cellular use is bunk.
Note that I still think twitter does little but masquerade aggrandized minutia as discourse.