Thursday, September 15, 2011

Thursday, August 4, 2011

Google, Android, and the Patent Wars

Lots of vitriol flying around the internet today regarding this Google blog post by David Drummond, Google's Chief Legal Officer:

I have worked in the tech sector for over two decades. Microsoft and Apple have always been at each other’s throats, so when they get into bed together you have to start wondering what's going on. Here is what’s happening:

Android is on fire. More than 550,000 Android devices are activated every day, through a network of 39 manufacturers and 231 carriers. Android and other platforms are competing hard against each other, and that’s yielding cool new devices and amazing mobile apps for consumers.

But Android’s success has yielded something else: a hostile, organized campaign against Android by Microsoft, Oracle, Apple and other companies, waged through bogus patents.

They’re doing this by banding together to acquire Novell’s old patents (the “CPTN” group including Microsoft and Apple) and Nortel’s old patents (the “Rockstar” group including Microsoft and Apple), to make sure Google didn’t get them; seeking $15 licensing fees for every Android device; attempting to make it more expensive for phone manufacturers to license Android (which we provide free of charge) than Windows Phone 7; and even suing Barnes & Noble, HTC, Motorola, and Samsung. Patents were meant to encourage innovation, but lately they are being used as a weapon to stop it.

A smartphone might involve as many as 250,000 (largely questionable) patent claims, and our competitors want to impose a “tax” for these dubious patents that makes Android devices more expensive for consumers. They want to make it harder for manufacturers to sell Android devices. Instead of competing by building new features or devices, they are fighting through litigation.

This anti-competitive strategy is also escalating the cost of patents way beyond what they’re really worth. The winning $4.5 billion for Nortel’s patent portfolio was nearly five times larger than the pre-auction estimate of $1 billion. Fortunately, the law frowns on the accumulation of dubious patents for anti-competitive means — which means these deals are likely to draw regulatory scrutiny, and this patent bubble will pop.

We’re not naive; technology is a tough and ever-changing industry and we work very hard to stay focused on our own business and make better products. But in this instance we thought it was important to speak out and make it clear that we’re determined to preserve Android as a competitive choice for consumers, by stopping those who are trying to strangle it.

We’re looking intensely at a number of ways to do that. We’re encouraged that the Department of Justice forced the group I mentioned earlier to license the former Novell patents on fair terms, and that it’s looking into whether Microsoft and Apple acquired the Nortel patents for anti-competitive means. We’re also looking at other ways to reduce the anti-competitive threats against Android by strengthening our own patent portfolio. Unless we act, consumers could face rising costs for Android devices — and fewer choices for their next phone.

Of course, I make my livelihood from Android, so I can't claim to be unbiased, but here Google is clearly right.

But there's stuff like this generating lots of traffic:

Google Are Pussies

Everything -- every single fucking thing -- since Bill Clinton has been a copy, a steal, a buy-out -- or a take down.

And now, you pussies, you are in a fight with companies that are equally big, probably better run, and have something you don't: scars, scars from real battles, and you run to the PR teams and the lobbyists and the government and cry: no fair.

Patents bad. We want! Give us!

Tell me, pussies. Which of the Oracle and Microsoft and Apple patents are "bogus"? You say it above. BOGUS PATENTS...Oracle, Apple, Microsoft.

Which ones? Don't be a pussy. Tell us. Which ones are bogus?

And while you're at it, tell us which patents are not bogus? Any? Do you believe in intellectual property? Property ownership? Or is it all there for Google's taking?

I think I can answer that one pretty well. Which of the patents that Microsoft and Apple just banded together to fork out billions of dollars to acquire from Novell's old patent portfolio are bogus?

All of them. In the sense that these were not technological innovations that Apple or Microsoft conceived and used the patent system to protect. These patents are ammunition, plain and simple. They have nothing to do with protecting the intellectual property of any of the companies involved.

Microsoft, Apple, and the other purchasers of the patent portfolio are making a calculated investment in these patents under the assumption that they will either:

