Programming

Published on MITER

I’m published on the MIT Entrepreneurial Review!

Management
Programming

Comments Off

Permalink

Developer Q&A in Tharsis

The developer Q&A in the Blue Mars city Tharsis last night was the largest I’ve attended. And busy. It started off as usual with some small talk (pictured here) and then a torrent of questions. I had trouble keeping up with the scrolling chat box! I think you’ll agree these are good-looking avatars (except me, wearing the short shorts and t-shirt)

Blue Mars
Programming

Comments Off

Permalink

I’ve Got the iOS4 Blues

I released Fugu Maze with full-screen iPad support last month. It showed up on the App Store on June 20. A lot has happened since then. For example, the iOS4 update was released on June 21. I suppose I should have upgraded immediately, but frankly, I barely noticed the release – I just saw some disparaging remarks about it on the Unity forums a few days later.

Anyway, I paid the price. I received mostly good reviews for this app update, but a few complaints that it was crashing. One user ranted that I was terrible and irresponsible and he was never going to buy anything from me in the future (never mind that he used a promo code), but at least he mentioned that he was running iOS4, and the light bulb finally switched on. The iOS4 announcement on the Apple site only mentioned support on the iPhone 3G and 3GS so for a moment I thought I might have to buy new hardware, or, gag, an AT&T contract (they’re on my you-owe-me-money list). But googling for iOS4 brought me onto another Apple page that explained it would run on my iPod touch, so I upgraded, watched my iPod touch grind to a halt, rebooted, found relief that it ran OK again, brought up Fugu Maze and reproduced the crash, narrowing it down to mp3 playbacks, a feature newly available in the Unity 3.0 beta and a bug discovered by others in the beta testing group, but alas, after I did.

Now I’ve got another Fugu Maze update in the approval queue, with the mp3 audio replaced by uncompressed audio. And the OS upgrades are a one-way street, so now I’m considering supporting only iOS4 (and iOS3.2 for the iPad) in the future, since I’m not testing on older OS’s, anymore. But fortunately, my other apps still run fine. So I’ve got time to think…

Apple
Programming
Unity

Comments Off

Permalink

Leading Geeks

Yesterday’s blog reminded me of a truly awful book on managing programmers I read years ago. The only redeeming value of a bad management books is that it at least it helps you find people you don’t want to work for (the author, and anyone who likes the book).

In the following review, I should have also pointed out any book with all-capitalized words in the title are suspect (same rule applies to forum posts, tweets and emails)

Written on Epinions in 2003:

From the title Leading Geeks: How to Manage and LEAD People Who Deliver Technology, I expected Paul Glen’s book to be asinine and useless. I was half right – it’s asinine and worse than useless.

The author both warns against buying into the geek stereotype and promotes it, sometimes in the same sentence: “We will move past useless sterotypes and look into patterns of geek attitudes, beliefs and behaviors that make them both unusual and unusually difficult to lead and understand.” Is this on the Discovery Channel? Or perhaps on one of Fox’s “When Animals Attack” episodes.

“Geeks are different from other people”. Besides the patronizing and often contradictory characterizations (geeks are introverted, how do you identify extroverted geeks?), there are the useless theories and models: “The tripartite relationship” of Geeks, leaders and geekwork, and the “Hierarchy of Ambiguity”, a pyramid with three layers, environmental, structural, and task ambiguity. Apparently, you just need three different words to produce a model.

The author cites project leader Tom West’s political maneuvering in Tracy Kidder’s The Soul of a New Machine as an example of resolving ambiguity and specifying a purpose for his group (developing the Data General Eclipse minicomputer), but here again the point is muddled. West vocalized different purposes for different audiences, and the ultimate purpose was to get a piece of the “glamor” work performed by another division. Which is not what I would call focus. And in the end, the Eclipse, while completed, was not a particularly successful product. However, Tracy Kidder’s book is a good read and provides at least a better anecdotal portrayal of geeks.

There are other teaser bits of valid information that go nowhere. The author recommends that geek project leaders use the iterative “spiral” project schedule rather than the monolithic “waterfall” method. (Is he talking to the geek project lead here, or is this more like a football commentary, while we watch?) Really, there is quite a bit more to software development methodology than that, e.g. the now in-vogue Extreme Programming (in which paired programming is one of the well-known recommendations, not quite consistent with Blum’s statement that geeks like to work alone).

The abundance of software practices and metrics, all produced by “geeks”, refute Blum’s blanket characterizations that geeks don’t care about the big picture and that it is difficult to quantify geek productivity (he settles for a qualitative assessment of how well the geek knows his stuff). In fact, Blum lets geeks off easy when he states that it is unreasonable to ask geeks for time estimates on tasks they are unsure of. That is bad project management, almost as bad as the typical management practice of either dictating or negotiating those estimates. Any engineer, actually any employee, should be aware enough of past experience and comparable efforts by others to make a reasonable prediction. Otherwise, there is no point in trying to manage a project – it’s just an exercise in self-denial.

