Categories
android fixing your desktop programming

August 2011: Google’s install process for Android is still terrible

Following my own install-guide from Jan 2011 (because Google didn’t provide one at the time)…

  1. Google still doesn’t provide an install guide
  2. Eclipse is a *little* clearer on what to download – but only slightly
  3. Eclipse.app on Mac OS X is *still* broken
  4. ADT is still “hidden” by Google for no good reason (my install guide still works)
  5. Google still blocks you from downloading any “Android OS platform” (this is a core part of the SDK that is *not* included in the SDK – you need it to make Android apps)

(also, in passing, I updated the instructions to be a lot clearer / a bit more idiot-proof. I just used them to do a fresh install, and it went smoothly – with fewer problems than trying to use Google’s auto-installer)

EDIT: On the plus side:

  1. My install guide spared me waiting for an extra 0.5Gb of Android OS platforms to download (I was able to copy/paste them on the hard-drive, no extra install work needed. Just don’t use the installer!)
  2. ADT v 12 is noticeably more stable and better-integrated with the Android emulator – auto-starting smoothly where previous versions needed you to lead them through baby steps on first-run

Which means the key problem from a year ago still holds today:

Google is still effectively blocking you from using Source Control on Android projects

And they wonder why people still prefer the pain of working with Apple…

Categories
programming recruiting

1,001

Most “gamification” achievements I couldn’t care less about (and this is the Dirty Secret of gamification – most consumers don’t care), … but this is one of the few that I do:

(and I post this in the full knowledge that it’s possible to game (i.e. cheat) your way to well over 2k rep on StackOverflow … but I’m chuffed anyway)

Unlike my experiences of the SO clones, SO is *still* a very high signal-to-noise ratio, in my experience. And so I still care about it – and value the SO score on other peopl’s profiles

(yeah, not-so-subtle hint: your SO score is now a standard part of any employer’s background checks, if they’re smart. Can make the difference between getting an interview or not, let alone getting the job)

Categories
games design marketing and PR programming

“Do I look fat in this?” … “You do now!” (Kinect FAIL)

Here’s an excellent idea: use Kinect to display clothes on people in real-time, inside a fashion retail shop:

http://ar-door.com/2011/05/virtualnaya-primerochnaya-dlya-topshop/?lang=en (Scrub to 0:25 – first 30 seconds is moronic marketing-person bumf)

This has huge potential:

  1. Much much faster than browsing – potential for more positive purchase decisions in less time
  2. Less space lost to changing rooms – fewer rooms needed for same number of customers (space is often at a premium in retail outlets)
  3. Show an enormous range of stock while keeping very little on-site
  4. Show every size, rather than just the sizes that are in stock on-site

But hey – wait a minute – look closely at the person who’s posing in each case. Why does the on-screen person look like they weigh twice as much as the person who’s in front of the camera?

Ah. I see. It’s that recurring problem again: marketing companies that don’t know where to hire skilled tech staff. Here we’ve got 3D model wrapping apparently done by someone who’s never heard of Convex Hull. This is basic Computer Science (IIRC it’s taught in almost every CS undergrad course today) – wrapping string (or cloth) tightly around a solid object is an interesting and very common problem.

OK, it’s version one; “we’ll fix that in beta”; etc. Except … you’re demoing this to:

  1. women
  2. in a fashion store
  3. in public
  4. when they’re about to pay money
  5. for clothes

…and you’re making them look:

  1. uniform weight (which for short, young Muscovites is – according to the video – usually “much larger than reality”)
  2. saggy (look at the video – they failed to register / stretch the clothing for the head/neck-to-knees length; in most cases, the women’s busts are aroudn their waists, and their waists are around their knees)
  3. masculine (most women’s clothing hangs; it’s soft, flexible; here, the Kinect models have no physics, not even primitive struct-based bending, let alone springs. Doh)

All of which put together makes this a FAIL. Technologically it’s all fixable, but from a sales/marketing perspective it’s enough to send many people screaming. Fingers crossed that the company (ARDoor) manages to make huge sales anyway – the potential here is enormous, and some of what they’ve done looks great (I like the simple interface, and the giant “Smile!” instruction).

Categories
games design programming

Love failure: make better games, faster

In my experience, most people can grasp one, but not both, these concepts when prototyping a game:

“If you fail, there will be dozens more”
“failure is ok! That’s what prototyping is for, so go crazy!”

Too often, I meet people who go crazy – but only once. It ends horribly, and they give up in shame.

Just as often, I meet people who make lots of stuff, quickly – but it’s all generic derivative crap; they never took creative risks.

The linked article above is a must-read for any serious designer: it’s a post-mortem from the Experimental Gameplay Project guys (“design + implement a new game every week for a whole semester” – if you haven’t played the games, or read about the concept, I can’t recommend it enough). I *frequently* tell wannabe-game-designers to go do exactly the same themselves – there’s no better way to learn the art and craft of game design.

Other choice quotes from the article include:

… how bad can it be?

“Although they were utter failures, the whole team was thrilled to take such a bold risk to prove the failure of audio-only gameplay, and I could point with pride to my hideous creations.”

… for all those misguided individuals who still think designers shouldn’t learn to code:

“Each member of the team had to be comfortable with all aspects of game development. Everyone was responsible for their own programming, art, sound, and everything else that went into the final product.”

(as Designers, you should aspire to be the games-equivalent of a Product Manager: making the final, shipped product come together as an awesome whole, rather than locking yourself in a cupboard doing your little niche thing, and ignoring the end-product)

…an observation I made a few years ago, and lead me to plan a 4-day week for our studio:

“after much investigation, it appears that you just cannot schedule creativity.”

…Scrum: start with a vertical slice of cake, and add slices, not layers:

“we found that gathering art and music with some personal significance was particularly fruitful”

(if you want further correlation of this, IIRC Jonathon Mak made the same point a few years back at GDC: Everyday Shooter sucked and was dull when he prototyped “game mechanics without animations”, and lead him down the wrong paths of improvement; you cannot take the style out of gameplay, it’s too tightly interwoven)

…how to: Simulate a prototype … in your head:

“It’s really easy! All you have to do is imagine your game audience saying, “Wow!” And then just work backward and fill in the blanks. What’s making them enjoy your game? What emotion are they feeling? What is happening in the game to make them feel that way? ”

Go read the article…

