I’m in a stickler kind of mood. So flame-on and that’s where this post is coming from. I feel like deconstructing minor points, being over-analytical, so, grain of salt. Please, roll your eyes and I’ll roll mine back at you.
Henceforth and forthwith and so on, I recently caught this video. On one hand I really like it. It’s got a great theme, it’s funny, fun to watch and is a fundraiser for Hurricane Sandy — totally awesome and I’m glad they did it.
On the other hand, it doesn’t resonate. I just don’t think most people — entrepreneurs or not — are going to connect with wealthy, successful people rapping about how lucky they are. I think viewers would have a far better chance of connecting emotionally if those in the video gave interviews and talked about the impact of helping Sandy victims, but they chose to go the more creative route (from the website):
This song is dedicated to the people who fight every day in the trenches of entrepreneurship. We brought together 25 of some of the world’s top entrepreneurs & investors to participate in this video. We feel super lucky to be building products that make people’s lives better, easier and happier (thus “Lucky Ones”). We’re setting out to raise funds for a few small businesses that were devastated by Hurricane Sandy.
The verses don’t quite jibe with the chorus for me. The chorus is:
We are the lucky ones,
We are the dream,
And we’ll see it all come true, yah,
Cuz we work all day, and we play at night,
Nothing can stop, nothing can stop,
The dream of the lucky one
The verses are all about persistence and staying hungry, doing something you love, staying the distance, working hard and so on — all great things, surely. The last line of the last verse is:
You decide your life and that’s lucky
Just. No. Really? The platitudinal thrust of it irks me. How are [the singers of the song] lucky? And while we’re at it, what is luck anyway?
So let me sing along. I’m lucky because I get to “work all day” and “play at night”. I’m “the dream” and “nothing can stop” me. So, on the surface, the hook fits the verse: it’s more or less a nice bit of colloquial fluff about how I’m lucky because I get to pursue my dream. I get to work on something exciting. Ground-breaking. World-changing. Do what I love. Follow the vision. I’m a ninja, a rock star (first verse), a “lucky one”.
Okies, so how did I get so lucky that I can be so lucky? What happened there? Let’s try to find cause without over-correlating. Presumably at some point I was at the right place at the right time. I think that’s a reasonable presumption. Circumstances were such, or some event happened, that I got my shot at ninja-rockstar-dream-lover-entrepreneur. And I was ready for it. My preparation met opportunity, right? Or maybe as Napoleon Hill suggested many years ago (by way of Wikipedia), I had the desire, faith and persistence to “reach great heights by eliminating negative energy and thoughts and focusing on the greater goals in hand”. Damn I’m awesome.
And I’m kinda full of crap. Alrighty, now here’s a snippet of lyrics from another song (there’s a point, I promise!):
Triangle man, triangle man
Triangle man hates person man
They have a fight, triangle wins
Let me reskin this, first attempt:
Opportunity, Opportunity
Opportunity trumps preparation
They have a fight, opportunity wins
Or how about this:
Luck, Luck
Luck beats Work
They have a fight, luck wins
Is it possible that luck and work are not two sides of the same coin? That one is more crucial than the other? Think about it. It’s easy to want to group something that’s not arbitrary (work) with something that is (luck). But how many successful people attribute their success to their hard work? Remember Edison’s famous quote? It’s often misquoted but here’s the original:
This is commonly viewed as Edison saying it’s all about hard work. But I don’t read it that way. “Trial after trail until it comes” — that sounds more like luck than the scientific method. And here’s an experiment: Pick some famous successful people and google them with the following pattern, [name] “I was lucky”. For example, Steve Jobs “I was lucky” or Bill Gates “I was lucky” or Andy Grove “I was lucky”. Yeah yeah this is just anecdotal qualitativity masquerading as me-blogger-authority-big-data-backmeup, but you get the gist. The point is, there’s much more to this than “you decide your life and that’s lucky”. The “you decide” part hooking up with the “lucky” part is so third grade, like, you know, “Do you like me? [ ] YES [ ] NO”.
Moreover, all this implies having a goal — keep the faith, dude. Have a vision. Follow your bliss (Joseph Campbell: “Remember the last line? [of Sinclair Lewis‘ Babbitt?”], ‘I have never done a thing that I wanted to do in all my life.’ That is a man who never followed his bliss”). And I think this has potential for being the real fallacy, that objectifying the “thing” or “things” is a primary key in the database of luck. Isn’t the process far more interesting, sustainable, rewarding — without any goal whatsoever? Who on their deathbed laments that which they were unable to accomplish in a material sense? Will I regret not having a bigger house or “owning” more property when I’m dying? Will I bitch and moan about not flying first class more often, not upgrading to the latest iPad, not splurging more often on holiday? Will I cry over all the stock buys I didn’t make? Nah. We all know that we won’t (at least most of us won’t — some of us might).
Maybe what bothers me most about the video, considering its participants, is the third-to-last line in the song:
You’ll never keep playing this game for the money
Hmm, on the surface I just wanna say, right on! But on behalf of those who are actually in business trying to make that business successful (by definition), I calleth the bullshit. Tell your employees that you’re paying with vision and spirit. Make your plans now to give all your money away — or better yet, just give it away as you go because you don’t need it, it’s not about the money. Oh, make your investors keenly aware of your new-found, non-profit altruism, too, and they will be sure to invest more– hold on, wait a tick, you don’t need investors, it’s not about the money!
Yes, yes of course I get the sentiment here: “I love it so much I don’t do it for the money”. Platitudes. Mostly people with enough existing fuckyoo capital say this shit (and yeah, I say it sometimes too). Sometimes certain artists or people with varying degrees of mental illness. But even if you truly, truly, truly aren’t in it for at least a little ROI, try measuring your business by bliss alone and see how long you keep living the dream.
I’m sure the folks who contributed to the video had nothing but the best intentions — I’m a big fan of several of them! I’m sure that Undrip has the best foot forward on it. And at the end of the day, it’s groovy. But it’s also utterly simplistic and emotionally not-so-present. Did you, O Lucky One, decide your life and that’s lucky? Or — reversalism, please — did you luck into your life and that’s decided? As Forrest said to Jenny, “Maybe it’s both”. Either way, in a complex, multi-dimensional [entrepreneurial] world full of ever-changing perspectives and experiences involving luck, life and work, you’re displaying all the depth of a 2D orthogonal projection, which, I guess, since this is just a video we’re talking about here, is appropriate.
Big companies no longer dominate the creation of video games. Freethinking, independent creators are on the rise, and they’re making some fascinating games.
Yes, it’s true: Indie game developers are making great games, as they’ve almost always done. But the Bell Curve is alive and well — only a few at the top are producing creative, interesting stuff. The rest are struggling with either 1) interruptions to implementation due to lack of funding, or 2) the need to put the dish on the table before it’s done — to “test” the waters before committing the time and money to complete the game, or 3) the low barrier to entry that tricks them into thinking they can somehow skip to the head of the curve without doing the work.
In fact there are plenty of big companies, old and new, and they all want to dominate (and most of them claim to be the “leader” in their markets — we sure have a lot of leaders these days!). It’s a roller coaster for developers, however — nobody wants to put their money in the pot until the meal’s already cooked, been reviewed and filled the restaurant with patrons.
For developers, there’s a promise of deep pockets to extend and maintain — perhaps even increase — revenues, but it’s next to impossible to figure out how that actually happens in the current crazy world of online (and especially mobile) discovery and distribution.
Android isn’t going away anytime soon, and should continue to bring in significant revenue for Google for many years to come. But without radical changes, it will never be the top winner on mobile. From a development perspective, here are ten reasons why:
1. Lack of a world-class IDE. Both Microsoft (Visual Studio) and Apple (Xcode) have invested enormous sums into creating stellar development tools, while Google chose a 3rd-Party IDE — Eclipse — that, while championed by some, is despised by many developers. Google’s decision here almost brings into question their fundamental understanding of client software development — ironic, considering Google’s reputation as an engineering-focused company.
2. Emulation instead of simulation. Google chose to emulate real devices in software instead of simulating, or approximating them, on development hardware. Not surprisingly, this approach is slow, buggy and frustratingly difficult to manage for all but the simplest apps. The icing on the cake is that their emulators emulate no better — and perhaps worse — than simulation.
3. API. The Android API itself is an over-engineered clunker in some areas (XML configuration files, UI scope, resolution scaling) and quite half-assed in others (native development, gimped high-level controls, view hierarchy). Versions change a bit too radically and methods tend to deprecate a bit too quickly. While the amount of work that appears to have gone into the API is impressive, it seems to ignore the hard-won lessons of its ancestors, notably J2ME and BREW. Part of this is due to the nature of Java itself; once an ensign of OOP, it has steadily devolved into OOPS on practically anything but a server.
4. Buggy debugging. Debugging on Android is at best incomplete, at worst unreliable. The threading approach feels oddly out of sync with the app, Java by nature doesn’t do an adequate job of pinpointing line numbers, and breakpoints don’t work on every development system. Roll this into the quirkiness of Eclipse and debugging an Android app is, more often than not, a black box.
5. Documentation. Unlike Apple (and if history is any guide, Microsoft in the near future), Google decided not to invest in detailed docs, real-world examples and a ton of sample apps. This might be okay if the Android development community at large wasn’t so fragmented and, in general, un-helpful. For docs and support, it’s the worst of both worlds.
6. Expense. Testing, in terms of both hardware costs and man hours, is far more expensive on Android. There are hundreds of notably different devices and Google (unlike Microsoft with Windows, for example) has done a poor job of enforcing standards. Admittedly this is herculean task, but the result significantly raises the barrier-to-serious-development-entry.
7. Loosy-Goosy marketplace. Developers can’t stop users from installing their apps on unsupported devices or older Android OS versions. Users can’t stop themselves from leaving inappropriate and irrelevant bad reviews. Piracy is easy.
8. Too much crapp. This is a problem that Apple shares and Microsoft is acquiring, but the barrier-to-entry for putting anything on Google Play is ridiculously low. With Apple, it’s an unlocked door; with Android, it’s an open door, resulting in even more low-quality crapps that muddy up the virtual aisles and make finding legitimately useful or fun apps even more difficult.
9. Platform fragmentation. The same Android version on different devices doesn’t deliver the same experience to users. Different devices pre-load dozens of bewildering garbage apps and services. While this is to expected to some extent (much like buying different PC brands), it’s an order of magnitude or two worse than what most users would reasonably expect.
10. Hard to make money. Alas, Google Play has become a bigger race to the bottom than Apple’s App Store. With the exception of the occasional developer-lottery-winner, it’s takes a ton of stamina and funding to make Android your business model.
Great post by Ben Horowitz today, called Making Yourself a CEO (makes it even harder to believe he also wrote this). I agree that it’s pretty common to subscribe to a more Hollywood kind of notion that CEO’s are born, not made. But that’s also true with most jobs, IMO. While individuals may have certain gene combos & talents that predispose them toward one thing more than another, it’s all about the effort and the practice — and Ben’s got some great comments on both those in the post. Good stuff.
I’ve been a fan of Ben Horowitz for years, certainly of his success as an investor and businessman and definitely of his writing. I’ve quoted some of Ben’s past posts to others, found many of his themes to be fabulous food for thought, and always look forward to reading his blog. And I usually learn something from his writing.
Alas, not this time. It was quite a surprise to read his recent post, A Good Place to Work. There’s some discussion about it here, including a response by Ben (which makes me feel a little better, but not much).
Purely selfish of me (after all it’s his blog, he can say whatever he wants!), but I hope Ben decides to write another post to clearly explain the choices he made in A Good Place to Work. Up until this point I’ve been a believer in Ben as an authority on leadership and management, and I want to get my warm-and-fuzzy back.
Dean’s latest DeanBeat is a well-written, sober little piece on Zynga right now. BTW, I don’t say it often enough, but Dean is one of our industry’s journalistic treasures — Dean, please do keep up the great work.
Anyway here’s a money quote:
Plenty of people hated what Zynga became, and they trashed not only Zynga but Facebook and all social companies. To these people, Zynga never did anything right. They never gave it credit for expanding the meaning of being a gamer to hundreds of millions of people.
This is a point I’ve been trying to make with hardcore gamer and game developer friends for some time now. Don’t get me wrong: I absolutely, hands-down, for sure, hate most of Zynga’s games, as do most people I know who have self-identified as a “gamer” for the last 1-2 decades. Particularly the early stuff — all of the Ville games just plain suck for us gamer types who have been playing since the 80’s/90’s.
But take FarmVille and transport it to 1985 and we would have all been fans. Whether a launch title on NES, an arcade game or a PC game with shitty graphics, we would have played it, enjoyed it and perceived it as having real gaming value.
Of course we’re not in 1985, and we’ve had a lot of time to grow up on new and better gaming experiences, advances in design, hardware, play mechanics and so on. We’ve been happily following the evolution of video games with our minds, hearts, fingers and wallets for a while now — and to us Zynga games sputter instead of sparkle. Their game mechanics are very often like Joshua and Tic-Tac-Toe — winning moves are boring and so we just don’t play.
For others — many others, many millions of others — who haven’t grown up on video games like we have, most Zynga games have been a great introduction to gaming. Regardless of their original intent, Zynga ushered in a whole new crop of customers far more interested in playing games than they were just a few years ago. This is a really great thing and the timing was fortunate considering the downward spiral the traditional industry has been in for the last several years.
So thanks, Zynga. My friends and I hate most of your games. But we’re also glad you came to the party and started the clock ticking for millions of new players. We’re hoping you’ll create games in the future that will show all those new folks how much fun and awesome video games can be. And I bet you’ll show our snob-asses a few new tricks. Take all that IPO money and spend it on quality from here on out, won’t you?
It’s just a Best Buy commercial, but it’s so cool to see Dennis Crowley for three full minutes talking about Foursquare, particularly the bit, around two and a half minutes in, about avoiding the haters. Respect, Dennis.
This is the first post of an ongoing list of game developer funding events, to keep more explicit track of the frequency of non-traditional game-related funding (usually by VCs) that’s going on in the industry. I’m not including Kickstarter events at this point (would be too much of a timesuck) and the list is not meant to be definitive by any means — it’s just a few bits here and there that show up on my daily webtrek, which includes excellent resources like VentureBeat’s Deals Channel. The list is only for actual game developers or studios.
August 2012
Company: Innovative Leisure Funding Source: Hummer Winblad Amount: Undisclosed Seed round Summary: Seamus Blackley is “focused on building games for ‘the new arcade’ of iOS devices”. Team includes Ed Rotberg, creator of Battlezone; Owen Rubin, creator of Major Havoc and Space Duel; Rich Adam, creator of Gravitar and co-developer of Missile Command; Ed Logg, co-creator of Asteroids and Centipede; Dennis Koble, creator of Touch Me and Shooting Gallery; Tim Skelly, Cinematronics arcade game designer; and Bruce Merrit, creator of Black Widow. [Source: VentureBeat]
Company: Funium Funding Source: Family Odyssey with participation from angel investors Amount: $1.8m Summary: Funium originally raised $1.2 million in 2011 to build Family Village, which became available in pilot mode in June 2012. [Source: VentureBeat]
July 2012
Company: Social Point Funding Source: Idinvest Partners and other funds including BBVA and Nauta Capital Amount: $7.4m Summary: Founded in 2008. Several social games in the last 18 months including Social Empires, Social Wars and Dragon City. Over 15 million MAU as of June 2012. [Source: MarketWatch]
Company: Phoenix Guild Funding Source: Unnamed VCs, YouWeb Amount: $1.1m Summary: Founder Jason Citron (of Aurora Feint fame) said, “It seems obvious to me that core gamers are moving from PCs to other devices and tablets,” and Phoenix Guild’s goal is to provide great core games on those new platforms. [Source: TUAW]
Critical Path is a video project recently announced by Artifact Studios. The website has a slew of interview snippets with many of the game industry’s best-known game developers and is worth checking out.
Supposedly the project will end up as a single documentary that combines all of the interviews into a film about gaming as a whole. Their tagline is, “Explore the art, philosophy, politics and psychology of video games with some of the medium’s most influential designers and visionaries”.
Clicking around on several of the interviews is a bit more of a snooze than I would’ve anticipated, but some are interesting. I hope the project doesn’t end up as an industry-congratulatory or “thoughtfully informative representation” type of piece. Hopefully they’ve gathered some informed opinions on the current chaos in the industry and how digital distribution and discovery (or lack thereof) are transforming everything.
Draw Something has continued to do very well in the App Store and now we’re seeing more derivatives — apps and games with basic painting and sketching capabilities. Last weekend I had some fun playing around with a basic painting setup, just to see how much brush (pun intended) I’d have to go through to get to the painting picnic.
On iOS, there are really only a couple of ways to implement a painting app — Quartz or OpenGL ES (there’s a nice little walk-through using Quartz here, and Apple put together a cool little OGL example called GLPaint here).
It should be relatively clear that the OGL approach is cleaner, more flexible and a bit faster. But while GLPaint is a nice place to start, it’s not very app- or engine-friendly in the context of a full-fledged OGL app. Since the point of GLPaint’s example code is demonstrate how to do basic painting, it has no need to consider the rest of your OGL surface’s render loop, nor does it concern itself with other important engine pieces, like your OGL redundancy state checker, sorting and synchronization issues between render and update calls, and most important, clearing the buffer.
That last bit really is most important because a nicely-performing painting app should never clear the buffer. Doing so will quickly slow things down to a slide-show. This should be obvious: In order to paint to the screen — whether you’re using GL_POINT_SPRITE_OES or rolling your own quads — you’ll need to draw a ton of sprites on-screen to get a continuous line of color and/or texture. If you clear every frame, you have to re-draw every frame, and voila, you’ll have molasses in less time than it takes to launch the simulator. If you don’t clear, you’re only drawing a handful of new sprites each frame.
The GLPaint example does this — it doesn’t clear the buffer. However in a real-world app, you must clear every frame in order for anything else — GUI elements/textures, mesh rendering, camera changes, etc. — to work. Hence the conundrum — you need a nice, normal clear/render loop but you also need a render-only call each time you want to paint.
Luckily there’s a straightforward solution: painting to a texture, then render that texture in your normal render loop. And setting up a texture to paint to is easy, by attaching it to an FBO. For example, a full-screen texture buffer:
From there it’s simply a matter of drawing to the texture and only clearing the texture when you need to, e.g., by calling a function like this:
- (void) StartTextureRender:(BOOL)clear color:(COLOR)color
{
glBindFramebuffer(GL_FRAMEBUFFER, m_texFrameBuffer);
if (clear)
{
glClearColor(color.r, color.g, color.b, color.a);
glClear(GL_COLOR_BUFFER_BIT);
}
glViewport(0, 0, m_texW, m_texH);
// setup ortho matrix, render and client states here...
}
One of the cool things about Draw Something is that it records and replays your drawing. This is relatively straightforward functionality to implement, and GLPaint kinda-sorta does it as a nice bonus. However their implementation is on the oddball side and a bit shy of more readable, that-makes-sense-to-me production code. A clearer way to implement it is to do a standard 2D lerp between the current touch (as you move your finger on the screen) and the last touch. Then record the time it took between finger-down and finger-up for playback later. For instance:
- (void) Draw:(float)x y:(float)y
{
if (numVerts == MAX_PATH_VERTS) return;
end = Vec2(x, y);
dist = Vec2Dist(start, end);
num = (int)dist;
if (num > 0)
{
startVert = numVerts;
numVerts = MaxInt(numVerts + num, MAX_PATH_VERTS);
for (int i = startVert; i < numVerts; i++)
{
Vec2Lerp(&verts[i], start, end, (i - startVert) / dist);
}
time += [Engine GetTimeElapsed];
}
start = end;
[self DrawRender];
}
Below is the entire class (note that several of the vars are structs elsewhere in the engine, but you get the gist).
An NSMutableArray of multiple instances of this class is kept by the caller; each instance is born on finger-down (where we set color, brush texture and size) and dies on finger-up. Replay is easy — essentially just a programmatic rendering of the verts that were previously recorded while iterating over the NSMutableArray, handled with a flag in the Render() function. Below is the basic idea.
One of the cool things about using OGL for painting and sketching is that you can very easily change up the brush texture, for nice Photoshop-like texture brushes (care should be paid to how you setup the blending, however, due to pre-multiplied alpha on iOS). While it’s possible to do this with Quartz, it’s much easier to grok using OGL. And of course you can do silly/fun stuff like paint a background behind your 3D orc model (maybe there’s a game idea in there somewhere, hmm — ok, maybe not).