A) Be able to severely hurt Android's market share by filing patent lawsuits based on this portfolio, thereby helping the market share of their own products in a highly competitive space.


B) Generate direct revenue by essentially extorting Google for licensing fees.

Again, this has absolutely nothing to do with protecting intellectual property, which is the purpose of the patent system. In fact, it's the opposite. Apple and Microsoft are going to use this war chest of purchased patents to file lawsuits and injunctions against their largest competitor, rather than trying to compete by building a better product.

People are calling out Google as hypocrites for bidding on the patents themselves, and now sore losers for not being able to get them for the price they bid. It's obvious that they bid on the patents as a defensive move. Unfortunately the patents themselves are meaningless in terms of actually representing true innovations developed in house at these companies. These patents are simply fuel for proxy battles. And Google can't merely sit by while their competitors snatch up patent portfolios, giving them more and more ammunition for endless lawsuits.

Basically the whole system is fucked, but it is unlikely to change anytime in the near future. I'd like to hear that the patent system, especially with regard to software, is undergoing review for massive reforms, but I don't think that's the case. As it is, the big dogs will just continue to try to amass as many patents as possible and hash out these issues in expensive, lengthy legal disputes. This will be time and money that won't go into actually developing cooler, better products, and in fact the proxy patent wars will lead to overall higher prices for consumers no matter what the outcome.

Tuesday, August 2, 2011

Save the Egg Preview

Over at Google+, I've posted a preview video of our newest game, Save the Egg. Check it out:

Tuesday, July 5, 2011

Chromebook Fail

At the end of last week I received my new Samsung Chromebook that was promised to all attendees of Google I/O 2011.

The form factor is very nice. It's light, with a great screen and a very comfortable, responsible keyboard. The trackpad actually depresses when you push it, and it's one of the nice trackpads I've used on a laptop-type device.

I resigned myself to the fact that it really is not a primary computing device. That is, like a tablet, it's an auxiliary device, something you would just use to do lightweight computing, such as browsing while watching TV or in a coffee shop. I actually loaned it to my girlfriend to see if it would replace her aging laptop.

So she called me up the next day and said "How do you change the screen timeout settings?" See, she was trying to cook something new, and had the recipe up on the Chromebook while she cooked. The screen kept timing out.

I didn't know, but when I got onto the device, I checked the system settings, which are very limited. Nothing for screen timeout. Turns out that you cannot change these settings. Here's the info from the Chromebook online help guide:
Your Chromebook screen also automatically turns off if it's been inactive for a period of time. When plugged in to a power source, the screen turns off after 8 minutes of inactivity. When unplugged, the screen turns off after 3 minutes of inactivity.
Yep, that's right. This is hard-coded in and not configurable. In a forum discussing this issue with the CR-48 test devices, testers complained. The response from a Google engineer was basically that they didn't want to add unnecessary complexity to the settings, so they went with default settings that most people would find acceptable.


I'm all for simplicity in user interfaces, but this is not something that should be unconfigurable. As in the above-mentioned use case, if you're using the device for any purpose where you are using it as a reference and are using your hands for something else, a 3-minute screen timeout is going to render it unusable. I haven't tested it for media (music or video), but this might also be a deal-breaker.

What's worse is that they actually got this feedback during testing, but decided to ignore it and release a production device without this setting enabled. Apparently they are selling well on Amazon, though I haven't heard anything about what the return rate is like.

In another forum, I found info about how to toggle the device into developer mode and modify the setting from the command line, though I ran into issues booting into developer mode and could never get access to the shell.

Also, the Chromebook didn't recognize my Droid when I plugged it in to see if I could transfer files back and forth between the devices, which made me wonder how the Chromebook handles driver issues (I'm guessing that in most cases, it just doesn't).