If you’re not convinced already, here’s their Handy Cut-Out List! (which won’t help much till you read it, as each line is one of the sub-headings:

Setup: Rapid is a State of Mind

* Embrace the Possibility of Failure – it Encourages Creative Risk Taking
* Enforce Short Development Cycles (More Time != More Quality)
* Constrain Creativity to Make You Want it Even More
* Gather a Kickass Team and an Objective Advisor – Mindset is as Important as Talent
* Develop in Parallel for Maximum Splatter

Design: Creativity and the Myth of Brainstorming

* Formal Brainstorming Has a 0% Success Rate
* Gather Concept Art and Music to Create an Emotional Target
* Simulate in Your Head – Pre-Prototype the Prototype

Development: Nobody Knows How You Made it, and Nobody Cares

* Build the Toy First
* If You Can Get Away With it, Fake it
* Cut Your Losses and “Learn When to Shoot Your Baby in the Crib”
* Heavy Theming Will Not Salvage Bad Design (or “You Can’t Polish a Turd”)
* But Overall Aesthetic Matters! Apply a Healthy Spread of Art, Sound, and Music
* Nobody Cares About Your Great Engineering

General Gameplay: Sensual Lessons in Juicy Fun

* Complexity is Not Necessary for Fun
* Create a Sense of Ownership to Keep ’em Crawling Back for More
* “Experimental” Does Not Mean “Complex”
* Build Toward a Well Defined Goal
* Make it Juicy!

Categories
design entity systems MMOG development network programming programming

Entity Systems: updates to source code

I’ve just done a round of fixes for the source-examples of ES’s. Github projects updated on this page:

http://entity-systems.wikidot.com/rdbms-with-code-in-systems

Changed:

  1. Added a complete Java implementation of the most basic ES example
  2. Fixed some minor bugs in the Objective-C basic ES example; added some missing classes
  3. Added a missing class method from the documentation (System.
Categories
games industry programming

GameDev.StackExchange: don’t use it for game-dev info

I’ve given that site two serious attempts – I had nothing to gain from it, I was just trying to share best practice and info from within the commercial side of the industry. I wanted it to work. StackOverflow (which it’s cloned from) has been a huge success, and the nearest equivalent for games industry – the GameDev.net forums – is very weak by comparison; lots of people doing their best, but often dominated by those who have time, rather than those who know what they’re talking about. And very few professional members.

Attempt 2 has crashed and burned. And there I’d walk away silently. But … while I was there, I noticed how much misinformation flows around that site, and I can’t keep quiet about that. It’s doubly depressing that it trades off the reputation of StackOverflow – a site that works many times better, and has a many times higher signal:noise ratio.

Here’s a favour to anyone tempted by that site: don’t. If you need answers to the questions you might ask there, there are much better places to get them (if this is tl;dr – just scroll to the bottom).

What’s so bad?

Bad enough that:

  1. many (more than half of the 50+ I read in the last week) of the answers are significantly or fully wrong, but casually upvoted or selected as correct (seems too few people on the site for the voting to “fix” this problem naturally)
  2. most of the community has no idea what they’re talking about (Vague questions, vaguer answers, and STUPID SHIT like “I was talking with one of my professor and we couldn’t figure out why all game engines (that I know of) convert to triangles.”. Really? You’re that dumb / lazy? Incidentally: “professor” of what? If it’s a course involving programming, that professor is a fraud. Personally, I think it’s a homework question. Should have been shutdown immediately.)
  3. many questions (around 20% of those I’ve read) would be solved trivially by typing them directly into google and clicking the first link

Worse that:

  1. without lots of reputation-whoring, you are “not allowed” to comment on a wrong answer (NB: I get the impression that the rep-limit for this is much higher than on SO; certainly, it’s unrealistically high). Your only option is to write a separate “answer” that explains why the first is wrong. This is sadly common on the site. Readers have to read EVERY answer (including the ones at bottom of screen) just to find the corrections to the “top-most” answers
  2. without even MORE reputation-whoring, you are “not allowed to answer more than 1 question every 3 minutes”. You’re a professional game developer, right? You’ve been doing this stuff for years? You see a couple of related questions you can answer quickly (stackexchange explicitly GIVES YOU the list of “related questions” and invites you to answer them) … well, so far as this site is concerned: “Oh no you don’t!”

Ask any game designer: the rep-limits on that side are somewhat FUBAR. They positively encourage people to reduce the quality of information / organization. Any sane designer would have *at the very least*, said:

“If this site is new, and small, with a small community, you need to set all limits low to start with – there’s just not a large enough pool of campable spawns / experience points (*ahem* reputation sources) to support those limits from day one”

Anyway. I tried it. It was disappointing. Unlike StackOverflow, it isn’t (currently) working well – many in the community are full of their own ignorance and don’t want to read anything that’s based on knowledge or experience – they want only things that support their private theorising. Actually trying this stuff in practice? “Whoa! That sounds like actual WORK! Don’t go there, man!”

IMHO, if equivalent questions to many you see on gamedev.stackexchange appeared on StackOverflow, they would get shutdown quickly with some variant of:

  • “this question is irrelevant and trivial”
  • ” this is not a website for getting your homework done for you”
  • “this is not a website for “tutorials””
  • “please just google it – the answer is the number 1 link”

…etc

Revisiting gamedev.stackexchange, Spring 2011

At the gentle urging of friends and ex-colleagues, all of them professional game devs, I tried again. Their winning argument? “Give them time, the community will improve; it’s better now – it’s getting there” and, most key: “if we don’t help, it’ll never go beyond blind leading the blind”.

I quickly found several trails of different people asking THE SAME QUESTIONS over and over again, and getting different incorrect answers. Zero effort to read what was already there. Zero effort from the community in marking duplicates. I found some related to entity systems, and thought “Oh, FFS, this is easy for me – I’ll answer these”.

SMACK! “You can only answer 1 question every 3 minutes”.

Annoyed, but undaunted, I kept going. Just to be clear: my answers were all different, but the questions themselves were close duplicates; obviously, they’d been asked without bothering to check if they’d already been asked. And then a few hours later, I started getting emails about my answers being downvoted. No explanation, just … someone didn’t like them. WTF?

At this point, I realised the futility: it’s actually quite *hard* to get down-rated on StackOverflow. The attitude of SO users is “help, explain, and educate” (shaped by the SO penalities for downvoting). By contrast, it appears easy on gamedev.stackeschange: and it comes with no explanation, no commentary. Drawing from my experience in MMO development, these are the characteristics of a negatively charged online community: it’s not heading towards a flourishing, happy family. Time to get out while the getting’s good.

So, I’ve killed the account. I want nothing to do with it. At least, not until a good community-moderator takes things in hand and changes the culture of the site. Hard job.

Want answers to game dev questions?

So, what are you to do instead?

My advice: send twitter messages @ game designers, artists, programmes, etc. Maybe half of them are on twitter these days, and generally very easy to find. Most of them (including all the non-twitter ones) have blogs, and are happy to help and give copious free advice.

As a secondary source, read a lot of blogs. Blogs are better than following people on twitter – game-dev is too deep and nuanced for twitter, and *nearly* all the good stuff is in blog posts. This may change, but for now it’s the case.

Finally, try emailing people who’s blogs and tweets you read. But this is a last-resort: most people are very busy, and will struggle to respond to your emails with the depth they would LIKE to. Most will – therefore – not answer at all. They’re not ignoring you, they’re just waiting until the get time. After years of doing that myself, these days I try to reply to people quickly, even if all I can say (in 99% of cases) is: “I’m sorry, I don’t have time to answer this properly.”. Where I can, I’ll add pointers to other people to ask – but usually they’re just as busy, so it doesn’t much help.

Categories
dev-process games industry massively multiplayer network programming networking programming recruiting server admin

The nature of a Tech Director in games … and the evils of DevOps

Spotted this (the notion “DevOps”) courtesy of Matthew Weigel, a term I’d fortunately missed-out on.

It seems to come down to: Software Developers (programmers who write apps that a company sells) and Ops people (sysadmins who manage servers) don’t talk enough and don’t respect each other; this cause problems when they need to work together. Good start.

But I was feeling a gut feel of “you’ve spotted a problem, but this is a real ugly way to solve it”, and feeling guilty for thinking that, when I got down to this line in Wikipedia’s article:

“Developers apply configuration changes manually to their workstations and do not document each necessary step”

WTF? What kind of amateur morons are you hiring as “developers”? Your problem here is *nothing* to do with “DevOps” – it’s that you have a hiring manager (maybe your CTO / Tech Director?) who’s been promoted way above their competency and is allowing people to do the kind of practices that would get them fired from many of the good programming teams.

Fix the right problem, guys :).

Incidentally – and this will be a long tangent about the nature of a TD / Tech Director – … my “gut feel” negativity about the whole thing came from my experience that any TD working in large-scale “online” games *must be* a qualified SysAdmin. If they’re not, they’re not a TD – they’re a technical developer who hasn’t (yet) enough experience to be elevated to a TD role; they are incapable (through no fault of their own – simply lack of training / experience) of fulfilling the essential needs of a TD. They cannot provide the over-arching technical caretaking, because they don’t understand one enormous chunk of the problem.

I say this from personal experience in MMO dev, where people with no sysadmin experience stuck out like a sore thumb. Many network programmers on game-teams had no sysadmin experience (which in the long term is unforgivable – any network coder should be urgently scrambling to learn + practice sysadmin as fast as they can, since it’s essential to so much of the code they write) – and it showed, every time. In the short term, of course, a network coder may be 4 months away from having practiced enough sysadmin. In the medium term, maybe they’ve done “some” but not enough to be an expert on it – normally they’re fine, but sometimes they make a stupid mistake (e.g. being unaware of just how much memcached can do for you).

And that’s where the TD-who-knows-sysadmin is needed. Just like the TD is supposed to do in all situations – be the shallow expert of many trades, able to hilight problems no-one else has noticed, or use their usually out-dated yet still useful experience to suggest old ways of solving new problems that current methods fail to fix. And at least be able to point people in the right direction.

…but, of course, I was once (long ago) trained in this at IBM, and later spent many years in hardcore sysadmin both paid and unpaid (at the most extreme, tracking and logging bugs against the linux kernel) so I’m biased. But I’ve found it enormously helpful in MMO development that I know exactly how these servers will *actually* run – and the many tricks available to shortcut weeks or months of code that you don’t have to write.

Categories
conferences entrepreneurship games design iphone programming startup advice

I’ve got an idea; I’ll give you 25%…

…if you:

  1. finish it
  2. and design it
  3. and build it
  4. and test it
  5. and refine it
  6. and launch it
  7. and sell it
  8. and market it

…for me.

This was the tempting offer whispered in my ear this evening by a hard-up web-developer at a networking event, once we were alone, and he’d heard I developed iPhone apps.

For the record, this is the worst offer I’ve ever had – even in the days of the iPhone goldrush (2008, mid 2009) the least I was offered was “one third”. Since then, even the unrealistic offers usually start at $2,000 cash up-front.

I smiled, and said nothing.

I carried on the conversation, when he suddenly broke into a long (minutes) tirade of abuse in the middle of the venue, because I’d “blown [him] off” when he’d “offered to share [his] great idea”.

I stood there in silence for another 30 seconds, wondering what to do: should I respond in kind? should I try to help him? should I walk away?

I decided to try and help him. I asked him to think about how his offer sounded to someone who makes apps for clients every day. (he ranted about how I thought I “was the Big Man – BUT YOU’RE NOT!”). I apologized profusely for offending him, and said I’d try to explain (he told me to “scuttle off, little man”). I made one more attempt – I pointed out that after inadvertently offending him, I was at least trying to make amends, and all he seemed to want to do was insult me. He sneered.

So, my public-service act for the day:

How much does it cost to develop an iPhone application? (tl;dr – $250,000 for a good one)

(note: when we talk to clients, I advise them the sane limit is c. $150k for a great one, or $75k for a good one. The $250k figure is accurate if you’re doing own-IP and it HAS to be awesome (like twitterific, quoted) – but you always end up spending more when it’s your own IP – or if you work with extremely expensive digital agencies who don’t have in-house iPhone specialists. Most of the good, solid iPhone dev teams are about half that price)

NB: this problem (“I’ve got an idea, I’ll let you have it in return for a profit share”) is prevalent among people who know nothing about computer games, as much as for people who know nothing about generic iPhone apps (but who read the papers and think they’re sitting on a goldmine. That’s very interesting in and of itself…

At the end of the day, I walked away from Mr. Abusive. Some people just don’t want to be helped, sadly…

Categories
fixing your desktop programming

How to start Firefox fast on OS X

When you switch on your Mac…

Click on the network icon (e.g. the wifi icon for most people) and click “Turn Airport off”.

Then start Firefox.

Click on the network icon and select “Turn Airport on”.

You will find that Firefox starts up 10-100 times faster, with fewer crashes, and OS X will run faster, with fewer delays for the next couple of minutes.

Why? Firefox caching ain’t doing what it should be doing…although in some cases, I’m still not sure why

(rest snipped while I check in more detail what’s happening)

Categories
entity systems programming

Help! Which computer games use Component/Entity Systems?

For this page:

http://entity-systems.wikidot.com/start

…I want a list of published / self-published games that were built on top of an Entity System.

I know a few off the top of my head (I think – I’m going to mail some of the authors and double-check), but mostly I have no idea.

So … if you know of any, please add them to the wiki on that page.

BONUS POINTS

…if you can provide *any* of the following info:

  • Link to a public interview / post-mortem about the game that mentions the team’s experiences with ES
  • Names of any programmers and designers that definitely worked on the ES part of the game
  • *SUPER BONUS*: link to a description of how they designed/implemetned the ES part
Categories
dev-process iphone programming

Sony Ericsson betrays customers, claims it’s an improvement

Google keeps improving Android. Android version 2.2 is one of the most important releases ever – it speeds up the whole phone (every game, every app, runs noticeably faster), along with bugfixes and new features.

Sony Ericsson has caused much hate among consumers by shipping their flagship phones with OS 1.6, even when 2.1 was already available, and then being very, very slow to “allow” their customers to upgrade (the upgrade is essentially free, Google doesn’t charge for it).

So far, no news at all.

But this week, Sony’s official Twitter account posted this, along with possibly the world’s worst excuse from a mobile company:

There will be further system updates for the X10 handsets however there will not be any more updates to the Android platform.

We believe the features included in the Android 2.1 phone are on par with, and in many cases better than, a vanilla installation of 2.2 #X10

i.e. “that expensive phone you bought in the last 9 months will never run many of the new apps on the Android marketplace. We believe you should be grateful because it’s a really pretty phone, and who cares about apps / games / etc anyway? iPhone? What the hell is an iPhone?”

The sweet stench of cow-manure

Let’s put this into perspective…

When you write apps for Android, before you even write the first line of code, you have to choose the minimum OS version that your app will work with. The older the version, the fewer the features that you have access to. Also, the more bugs you’ll have to workaround (even Google has bugs :)).

So, you leave out some features, maybe. But there’s more: many of the features of newer versions are things that are invisible to the user, but which make development quicker, easier, or less error-prone.

i.e. going with an older OS means that the developer has to pay more, work harder, for less reward, producing an inferior product. It’s not very tempting!

And Google just released Android 2.3, so 2.2 isn’t even the “current” version any more, it’s the “old” version.

…net result: lots of developers will be making Android 2.2 the “minimum” version. Sony is actively “locking-out” their customers from using the phone they own to download and purchase (a percentage of) new apps. Today, that percentage is small – but it will get bigger every day, and Sony has declared they will “never” fix the problem.

2.2? Why not 2.1? Why not 2.0?

There’s lots of improvements in 2.2 that make developers lives easier or less expensive, but there’s a single “flagship” featuer that overules everything else. This one feature can easily cut 20% of the cost of development.

2.2 has improvements to the Java VM, that make *all* apps run faster. c.f. my own experiments, where my space-invaders game ran approx 20%-30% faster, just because I upgraded the OS.

That saved me possibly weeks or months of coding that I would otherwise have spent hand-tuning the code to increase performance. Performance isn’t everything, but … the wide variety of Android handsets means that even relatively simple apps may struggle to run at decent speed on some of the handsets out there.

Of course, if I don’t use *any* of the other features, I could still release this app on 2.1 … but all the people with 2.1 would be getting an inferior experience, and many would complain and rate the app down. It’s probably less damaging – and more profitable – for me to simply ban people with “old” versions of Android from using the app at all. That way, they don’t get disappointed, and won’t be able to down-rate it.

Categories
dev-process fixing your desktop iphone programming

Installing/Developing Android (especially on OS X)

UPDATE: updated August 2011, with more detailed / idiot-proof instructions – and a couple of shortcuts. NB: when you’ve done this install once, and checked the relevant bits into your Source Control, it becomes *very* fast/easy to re-install – it’s only long-winded the first time.

I thought I’d blogged this before – the install process from Google is appalling, and I wrote up detailed instructions for colleagues about a year ago. Sadly, looks like I never published the post. I just did a fresh install on OS X (January 2011) and the process *still* is riddled with flaws. I get the impression Google won’t fix it anytime soon.

NB: the biggest single problem here is: Version Control. Someone at Google appears to believe that version control is “unimportant” and that developers should “not be expected to make reproducible builds of their software”.

But … even if you’re a sloppy programmer who doesn’t do proper version control, you probably STILL don’t want to use Google’s auto-installer. It can’t cope with basic stuff like “internet connection drops for a few seconds while ADSL re-dials” – things that your web-browser deals with perfectly. e.g. as of Jan 2011, the Android auto-installer managed to crash Eclipse just because of a blip in net connection. Pathetic, really.

(not to mention the hassle of re-downloading hundreds of meg of data over and over again for every PC in your office … this document will let you download most of it once only, and install it multiple times)

I don’t have a perfect solution, but here’s a guide for how to (mostly) un-**** the installation process for Android development.

Developing for Android: Essentials

The main IDE for Android is the (mostly excellent) Eclipse – with some custom plugins built by Google/Android folks. Once it’s up and running, it’s definitely the best free solution. To make this work, you need:

  1. Eclipse IDE … *any* flavour
  2. Android plugin for Eclipse (called “ADT”)
  3. The version-independent Android SDK (called “android-sdk”)
  4. A specific OS-version of Android (e.g. current latest is v2.3)
    • NB: plus you need a “platform tools”, which you download/install in the same way, but is an extra file/feature

FYI: the first item is from Eclipse, the last 3 are all from Google. Although Google keeps trying to kick you in the teeth, you can workaround their foolishness relatively easily for the middle two items. The big problem is the last item. More on that later.

Installing Eclipse on OS X

What follows comes mostly from: http://eclipse.org

Once a year, I call-out Eclipse.org for the appalling user-experience of downloading and installing their software. They’ve had a decade to get this right, and they still get it so wrong.

As of Jan 2011: there’s been a big improvement recently – you can now find the download link quite easily. At http://eclipse.org/ there is an enormous “DOWNLOAD ECLIPSE” button in the top right of the page, in bright yellow. This is excellent.

Sadly, the download link DOES NOT DOWNLOAD ECLIPSE … instead it takes you to a screen that demands you choose the “correct” version out of 12 offered to you, with literally no help at all. The majority of users want one of only 3 versions from that screen. In fact, I suspect 99% of people that come via the front page only want one version.

Furthermore, there is *still* no download for OS X. There is *part of* a version for OS X, but no-one has done the 5-10 minutes of setup that would make it install correctly on OS X forever more. Instead, you have to manually muck about with your computer, your administrator account etc. FAIL.

1 of 4: download the “Eclipse IDE for Java Developers” file.

Unzip it. Unzip it *again*, because they decided to use archaic Unix compression instead of ZIP.

Now you have a new folder, called “eclipse”. You have to put this somewhere. There is (officially) no official location for this … good luck getting support if you put it in a “bad” place.

Most people drag/drop this folder to their Applications folder in Finder. This kind-of works, but again because the Eclipse team haven’t spent a few minutes making an OS X manifest (could have done this any time in the past few years!), the “Eclipse.app” file is broken. If you drag/drop that file to anywhere, it will stop working.

Instead, you have to manually create a shell script to run Eclipse. I’m not even going to go into it – if you want an Eclipse.app icon in the right place on OS X, Google for tutorials on how to make a working Alias specifically for this app (working around the broken one from Eclipse.org). Or … just live with the fact you have to navigate to the “eclipse” folder before you can start the application.

Download the necessary plugins for Android

What follows comes mostly from: http://developer.android.com

Immediate FAIL from Google: the download page lists *ONE* download file, out of the *FOUR* that are absolutely required in order to do Android development. There is no mention of the others :(. How am I supposed to install the software if you won’t give me the links? Your crummy auto-installer is no subsitute.

2 of 4: At least it will get you the SDK, so download that directly

… from the main download page

If you dig around the site, read through 3 sets of instructions that all tell you not to download anything, and keep bullying you into using the crappy auto-downloader instead, you’ll eventually find a file something like:

3 of 4: ADT ZIP file

(Jan 2011:) ADT-8.0.1.zip (if you google for “ADT-8” or “ADT-9” you might find future versions on the site, since Google refuses to put them in a sensible place anywhere). Alternatively, the latest version should always appear at the “magic URL”: http://dl-ssl.google.com/android/eclipse/site.xml.

(Aug 2011:) currently it’s on version 12 …

(usually, this download link is hidden in the section “Troubleshooting ADT Installation”. The Magic URL … I’ve never seen anywhere. You have to know how Eclipse works in order to deduce it. For the record, other companies (including Eclipse’s maintainers) put a webpage at the parent of that URL, to help normal users. This one just does a 404 Not Found)

Finally, you need the bit that Google *really* doesn’t want to give you: a specific version of Android OS to develop against. You need to find the URL for a “repository.xml”. In this case, you can see it flash up briefly when the auto-installer is refreshing the repository (the part that does this is called “the Android SDK and AVD Managers”). You can try that URL:

4 of 4: http://dl-ssl.google.com/android/repository/repository.xml

Google could easily have provided this URL in the docs, since it is the “official” index for downloading the other files you need, but for some reason they chose not to.

There’s 2 ways to avoid Google’s broken auto-installer (which you shouldn’t be using anyway, unless you don’t care about updating your own Android apps in future).

1. Create a local “fake” repository by manually reading an XML file and downloading each file by hand.

This used to work – in 2010, I used this successfully. In 2011, it refused to work. Something critical has changed in Eclipse so that it doesn’t recognize fake repositories – or I just couldn’t reverse-engineer the format correctly any more

2. OR: … download the files you want, and later manually copy them into the folder where Google requires them to be copied.

NB: the auto-installer often fails / timesout / dies when trying to do this. This is all it needs to do, but it’s rubbish. I’ve found that doing it by hand is usually less error-prone, tragically.

To download the files, you need the URL’s of each version of Android you want to support. Google refuses to put these in a webpage (why? Who knows?), but it’s not hard: open the XML link above – your browser should be able to view it directly:

http://dl-ssl.google.com/android/repository/repository.xml (opens fine in Firefox)

Scroll down – it’s a human-readable file – skipping the huge license. You’ll see a lot of “sdk-platform” sections – each of these is a single verison of Android, and contains one URL for you. e.g.:

<sdk:platform>
<sdk:version>1.1</sdk:version>
<sdk:api-level>2</sdk:api-level>
<sdk:revision>1</sdk:revision>
<sdk:description>Android SDK Platform 1.1_r1</sdk:description>
<sdk:desc-url>http://developer.android.com/sdk/android-1.1.html</sdk:desc-url>
<sdk:obsolete/>
<sdk:archives>
<sdk:archive os="windows" arch="any">
<sdk:size>46828615</sdk:size>
<sdk:checksum type="sha1">a4060f29ed39fc929c302836d488998c53c3002e</sdk:checksum>
<sdk:url>android-1.1_r1-windows.zip</sdk:url></sdk:archive>
<sdk:archive os="macosx" arch="any"><sdk:size>45584305</sdk:size>
<sdk:checksum type="sha1">e21dbcff45b7356657449ebb3c7e941be2bb5ebe</sdk:checksum>
<sdk:url>android-1.1_r1-macosx.zip</sdk:url>
</sdk:archive>
<sdk:archive os="linux" arch="any">
<sdk:size>45476658</sdk:size>
<sdk:checksum type="sha1">c054d25c9b4c6251fa49c2f9c54336998679d3fe</sdk:checksum>
<sdk:url>android-1.1_r1-linux.zip</sdk:url>
</sdk:archive>
</sdk:archives>

</sdk:platform>

For each one you want to download, look for the highlighted bit above. That gives you a filename – if there’s no OS X section, take the linux section instead.

You then append that filename to the URL you used to get the repository, i.e.:

“http://dl-ssl.google.com/android/repository/” + “[filename you picked above]”

I’m afraid you have to do this for each version of Android you want to build against – but for most people, that means “just the most recent few versions”.

5 of 4: another ZIP you need: “Platform tools”

You will *ALSO* need – while you’re at it – to grab an “Android SDK Platform-tools”. Google doesn’t mention this as a separate stage, because their auto-installer treats it as part of the 4-of-4 items above.

It’s another file with the URL stored in the same repository.xml from the above step.

However, it lives right at the bottom of the XML file, in a section that looks like this (there’s only one of them – no choices to make – just grab it):

<sdk:platform-tool>
<sdk:revision>06</sdk:revision>
<sdk:description>Android SDK Platform-tools, revision 6</sdk:description>
<sdk:desc-url>http://developer.android.com/sdk/</sdk:desc-url>
<sdk:archives>
<sdk:archive os="linux" arch="any">
<sdk:size>15398275</sdk:size>
<sdk:checksum type="sha1">292732c6a86971b95ca61ba8bf84cd9d6c2285c3</sdk:checksum>
<sdk:url>platform-tools_r06-linux.zip</sdk:url>
</sdk:archive>
<sdk:archive os="macosx" arch="any"><sdk:size>15127727</sdk:size>
<sdk:checksum type="sha1">86c958b461b6244e74b4e0489ea7cef9a681d882</sdk:checksum>
<sdk:url>platform-tools_r06-macosx.zip</sdk:url>
</sdk:archive>

<sdk:archive os="windows" arch="any">
<sdk:size>16589948</sdk:size>
<sdk:checksum type="sha1">14acb6271c71dce94bba879496cd66e09ae144af</sdk:checksum>
<sdk:url>platform-tools_r06-windows.zip</sdk:url>
</sdk:archive>
</sdk:archives>
</sdk:platform-tool>

Installing ADT (the “eclipse plugin for Android”)

If you downloaded this directly, as detailed above, then Google’s post-install instructions are weak. The download ZIP also has no install instructions with it. Here’s a short version:

  1. Unzip the ADT file (Google is happy with ZIP, unlike Eclipse)
  2. Create a “magic” folder for Eclipse somewhere, which is where you’ll store all your Android SDK’s, ADT plugins, etc. Create a sub-folder “local repositories”
  3. Move the ADT folder into “local repositories” (you will probably want to upgrade this later, so you need to be able to find it easily)
  4. (NB: sad design flaw of the auto-updater – it’s hardcoded that you MUST give each repository a unique “name”, even when this makes no sense to the developer)
  5. … NB: as of August 2011 … what follows is pieced together from Google’s incoherent documentation – you won’t find these steps written clearly + correctly anywhere on the developer.android.com website :(
  6. [aug 2011]: “Start Eclipse, then select Help > Install New Software….”
  7. [aug 2011]: “Click Add, in the top-right corner.”
  8. [aug 2011]: In the Add Site dialog, click Local (not “Archive”, as per Google’s instructions – Archive causes other problems later on)
  9. [aug 2011]: Browse and select the folder you unzipped/created/moved in step 3
  10. [aug 2011]: “Enter a name for the local update site (e.g., “ADT Plugin”) in the “Name” field.”
  11. [aug 2011]: “Click OK”
  12. [aug 2011]: “In the Available Software dialog, select the checkbox next to Developer Tools and click Next.”
  13. [aug 2011]: “In the next window, you’ll see a list of the tools to be downloaded. Click Next.”
  14. [aug 2011]: “Read and accept the license agreements, then click Finish. ”
  15. [aug 2011]: …Google doesn’t admit this, but some of the ADT components aren’t signed, which is a security hole. Eclipse rightly says: “Dude, are you sure you want to install unsafe software?”. You have no alternative, though – until Google re-builds the plugin to be properly signed, you just have to accept it.
  16. [aug 2011]: “When the installation completes, restart Eclipse.”

Jan 2011: Bizarrely, at this point the auto-updater hangs for a few minutes, randomly contacting internet sites for stuff that I expressly did NOT attempt to install. I’m not sure if this is a bug in the current Eclipse, that it “hi-jacks” the plugin-install process and tries to update the rest of Eclipse, or if it’s a “feature” of the Android plugin – that it secretly triggers additional installs from the internet.

Installing the SDK

In Google’s docs, there’s a whole page for installing the SDK.

It does not – at any point – tell you how to install the SDK.

Instead, that information is inside the page for installing the ADT plugin for Eclipse.

Genius!

To save you navigating their bizarre instructions, I’ll copy/paste them here. First, however, you need to create a local install directory for the SDK (they forget this step, of course). Put it somewhere that you’ll never accidentally modify or delete – if you do, Android apps will stop building in Eclipse until you manually fix everything again. Given how tortuous the main instructions are, I’ve seen smart people diagnose the problem but have massive trouble figuring out exactly how to rectify it.

Anyway, once you’ve picked a location, unzip your SDK zip file into that folder, and proceed with Google’s instructions:

1. Select Window > Preferences… to open the Preferences panel (Mac OS X: Eclipse > Preferences).
2. Select Android from the left panel.
3. For the SDK Location in the main panel, click Browse… and locate the directory that was created when you unzipped (Google words this badly – it MUST be the folder that came out of the ZIP – Eclipse will check the contents of the folder, and reject if you select its parent folder, or one of its children)

4. Click Apply, then OK.

Installing the “Android Platform versions”

This is the install part that matches the “4 of 4” download part above.

Take each ZIP file you downloaded, and unzip it.

e.g.:

  • android-3.2_r01-linux.zip

This will give you an *incorrectly named* folder, e.g:

  • android-3.2_r01/

…you *may* need to manually rename this using the “<sdk:api-level>13</sdk:api-level>” tag that was in the original repository.xml where you got the download URL from. Each downloadable ZIP file had a different – unique – api-level tag.

The new format (I’m not sure this is required, but it’s what the installer does, so I recommend doing it):

  • android-13/

Finally (!) … find the folder where you unzipped the SDK earlier. That will have files/folders very similar to the following:

  • add-ons/
  • platforms/
  • tools/
  • SDK Readme.txt

Take your (possibly renamed) folder – in my case “android-13/” – and move it into the “platforms” subfolder.

The ADT Eclipse plugin will automatically discover this when you restart.

…go through the same process for each Android Platform version you downloaded.

Shortcut: if you’ve done this before, with a previous version of Eclipse / ADT / Android … you can just take the sub-folders of “platforms/” from your previous install, and copy/paste them into the “platforms/” sub-folder of your nw SDK version. Easy.

Installing the “Android Platform Tools”

…this works in exactly the same way as the “Android Platform versions” above, except it goes in a different folder.

In this case, you need to take the zip file, unzip it, and rename the output folder to precisely:

  • platform-tools/

…then copy/paste it directly into the SDK folder. There shouldn’t be a “platform-tools/” folder to start with – this is how Eclipse/ADT knows whether or not you’ve “installed” it: it just looks for a folder with that name.

OPTIONAL: Downloading + Installing the Android SDK documentation

UPDATE: sorry, I missed this out originally.

Again, just like with the “Android Platform Tools”, you have to manually grab the URL for this from the repository.xml

The piece of XML in the repository.xml you need is:

<sdk:doc>
<sdk:api-level>13</sdk:api-level>
<sdk:codename/>
<sdk:revision>01</sdk:revision>
<sdk:description>Android SDK Docs for Android API 13, revision 1</sdk:description>
<sdk:desc-url>http://developer.android.com/sdk/</sdk:desc-url>
<sdk:archives>
<sdk:archive os="any" arch="any">
<sdk:size>103791308</sdk:size>
<sdk:checksum type="sha1">5dadb3b30e1f837716f8a5ef840e31abddf69b38</sdk:checksum>
<sdk:url>docs-3.2_r01-linux.zip</sdk:url>
</sdk:archive>

</sdk:archives>
</sdk:doc>

…then take the zip file, unzip it, and rename the output folder to precisely:

  • docs/

…then copy/paste it directly into the SDK folder.

Done!

Phew! Finally! You should now be set for Android development!

Categories
entity systems games design programming

Entity System 1: Objective-C

(this is a simplified, but complete, version of the “Entity System 1: Java/Android”)

NB: this post is part of the community effort to make working, usable, free, source-examples of actual Entity Systems, found at http://entity-systems.wikidot.com/

Wiki link: http://entity-systems.wikidot.com/rdbms-with-code-in-systems

Github source: https://github.com/adamgit/Entity-System–RDBMS-Inspired–Objective-C-

I’m posting my original design notes here – also copy/pasted to the wiki, but the wiki version will probably evolve over time. Comments on this post will be disabled – please comment direct on the wiki / wiki discussion pages.

NB: the source code is in GitHub, that’s where you should download it from (will include any fixes and updates over time)

Concepts

(integer) Entity
(enum) ComponentType
(interface OR empty base-class) Component
(interface OR empty base-class) System
(class with implementation) EntityManager

Data Classes

Entity

This is a non-negative integer, and uniquely identifies an entity within the ES. If you serialize your ES, this SHOULD be the same after serialization. New entities have to be assigned a new, unique, integer value when they are created. When an entity is destroyed, its integer value is freed, available for re-use.

ComponentType

This is needed because this ES is so simplistic it has no other way of identifying which Component you’re talking about when you’re looking at a single Entity.

(richer EntitySystems MAY not need this type)

Component

This exists purely to make method-signatures type-safe. We need to know that certain objects are valid instances of a “component” (so we use this superclass to indicate that), but we also need a method that’s guaranteed to work on all those objects (see below).

(richer EntitySystems make more use of this, and require it to be a class, but for this simple ES, you can use an interface/header file)

System

This exists purely to contain a known method-signature that your game-loop can call once per game-tick.

EntitySystem Implementation Classes

Each subclass of Component

Internally, the class has the following functions:

  1. (ComponentType) getComponentType();
EntityManager

This contains:

  1. The master collections (arrays, hashmaps, whatever) that contain all the data for all the entities
  2. Logic for creating, modifying, fetching, and deleting entities
  3. Logic for fetching and modifying components-from-entities

Internally, the class has the following variables:

  1. MAP: from “Entity + ComponentType” to “concrete Component subclass”
  2. LIST: all entities in existence (so it never duplicates entity-IDs!)
  3. Internally, the class has the following functions:

    1. (Component) getComponent( Entity, ComponentType );
    2. (List) getAllComponentsOfType( ComponentType );
    3. (List) getAllEntitiesPossessingComponent( ComponentType );
    4. (void) addComponent( Entity, Component );
    5. (int) createEntity;
    6. (void) killEntity( Entity );
Categories
iphone programming

Writing apps for Nokia / Ovi – Attempt 1

I’ve written lots of apps for iPhone/iPad and Android. Recently, Nokia kindly gave me a new N8. So, over Xmas, I thought it would be fun to write some games for it.

Didn’t get very far. Nokia “only supports Windows”, according to their developer site.

There also seems to be a lot of confusion over which language they expect you to use – Symbian C++? (which has the confusing one-line explanation “Edit”) … Python? … J2ME? … etc.

I found a promising doc that talked about “porting from Android to S60” – which would give modern developers a way to write good code (i.e. in Java), and then back-port, maybe. But it was riddled with missing links, missing info, and bizarre propaganda (e.g. implying Android is “bad” because it supports standards like Java, whereas J2ME is “good” because … it doesn’t)

At this point, I (temporarily) gave up. I’d like to re-visit this in the New Year, but right now I don’t have a Windows machine with me (I’ve only got my Apple laptop). Android will let me write code on my laptop, then jump straight to my desktop once I’m back at work.

Of course, Apple only “allows” you to work on non-Windows machines – but they are the market-leader, they can get away with this (evil though it is!). IMHO, Android and Nokia/Ovi cannot.

I’m surprised and disappointed that Nokia has so little apparent interest in pulling-in wayward iPhone devs. If it were me, I’d have thrown up a massive, colourful, front-page picture saying: “iPhone developer? Fed up with Submission? Want to sell your apps to 1 billion people? Click here!” … or similar.

Given how painful Apple’s app-submission process is, there are plenty of iPhone devs looking for alternatives.

With Android, you can go straight from iPhone dev to Android dev. There’s a simple website dedicated to new developers (with some serious flaws and missing pages in the docs, but the experience is otherwise good). Nokia’s setup by contrast seems like they’re not really trying (yet).

Categories
games design programming

Have you made a Data/Entity System? Will you share source?

Making a trivial ES … is almost trivially easy, once you know how. But usually it’s too trivial to be used in anything except small indie projects, and nothing too real-time.

Making a production-quality one, including all the associated tools, suitable for a AAA game project … is a massive undertaking.

Somewhere in-between, I hope there’s a low-cost middle ground where some of you reading this blog would like to collaborate to make + publish complete, working, documented, OPEN SOURCE, Entity Systems.

Yes?

First questions (there will be more blog posts later):

  1. Do you have a fully working ES?
  2. Is it live in a game or app? (i.e. launched)
  3. Can you / will you / have you open-sourced it?

EDIT: there’s now a bunch of source examples here: http://entity-systems.wikidot.com/es-approaches

Categories
iphone programming

Nokia N8: doesn’t connect to computers

This week, I won a Nokia N8 at a game of pool (She Rides!).

If you plug it in to a Mac, do you get:

  1. Access to your photos? NO! (no support for the USB standard for data-devices)
  2. Access to your calendar? NO! (this is a tough one; sadly, the world today has no standards for calendars :( :( :( … but it ought to do *something*?)
  3. Anything at all? NO!

*IF* you’re technically minded…

Google is your friend. You discover the “iSync” application.

Apple’s App sucks, but even when you download and install the Nokia plugin, it tells you that the Nokia N8 is “unsupported”.

Googling, some people find that it is “supported” the very first time you run the iSync app – and never works afterwards.

I had the opposite experience: it was “not supported” the very first time I ran the iSync app – and seems to work fine on all subsequent runs.

And even after all that…

…it doesn’t allow you to sync photos. Only address book and calendar. The photos you take with the fancy 12 MP camera are doomed to stay inside your phone forever, it seems.

This feels like ten years ago. Some people worship iTunes (hard to believe, given how terrible the user-experience is), but experiences like this remind me why: it’s because the alternatives managed to be even worse :).

Categories
games design MMOG development programming

Entity Systems for Objective-C (iPhone)…prologue

I’ve just started a new game project for iPad which I hope will end up with a commercial release. At Red Glasses, we’ve got comparitively few projects for the next couple of months. If anything comes in, I’m expecting one of the other coders can pick it up, and I can concentrate on this in-house iPad game.

Schedule: 1. Prototype; 2. Refine

I wrote the first prototype this weekend – it looks like a very basic Flight Control right now (the game design is trying to do something novel with FC mechanics – I like that control system, but I think we can do a lot more with it than people have done so far).

Now it’s time to implement some of the novel mechanics, and prototyping our core game design. This will mean creating a lot of game-logic, lots of behaviours, etc. And so … I’d really like to use an Entity System.

Objective-C: the bad bits of C … without the good bits of C

The thought of building an ES without templating makes me weep.

Unfortunately, Obj-C continues to show it’s age/mediocrity/general-lack-of-usefulness: it’s finally (this year!) acquired an implementation of closures, but it still doesn’t have generic classes.

NB: *I believe* it doesn’t have generics; it might have, but I’ve not noticed them in any ObjC projects, code, libraries, etc. A quick google came up with nothing.

ES without generic classes is like OOP in Perl: techically possible, but liable to contain a lot of painful bugs which a compiler would have spotted for you … and contain a *lot* of boiler-plate code you really shouldn’t need to write in this day and age.

I could fix all this with C++ – it has probably the world’s best implementation of generic classes. It’s not perfect, but IME it’s the best overall balance of functionality.

Unfortunately, unlike C, Obj-C is incompatible with C++.

What next?

Ideas and suggestions are *very* welcome…

Assuming I can get an ES to work on iPhone, I’ll be blogging it. I’ll aim to open-source the ES I build.

I’ve had a quick look at using C++ classes and objects in ObjC. Using the objects has a lot of boilerplate code from Apple, that looks pretty good (but painfully verbose :( ).

…but using the *classes* appears pretty horrific. Since ObjC doesn’t have any kind of generics (that’s how we got to this point :)), it can’t handle those parts of C++ in a meaningful way.

Then again, since Obj-C is *very* dynamic as a language, I might be able to do something cunning with passing around NSClass instances / references. Combine that with runtime method dispatch / message-passing, and *maybe* I can code a decent C++ ES … while using ObjC to write logic that acts on the data from that ES, without having to write so many extra lines of code that the “saving” is lost.

As I said … ideas welcomed!

Categories
games industry programming recruiting

Tech Director in Games industry: what do they do?

Came up recently on TCE. I finally figured out a concise definition of the job role being filled by the “good/great” Tech Directors – someone who’s worth every penny of the $150k salaries they command:

“Figure out the worst things that go wrong which nobody is specifically to blame for, and make sure they don’t happen”

The point with TD is that 9 times in 10 you have a hierachical company structure:

Owners

Company Directors

Senior Management

Exec Producer

Project Management

Leads

Teams

…with the setup that responsibility flows DOWNWARDS (companies where responsibility flows UP are very rare in games industry, IME. Nice idea but very few companies have the culture to obey that ideal!).

So … e.g. … anything that the PM’s don’t think of, and don’t delegate to one or more leads … gets completely ignored/forgotten.

This is a gross generalization – in practice, people lower down tend to notice if something’s missing, and apply pressure up the chain until someone takes it on, or take it on themselves.

That works for small stuff. But the big stuff – especially something that needs two disciplines to fix, or that is too much workload for one person to “absorb”, you need someone with management power (i.e. the authority to take people away from pre-existing tasks).

That’s where the [X] Director comes in. (X = Technical, Art, Design, etc)

TD, AD, etc have the sweeping power to get different departments to collaborate, or to persuade a Producer to relinquish some of their team for a week to get a “more important but so subtle you didn’t see it yet” problem fixed.

Categories
agile dev-process entrepreneurship programming startup advice

Startups: how NOT to write your website sales pages

If your startup sells stuff via the internet (you have an online product, service, web-app, etc), this may be the single most important thing to get right (assuming your core idea, team, etc has inherent merit). And yet so many companies spend so much money doing it so wrong.

Why are modern software companies so bad at selling software? Today I was looking at Scrum tools (or Agile if you prefer), and I was struck by how hopeless some of their websites are. With some of these sites, I am sure that I could increase the sales of most of these companies by hundreds or thousands a year, just through basic principles of sales.

(and, obviously, HOWEVER you design your sales page, you should be using A/B testing to increase sales, conversion, etc. But A/B testing is no panacea: you still need the creativity and understanding to make the “big leaps” yourself)

Example: VersionOne

I’m going to pull out one example (by accident, the first I came across). Many others are much the same.
VersionOne.com

Before we go further, let me be clear what “kind” of customer I am. I’m currently looking for solutions for two commercial setups. One is for tiny projects on a case-by-case basis. This would be 5-seat licenses (worth up to $3000 at VersionOne’s current prices). The other is for a company-wide purchase of up to 30 licenses per annum (worth up to $15,000).

But, at the same time, my last full time job was running development for a large development studio. I was the primary reviewer and purchase-maker for software tools that were 50-person per annum immediately, and meant a commitment of up to 150 within 3 years. I’ve done a *lot* of this purchase-review process, on a lot of software.

My negative reactions to VersionOne’s sales are fairly consistent across the 3 profiles (although the reasons behind that are complex)

Landing page, from Google: the “don’t ask questions, you’re too stupid, just buy instead”, and “we love ourselves, we’re awesome” page

Page: http://pm.versionone.com/Trial_ScrumProjects.html?c-aws=trs&gr-tss&v-029abt&gclid=CNGTgsrEoaICFUcA4wod82WOwg

This has a *concealed* URL, so it pretends to be the front page, but actually lies, and redirects you to this page instead:

Ont this page, your website states it’s a commercial product, yet REFUSES to answer the single most important question: how much does this cost?

There aren’t even any LINKS to finding out about the product. It’s just “buy our product, or piss off”.

This page serves one purpose: lock the customer into a product they don’t want. You are “not allowed” to know the cost, you are only “allowed” to “signup now for a 30-day trial” – you have to commit yourself, and they’ll sting you with a price later, when you have no choice.

Word of advice: merely making something “free, for a few minutes, then I charge you” does NOT lower the customer’s barriers to purchase. For an ultra-long-term product like Project Management tools, it often has the *reverse* effect. The MINIMUM trial for a PM tool is “one project”. Most projects – using new tools – will need several months; 2 week to learn the tool, 10 weeks to run + launch + finish the project. The customer knows this; they know that a “30 day trial” is completely dishonest.

So, we use the navbar, and head to the “Product” page:

Product page: the “Want more info? Oh no you don’t! You’re too stupid, you’re just a customer!”

Page: http://www.versionone.com/Product/

I’ll sum up the stupidity and smug self-satisfied attitude of the person who wrote this page with just one quote, their final bullet point in the top-section:

“Accelerate agile adoption”

[hey! Look at that! I’m so clever – three words all beginning with “a”! They’re guaranteed to buy now! I’m so sharp, sometimes I cut myself]

Sigh. Ignoring the “infographic” which has been screen-captured with a font-size of 2pts (i.e. literally physically impossible to read), we try to do something useful with this page: review the product (we’ve given up on pricing, for now – they obviously don’t wany anyone to buy the product, but maybe the product is so good we can force our way past that?)

Product page, part 2: the “we don’t trust you, we’ll spam you with marketing crap”

Page: http://www.versionone.com/Product/

(below the infographic)

Just look at that page. It has literally zero information about the product, yet it’s the “product” page.

Instead, it has paragraphs of marketing crap. There’s no other term for it; let’s look at the first example.

Bullet-point: “Product Planning”

What does this mean? Absolutely nothing. BY DEFINITION, this is a whole website devoted to project-management-planning software used on projects that create products. Why do you repeat this, in such a childish gross genealization, as if it’s a “feature”?

Ah, but … actually, that’s not necessarily true. Scrum is often used on projects that are NOT generating a Product.

So, in fact, this lazy marketing title has already told some of the target-customers: “Don’t use our product. Go away”.

Let’s look at the text underneath the bullet:

“Plan and manage your requirements, epics, stories, and goals across multiple projects, products and teams.”

What is this – Dictionary.com? Why are you patronising me by telling me what you think “Product Planning” means, as an abstract concept? What kind of project manager – or engineer – is so stupid as to not know what it is they do on a day to day basis, and to feel happy that you’re telling them?

I WANT TO BUY YOUR SOFTWARE, NOT LISTEN TO YOUR PHILOSOPHICAL DISCOURSE.

I suspect that the weak marketing person who wrote this copy thought it “looked nicer” to put features into a long sentence. Let’s look at that sentence, from a copy-writing perspective. It has eight separate phrases. EIGHT. The average sentence has 2-4. Concise sentences have 1-2. Waffle has 5 or more. This is a sales page; every sentence should be no more than 3 phrases. EIGHT! NO-ONE is going to pull useful information from that sentence.

Onto another problem with this page, for the customer who comes here: No screenshots. Anywhere.

OK. Take a deep breath. This is a company that, so far:
– wants to deceive us into locking-in to their product
– patronises us intensely
– works hard to hide features (check that “unreadable” infographic)

…but let’s put all that to one side, and drill down into the links from the Product page.

Features (1 of 8): “You can look, but don’t touch AND DON’T LOOK CLOSELY!”

Page: http://www.versionone.com/Product/Product_Planning.asp

Finally, if you follow one of the links from this page, you get to a page that contains some actual, concrete, info about the product. There’s even some screenshots!

Oh. BUT. You are “not allowed” to actually see the screenshots. They’ve been deliberately blurred-out a low-resolution, so that text is literally unreadable and there is NO WAY to judge the product. (NB: this is *after* you’ve clicked on the almost-full-size thumbnails in the page). They are then further blurred (to no purpose except to fit the Web Designer’s fetish for popup images) and embedded in the page.

Overall impression: this company knows it’s own product is not fit for purpose, and will do anything to stop the customer from finding that out until AFTER they’ve paid their money. Whatever you do DO NOT BUY VersionOne’s project-management software.

Final thoughts: First one is free

A decent usability person – or a really good web designer – would make huge sweeping changes to that site.

A flippant starter, something I’d personally try immediately (today): move the “see it; drive it; try it” buttons that hide in top-right of the site to CENTER STAGE, both on the Product page and the Google Landing page.

AND … I’d add a fourth button: “Buy it”.

What? There’s no “buy” link on this site? Yep. I think that eloquently sums up what a poor job this site does of MAKING MONEY FOR THE COMPANY.

(NB: and I *absolutely* would instigate A/B tests to prove – day by day, hour by hour – that my changes were having a noticeable effect on increasing sales to the site. If you don’t do that, then you’re just pissing into the wind. You have no idea, afterwards, whether your changes “worked”. See Sergio Zyman‘s book for more…)

Where do these terrible sites come from?

I believe that these often-amateurish websites come from one of two sources (possibly both):

1. Expensive “Web Design” agency that only cared about making it “beautiful” without understanding a single thing about the reality of sales. In the example I run through below, dead giveaways include: Popup images that are only 15% larger than the thumbnails that trigger them; grey-on-white text; very small font-sizes. All those are characteristic of visual designers who know nothing about product sales.

2. A marketing team that’s worked for big corporates (multinational, public companies) and thinks that the most important thing in their job is to “clone” the website of “a real company – you know, like Microsoft”, and pretend to “be like the big boys”. They have no idea why those websites look the way they do, and don’t bother to ask themselves; they just blindly clone it. In the example below, dead giveaways include: 12 pages to describe a simple product where 3 would have been more than sufficient; hiding information at all costs; never committing to a list of features; using “freeform text” instead of simple “bullet points” to describe the product.

Categories
amusing programming

“Not satisfied with the number of deaths and permanent maimings from that invention he invents C and Unix.”

Beautiful, and disturbingly accurate.