Which points to what I believe is the real issue in leading geeks – it’s not the “geeks”, it’s the “geekwork”, to use Blum’s terminology. If you hire ten engineers from MIT, it’s still extremely unlikely that you will get any of the hardcore geeks behind the well-publicized pranks – you will more likely get an assortment people with varying social social skills, competence and dedication to their work. The management challenge is in managing an engineering problem, and the succesful manager will be knowledgable in the problem domain, problem-solving methods for that domain, and exercise good judgment, which is not “geek” management. It’s just good management.

Chapter Three, “Groups of Geeks”, begins with “If you want to lead geeks, it’s not enough to understand them as individuals”. The author has it backward – we use generalizations as conveniences (in the context of physics, someone once said “all models are wrong, but some are more useful than others”) and fodder for humor, not as a productive way to deal with individuals.

Books
Management
Programming

Comments Off

Permalink

Is it Deep Blue, Deep Thought, or Deep Throat?

One thing I liked about The Sarah Connor Chronicles is the brief history lesson on chess computers and the reference to Deep Blue (and also the idea that a chess computer would dominate mankind – take that, Tron and Colossus!) So I dug up my old Epinion review on Feng-Hsiung Hsu’s book “Behind Deep Blue: Building the Computer That Defeated the World Chess Champion”:

I’ve never been a particularly good chess player – when I played on my high school chess team, my rating peaked at just above 1700, which is, well, decent. But ever since I played and lost to my first chess computer, I’ve aspired to writing a great chess program.

I never got around to it, only writing a series of Othello programs on various platforms, but the dream is still there. So I’m quite taken with Feng-Hsiung Hsu’s twelve-year quest to build a chess computer capable of beating the world chess champion.

There are really two major contests in this autobiographical account – the well-publicized final match between Deep Blue and world champion chess grandmaster Garry Kasparov, and the early political tension between the original Deep Thought team at Carnegie-Mellon University and the more established computer chess group led by Hans Berliner at the same institution.

Hsu’s irritation with these two major rivals comes through clearly, but he does attempt to at least sound understanding of their respective positions. The emotional level of disagreement and surprisingly petty behavior (during and after the match, Kasparov insinuated that the Deep Blue team cheated) highlight the fact that this was not just a game to Kasparov and not just an academic exercise to the CMU researchers. All the participants had the pride and work of a lifetime at stake, no less than that of athletes seeking a championship ring or Olympic medal.

Chess and technology enthusiasts should find the level of computer hardware and chess detail interesting, although others may find it tedious. Hsu fails to provide any substantial discussion of other computer chess research, which could lead the reader into thinking all the interesting developments occurred during Deep Thought/Deep Blue’s development, when in fact, computer chess has been a rich topic for decades. For example, one surprising omission – International Master David Levy defeated Deep Thought in an early game, but Hsu doesn’t note that Levy is a well-known computer chess authority and would know how to exploit typical weaknesses of chess programs as well as anyone.

Considering he’s not a native English speaker, Hsu’s writing is passable, and his vocabulary is impressive, although the style is somewhat stilted. There is at least one misspelling/typo (the Sports Illustrated “swim suite” edition), but the most distracting aspect of the writing is structural – Hsu recounts some events out of sequence, referring to them back and forth, so I felt a little bit like the time warping traveller in Slaughterhouse Five. For example, Hsu recounts a 1995 international computer chess tournament in Hong Kong before discussing a 1994 tournament in the next chapter.

Compounding this confusion is the succession of names for the various incarnations of the hardware – Deep Thought, Deep Thought II, Deep Blue, Deep Blue Prototype, Deep Blue Jr. It’s hard to remember the differences between them (it’s still not clear to me how Deep Blue Jr. is different from Deep Blue, aside from being “scaled down”), and I had to flip back the pages a few times to keep track of which version of the hardware was playing at what tournament and when against whom.

The naming issue does provide the most humorous anecdote in this tale – when the project was adopted by IBM, corporate insisted on changing the name from Deep Thought, largely because of the trademark issue (Deep Thought was named after the unhelpful computer in Douglas Adam’s Hitchhiker’s Guide to the Galaxy), but also because a surprising number of people, including a nun, kept referring to the computer as Deep Throat.

In an attempt to explain his ambition and tendency to bump heads, Hsu intersperses his narrative with some background on his early school years in Taiwan, required service in the Taiwanese army, and his activities at Carnegie-Mellon, but it’s really unnecessary. His personal style comes through loud and clear throughout the rest of the story and there’s no need to explain – some people just have the combination of talent and contrariness to create something like Deep Blue, and in this case, the world had the fortune to watch Hsu and Deep Blue bump heads with a no less intense personality, Garry Kasparov.