I really wanted to like this device, and approached it with reduced, realistic expectations that it would not replace a computing device with a full-featured operating system. Even with the lowered bar, so far it has failed. The hardware itself is great, but this is my first experience with Chrome OS, and from what I've seen so far they've stripped away too much to make it viable, even as a casual secondary device.

Thursday, June 30, 2011

Recording Your App In Action

Lately I've been working on a couple of new game projects, one that is mostly outsourced, a physics-based game called Save the Egg, and one that I'm doing mostly myself, Flick Hearts, a local multiplayer version of Hearts, using multiple devices.

Video screen capture doesn't allow me to show the interactions between devices, which is important to demo for users who might be interested in the game. So I decided to try recording the devices with a video camera.

This immediately poses some technical issues. For the camera, I shopped around a little, but decided to just use my girlfriend's Canon digital camera, which records pretty high-quality video. There's no sense buying a dedicated video camera for close-up video shoots. Then there's the issue of stabilizing the camera for recording. A traditional tripod doesn't work, because what you need is a top-down perspective, from about 2 feet away. I read that what I needed was a copy stand. Not wanting to shell out the cash for a relatively simple piece of equipment, I read some DIY advice on a couple of forums.

Then it was a trip to Lowe's to buy some PVC pipes and screws. $15 and about an hour later, and I had my own recording stand.

This last shot shows the stand set up on my Poker table. The biggest problem was that the camera is picking up on light, and the devices produce a lot of light, being backlit. Suggestions from the forums included lowering the brightness on the devices and trying to get ambient light balanced with the brightness of the devices. I fiddled around with this for a while with mixed results.

The resulting video is okay...not great. You can at least get a sense of how the game works. Lower brightness settings did work better, but this is with the brightness set to the minimum on all devices. My Motorola Droid was the brightest, even at min brightness.

I had a couple of issues flicking from the Eris. I need to adjust the sensitivity for the gesture, but you get the general idea. Hopefully I can continue to refine the recording procedure to make it look even nicer in the future, but this isn't a bad first cut.

Wednesday, June 8, 2011

Bluetooth Chat: One Server, Multiple Clients

In attempting to solve this issue, I believe I have successfully extended the official Android Bluetooth Chat example to work with a server connecting to multiple clients.

I've uploaded my modifications to github here:

One device acts as the server by selecting "Menu>Make discoverable". Each client then connects by selecting "Menu>Connect a device". I was successfully able to connect my Motorola Droid and HTC Eris as clients to my Samsung Galaxy Tab 10.1". Each message sent from a client displays only on the server. A message sent from the server displays on all clients.

This was a tedious process getting it to work at all. Connectivity with the HTC devices is sporadic, though. I've read elsewhere that bluetooth on HTC is buggy, so I'm chalking it up to that.

Hopefully someone else will find this example useful. If you have any questions, suggestions, or other feedback, please let me know.

Friday, May 27, 2011

What We've Got Here is...Failure to Communicate: Bluetooth, Android, and iPhone

I'm disheartened and exhausted now, after trying to break ground on a new game that would involve peer-to-peer networking among a number of Android and iPhone devices.

What I want is to have an app that would install on tablets (e.g. Xoom, iPad) and act as a server. Players would connect to the server with phone-sized devices and exchange information with the server.

My first inclination was to use bluetooth. Well, just getting two test devices connected to a tablet is something I haven't been able to accomplish. The BluetoothChat example in the Android SDK enables connection and communication between two devices, with a single app that can function as either the server or client. I've tried to modify this app into two distinct apps: a dedicated server and client, and that works fine. But attempting to connect a second device has proven undoable so far.

I made a couple of modifications to the example code so that the AcceptThread continues to listen, even after the first connection is made (the example stops listening after the one connection is made, because it only needs to establish connections between two devices). I created an ArrayList to handle the multiple connections. Each time a new connection is attempted from a remote device, a new ConnectedThread is created and added to the list.

The first client connects just fine.

When the second client attempts to connect, the connection fails. The log output is:

