Advertisements
//
archives

Archive for

Amazon Santa for Kindle Fire – Review

New to the Kindle Fire today is Amazon Santa, a 21st century version of the paper Christmas list we all used to mail to Santa and clog post offices nationwide. As a father of a toddler, I’d feel comfortable letting my daughter pick this up to find what she wants for Christmas without worrying about what she might see. It’s a subset of the products available on their website centered around kids music, books, video games, toys & games, and movies & TV.

The clean interface asks kids to pick a category and then presents a single product image and title for tons of available products. Just touch the icon and get a detailed product description with price. If the product has options, such as different platforms for a video game, you can easily pick the option from the list and click “Add to Wish List”. Then again, if the child knows exactly what they want, they can just drag the picture into the scrolling wish list at the bottom. But why bother with browsing? Just type what you’re looking for the in the Search field.

A quick check of this field seems to show that the search is filtering pretty well, so video games with an ESRB rating of Mature aren’t returned. For example, I tried searching for “Halo” and was presented with a lot of options. None of which were any of the games on the Xbox 360. Mostly Mega Bloks.

Done picking out stuff? Touch “View & Send” which shows a big button that says “Send to Santa”. Parents need to log in to their Amazon account and off the email goes. The super secret? The parents get a copy of the email as well. It’s super easy to send another copy to grandparents. A kid can add multiple wish lists (presumably to send different ones to different family members) and add update a list that they’ve already sent to Santa. We couldn’t do that back in the day. I guess this doesn’t help the post office’s money troubles.

Advertisements

How to Take a Kindle Fire Screenshot

Here’s a link to a blog post describing how to setup your Kindle Fire for taking a screenshot. These instructions are for Mac OS X, but the process is similar for Windows. I had to do all of the steps to get it to work.

http://www.pigsgourdsandwikis.com/2011/11/taking-screenshots-with-kindle-fire.html

Why I Made the Switch From iPad to Kindle Fire

Are you here because you’re wondering if the Kindle Fire is a good replacement for an iPad? Are you wondering if your kid will be disappointed if he gets a Fire for Christmas instead of an iPad? Read on to see how I went from iPad to Fire.

My Existing Setup

To know where I’m coming from, it’ll be good to know what I was working with and how I used it on a daily basis. I have an iPad 2 3G with 32 GB. The 3G is not enabled. I do not use iTunes for music. I have been a Zune Pass subscriber since its launch. I have the $15/month plan that gives you unlimited music and 10 free MP3 tracks a month (this plan is no longer available for new subscribers).

On the iPad, the applications I used most frequently are (in order of most to least often):

  • Flipboard
  • Email (Exchange and Gmail)
  • Web browsing
  • Words with Friends
  • WordPress (for checking blog statistics and comment moderation. Never for creation)
  • Huffington Post
  • CNBC
  • DC Comics
  • Netflix
  • Goodreads

These are apps I used frequently. Any app that was only used maybe once a week or less is not included here.

I already have a Kindle 2 that I use for all of my ebook reading. From a mindset point of view, I’m the kind of guy who likes to try out what’s new. Tuesday’s are one of my favorite days of the week because new music, dvds, and video games are released on Tuesday. Thus why I have a Zune pass. I get to check out all the new music legally without having to go broke. The iPad was never a laptop replacement for me and I seriously doubt is for many people. It’s a content consumption device, just like the Fire. And the Fire consumes it well.

The Kindle Fire

I preordered the Fire on the day it was announced. As a friend said, if I didn’t like it, I could just return it. When it first arrived, I was a little underwhelmed. Animations felt choppy, finger presses didn’t seem to register all the time while at other times seemed too sensitive. I tried reading a book and my eyes started to hurt. I was disheartened because I wanted this to be a great device.

So I told myself to put the iPad away and use the Kindle Fire. I stopped bringing the iPad to work and only toted the Fire and my Windows Phone with me (along with my laptop).

Email

One of the first things I did was setting up email. I knew that it didn’t support Exchange ActiveSync for my corporate email, so I setup my Gmail account. This was where the first annoyance came in. I told the app that I was a Gmail subscriber and it asked for my email address. The thing is, I am a Google Apps subscriber, so my email address does not end in @gmail.com. This apparently wasn’t what the Fire wanted to hear. Instead, I was subject to a standard IMAP setup process asking for IMAP servers, SMTP servers, etc. Even though a Google Apps Gmail account has all the same information as a standard Gmail account. Put simply, this process was no fun. All other devices I’ve used have had no problem with the nonstandard Gmail address. I’ll put this down as a bug and hope that it gets fixed.