Books
Games/Graphics
Programming
Television

Comments Off

Permalink

Converting Unity iPhone Apps for the iPad

I just finished getting all my HyperBowl apps on the App Store as “universal” apps, running on the iPhone and on the iPad. With the latest version of Unity iPhone, it’s pretty easy to get it running on the iPad – just select the appropriate settings in the Player Settings, i.e. iPhone+iPad as the target, and specify an appropriately sized iPad icon and portrait and landscape splash images.

HyperBowl runs in portrait mode (in fact, the iPad screen aspect ratio is closer to the original game than the iPhone, so that works out splendidly), so here’s one quick tip – if you’re running only in portrait mode, then you don’t actually need to supply a landscape splash screen. Just make sure you delete the reference to the landscape image file in XCode (it’ll be in red if you didn’t specify it in Unity). That saves a bit of file space in your final app.

A more important tip is that Apple will probably complain if you don’t support both sides of each orientation, e.g. if you support only portrait, you still need to support portrait and portrait upside-down. That’s easy to code in Unity, e.g.

switch (iPhoneInput.orientation) {
 case iPhoneOrientation.Portrait:
 if (iPhoneSettings.screenOrientation != iPhoneScreenOrientation.Portrait) {
 iPhoneSettings.screenOrientation = iPhoneScreenOrientation.Portrait;
 }
 break;
 case iPhoneOrientation.PortraitUpsideDown:
 if (iPhoneSettings.screenOrientation != iPhoneScreenOrientation.PortraitUpsideDown) {
 iPhoneSettings.screenOrientation = iPhoneScreenOrientation.PortraitUpsideDown;
 }
 break;

With that running in an OnUpdate function, your game will flip as necessary when the user rotates the iPad. (Since I’m deploying as Universal apps, I check if I’m running on an iPad, first – I’ll leave that as an exercise for the reader)

That still leaves the splash screen. It took some googling for me to find this, but to get the splash screen to start out in the correct orientation, you need to add the UISupportedInterfaceOrientations key to Info.plist in XCode. It’s similar to UIInterfaceOrientations, but as you might guess, you can add multiple orientations – first add the key, right-click on it to specify the Value Type as Array, and then add what you need.


Apple
Games/Graphics
HyperBowl
Programming
Unity

Comments Off

Permalink

The Home Office

This is where the software happens. Not pictured here is my oldest piece of still useful hardware, my HP15C calculator.

Apple
Blue Mars
Games/Graphics
Programming
Unity

Comments Off

Permalink

My GDC Trip Report

I’m a proponent of trip reports. They force you to think about what you saw at the conference, the company gets more for their money if you disseminate the information, and it will allay your coworkers’ suspicions that you spent the whole time partying.

Since I’m self-employed and paid my own way, and I didn’t really spend much time at GDC, it’s not quite so useful for me to give a trip report, but I’ll do it anyway.

First, let’s get the conference part out of the way. I primarily went there to network and had a nice dinner in Chinatown with developers from my client (Avatar Reality, the developer of the virtual world Blue Mars) and a croissant with the head of the charity Get Well Gamers.

I only went to the expo for a few hours, and I will repeat my annual complaint that CMP is really milking the event, selling only a three-day expo pass for $250, and it was an unpleasant surprise to find they were not accepting IGDA discounts for on-site registration (the people at the desk didn’t seem to know what IGDA was). I stopped by the IGDA booth and they seemed surprised, too. I generally don’t consider splurging for the whole conference package because, 1) I tend to fall asleep in talks and 2) again they’re milking it, charging separately for the “Mobile Summit”, etc. I remember in my dot-com days that Java One was expensive, too, but once you paid for it, you got the whole conference.

The expo seemed smaller than the last time I went two years ago, and I wouldn’t say there’s a lot new, except two of the middleware packages I use, Unity and Scaleform had more sizeable presences than two years ago, and their reps looked really busy. At the Unity booth, I had a nice talk with the dimeRocker folks and fellow Unity developer Jonathan Czeck of Graveck (it’s always fun talking to other engineers – with marketing, it’s a toss-up, sometimes they’re cool, sometimes they stand there looking bored until someone with an expensive suit shows up). Aside from that, noticed there were a lot of companies offering virtual currency solutions and a pretty cool VR input device that resembled a giant hamster ball.