D/BluetoothEventLoop( 140): Device property changed: property: Connected value: true
I/BluetoothService( 140): ACL connected, mAclLinkCount = 2
D/BluetoothEventLoop( 140): Device property changed: property: Connected value: false
I/BluetoothService( 140): ACL disconnected, mAclLinkCount = 1

So it looks like the second connection attempt is successful, but then it is immediately disconnected. This looks like it's happening at a low level, outside anything the code is handling. This happens with a number of different types of test devices, so I don't think it's due to a particular firmware or hardware issue.

At the Lafayette Mobile Developer's meetup last night, we talked about bluetooth communication between Android and iPhone devices. I hadn't even looked into the iPhone side, but I should have known that they basically don't have a bluetooth API for iOS. Or rather, they don't have one that allows Apple devices to talk to non-Apple devices. Bluetooth on iOS can be done through GameKit. This thread on Stack Overflow suggests that it would be possible to spoof the GameKit functionality on Android to allow an Android device to talk to an iOS device, but I can see no indication that anyone has done such a thing.

I noticed in the same thread that the Bump API is mentioned, and I always assumed that it used bluetooth or some other kind of local connectivity. uses a device's data connection, sends information to the cloud and syncs up devices based on their GPS position, which is kind of cool, but it also means that devices without a network connection (e.g. wifi only devices) can't use it. This is a deal breaker, because a lot of tablets are going to be wifi only.

So what about wifi? Well, on that front it sounds like Android does not support ad-hoc peer-to-peer networks, at least according to this post.

I find this ridiculous and depressing that these devices are all equipped with multiple ways to communicate locally, but in both cases (Android and iOS), the SDK functionality doesn't allow a way for them to talk to one another enough to write a simple app that pass something like a string between devices. NFC technology might enable local communication effectively, but it doesn't sound like NFC capabilities are coming to iPhone anytime soon, and they may be locked down if/when they do.

At this point I'm not even sure that a wifi-only tablet and multiple phone client app is going to work. It will likely work fine within a given platform, but not cross-platform, and that is extremely limiting.


Thursday, May 12, 2011

Google I/O 2011

Google I/O 2011 wrapped up yesterday. Overall it was another great experience. I attended for the first time last year.

First off, I/O had a much bigger Android footprint than last year. That might have something to do with the fact that the platform has exploded in growth. But this year they devoted an entire floor to Android. Some pics...

Here's me showing my love for the green guy:

Here you can see the giant Android figures all over the place:

They even tore up the carpet on the third floor and put down custom Android carpeting. There were autonomous Android-bots roaming around bumping into people and chirping as well.

And the first day keynote focused on Android, rather than teasing us until the second day, like last year.

Goodie-wise, they gave us all a new Samsung Galaxy limited edition 10.1" tab, which is pretty sweet, though I hope they don't release the software in this condition when it goes live. I've found some page rendering in the browser (ironically, the acceptance to Google Music Beta didn't render properly on my tab). I couldn't find the books app, either natively installed or on the market. And I couldn't find a native video player. When I uploaded an mp4 to try it out, I could not find it via the file explorer or any other way. So I basically couldn't figure out how to play a video that I put on the device. Unlike other Android devices, when you attach it to a PC it either needs to be in USB debugging mode, and if that is toggled off, you can then mount for file transfer. But every other Android device allows you to do both when attaching to a PC. This is pretty weird. We're supposed to get an OS update in "a few weeks", so hopefully that will clear up a lot of these issues.

We also got invitations to Google Music Beta. I'll discuss that when I play around with it more. We got a promise that we'd get information on how to claim free ChromeBooks, laptops running the new ChromeOS. I'm somewhat skeptical about this paradigm, but I'm still looking forward to trying it out. And finally, we all got mobile wi-fi hotspots with 3 free months from Verizon. Thanks to Google and the manufacturers!