Web Browsing

Truthfully, I didn’t notice any superior browsing performance with the Silk browser. In fact, I felt the device performed better after I turned Silk off. So that’s where I stand on it. Turn Silk off. Browsing felt as fast as it did on the iPad. A big advantage the iPad has is the smoothness of the interface. Everything flows very well. This is an area where the Fire hopefully can improve through software updates. Scrolling in particular felt a tad jerky. Initially I had problems with getting it to recognize certain taps with my fingers. Once I got used to the Fire over a few days, these odd tap issues disappeared. Did the device fix itself? No. Did I change? Most likely.

I discovered that my finger muscles were interacting with the device as they were with the iPad and once they learned a new skill, I had no issues. I’m sure it could be said that a device shouldn’t make a user have to change in order to use it. And there’s some truth to that. But I think it’s like when I drive my wife’s car. Initially the gas pedal seems really jumpy and sensitive. But after a few minutes/hours, I can drive it with none of those issues. That being said, there are software interface issues where the app developers need to provide more feedback about ongoing activity.

Reading Books

I’ve been a Kindle user for a few years now and I love e-ink. Really, I love it a lot. I have never liked reading articles on LCD screens. I still receive a physical copy of the Wall Street Journal every day because I like reading the paper. I do not read it online even though I could.

I never really read books on the iPad. I’ve always felt that the iPad was too big and unwieldy to use reading books at night in bed. Perhaps this is because I’m used to reading my Kindle 2 in bed. That device is a perfect size. It can be held in one hand while still being able to flip pages. The Kindle Fire has the form factor right. The size is perfect, although a little thinner would be nice. I much prefer the rubberized backing. The iPad’s aluminum backing can be cold and harsh early in the morning or late at night. But my first reading experience was met with pain.

My eyes really started to hurt. After speaking with a coworker, however, I realized that part of the problem is that the font size was too small. I’m not old, but I’m not young. I’ve noticed over the past few years having to increase the font size on my computer for web browsing. I had to do the same thing on the Fire. I incresed the font size twice and almost immediately, my eyes felt better. I also realized I had the brightness up way too high. I was, again, used to the iPad that changes the brightness depending on ambient light. That’s super convienent and is part of the price premium you pay for. So once i decreased the brightness, everything seemed a lot nicer. If all you want a Kindle for is reading, get the Kindle Touch. But if you want more, that’s where the Fire comes in.

Apps

If you ever hear someone say that the Fire isn’t a tablet, don’t listen to them. It absolutely is a tablet and the apps are what makes it so. Go back and look at the list of apps I used on the iPad. Now compare that to what’s available on the Fire. The only thing missing is Flipboard, WordPress, and CNBC. I replaced Flipboard with the cross-platform reading tool Pulse. I used Pulse on the iPad as my secondary reading tool, but it has now become my primary. WordPress is missing a native app, but as I was only using it for statistics, no big loss. CNBC. Sure that’s missing. Then again, I only used the CNBC app to track my stocks performance on a daily basis; easily replicated in a different app. There is no DC Comics app, per se, but the ComiXology app is free and serves the same purpose. I can view comics pane by pane and have all my comics at my fingertips, exactly like I want to.

The Amazon App Store also has a free paid app every day and I’ve used this to get some nice games and apps for free. While I feel bad that the developer isn’t getting paid for those apps, you should take advantage of them too.

Media

I am an Amazon Prime subscriber, so I have access to the free Instant Streaming videos on the device. And they play back very well, what few there are. There’s also the Amazon Cloud Player. Since I use Zune, my entire collection is not available to me on the Fire, but since I have the plan that lets me have 10 free MP3 tracks a month, I have a decent amount of favorite music in MP3 format. I put those tracks on the Amazon Cloud Player and they’re immediately available to you by pressing the Music tab. Which brings me to the issue of device storage.

One of the supposed dings against the device is that there is only 8 GB of non-expandable memory. What the people that make this ding forget is that, for the most part, you won’t need to put anything on the device. Your music would just go on the cloud player and stream right from there. As long as you have wifi, there’s no problem. Lets say you’re going to be on a plane or car ride for a number of hours. Just download what you want for that duration of time and you’re set. The same goes for movies. Just stream whatever you want from the cloud. If you’re using Netflix, there’s no difference. You’ve always needed network connectivity for Netflix. As an example, I still have 6 GB free.

