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:

https://plus.google.com/115741823263310305343/posts/QEN3FQK8Xjk

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.

Fail.

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:

https://github.com/polyclef/BluetoothChatMulti

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. Nope...it 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.

Bah.

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.