Aside from that, I eschewed the parties (my return flight seemed to full of hung-over game developers) and checked out the town. Some observations: City Lights Bookstore is a pretty nice bookstore – it doesn’t seem to have any computer books, but there’s a decent sci-fi section. The Crocker Galleria isn’t what it used to be, apparently hit hard by the doldrums of the Financial District. Beard Papa Sweets are tasty. So was the chocolate place next door. Considering the frequency of rain in San Francisco, you’d think some place around the Moscone would sell umbrellas. Smoking is prevalent – get caught walking behind a smoker and you’ll get a lungful. The Museum of Crafts and Folk Art is small, but it’s got a cool gift shop (some carving are from an astrophysics grad student in Arizona). Food in San Francisco is expensive. The Filoli Gardens is amazing. Joy Luck Place in San Mateo has excellent dim sum (I hear Martin Yan of Yan Can Cook goes there). HyperBowl is back in the Metreon and in excellent condition, although it costs $5 per play. Every block in San Francisco, you’ll see Asian faces – yet in Monk, one of my favorite San Francisco shows, I only recall seeing Asians as a laundress and Chinatown gang members. I don’t know if I saw any Chinatown gang members, but I did see a lot of tourists and touristy shops. I have to admit, I bought some touristy stuff – a fan and an abacus. It’s research (think iPhone/iPad app  – I’m serious!).

Apple
Diversity
Games/Graphics
HyperBowl
Management
Programming
Television
Travel
Unity

Comments Off

Permalink

I Now Live on Sims Lane

I noticed a few weeks ago that the City of Huntington Beach made good on their promise (threat) to rename every north-south minor street to “Lane”, so now I live on Sims Lane nee Sims Street. One of my conspiracy theories was that this was a way to get stimulus money, but they just taped over the “St” portion of the signs with “Ln”, so if federal moolah  is involved, then they’re not working very hard for it.

I think the real mundane reason for this change is that someone thought it just sounded better. The city officials pushing for the change said it’s required to remove inconsistencies in various street databases that pose a public safety issue (aren’t you actually introducing inconsistencies?)  Well, it’s really to conform to an old city specification that north-south streets be named lane (what about all the curved and diagonal and L-shaped streets in my neighborhood?). And every other city has similar specifications (they all have the same convention?).  And if we need help from the Long Beach fire department, they’ll be confused if we don’t have this street naming convention (again, they all have the same convention? and isn’t it more confusing that we change street names running from outside into our city?) And these specifications are necessary for the computerized dispatch systems to work (you’re kidding, the computer actually cares if a street is named Lane or Street) And don’t worry about your mail, the post office computer system doesn’t care about street suffixes (well, the fire department should use their computer). The specification is really needed for public safety new hires who aren’t familiar with the city (so you were making up that stuff about the computer?) And you can change your financial information gradually over time (thanks!).

Watching the city council meeting where this was discussed and just about rubber stamped (no discussion of cost or how it would be executed), I thought, these guys really, really want this change. It reminded me of all of my workplaces where management made a fuss over coding style conventions and just said all kinds of stuff to justify it. It’s really important for code safety. It’s important for new hires or others visiting the code. Every company has a convention. It’s not bad, you’ll get used to it. So someone goes through and changes everyone’s code and introduces bugs, and I still end up looking at three-page long functions making improper use of the language and API’s. But it must be good code, because it’s following a coding convention. And it’s got design patterns (coding conventions masquerading as software architecture). And from that point on, I don’t believe anything more from the powers that be, since they made a fuss about this instead of focusing on important matters  (there’s a coding style guidebook behind every worthless startup stock certificate on my wall). Same with my civic leaders – next time I watch a city council meeting, I’ll be sure to disbelieve everything they say.

Law
Local
Politics
Programming

Comments Off

Permalink

HyperBowl on Scoreloop

HyperBowl is now on Scoreloop. Here’s their supplied score widget showing some HyperBowl activity.

I’m not sure Scoreloop really meshes that well with HyperBowl. For example, I set the score sorting to descending by level and descending by score. The problem with that is a low score on the Forest Lane will be ranked higher than a high score on the Rome Lane. On the other hand, if I sort just by the score, then the easy high scores on the Classic Lane will dominate. Ideally, I’d like to see high scores per level. It might make more sense to just use Scoreloop one the lanes that I release as individual apps.

Related to that, right now it seems you can beat a challenge score from one level with a score from another. That’s probably my mistake, though – I should defer the initial option to start a challenge until after the lane selection (right now it’s in an earlier menu). One update, coming up.

Still, there is a problem in that anytime the Scoreloop GUI is brought up, the challenge option is there, which means it shows up when you finish a lane and the score is submitted. I think the idea is that you’re supposed to handle that eventuality in your own code, but using the supplied Unity plugin, your options are limited. I may try Agon Online, next. I started with Scoreloop because they reached out to me and they actually had some printed documentation. My first impressions are that Agon may have the easiest integration and more comprehensive documentation and OpenFeint has the most involved, but also the brings the largest player base. But we’ll see…

Apple
Games/Graphics
HyperBowl
Internet
Programming
Unity

Comments Off

Permalink