Miscellaneous

Other dings against the Fire are its lack of camera, gps, and bluetooth. But lets be honest, the cameras on the iPad are not that good. Flickr statistics show that not many people use those cameras for pictures. The forward camera, ostensibly for FaceTime, is really garbage. GPS is only available on 3G iPads, not the WiFi only model, so they’re even there. And Bluetooth…well, I never used it.

Conclusion

People who already have an iPad probably won’t want to switch. That’s fine. But if you don’t already have one, the Fire is a superb alternative. Look at it this way. The Fire costs $199. The iPad 2 baseline is $499. Is the iPad 2.5 times better than the Fire? No. No way it is 2.5 times better. Will your kid who’s expecting an iPad for Christmas be disappointed with a Fire? Probably. But he’ll get over it and with the money you saved, you can get a Fire too!

Announcing – North Pole Photo Booth for Windows Phone Mango

Merry Christmas!

To enhance your holiday, I present the North Pole Photo Booth! Using the live camera feed from your Windows Phone, take a picture of your friends and family and watch as Santa’s hat appears. You can change hats or add more accesories to complete your holiday look. Already have a picture that you want to make Christmas card worthy? Just choose one from your media library and watch the magic happen.

How does it work?

The North Pole Photo Booth uses advanced facial recognition technology provided by face.com to detect your face and determine where to put the Santa hat. You can move the default hat, zoom it, and rotate it. Want to add more props? Click on the “add clothes” button to choose from a number of Christmas hats and related props. Drop those on your picture and arrange them as you like. When you’re all done, click Save and the image is saved to your media library where you can upload it to Twitter or Facebook and text it to your friends.

Features

  • Take a new picture or load an existing one
  • Automatic face detection
  • Choose among 8 different hats and 10 different props
  • Add as many props to your picture as you’d like
  • Zoom and rotate props
  • Delete props
  • Supports portrait and landscape mode
  • Reset everything to their original positions to start over
  • Add snow to your picture
  • Offline mode (no face detection)
  • On-screen help

Where to Get It

North Pole Photo Booth is available free from the Windows Phone Marketplace. Merry Christmas!

Amazon SimpleDB Basics in C# – PutAttribute

In response to a question in the comments on how to do a PutAttribute on SimpleDB, I’ve put together this post. These are fragments of code and not a complete source file. Hopefully if someone is looking for information, this can help as a guide. This code was written for Windows Phone 7 (i.e. Silverlight). To implement this fully, you’ll need to fill in the methods named CalculateStringToSignV2 and HmacSign. It is done via a GET method so all of the data is sent in the query string. Some of the code is a derivation from existing samples.

public void UpdateData(string itemName, AwsCredentials credentials) {

     IDictionary<string, string> parameters = new Dictionary<string, string>();
     parameters["Action"] = "PutAttributes";
     parameters["DomainName"] = DomainName;
     parameters["ItemName"] = itemName;

     // in my sample, I have a column called "LastUpdated" that I want to update with the current time.
     parameters["Attribute.1.Name"] = "LastUpdated";
     parameters["Attribute.1.Value"] = DateTime.Now.ToUniversalTime().ToString(CultureInfo.InvariantCulture);
     parameters["Attribute.1.Replace"] = true.ToString();

     AddRequiredParameters(parameters, GetMethod, credentials);

     var queryString = GetParametersAsString(parameters);

     var uri = new Uri(string.Format("{0}?{1}", SimpleDbUrl, queryString));
     var updateRequest = WebRequest.Create(uri) as HttpWebRequest;
     if (updateRequest != null)
            {
                updateRequest.Method = GetMethod;
                AsyncDataPackage asyncDataPackage = new AsyncDataPackage() { PostData = queryString, Request = updateRequest, Credentials = credentials};
                updateRequest.BeginGetResponse(UpdateResponseHandler, asyncDataPackage);

            }
}

