I've been at Google one year.
A lot has happened, but the vision stays the same. I and others are working on improving tech to support great applications on the web. Better performance, use of GPUs, 3D, and much more (audio, connectivity, device access, monetization, discovery, ...).
Google continues to build it's engagement with game developers. We're already engaging on multiple platforms (Android, Chrome, Google TV) and offering useful services (YouTube, AppEngine, Analytics, Ads) and building out great tech.
We've also continued hiring great game developers, and I'm humbled every day by the ones I'm working with. (e.g. people keep doing double takes that Bill Budge is working a few cubes down.) Ian Lewis has hit his stride and is doing a great job driving Game Developer Relations (btw: hiring) (and, well, all of Google is hiring really, even back in the Research Triangle NC, drop me a line if you'd like help applying).
Chrome GPU team is my home, though I'm still excited about Chrome OS where I started. There's a lot of core infrastructure for all GPU features, some of which are starting to ship, like WebGL.
20% time is a great perk at Google. Not everyone uses it, but I take a lot of it to help Game Developer Relations out and also do some game experiments.
Google was the hardest job I've joined yet, though. There's so much to learn, so much great tech and products, tons of fascinating things to look into, and so many rather smart folk. I love the culture, the positive "do the right thing" attitude, and that there are engineers all the way to the top. I'm excited for year 2. ;)
Tuesday, February 8, 2011
Thursday, January 20, 2011
Tools of a Day
I use these tools daily:
- Chrome
- Profiles (I run multiple, work/personal/spouse with --user-data-dir="C:\example")
- Themes (Easly tell profiles apart) e.g. A B C
- Chrome to Phone
- Gmail
- Google Chat with AIM linked
- Buzz (Easiest for quick public posts, but much richer than Twitter, Great for private posts)
- Google Docs (I'm so loving the cloud - any machine, same time, always auto saved, revision history, on my phone, sharable)
- Google Reader
- Google Latitude (Friend at work yet? What's the wife up to?)
- Google Listen (podcasts)
- Google Maps
- Delicious.com
- Git (source control, easy local branches)
- Beyond Compare (file and folder comparison + FTP)
- Slick Edit (Linux)
- Notepad++
- Visual Studio
- Cygwin
- Process Explorer
- Mixapp.com (Music, shared with friends, think Pandora you can control + others)
- Bike ;) the commute is the only exercise I get.
How about you, anything interesting?
Sunday, December 5, 2010
How to Share an Email Address in Gmail
My wife and I each have our own email addresses. Common, though she is irked by a few friends who don't. They can only be emailed by sending to the joint "family" email, often actually just the husband's name. Trust issues? Anyway...
Having a joint account is handy now and then. I want one. They're good for things like that real estate agent who just can't figure out "reply all", or that web site that only allows one email address to be entered you both want to track.
Bad news, I didn't find a perfect answer. Good news, I found one good enough... only you and your significant other can mess it up, and only slightly:
Set up a new gmail account, have it forward to each of you. Set up your gmail account to be able to send as the joint account when you choose.
Walk through:
- Create a new gmail account wife.and.i@gmail.com by going to gmail when you're not logged in. (or use an incognito window in chrome)
- In Settings/Forwarding, add forwarding addresses for your existing accounts, wife@gmail.com and me@gmail.com
- In Settings/Filters, add a filter to match everything. This is a tad tricky, you can't just use From: *. So, create a filter that Doesn't have: some_long_random_string_sldkfjslkdjfsdfkjsdf and then select one account to forward to. Repeat, creating a new filter, for the second account.
- Configure your personal account (me@gmail.com, repeat for wife@gmail.com) to be able to send and reply from the joint account.
- in Settings/Accounts in the "Send mail as:" section, add wife.and.i@gmail.com
- On the same page, select "Reply from the same address the message was sent to"
It works:
- Easily give the shared email address wife.and.i@gmail.com to anyone and you'll both receive the emails in your personal accounts without needing to ever log into wife.and.i@gmail.com again.
- Replying to an email sent to the joint account will "just work" and appear to come from the joint account. (But, don't forget to CC your significant other if you want them to see your reply)
- Writing a new email as if it came from the joint account is easy too:
- Compose a new message, above the To: is the From: address, and you can change it to the joint account.
- (But, don't forget to CC your significant other if you want them to see your reply)
What's tedious is that you must remember to CC your other every time. Now, we're all high and mighty about external people who can't remember to reply-all, so we should be able to remember to CC everyone each time, right? Still... tedious. If you forget, at least the reply from the external people will go back to both of you.
Here are the other things I tried:
- Create an outgoing filter to automatically forward to your significant other's account?
- Nope, you can filter outgoing email (adding labels, say), but you can't forward them.
- Create an outgoing filter to label and remind you that you forgot to CC?
- Nope, you can add a label, but not send it to the inbox also or mark it unread, so no way to get attention.
- Create a group on googlegroups.com?
- Nope, you can send and reply as the shared email, but you must manually CC your significant other's account each time. The group account doesn't appear in a reply all because you're sending as that account. If you're not sending as that account it works, yay, but then you're sending as just you, and replies will not go to the joint account.
Have a better solution? Lemme have it in the comments!
Thursday, November 11, 2010
Gamebryo / Emergent IP and Assets at Auction
Gamebryo is dead*! Long live Gamebryo!
* - Well gamebryo may not be dead. The development team is disbanded, and it's highly uncertain if another company will try to reanimate the corpus of code.
Emergent's assets and IP are being auctioned, closing Dec 10th. The announcement contains some interesting content, which is nice to be able to share publicly.
The financial profile of the company since 2005 is contained, here it is in handy chart format:
Note that revenue was significantly less when I joined in 2004. We saw big growth in 2005, and that continued solidly through 2007. The peak of 12.2 Million in 2009 notes a significant success for a product that started with a small core Gamebryo team of ~15 engineers that I joined in 2004. The excellent growth financially reflects the engineering investment of the previous year or two, plus the more recent sales efforts. 2004 to 2009 were very good years.There are also updated numbers for the number of titles that used gamebryo:
...selected by studios around the globe to bring over 350 titles across more than 15 game genres to market. At any given time, Emergent is supporting over 100 projects in development and has sold over 490 licenses in the past five years.And the top titles list has some fresh new items, including Epic Mickey:
Titles using Emergent’s technology include Game of the Year award-winning titles like Fallout 3, The Elder Scrolls IV: Oblivion,as well as critically acclaimed titles like Warhammer Online: Age of Reckoning, Civilization Revolution, QQ Speed, Divinity II – Ego Draconis, Dance on Broadway, LEGO Universe, Epic Mickey, Bully and more.The amount of investment into Emergent was also listed, "To date, Emergent has secured over $40 million in equity financing and raised over $4 million in venture debt financing". (I don't believe that includes the history of NDL, which was founded in 82 and started development of Gamebryo in the late 90s.)
The diversity of Gamebryo is also mentioned. 14% of revenue came from non video game sources, and no one client represented over 10%. Some of the notable customers were:
- Video games: Electronic Arts, Activision, THQ, Ubisoft, Sony, Bethesda, 2K, Atari, Disney
- Online games: Tencent, Shanda, TheNine, NineYou, NC Soft, Kingsisle, EA Mythic, Trion
- Military simulation: USC ITC, Total Immersion, IP Keys, Lockheed
- Education: USC, University of Pennsylvania, UNC, Nanyang Polytechnic
- Other: Rio Tinto, Tacx, WMS, GTech
Among the assets, a data base of over 6,200 profiled developers and 14,775 contacts is listed.
It also incorrectly lists that "The Company holds on patent for Floodgate." I was one of the inventors that filed the provisional patent, which was left to expire and not filed for full patent status.
And so it is, the labor of many passionate engineers, sales staff, and support staff is up on the auction block. I have mixed feelings. One one hand, it was a great run, Gamebryo has had a significant impact on the industry, and that's success locked into history. It's also nice to have a change of pace, and the downturn for Gamebryo has seen us move on to interesting new challenges. But it's also sad, because I feel that Gamebryo could have had a different future, one that continued the success we saw from 2004-2009. It's difficult to speculate on how things could have been done differently, and we'll never have an answer about how else it could have played out. We were aggressive and shot for big growth and new products, not just settling for "getting by" or sitting on our mild success. Investors were interested in big returns. And, if world events and industry winds had blown in another direction, we may have been greatly successful.
One thing is clear to me, however. When the investors/board decided to cut half of the engineering staff in 2009 they either 1) made an explicit decision to kill the future growth possibilities and attempt to liquidate the investment they had made, or 2) had no comprehension of what a software product such as a game engine is and how much value code without engineers to support it is.
Saturday, November 6, 2010
IGDA Leadership Forum: Tools Round Table
I hosted the Tools Round Table at the IGDA Leadership Forum this year. The group focused primarily on project management and communication. Attendees were producers, tech leads, a software consultant, an agile coach, a Hansoft employee, two localization professionals, and students.
Below I've included my notes from the discussions. Contents are purely in order that they were mentioned.
But before the notes, some quick thoughts on the conference. It was pretty small just a hundred or two people. I missed a lot of people who cut out half way through the second day (I showed up only for the end). There was a dinner with John Romaro interviewing Will Wright, with a goal of capturing designer's thoughts for posterity (romeroarchives). This is a great idea, though the level of detail covered in the interview only scratched the surface. It was interesting, but was primarily just getting the rough timeline of Wright's early career.
On with the Tools Round table notes:
Project Management
Communication
Below I've included my notes from the discussions. Contents are purely in order that they were mentioned.
But before the notes, some quick thoughts on the conference. It was pretty small just a hundred or two people. I missed a lot of people who cut out half way through the second day (I showed up only for the end). There was a dinner with John Romaro interviewing Will Wright, with a goal of capturing designer's thoughts for posterity (romeroarchives). This is a great idea, though the level of detail covered in the interview only scratched the surface. It was interesting, but was primarily just getting the rough timeline of Wright's early career.
On with the Tools Round table notes:
Project Management
- iteamwork
- online - project management - slightly dated feel - free
- jira with greenhopper front end
- good for short term sprint plans, limiting for long term projects
- some web-app style hiccups
- (in follow up for long term:)
- MS project
- pen-paper
- spreadsheets
- hard for a wider team to use, OK for the single producer working with it
- pivotal tracker
- good for scrum
- nice 'index card' like view
- not a database
- devtrack
- often pushed by publishers
- database backend
- not great out of box, lots of work needed to setup for a team's process
- base camp
- good for small teams
- day to day level workers annoyed at it, though higher levels liked it
- didn't scale up as well
- scrum works
- smaller teams, medium teams, good for burndown charts
- free and paid versions
- smart q
- 5 pm web
Communication
- yammer
- like an internal twitter
- threaded views
- third party tools good
- google wave
- threading issues
- recommended using RSS updates of a wave to track it
- google docs
- gotomeeting
- great screen sharing, not so great web cam
- mikogo
- similar to gotomeeting - free
- webex
- too heavyweight
- skype
- great webcam sharing, so-so screen sharing
- meetingplace
- active desktop
- HTML on desktop with team specific information, e.g. bug counts
- design docs placed in source control shadowed to a web server for ease of access
- wiki
Monday, October 18, 2010
LootGrab: HTML5 Game from Triangle Game Jam 2010
Spoilers in the Video! Consider Playing LootGrab first. (As of Sept 2010, Chrome was definitely the best option since Firefox and IE struggled, you can give your smart phone a try too).
2010 Triangle Game Jam game: LootGrab Video on youtube, or LootGrab Video on vimeo.
This year brought changes from the Game Jams of past:
- 2007: Shape Slasher
- 2008: Pixelated Martini Roller
- (2008: Beautiful Pixels Game Jam concept)
- 2009: Robot Love
- 2009: Diving
First, I moved from the Research Triangle and now work at Google, and Adrienne came too (we've worked together on 5 of the game jam projects now). So, we got some fresh blood at Google to join us and ran a game jam in parallel with the 2010 Triangle Game Jam.
Second, instead of using C# we used HTML5 this year:
Third, you can Play LootGrab with a click of a button - ridiculously easy compared to all previous Jams where I didn't even bother giving you the gazillion prerequisites required.
Theme and Game Ideas
The theme this year was, "Placing Blocks". Here is my game concept, which didn't make the cut::
(someone pointed out it would be great from the side too, with ballistic arcs.)
We voted up ideas, and Adrienne's one out: LootGrab is about placing down blocks in a dungeon to influence the hero, instead of controlling the hero directly. The greedy guy runs for the closest loot, food, or exit ... without care for monsters or traps.
We figured we'd need a map editor, the runtime, and perhaps a level sharing system online via AppEngine. I was particularly attached to an idea of allowing user contributed game object definitions. Allow a user to upload an image and a snippit of javascript that defines it's behavior. How cool would a mod-able game jam game be? :) That was stretching a bit far though.
HTML5
HTML5 is a grab bag of new functionality in browsers. Some of it is pretty cool (peer to peer networking, local storage, video and audio tags). We focused on two simple components, canvas 2d to draw and audio for sound effects.
In my day job I'm working to accelerate canvas with GPUs, as are others at Microsoft, Mozilla, and Apple. It's fairly fast even in software, and LootGrab runs fine without GPU acceleration. In fact, it runs on phones pretty well, such as my Nexus One Android phone. That's pretty cool, all we did to support mobile was to make sure we handled low frame rates without changing gameplay. To do that we used fixed time step gameplay logic (tick based), and just run as many ticks as needed to cover the amount of time elapsed.
Our use of canvas is basically clearing it, drawing a pile of sprites (via sub-rectangles of larger images), and also a line to show where the player is moving. Actually, we have a few layers of canvas stacked on top of each other. Theoretically we could have saved performance by not redrawing non animating tiles - just compositing them underneath.
Adrienne took on audio for sound effects, and did run into a bit of trouble. The sound effects were very short, and had to be padded out to longer audio lengths to trigger properly. Also, multiple instances needed to be created in case the sound was played more than once.
Javascript
Several of us hadn't done anything substantial in Javascript before. Certainly not an object oriented game entity system that can factory from user created levels. Some complicated flurry of activity by Glen, Ian, Nat, and Gregg made that happen. The result could be cleaner, but worked well. We have JSON data blobs, e.g. for the tile definitions.
Things I loved:
Need to add extra data to your level components of game object definitons? Perhaps only to particular items? No problem! Just start typing. At runtime it is trivial to just check if the data is there and use it if so.
Writing some code and wish you could hang more data off an object? Just set that value! Check to see if it's === "undefined" later and you can pick up your special data easily. Object definitions don't have to worry about implementation details of other systems, and those other systems don't need extra book keeping kept in parallel. e.g.:
try {
ctx.drawImage(this.img, ...);
} catch(e) {
if(this.error_printed === undefined) {
tdl.log("problem with image " + this.entDefID);
this.error_printed = true;
};
Development tools: Logging. Resource load timeline. Immediate mode editor: Hit a breakpoint, and just execute some code at the Javascript console.
Fast iteration time, though C# was great for that too.
Instant continuous "build"! Glen installed an Auto Reload Chrome extension and put the game up on a projector. Check in some code and see the game running it in 20 seconds. ;) Helps to have a game that can play its self.
Libraires such as TDL, and JQuery: some helper code for Javascript. It's not so important what you use, but you definitely want to not worry about the minutia.
Not so great?
I didn't use an IDE that had code analysis, and that's a very convenient feature of MSVC. Though, Ian had good things to say about WebStorm.
Also "classes" in javascript are syntactically very sad, and inheritance to my novice eyes looks messy. And variable "scoping" is dicey.
Debugging is functional and GUI, which is better than what most programmers use around my on linux. But it falls short of a modern debugger such as MSVC with C++ or C#.
Also, deciphering a web page via HTML, script, HTML embedded in script, CSS files, and dynamic changes to styles? ... yikes.
Things for Next Time
Would be nice to have some basics already written:
- Factory that will created entities from JSON data packs
- Cleaner audio solution
- Sprite system for canvas
Smaller teams. We had six on this project, and that's a bit much for a game jam game. Several were first time jammers, and several Javascript newbies, so it did really help to share know-how. But we wasted a lot of time getting started, coming to consensus on implementation choices, and stepping on each other's code.
The End
And a thanks to whoever oryx is, who created the sprites we used:
http://forums.tigsource.com/index.php?topic=8970.0
Edit:
gman has a post too: http://games.greggman.com/game/my-first-game-jam/
Edit:
gman has a post too: http://games.greggman.com/game/my-first-game-jam/
Monday, October 4, 2010
Scriptcode: misc batch files and visual studio macros
Here are the random macros I use in Visual Studio and windows batch files. Nothing monumental, but I find them useful often enough.
- scheib.vb
- The general purpose Visual Studio macros I use, particularly useful to me are:
- FindActiveFileInSolution
- HeaderFlip (though the chromium header flip is good too)
- addpath.bat
- Eases adding more directories to your path environment variable.
- cmd_here.bat
- Right click any directory or file in windows explorer or a file save/open dialog and get a command prompt at that location.
- copy-certain-files.pl
- Assists automation to copy certain files from one directory to another, e.g. just the .html files but not the images.
- remove_empty_directories.bat
- Cleans up a directory tree to not have empty directories.
The following are useful to have when writing a batch file:
- isadirectory.bat
- isafile.bat
- isemptydirectory.bat
Files can be downloaded here:
http://gist.github.com/582050 - visual studio macros
http://gist.github.com/582036 - batch files
http://gist.github.com/582050 - visual studio macros
http://gist.github.com/582036 - batch files
Subscribe to:
Posts (Atom)