Some people also received the new Sony-Ericsson Xperia play phones if they were lucky enough to attend a particular session on Day 2. I think this was a pretty bad idea. First of all, second day Android sessions had very severe capacity issues, so many devs, including myself, weren't able to attend most of the Android afternoon sessions, including the one with the giveaway. In fact, I think it's possible that rumors of a giveaway may have created the congestion. So this was bad for the two main reasons that it possibly kept some developers from attending sessions they wanted to attend, and it probably engendered some bad feelings from devs who selectively received free phones.

I actually heard another rumor that HTC wanted to give away phones to everyone, but Google thought that level of hardware giveaway would be too extreme. Ah well. So I didn't get a phone, which I need to upgrade. And unfortunately the Nexus S is not available on Verizon. So I'll probably end up getting a Thunderbolt, or possibly switching carriers.

Anyway, I had a good time, and got to talk to a lot of nice folks from Google, as well as other devs. I didn't meet up with nearly as many devs as last year. I think they could do a better job of facilitating networking between devs with common interests, and I told them as much in my feedback note.

So I'll most likely be there next year as well.

Friday, March 25, 2011

Polyclef Apps Now Available on Amazon App Store

So Amazon launched its Android app store this week. Leading up to its release, I was skeptical that it would really do any better than any other 3rd-party app store. The official Google Android Market comes preinstalled on most devices. A 3rd-party app store requires the user to go out and find it, set their phone to accept non-market installs, and install it manually. Amazon has the further requirement of entering in payment information, even if you only want to download free apps.

Who would jump through all these hoops for a market with way fewer apps than the Android Market, most of them shared between the two?

Well apparently a lot of people. The reason? I guess I should have trusted that the people at Amazon would have a trick or two up their sleeves, and the magic ingredient was Angry Birds. Specifically, a new app called Angry Birds Rio that is exclusive to the Amazon App Store, and free for a limited time. Angry Birds is so incredibly popular that exclusive content was a genius way to drive users specifically to the Amazon Appstore. Once the user has jumped through the initial hoops, the market is just as reliable and easy to use as the official one.

I have over 30 apps on Android. I took a cautious approach to the Amazon Appstore by only submitting two apps, WordWise Pro and Golf Solitaire. So far they're doing well enough to get me to submit additional apps. There may just be an initial rush, but I don't think so. I'm thinking now that Amazon has probably done things right and will continue doing so.

For now, here are the links to WordWise Pro and Golf Solitaire on the Amazon Appstore. More to come soon.

Saturday, February 12, 2011

Match and Hatch for Android Preview

I'm happy to announce that we're close to releasing a new match-3 game for Android called "Match and Hatch".

If you're not familiar with the match-3 genre of casual games, like Bejeweled, basically the goal is to move elements on the screen to make matches of 3 or more of the same element in a row, either horizontally or vertically.

Ahead of Easter, I thought an egg theme would be kind of cool, though it's not explicitly an Easter game. There are a couple of twists on typical match-3 play. For one, every time you make a match, the eggs hatch open, revealing either points, pets, or food.

If you find a pet (some are much rarer than others), you can then view them on the pet screen:

Once you hatch a pet, you'll need to take care of it at least a couple of times a day, by feeding it and showing it a little attention (you can pet the critters by rubbing their head or their belly). This increases their happiness and levels them up. If you neglect your pets long enough, they'll level down and eventually run away.

I thought this blend of match-3 and virtual pets would be a cool hybrid. We'll see. I'm going to release the paid version first, probably for $1.99, followed closely by a free ad-based version. Then I'm going to look into using Google's new in-app purchase system to allow users to directly purchase food and pets. Some players may want to spend hours and hours hatching eggs, but others may enjoy the pet aspect more.

And I'm also likely going to commission an iPhone version in the near future.

Stay tuned...I'll let you know when it hits the market!

PetPass for iPhone is Now Live!

It took a while, but our new social networking app PetPass is now live on the iTunes app market:

If you have an iPhone or know someone who does, check it out! It's free.