private void AddRequiredParameters(IDictionary<string, string> parameters, string accessMethod, AwsCredentials credentials)
        {
            if (String.IsNullOrEmpty(credentials.AccessKey))
            {
                throw new ArgumentNullException("The AWS Access Key cannot be NULL or empty");
            }
            if (parameters.ContainsKey("Signature"))
            {
                parameters.Remove("Signature");
            }
            parameters["SignatureVersion"] = signatureVersion;
            parameters["SignatureMethod"] = signatureMethod;
            parameters["Timestamp"] = GetFormattedTimestampIso8601(0);
            parameters["Version"] = serviceVersion;

            string toSign = CalculateStringToSignV2(parameters, SimpleDbUrl, credentials.AccessKey, accessMethod);
            string auth;
            auth = HmacSign(toSign, credentials.SecretKey);

            parameters["AWSAccessKeyId"] = credentials.AccessKey;
            parameters["Signature"] = auth;

        }

private static string GetParametersAsString(IDictionary<string, string> parameters)
        {
            StringBuilder data = new StringBuilder(512);
            foreach (string key in (IEnumerable<string>)parameters.Keys)
            {
                string value = parameters[key];
                if (value != null)
                {
                    data.Append(key);
                    data.Append('=');
                    data.Append(UrlEncode(value));
                    data.Append('&');
                }
            }
            string result = data.ToString();
            return result.Remove(result.Length - 1);
        }

    public class AwsCredentials
    {
        public string AccessKey { get; set; }
        public string SecretKey { get; set; }
    }

public class AsyncDataPackage
    {
        public HttpWebRequest Request { get; set; }
        public string PostData { get; set; }
        public AwsCredentials Credentials { get; set; }
    }

Support WP7 Orientation Without Rotation

While working on a new app, I came upon a scenario in which I wanted the phone to support both Portrait and Landscape orientations, but I didn’t want the content on the page to rotate. I wanted the user to feel that they had rotated the phone, but the particulars of my app would make rotating the content nonsensical. What advantages are there for this? First, from the user perspective, if your app has an app bar and supports multiple orientations, the app bar rotates the icons and the menu items fly in from the sides. Everything is right side up, providing a great experience to the user. Second, supporting multiple orientations allows you to receive the OnOrientationChanged event and make easy calls to determine the orientation of the phone.

Before I begin, If all you want is the second option, the best way might be to only support Portrait (or Landscape) orientation and use the OrientationHelpers class from the Level Starter Kit sample. In my case, what I really wanted was the app bar buttons and menu to work as normally expected in both orientations, so OrientationHelpers wasn’t sufficient.

The easiest way to keep the content from rotating is to add a counter rotation to the Page using a RenderTransform of type CompositeTransform. Your XAML would look like this:

<phone:PhoneApplicationPage>
.
.
.
    <phone:PhoneApplicationPage.RenderTransform>
        <CompositeTransform x:Name="pageRotator" CenterX="0" CenterY="0" Rotation="0" TranslateY="0" TranslateX="0"></CompositeTransform> 
    </phone:PhoneApplicationPage.RenderTransform>

</phone:PhoneApplicationPage>

This is added to the XAML of the page and the properties can be entered and bound just like most Silverlight properties. Here, I changed the properties in the OnOrientationChanged event in the code behind.

protected override void OnOrientationChanged(OrientationChangedEventArgs e)
        {
            switch (e.Orientation)
            {
                case PageOrientation.PortraitUp:
                    pageRotator.Rotation = 0;
                    pageRotator.TranslateY = 0;
                    pageRotator.TranslateX = 0;
                    break;
                case PageOrientation.LandscapeLeft:
                    pageRotator.Rotation = -90;
                    pageRotator.TranslateY = 480;
                    pageRotator.TranslateX = 0;
                    break;
                case PageOrientation.LandscapeRight:
                    pageRotator.Rotation = 90;
                    pageRotator.TranslateY = 0;
                    pageRotator.TranslateX = 728;
                    break;
            }
    base.OnOrientationChanged(e);
        }

Obviously, if you’re an MVVM purist, you can put all this in the ViewModel and have the XAML databound to properties. The above code checks what orientation the phone was changed to and then sets the transforms on the CompositeTransform accordingly. If we only had a RotateTransform, the page would rotate, but would be off the screen. Here, I’m supporting a device of resolution 480 x 800 with an app bar of 72px tall.

Below shows how I wanted the screen to look in 3 orientations.*

* Since this was some Photoshop work, sharp eyed readers will note all the icons in the app bar in Landscape Down are in the wrong position. They would be right side up, but in the reverse order. The idea is evident, though.

Advertisements

I'm Ken Stone. I'm an indie developer with a focus on .NET and Windows Phone development. I have a day job, but everything I say is mine alone.

TechEd 2012July 11th, 2012
Let the learning begin.