Tuesday, December 11, 2012

Prepaid Cellphone Services (update)

In July, I wrote about going PREPAID for my cellphone service - in which I mentioned T-Mobile Monthly 4G plan. IN the past several months, I have done quite an extensive research about available prepaid service, from just minutes and messages to all unlimited. This post is a highlight or summary of what I found and my recommendations.

Straight Talk

Straight Talk is probably providing the best value for prepaid phone service on the market right now in US - with $45 a month for unlimited voice, messages, and data*. This is probably my choice in January when I am done with my T-Mobile contract.

Straight Talk Wireless' parent company is TracFone Wireless - which is the largest prepaid service provide in US. TracFone mostly offers basic services such as voice only or voice and messages only. Straight Talk is different that it's main service is about unlimited* voice, messages, and data for $45 a month. The data part is not truly unlimited - it is 2-5GB with 3G speed with some restrictions such as data plan cannot be used to tether, cannot be used with BB service, no P2P, etc.

Straight Talk uses GSM bands from both T-Mobile and ATT. So what this means is that you can bring your own ATT-locked phone and asked for ATT-based SIM from Straight Talk or bringing your own T-Mobile-locked phone and ask for T-Mobile based SIM. If you have a T-Mobile based phone, you will get the T-Mobile 4G (HSDPA+) with Straight Talk. ATT will only give you 3G.

Using both bands also means larger selection of handsets. If you want to keep your Lumia 900 from ATT, you can. If you want to use the Galaxy S3 from T-Mobile, you can. If you want to use the new Nokia Lumia 920 from ATT, you can.  No need to unlock the device - just ask for specific SIM card based on the phone.

You can pay in advance for several months or even a year - which will give you some savings. For example, if you buy a year plan, it will cost you $495 (instead of 12 * $45).

There are instances where MMS won't work with Straight Talk. There is also a short configuration setting mads that you will need to do once the SIM is installed. Nothing hard or requires unlocking etc - see here.

T-Mobile

With T-Mobile, to get the similar package like Straight Talk, you will need to pay $60 per month. But T-Mobile provides more options - see my post about T-Mobile prepaid service here. The killer awesome deal from T-Mobile is the $30 per month (web only or from Walmart) which gives you 100 minutes, unlimited messages, and 5GB of data. This is actually perfect for me and would have gone for it except for the causes below.

T-Mobile coverages is quite lacking compared to ATT or Verizon. I go to several places in a year that my current T-Mobile phone do not get coverage at all - while my ATT friends get their 3G.

Secondly, T-Mobile handset selection is limited, especially compared to Straight Talk, which gives you the flexibility to choose handsets from BOTH ATT and T-Mobile.

Also, T-Mobile customer service has been awful for the past 2 years or so.

Virgin Mobile and Cricket Wireless

Virgin Mobile (running on Sprint network) probably provides the best pricing with $35 per month for 300 minutes, unlimited messages and data* (2.5 GB). This would have been the perfect plan for me. But then, to go unlimited everything, it would have cost you $55 - which is still more expensive than Straight Talk.

Cricket also has $45 a month for 1000 minutes with unlimited text and data (1GB). To get 2.5GB data, the cost is $65 per month. 

Virgin & Cricket also has very limited selection of phone (Sprint phones) - but it has the iPhone 4 and iPhone 4S options. Secondly, Sprint's 3G (or 4G) is the slowest.

Others

Boost Mobile provides unlimited voice, text, and data for $50 per month, but like Straight Talk, if you pay several months in advance then you will get a discount.

Verizon provides the best coverage for 3G, but it is also the most expensive. It will cost you $50 per month for unlimited text, voice, and web* on a basic-dumb-phone. If you have a smartphone, it will cost you $80 per month.

ATT GoPhone costs $65 per month with 1GB of 3G data.



-- read more and comment ...

Sunday, November 18, 2012

Microsoft Surface

Several months ago, my trusty DELL laptop that is provisioned from my employer died. Since I have been working on a project at a client that provisions me with a desktop, I have not been rushing to get a replacement (although I did ask for a replacement). But since the contract mandates that any work I do must be done on the client's facility, so I am all equipped with what I need to perform my work and a work laptop would be superfluous.

But there is also a need for a mobile device for me - different client assignments, VPN to the office, RDP to my development VMs, creating documents and presentations, etc. I have a smartphone that fulfill most of my email and social networking needs, but my smartphone is far from the quintessential device to create content and be productive (such as creating a Power Point presentation or writing a blog post like this). 

I am also more of a desktop guy. I prefer to have a beefy desktop to do most of my work. At home, I have desktop with quad core CPU, 8GB of RAM, 256GB SSD, plenty of data storage, decent video card to power my three monitors setup (all 24 inches, 1920x1200). You can see my home setup on the picture on the left - where I have my desktop powering the monitors on the left. The Surface was connected to the smaller monitor (21") on the left.

Trying to meet the need between the desktop and the smartphone, there are several ideas that come to mind: a huge smartphone (like Galaxy Note), a Chromebook, an ultra-book, or a tablet. But, none of them really fit with my needs or budget - until I heard about Microsoft Surface. I went to the closest store in Cleveland, OH to try and test the Microsoft Surface the day it came out on October 26th 2012. I liked it, bought it, and have been using it pretty much daily ever since.

So why Surface? Why not those other options? Macbook Air? Chromebook? iPad? Galaxy Tab? Nexus 7?

TL;DR

Microsoft Surface is fantastic. It fits my needs awesomely with the correct price point. It provides me the tools to be productive (like creating this lengthy blog post or creating a Power Point presentation) but yet still allows me to have the occasional  entertainment and media consumption such as games (WORDAMENT, Angry Birds), movies (XBOX Movies, Hulu), etc. It is not the be-all and end-all laptop or tablet - but it is certainly much more capable than iPad, Chromebook, or any Android tablets I have tried.

OFFICE SUITE

I owned a Galaxy Tab and used Nexus 7 quite extensively (before giving it to the office for Android development purpose).  While the Tab and the Nexus 7 are nice consumption devices - they are really lacking in productivity tools. Quick Office, Google Docs (and others) are quite nice in their own rights, but they are not Microsoft Office. My experience in using them left me longing for the Office experience.

The Surface comes with Office 2013 out of the box. It only has Word, Excel, Power Point, and OneNote. Now these applications are not striped down version of Word or Excel, etc - but they are the full version, just like the regular Office that I have on my desktop. Yes, it does not have Outlook or Access, but the essential four is enough for me. Just by that virtue alone - the Surface has become the best tablet for productivity.

My mobile device does not need to be beefy - but it has to be able to support Office - and Surface does that (and more). This is also one of the reason why Chromebook is not enough - it runs great for most of my need (email, browsing, searches, remote desktop, even Office Web App), but falls short for my power user need for Office.

TOUCH/TYPE COVER

The cover for Surface doubles as a keyboard as well - which is awesome.I have a cover for my Tab, which also functions as a stand. But then if I want to use a keyboard dock, I have to take the Tab out of the cover and dock it. Once done, I have to un-dock it and put it back into its cover. Plus, ever seen a Galaxy Tab keyboard/dock? It's ugly and thick.

The Touch Cover is thin (3mm), acts as a cover, water-repellant, can be folded back when used as a tablet (without removing it), strong magnetically attached, and looks awesome. It does take some getting used to during my first day or so using it - but then after a while, I can type probably 85%+ speed on it (assuming 100% is my full-keyboard speed).

The Type Cover is also thin, but thicker than the Touch Cover (6mm). It also can be folded back, magnetically attached, only comes in 1 color: black with gray back. With it I can probably type fairly close to full speed. Both covers are reversible and using very strong magnetic connection - so strong that I can hang my Surface upside down holding the cover without it falling off.

If you hate the small keyboard or the feeling of it - you can still plug in your existing (mechanical) keyboard via USB - and it will always work.

BATTERY LIFE

The battery life for the Surface is great - pretty similar to iPad, about 9 hours plus. So basically it can easily last the whole day. I brought mine to the office last week and used it pretty much from the morning (around 9am) until end of day (around 4:30pm) without connecting it to its charger and with probably 10% left at the end of the day. This was using the Surface connected to an external monitor, with a USB mouse, and used to connect to a VM via remote desktop all day. You can see the setup in the picture on the right.

This kind of battery life is pretty awesome because that means that I don't have to bring my charger every time. I can feel securely that it won't be running out of juice and it will last the whole day - and eventually connect it to the charger at night.

The charger itself is great and it charges very very quickly. I'd say within a couple of hours or so - from almost empty to fully charged. I was certainly benefited from this when I had to charge my Surface on a rush before a trip. I don't know how many times I wished my phone or Tab or laptop would charge faster during a layover or at a friend's house or on the go. 

EXTERNAL CONNECTIONS and KICKSTAND

The Surface also has a micro HDMI out port and a USB port. This means I can connect my monitor if needed (like when I am at the office), connect it to a projector for presentation, connect thousands of peripherals (such as my phone, mice, keyboard, printers, etc). The USB port is really awesome - I don't know how many times I wished there is a USB port for my Tab or Nexus 7 - so I can print or connect a keyboard or even a phone or camera to transfer files.

In my "docked" setup at home,  I am connecting both the USB and the micro HDMI. The USB connects to a USB hub which then connects my external keyboard, mouse, card-reader (built-in to the monitor), and printer (not seen, under the desk).

The Surface also has a micro-SD slot, so you can easily expand your space by just adding a micro-SD card - which is not an option for iPad or my Tab.

The kick-stand is absolutely-without-a-doubt-ultra-useful. In my Tab or my friends' iPad, there are no built-in stand. I thought the iPad cover that folds into a stand was brilliant, but the built-in kick-stand for the Surface is more awesome - especially when it is being used in the productive mode like a laptop.

MULTIPLE USER ACCOUNTS

Unlike a smartphone, where single account suffice, I need a mobile productivity tool that can be used with multiple user accounts. I want my emails to be separated from my wife's, my gamer score to be left alone by my son, and my setup not to be messed with. This feature allows me to customize my user experience according to me needs and my wife to her needs, and still allow a guest account for everybody else.

Android supports that with the new 4.2 JellyBean update - but that will never come to my Tab. For iPad - this feature is non-existent.

The fact that I am also a Windows user on my desktop, this also means that my setup roams (using Microsoft Account), my music selection & playlists roam, etc - which is nice indeed.

OTHERS and NEED IMPROVEMENT

There are other things that make the Surface nice, such as the XBOX integration with Smartglass, XBOX music, Netflix, Hulu+, etc. Those are nice - but I'd say that those things are bonuses and not the main reason that attracted me to the Surface.

The price point for the Surface is also right on. I think spending $1,000 for a Macbook Air (or more for Pro) for what I need is unnecessary and heedless spending. It is the same price point of an iPad/Galaxy Tab, but double the storage, and much much more productive-capable. 

There are several things that Microsoft can still improve. The first one is related to my experience with the Touch Cover - where the seam came lose near the connector within 2 days after purchase. MS Support took care of me (with the help of Mr. Sinofsky via Twitter), but it was still disappointing that a product needs to be replaced that soon.

The magnetic connection to the charger is also not that great. It works awesomely when connected properly, but it is a bit of a pain to get it connected and won't snap with assurance (unlike the Covers) without really paying attention. The indicator light helps, but I wish it would have been easier.  

The Windows Store needs more apps. It has most of the apps that I need, but I think the ecosystem will get better with more apps. More games, more productivity tools, more niche apps.

IS IT FOR YOU?

Well, isn't it the question? Depending on your needs and what you already invested, the answer can be "yes" or "no".

Let's do the "NO"s first:
  • If you already have a recent ultra-book (like Lenovo X1/X220/etc, ASUS Zenbook series, etc). I'd just upgrade your ultra-book to Windows 8 and be done with it. 
  • If you are looking to have one-powerful-machine-to-do-them-all. If this is your need (running Photoshop, doing software dev, running VMs, playing Starcraft 2, etc) then get a robust powerful laptop instead. The Surface will never be a full laptop replacement. Or wait for the Surface PRO.
  • If you are already heavily invested in Apple lines (Macbook, iPad, iPhone with all their accessories). Unless you really want to "switch".
"YES" is a good answer if:
  •  Your needs are similar to mine: no laptop and have other computer to run other things, need MS Office, casual gamer, with no or little investments in other tablets. I think you'll love the Surface like I do.
  • Want to update or replace your old netbook and your needs are quite basic, such as email and browsing, social (Facebook, Twitter), MS Office. There is no sense of wasting $1,400 for a Macbook Pro or $1,000 for a Macbook Air if that's all pretty much you need your computer to do.
"Maybe" is in order:
  • If you are a gamer and primarily looking for a casual gaming device. An iPad or Nintendo 3DS or PSP Vita is probably better for that - or even an Android tablet like the Nexus 7. This of course can change as the Windows Store are getting more and more apps/games.  
  • If you are a heavy XBOX 360 user. Smartglass is awesome and being able to watch a movie on your XBOX and then continue it on your Surface is cool. Or getting extra contents of the movie you are watching, the games you are playing, etc. But, Smartglass app for iOS, Android, and WindowsPhone should be able to do the same thing.
  • If you want to switch from Apple to Windows. 
  • The rest of all other reasons that you can think of. 

-- read more and comment ...

Tuesday, October 30, 2012

Nest Thermostat

I heard about the Nest thermostat since last year and followed its development online through their blog and tech news sites. At the time, my digital thermostat was running fine, but it is always a pain to set/adjust, change the schedule, and non-intuitive - so my wife and my friends would usually ask me to adjust the temperature setting (instead of doing it themselves). So since that point on I have been on the lookout for a "better" thermostat and preferably an "internet connected" one. When I heard about pre-ordering a Nest, I did it right away and bought it when it came out last year.

Nest was not cheap ($250), especially compared to the typical programmable thermostat you find at the hardware store (~$75). Most people will say that "it's just a thermostat - why get an expensive one?" - and they are right in a way that the benefit is not that apparent right away. But after using it about a week or so, I never looked back.

So what sold me in the first place? After a year or so using it, what are my thoughts about it? This blog post will answer both questions.

Top notch website 

Have you ever been to the Nest's website? I urge you to go there - http://www.nest.com. Not only it is very well designed and easy to navigate - but it also absolutely informative. After reading some articles and watching some videos (all which are well made), it really answers all my questions and more. The videos put me at ease about doing a self installation or whether Nest will work my current furnace/AC with their compatibility checker.

Nest's website also explain how will Nest help you save energy consumption. So instead of some nebulous magic, Nest spells it out in its blog and articles.

There is also this "Living with Nest" page that pretty much explains how Nest actually work with your living habit, from the first day, the first week, first month, and eventually where Nest will stay out of your way and learn to understands your habits and adjust to them.

Killer Nest Web App

Nest also has a web app. So once you connect your Nest to your WiFi, register it and create an account, you can actually manage your Nest from anywhere in the world with an internet connection. 

This is a killer feature. I can be at the office or my friend's place and lower down the temperature at my house or even turn it off. I can pre-heat my home on my way back from vacation or cool it down, etc.

The web app also allows you to manage your Nest settings such as Auto-Away & Away Temperatures, Schedule, Learning, Lock, etc. No more fiddling directly in the thermostat once you got Nest connected to the internet. Everything can be done via the web admin tool.

The Web App also shows you the energy usage for the last 10 days. If you are saving energy, Nest will give you a "leaf" - which is also showed in the energy usage screen (a bit of gamification for energy saving).  This energy calculation is also adjusting depending on the temperature in your area as well as any adjustments you make during that day. In the detail view, it shows the time of the day when the heating/AC unit is working and the sum of hours for the whole day. This is really awesome in helping me out in saving energy - thus saving money. This feature along has helped and motivated me and my family to adjust our habit to save energy.

If you have multiple Nests in your home (to manage different units for multiple rooms etc), the web app also will identify each Nest individually, so you can control each of them independently.

I have to say that their website and web-support is superb. Probably the best I have seen and experienced. Sometimes I could not help showing it of to my friends. You can read more about their Web App here

Mobile device support

Nest also support mobile devices: iPhone, iPad, Android Phones and Tablets. Beyond the Web App, this is something that I probably use the most: adjusting temperature from my bed, or setting Away while on the road, or simply just checking the energy usage. The mobile app has most of the features that the web app has. Use the web app when sitting in front of the computer and use the mobile app when using the phone/tablet - awesome.

It took Nest a while to support Android tablet, but thankfully, the web app can be accessed quite easily using FireFox or Chrome using the desktop mode. Now, Nest released an update that works for my Galaxy Tab. Now - I am a Windows Phone use, so if you are reading this blog, Nest - can you make a Windows Phone app? You can read more about the mobile app for Nest here.

Nest Monthly Energy Report

This is an unexpected feature/support that surprises me - in a very very good way. I did not know this for in the beginning but was pleasantly surprised when I found out about it. Basically, Nest sends you an email every month summarizing your Nest usage report, compared to previous month, your "leaf" earning, etc - as well as links to new blog posts, tips, and other Nest benefits.

Unlike typical marketing emails or spams, this email from Nest is actually useful and beneficial to help you in using your Nest better and saving more energy.

Getting this email is like getting a pad in the back about your energy saving and also motivate you to maximize your Nest instead of just simply leaving it as a programmable thermostat. It gives you a picture of your energy usage pattern and helps you to make adjustments to be more efficient.

Software updates and support

I'd say that Nest has better software updates support and support in general than my Android devices. In 1 year, my Nest has had 2 software/firmware updates - both were feature packed updates (as well as fixes etc), huge improvements for the web app, and continuous updates for mobile device apps. All in all, excellent software and firmware support.

Secondly, their website is filled with articles, videos, and how-tos on about anything you can think of about Nest - from installation, troubleshooting, compatibility, and apps. This combined with responsive email & twitter support, and phone support - I certainly feel taken care of and satisfied. My hats off to them.

Oh yes, it comes with 2 years warranty too.
-- read more and comment ...

Tuesday, September 11, 2012

KOSS PortaPro Review

When my full-size headphone was snapped in half several years ago, I was scrambling to find a new one. I got a newer similar model from a local store for around $20 - but then after several months, its cable broke and became basically a mono headphone. A friend of mine then gave me a KOSS portaPro. The portaPro is an on-ear headphone, which I have never used before - since all of my headphones were always full-size ones. So understandably, I was very skeptical about it. But since my banged-up mono broken headphone was my only other option so I started using it. It has been about 3 years now since I started using the portaPro - and I am still using it as my trusty headphone.

Awesome sound!

I still distinctly remember when I used it for the first time to listen to music (prior to that I was using it for listening to podcast), I was really blown away. The sound quality coming out from this seemingly dinky headphone is amazing. Yes, my old full-size headphones were cheap (less than $40) and obviously not BOSE or Beats or any of those fancy ones. But seriously, this portaPro was awesome in terms of sound quality. Clear and powerful bass, superb mid-range, balanced treble. I would say that the sound quality of this portaPro probably competes with the mid-range ($75-$150) full-size headphones (with no noise-cancelling).

Cheap!

Since the portaPro was a gift, I did not know how much it cost - so I looked it up online on Amazon - and it was cheap (or at least A LOT cheaper than those fancy headphones). It is only about $45 (or less) - which is only 1/4 of the price of Beats ($199), 1/7 from Bose ($299), or 1/2 of any typical Sony headphones (~$100). Then you say it's because it's an on-ear, of course it's cheap. Yes, that might be true - but, I have tried other on-ear headphones (Logitech, Sony, Panasonic, Phillips) and none of them rival the sound quality of the portaPro. Truly, I think the combination of the sound quality and the economic price hits the sweet spot for me.

Small size

The advantage of having the portaPro vs a full-size headphone is the small size. It fits easily into my laptop bag, my travel bag, or even my wife's purse. This is something I could not do with my full-size headphone - which means if I decide to carry it, I practically have to have it hanging on my neck all the time if not using it. The portaPro also folds - makes it even smaller.

Last longer than my older headphones

This portaPro probably takes a lot more abuse than my older headphones, since I carry it in more places, shoved into my bags repeatedly, taken into trips, etc. But still looks great, functions normally, and really no complains from me. It looks flimsy, but it seems to last forever.

After 3 years, I had to replace the foaming pads that cover the drivers. The old foaming are torn. I bought the foaming on Amazon and they install easily - just remove the old foaming, put new ones one - took about 3 minutes and done. No glue, no stitching, no hassle.

Now it feels like it's a new headphone again.

So if you are in the market for a headphone, I suggest you check out KOSS portaPro. I totally love mine and I am guessing you will be pleasantly surprise by it.
-- read more and comment ...

Monday, August 20, 2012

Installing Jelly Bean ROM to Galaxy Tab 10.1

Samsung is taking its time in making ICS available for Galaxy Tab 10.1. Since JellyBean has come out since June 2012, it will probably taking another year to get a JellyBean update from Samsung. Looking in the internet, there are JB (JellyBean) custom ROMs available for the Tab. Since running Honeycomb is really aggravating, lagging, and quite a pain - I decided to take the plunge, root, and install custom ROM. Another option is to just get a Nexus 7 device - which will cost $200 more than installing custom ROM.

So in this post, I will describe the step by step process in installing JB ROM into my Tab (from stock Honeycomb). Please note that there are risks involved when one is doing this - that one may "brick" the device, or the installation may fail and require further troubleshooting etc. So do it on your own risk - no guarantees from me. My experience was that the installation was smooth and without any glitch whatsoever. Please do not skip any steps - also make sure your battery is full or almost full. Part of the steps is wiping the data. So if you do not want to lose any data, make sure you back it up first. 


1. ROOT (if yours is already rooted, you can skip this step)
Follow the steps from xda-developers here for rooting your device. The link above even has a video step-by-step guide.

2. OPTIONAL
At this point, I purchased ROM Manager App from the Google Play and update Clockwork Recovery to the latest version. 

3. INSTALL JB
  1. Download 2 sets of files from xda-developers, look for the section like the image on the right:
    1. The custom ROM (select the one that applies to you)
    2. Google Apps
  2. Copy the JB package (both the ROM and the Google Apps zip files) to your tablet’s internal Tab memory
  3. Turn off Tab.
  4. Go to ClockworkMod Recovery by turn on the Tab while holding the Volume Up button. 
  5. When the screen turns on, release the Power button but hold the Volume Up button until a menu shows up on the screen. 
  6. Press Volume Down to select the recovery mode icon and then, press the Volume Up button to enter recovery.
  7. Create a backup of your current ROM. Select "backup and restore". Select "backup" again. This will initiate the backup process. Once it's done, select "go back" to go back to main menu.
  8. Select "wipe data/factory reset" (and confirm)
  9. Select "wipe cache partition" (and confirm)
  10. Select "advanced" -- "wipe dalvik cache" (and confirm)
  11. Select "mounts and storage" -- "format / system" (and confirm). Once done, go back to main menu
  12. Select "install zip from sd card" -- "choose zip from sd card" and select the JB zip file and then confirm selection. The ROM installation will start. 
  13. Select "install zip from sd card" -- "choose zip from sd card" and select the Google Apps zip file and then confirm selection. The Apps installation will start
  14. Once done, select "go back" to the main menu and then select "reboot system now". DONE!
-- read more and comment ...

Wednesday, August 1, 2012

How to Remote Desktop to Win7 Home

In Windows 7, you can only Remote Desktop to Windows 7 Pro, Enterprise, or Ultimate. So, for most of home users who have Windows 7 Home Premium, there is no RDP into it. Just to be clear, all Windows 7 versions can initiate a connection, but only Pro, Ent, and Ultimate can host (read here for more).

So, one of my desktop that I use for Media Center is running Home Premium - and from time to time I do need to login to it to run updates, install drivers, troubleshoot, etc. Yes, I can do it from the TV, but that means putting keyboard & mouse - which I don't want to. There is a "hack" - which basically installing the host executable in the PC - but somehow when I tried, it did not work - although the forum chatter seems to indicate that this should be relatively easy. So anyway, I decided to just put a keyboard & mouse for the time being. Until about 2 months ago, when I discover Chrome Remote Desktop (BETA)!

What is Chrome Remote Desktop? It is a Chrome extension (a plugin for Chrome browser) that enables a computer (PC or Mac) with Chrome that also has the Chrome Remote Desktop extension installed to RDP to each other. So in my case, I just installed Chrome browser and then the extension in my Media Center PC. Run the extension, it asked for my permission, give it a password, and it's ready. Then I also installed the same extension on my main PC in my office. Run the extension and - VOILA - I can RDP to my Media Center PC (running Win7 Home Premium)!

Here is the step-by-step:
If you do not have Chrome installed, go download & install it here. Go to Chrome Web Store and search for "remote desktop" and you should see result like this:


Click "ADD TO CHROME" and the download & installation of the extension should start. When it's done, you will see the Chrome Remote Desktop app icon shows up in your Chrome Apps.

Running the app for the first time, it will prompt you for allowing it access your computer. Click "Continue" here and then "Allow access" on the next screen.


Once you allow access, now it's ready to be setup for use. Click the "Get started" button.

To enable your computer to be connected to, click the "Enable remote connections" button. You will be asked to enter a PIN, which you will use every time you need to connect to the computer.


That is it - now it's ready! If you install and enable remote connections in more than 1 computer, they will get added the list automatically. The list is tied to your Google account (GMail/Google+). 

Now do the same steps above in a different computer, now you have 2 PCs that are able to RDP to each other via web. Here is the kicker: since this is via port 80, or http, this means one does not need to tweak firewall rules, install special VPN software, get dynamic DNS address, etc. As long as the computer is turned on, the Chrome extension will manage all the plumbing underneath. All you need is a broadband connection, Chrome browser & extension, and your setup/PIN.
-- read more and comment ...

Sunday, July 29, 2012

I am going PREPAID cellular plan ...

Currently, with T-Mobile, I am paying $49.99 family plan, which gives me 2 lines, 500 minutes, free T-Mobile to T-Mobile calls, free nights and weekends. I pay extra for my 5GB data plan ($25) and my wife is using the 200MB ($12). Plus another $4.99 for each messaging plan. So overall, I am paying around $100 per month. My family plan is an old plan (grandfathered), so I also get the full discount for new devices in I choose to extend the 2 year contract.

Now, my plan is not bad at all, $100 for 2 persons - it is actually considered to be quite awesome - since most my friends who have newer plans on T-Mobile (or other carriers) usually pay between $80 or more per person. So basically almost half of what most of my friends with smartphones are paying.

Now, let's consider the overall ownership cost over 2 years - since that is the length of the standard cellphone contract. If I pay $279 for each device (assuming Samsung Galaxy S3), add the monthly payment, over 2 years, I am paying about $2,950+. Of course, that is cheaper than my friends who is paying $110 per month for their family plan. But, I plan to reduce the overall cost some more. How? By going PREPAID!



To each their own, but after assessing my needs (getting some stats from my bills for the last 6+ months), I think getting the Monthly 4G plan for $30 will be sufficient for me (and my wife). This plan will get me 5GB data, unlimited text and 100 minutes voice. So for both of us, that will be $60 per month - without contract. There is a drawback to this - that if I buy a new device, I have to pay full price without any discount. So that means $600 for Samsung Galaxy S3. So in short, no contract, I am paying cheaper per month, but paying 3+ times IF buying a new device. But what is the overall 2 years cost of ownership? Let's assume we both buy GS3 and paying $30 Monthly 4G plan - which totaling $2,640 - a saving of $300 over 2 years. It looks a small saving on paper, but in reality, it is actually a pretty good deal. Let's list down the benefit:
  • No contract. Only pay as needed. So the potential saving here is actually larger. If I think for the next month that I will be in a WiFi bubble, I may switch to $10 pay as you go ans save some more. If I am traveling, I can switch back to the Monthly 4G etc. 
  • In a contract deal, if I am not getting a new device once my contract is up - this means that I am giving free money to the carrier, since the cost of the phone is factored in the monthly bill. With no contract prepaid, I don't have that burden. This also means that if I elect to switch carrier or get a new cellphone/device, I don't have to wait until the contract is done.
  • My wife data plan will get an upgrade, from 200MB per month to 5GB. Now, I am assuming that she needs that 5GB - if she does not (because of WiFi), she can switch to a cheaper pay-by-the-day based on usage.
  • From 300 texts per month to unlimited texts. This is also assuming we need that. I mostly do not need it, but there is no plan with voice and data only. 
  • If spending $100 or more in 1 year, get a Gold status, which means 15% more minutes and your minutes can be used for a full year (instead of the regular 90 days).
  • No overages!
So overall, I am fairly convinced (for now) that the prepaid/Monthly 4G will save me some money but still fulfill my need for mobile communication.

T-Mobile also has Pay-As-You-Go plan (for voice prepaid) and Pay-By-The-Day plan (for use only when needed). Depending on your needs, these plans can potentially be cheaper than the Monthly 4G plan that I am planning to use.

 

 
Microsoft Windows engineer John Lam also has a similar story in his blog
-- read more and comment ...

Monday, July 9, 2012

SQL Tuning Scripts

While tuning the SQL database for the project I am working on, I found these scripts by Brent Ozar that were extremely useful. These scripts rely on DMV on your SQL instance - so they are best run after you let your SQL databases run for a while and DMV data got flushed after a reboot. Brent also created videos explaining these scripts. Please note that all these scripts are Brent's creation - not mine.


FIND MISSING INDEXES
In the result, the "impact" column is the indicator how needed the index is. Brent recommends that 10 million or higher number means high - that the index is needed.
/* ------------------------------------------------------------------
-- Title: FindMissingIndexes
-- Author: Brent Ozar
-- Date: 2009-04-01 
-- Modified By: Clayton Kramer ckramer.kramer(at)gmail.com
-- Description: This query returns indexes that SQL Server 2005 
-- (and higher) thinks are missing since the last restart. The 
-- "Impact" column is relative to the time of last restart and how 
-- bad SQL Server needs the index. 10 million+ is high.
-- Changes: Updated to expose full table name. This makes it easier
-- to identify which database needs an index. Modified the 
-- CreateIndexStatement to use the full table path and include the
-- equality/inequality columns for easier identifcation.
------------------------------------------------------------------ */

SELECT  
 [Impact] = (avg_total_user_cost * avg_user_impact) * (user_seeks + user_scans),  
 [Table] = [statement],
 [CreateIndexStatement] = 'CREATE NONCLUSTERED INDEX ix_' 
  + sys.objects.name COLLATE DATABASE_DEFAULT 
  + '_' 
  + REPLACE(REPLACE(REPLACE(ISNULL(mid.equality_columns,'')+ISNULL(mid.inequality_columns,''), '[', ''), ']',''), ', ','_')
  + ' ON ' 
  + [statement] 
  + ' ( ' + IsNull(mid.equality_columns, '') 
  + CASE WHEN mid.inequality_columns IS NULL THEN '' ELSE 
   CASE WHEN mid.equality_columns IS NULL THEN '' ELSE ',' END 
  + mid.inequality_columns END + ' ) ' 
  + CASE WHEN mid.included_columns IS NULL THEN '' ELSE 'INCLUDE (' + mid.included_columns + ')' END 
  + ';', 
 mid.equality_columns,
 mid.inequality_columns,
 mid.included_columns
FROM sys.dm_db_missing_index_group_stats AS migs 
 INNER JOIN sys.dm_db_missing_index_groups AS mig ON migs.group_handle = mig.index_group_handle 
 INNER JOIN sys.dm_db_missing_index_details AS mid ON mig.index_handle = mid.index_handle 
 INNER JOIN sys.objects WITH (nolock) ON mid.OBJECT_ID = sys.objects.OBJECT_ID 
WHERE (migs.group_handle IN 
  (SELECT TOP (500) group_handle 
  FROM sys.dm_db_missing_index_group_stats WITH (nolock) 
  ORDER BY (avg_total_user_cost * avg_user_impact) * (user_seeks + user_scans) DESC))  
 AND OBJECTPROPERTY(sys.objects.OBJECT_ID, 'isusertable') = 1 
ORDER BY [Impact] DESC , [CreateIndexStatement] DESC

FIND UNDER USED / UNUSED INDEXES
Since index is mainly used for reading, therefore tables that are written a lot but read rarely may be burdened by indexes. This script is useful for finding those tables. Within the result of this script, the "reads_per_write" is the ratio between the read and write to the table. Depending on the current performance, # of read/write, the index may or may not needed. Generally, Brent recommends to remove indexes where "read_per_write" is below 1.
SELECT 
o.name
, indexname=i.name
, i.index_id   
, reads=user_seeks + user_scans + user_lookups   
, writes =  user_updates   
, rows = (SELECT SUM(p.rows) FROM sys.partitions p WHERE p.index_id = s.index_id AND s.object_id = p.object_id)
, CASE
 WHEN s.user_updates < 1 THEN 100
 ELSE 1.00 * (s.user_seeks + s.user_scans + s.user_lookups) / s.user_updates
  END AS reads_per_write
, 'DROP INDEX ' + QUOTENAME(i.name) 
+ ' ON ' + QUOTENAME(c.name) + '.' + QUOTENAME(OBJECT_NAME(s.object_id)) as 'drop statement'
FROM sys.dm_db_index_usage_stats s  
INNER JOIN sys.indexes i ON i.index_id = s.index_id AND s.object_id = i.object_id   
INNER JOIN sys.objects o on s.object_id = o.object_id
INNER JOIN sys.schemas c on o.schema_id = c.schema_id
WHERE OBJECTPROPERTY(s.object_id,'IsUserTable') = 1
AND s.database_id = DB_ID()   
AND i.type_desc = 'nonclustered'
AND i.is_primary_key = 0
AND i.is_unique_constraint = 0
AND (SELECT SUM(p.rows) FROM sys.partitions p WHERE p.index_id = s.index_id AND s.object_id = p.object_id) > 10000
ORDER BY reads

FIND QUERIES THAT ARE MISSING INDEXES (using Plan Cache)
This is an EXPENSIVE query (not recommended to be run during peak-use-time), running against temporary cached plans.
SELECT qp.query_plan
, total_worker_time/execution_count AS AvgCPU 
, total_elapsed_time/execution_count AS AvgDuration 
, (total_logical_reads+total_physical_reads)/execution_count AS AvgReads 
, execution_count 
, SUBSTRING(st.TEXT, (qs.statement_start_offset/2)+1 , ((CASE qs.statement_end_offset WHEN -1 THEN datalength(st.TEXT) ELSE qs.statement_end_offset END - qs.statement_start_offset)/2) + 1) AS txt 
, qp.query_plan.value('declare default element namespace "http://schemas.microsoft.com/sqlserver/2004/07/showplan"; (/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup/@Impact)[1]' , 'decimal(18,4)') * execution_count AS TotalImpact
, qp.query_plan.value('declare default element namespace "http://schemas.microsoft.com/sqlserver/2004/07/showplan"; (/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup/MissingIndex/@Database)[1]' , 'varchar(100)') AS [DATABASE]
, qp.query_plan.value('declare default element namespace "http://schemas.microsoft.com/sqlserver/2004/07/showplan"; (/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup/MissingIndex/@Table)[1]' , 'varchar(100)') AS [TABLE]
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(sql_handle) st
cross apply sys.dm_exec_query_plan(plan_handle) qp
WHERE qp.query_plan.exist('declare default element namespace "http://schemas.microsoft.com/sqlserver/2004/07/showplan";/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup/MissingIndex[@Database!="m"]') = 1
ORDER BY TotalImpact DESC
-- read more and comment ...

Sunday, April 8, 2012

Boost Performance Using Caching

Caching is widely used for static files (like javascript files, css, etc). All browser support client-side caching for these static files. IIS also supports server-side caching. Caching done right can tremendously improve web application serving performance exponentially.

Let's consider this scenario. You have a static html page - let's say this page: http://www.google.com/intl/en/about/index.html. The payload of this page is about 9k bytes. Although it is very small, but payload is still payload. If nothing is cache, every time we go to that page, our browser have to download 9k bytes of data. Now we turn on browser caching, the first time we go to that page, we will download the full 9k bytes of data. But the subsequent visit to that page will load from browser cache. Look at the comparison of network traffic below (the top is the first visit and the below image is the subsequent visit):


The http status code "200" means successful retrieval from the web server and "304" means that content has not been modified therefore doing retrieval from local browser cache. As we see, the data transmitted through the internet or network was 40 times smaller (218B vs 9.5KB) and the time taken is also 5 times faster (47ms vs 203ms) on the subsequent visit. This performance boost is caused by browser caching. Now imagine if we do this to a more complicated page, with all the css files, javascript files, and more images - the performance gain can be quite significant.

There is also a different type of caching called data caching (which I used in application in this blog post about Session variable performance) - which basically means that the application is storing the data retrieved temporarily in memory instead of doing a data retrieval from the database. The benefit of this type of caching is that retrieval from memory is much faster compared to database query/retrieval.

In this post, I will focus on the browser caching and write about data caching in the future post.

Browser caching is actually pretty easy. In short, you need add an "expire" header. The header makes these parts of the website to be cacheable in the client browsers. I usually set an expiration for 30 days after the components were first cache. This means that the first time that component is downloaded into the client browser, it will store itself in the browser cache and reuse it again and again when needed until 30 days have elapsed. On the 31st day, it will discard the cached version and retrieve a new one from the server.

In .NET development, you can set this expiration in a couple ways - by code or via IIS. Both of these approaches will actually do the same thing in the end, so it does not really matter that much, but it's good to know.

If you want to do this by code, put a web.config file in the folder of static files you want to cache. For example, if you have an "images" folder, or "scripts" folder - put this web.config file in that folder. In the screen shot, I have a "Contents" folder, where all my images and css files. Then inside the web.config file, I set the clientCache element with my expiration values.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <staticContent>
            <clientCache 
                cacheControlMode="UseMaxAge" 
                cacheControlMaxAge="30.00:00:00" />
        </staticContent>
    </system.webServer>
</configuration>

If you want to it via IIS, open the website folder that you want to apply and click or highlight the folder of the files that you want to be cached. I am using the same folder as above - the "contents" folder.

Then open/double-click the "HTTP Response Header" feature.

Then click "Set Common Headers..." on the right pane.

This will launch "Set Common HTTP Response Headers" window and you can set the expiration values within this window. Once you hit "OK", what IIS will do is create a web.config file for you - creating the a similar result as the code/manual approach above.

So how is the result - at least for my web application? Here is a screen shot of the payload and timing before caching, or this is the initial load before browser caching takes effect. Totaling 523KB of data for just scripts and image files, taking around 515 ms.
Now, here is the result on the subsequent request, with the caching applied. Totaling 1.8KB of data, taking around 37ms.
So in the end, the payload is 20X smaller and the time is about 14X faster. Quite a big pay off for a small change. Half a second may not seem much, but it does bring a lot of user satisfaction when their experience in using your web application is seamless and without delay. Jeff Atwood wrote excellently in his blog post: Performance is a Feature.

Additional readings:
-- read more and comment ...

Monday, March 19, 2012

Session Variable & Performance

When I was trying to boost the performance of our web application, I typically try to focus on the "bottlenecks" and most of the time these are apparent, especially when using profiler tools (EQATEC, MvcMiniProfiler, etc). But one performance bottleneck really stumped me because none of the tools I use are really showing where the problem is.

The setup is like this: the aspx page loads the main page and javascript - which then makes 2 AJAX calls (using jQuery $.get) to some controller actions which both return ascx view which then injected into the aspx. So basically when the site loads, it hits /Home/Index and then within Index (aspx) view, there are several lines of jQuery that make ajax calls (to /Home/PartOne and /Home/PartTwo to populate parts of the page.

Below is a screen shot from MvcMiniProfiler - which shows a different controller name and action from the generic example above, but with a similar problem:


This measurement shows that there is a 510ms delay/bottleneck happening even before the starting of the execution of my controller's action. For the sake of simplicity in investigating this, the action of the controller actually only returns a list of predefined integers. So in theory, this should be fast - like less than 10ms fast, not 510ms.

Here is a screen shot from PageSpeed that shows where the javascript makes 2 consecutive AJAX calls and although both of these return the same list of integer, one is taking 500ms longer:

When I experimentally put "OutputCache" attribute on "PartTwo", it behaves as expected, that it was executing fast. This hints that the problem is not in IIS, but somewhere after that and before it hits my action method.

Here is the code for my controller - which is bare-bone basic and you should not expect problems with it:
public class HomeController : Controller {
    public ActionResult Index() {
        return View();
    }

    public ActionResult PartOne() {
        List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
        Session["mylist"] = list;
        return View(list);
    }

    public ActionResult PartTwo() {
        List<int> list = Session["mylist"] as List<int>;
        return View(list);
    }
}

Here is my javascript code to load the parts:
$(document).ready(function () {
    $.ajax({
        url: "/Home/PartOne",
        cache: false,
        success: function (data, textStatus, request) {
            $("#TestContainerOne").html(data);
        }
    });

    $.ajax({
        url: "/Home/PartTwo",
        cache: false,
        success: function (data, textStatus, request) {
            $("#TestContainerTwo").html(data);
        }
    });
});

My views - index.aspx:
<h2>Home page</h2>
<div id="TestContainerOne"></div>
<div id="TestContainerTwo"></div>

PartOne.ascx:
<h2>Part One</h2></pre>
PartTwo.ascx:
<h2>Part Two</h2></pre>

So everything looks simple and harmless enough - so WHAT IS THE PROBLEM?

The issue is how Session variable is being processed and handled. I posted this problem in StackOverflow and several users suggested to decorate the controller with
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
... and it worked like a charm.

I did some more tests and investigation about this issue - like when I remove the usage of Session variables and substituting using Http Cache etc - and as long as there is no reference to Session, everything works fast. Since part of my application relies on Session, it would be too difficult to pull all reference to Session variables out.

Upon more research, readings, testing, etc - what I found is this: Session is thread safe. What this implies is that concurrent client requests is blocking and has to be dealt with synchronously. The 500ms is the preset locking cycle time for Session. Therefore this is why the first request can execute fast and without delay but the second one has 500ms delay. Putting the decoration above allows the controller to do a read-only, hence allowing concurrency for reading. But once there is any attempt to write into the session, the delay will be back.

So here is what my updated controller code looks like:
[SessionState(System.Web.SessionState.SessionStateBehavior.ReadOnly)]
public class HomeController : Controller {
    public ActionResult Index() {
        return View();
    }

    public ActionResult PartOne() {
        List<int> list = new List<int>() { 1, 2, 3, 4, 5 };
        HttpContext.Cache.Insert("mylist", list, null, DateTime.Now.AddSeconds(10), TimeSpan.Zero);
        return View(list);
    }

    public ActionResult PartTwo() {
        List<int> list = HttpContext.Cache.Get("mylist") as List<int>;
        return View(list);
    }
}

Additional readings:
-- read more and comment ...

Monday, February 13, 2012

Metro Themed Power Point

A couple of weeks ago, I had to do a presentation in my church highlighting a leadership transition that is happening. Since this presentation is more like an "announcement" instead of a "teaching" or "lecture", I thought I would try to craft a Power Point slides that resemble a Windows Phone's Metro UI.

I did some research about Metro design guidelines and found this MSDN article, this pdf, and a bunch more. MS Office 2007 or newer also already has "Metro" color scheme. Here are some highlights of the basic stuffs:

  • Font: Segue UI, Segue UI light, Segue WP
  • Use boxes for points (instead of bullet points)
  • Intentionally cut title/header text to provide the illusion of panorama display
  • Try to use slide transition that simulate "swipe"
  • Need to use custom animation to simulate "scroll"
Here is what I came out with as a starting point. Begining with an empty slide with black background, I created boxes using various colors and use them to hold my "welcome to meeting" verbiage. I also placed them offset to the left a little bit and give space for the arrow & circle. I also made sure the font size for the big text are consistent. I tried to not use the same color for each box to make it more colorful.

For the next slide, I tried to simulate a "Hub". Create an oversize hub-title, with some part of the text bleeds out to the right of the screen, giving the hint of more content to the right. This is basically a "list" view, the list title with all lower case and the list items with some small blurb for each one. The second list title is also position to the right to simulate the next list. 


The last slide is basically a copy of the first slide, but with some added effects for "scroll up". So in the design view, the boxes go all the way down beyond the bottom edge of the slide. With custom animation, I simulate a "scroll up".


You can download the power point file here
-- read more and comment ...

Tuesday, January 24, 2012

Windows Phone vs. Android

Android is the market share leader in the mobile space in US as of January 2012 with around 50% market share (according to NPD via Engadget). They are doing this by flooding the market with tons of phones, ranging from free, cheap phones, prepaids, and mid-range, and top of the line phones. People have plenty of options when getting an Android phone.

The Nexus line/series is the bar that Google put out to showcase the new OS releases. Nexus One was release to showcase Froyo (version 2.2), Nexus S for Gingerbread (2.3.x), and Galaxy Nexus for Ice Cream Sandwich (4.0.x).

I was an Android user, starting with the G1 (the original Android phone - back in 2008). When my wife's old Windows Mobile 6.1 phone died, I got her a G2 (also an Android phone). I recommended Android phones to many of my friends - and many of them did switched to Android (from Symbian, BlackBerry, Windows Mobile, etc). But late 2010, my love for Android grew weary and when Windows Phone came out, I jumped ship and I am happily recommend Windows Phone to anyone instead of Android. Why?

This post is a part of a series titled "Should I Get a Windows Phone?":

  1. Windows Phone vs. BlackBerry
  2. Windows Phone vs. Android
  3. Windows Phone vs. iPhone
  4. Windows Phone vs. "the rest" (WinMo, Bada, Symbian, etc)
Why go with Windows Phone (vs. Android)?
  1. Windows Phone major releases are on time and you will get it within reasonable manner (usually within 1 month) after its release - for all devices. This means 1 year old Windows Phone will get update approximately the same time as a new Windows Phone that your friend just got last week. This also means that you are very likely to be running the latest, greatest features available in the Windows Phone OS at all times (instead of always a generation or two behind). With Android, your device may never get updated to the newest Android features. Unless you are always getting the Nexus series (which is around $299 with 2 year contract), the updates are really slow to get to your phone. This is caused by the fragmentation of the Android operating system itself by carriers and manufacturers in making it work with their devices and services. Although a this article by Michael Degusta is about iOS and Android, it illustrates well about the fragmentation and lateness of Android updates, so if you get your Android phone now, most likely it will be a version behind in OS and will remain that way or worse (unless you are getting the Nexus series).

  2. Streamlined & consistent user interface. Windows Phones is consistent regardless of carriers or manufacturers. From using a Nokia, an HTC, a Samsung, etc they are all look similar and everything is where it's suppose to be. With Android, not only devices are in different OS versions (which introduce new things, changes, and adjustments), manufacturers also put a lot of stuff (HTC with "Sense", Motorola with "MotoBlur" etc). So your experience in using can be different (and sometimes radically). This is a big turn off for me. Although I consider myself as an informed Android user, but sometimes using my friend's HTC MyTouch 3G is quite a difficult adjustment.

  3. Much more user-friendly interface. Android is much more well-known as a "power-user" phone. It provides a lot of opportunities for customizations, mods, etc. Compared to this, Windows Phone tiles & hub is just so much friendlier. It is also a fresh new look away from the "list of icons". I remember once teaching a friend to use her first Android device - where she basically told me to set it up for her. Months later, her setup was still the same, including the wallpaper, widgets, and shortcuts. I asked her about it and she said she was afraid to change anything and not sure how to get things back if something go wrong. In Windows Phone, to put a tile in the start screen is so easy: find the app you want, long-press it and select "pin to start". In Android (2.3.x or older): long-press empty space in home, select "shortcuts", select "applications", and select your app.

  4. Windows Phone interface is fast & fluid (even without the dual-core). Although none of the current Windows Phone are running dual-core processor, but all of them are still running buttery smooth and fast. My HTC HD7 is a first generation Windows Phone device - and it's still running like a champ. Yes, it is slower compared to the second generation devices, but there is still no lag, or jerky movement, freezing, etc. Compared to my friends Android devices (most of them are newer than my Windows Phone), not only they are running 1 or 2 versions behind on OS, but they need to be rebooted regularly (once every 2 weeks, once a month, once a week, etc), or getting a lot of "force close" on basic apps (GMail, YouTube, etc), interface is getting jerky/lag, and other miscellaneous problems (speaker phone not working consistently, cannot answer phone sometimes, late notifications, etc).

  5. In Windows Phone, you can uninstall "bloatwares". When you buy a phone from a carrier, usually they will include their apps in the phone. With Windows Phone, you can uninstall them easily: find it, long press & hit "Uninstall". With Android, 99% of the time you are stuck with it and cannot be uninstalled. One option is that you can "root" your phone (that is getting an administrative access to your phone) and then flash the ROM (that is installing the Android flavor of your choice). Although I am a pretty savvy user, but it seems unnecessary if I go with Windows Phone.

  6. Live Tiles that just work vs Android clunky widgets. Widgets in Android are cool and I love them for like weather, calendar, email, etc. But they are clunky - sometimes they won't update, do a "force close" or just simply disappear. Some widgets are small, some are big, and some are bigger still. So my home screen ends up looking cluttered and messy. When the widget is running, it means the app is running (and draining battery). With Live Tiles, things are organized, neat, and they just work, plus the app itself is NOT running. I can get the information that I want in a flash and often without launching the app at all.

  7. Windows Phone is cheaper. The top of the line Windows Phone is $199. The top of the line Android is $299 (both with 2 year contract). I would rather use my $100 saving toward something else. Plus, combined with the fragmentation, it is very likely that if I go with Android, my new $299 phone will be outdated (as far as OS goes) within several months and not getting updated for a year plus.

  8. Much better battery life. I use my phone a lot: reading news, checking weather, replying to emails, playing games, as well as syncing 4 email address, Twitter, 2 calendars, and Foursquare.The only constant thing that I see my friends who carry Android device is chargers - even though they have more capacity in their battery (G2 - 1300 mAH, GS1 - 1500 mAH, GS2 - 1650 mAH, EVO 4G - 1750 mAH, etc) than mine. When they are at my house, they borrow my charger, charging in the car, charging while at a computer, at the coffee shop, etc. This especially true for phones running dual-core and with "4G". On the other hand, my HD7 (1230 mAH) only needs charging at over night. I unplugged my phone from the charger around 7am and plug it back before going to bed, around 11pm. I don't have any charger at the office nor in my car.

  9. Better media/music player. Zune is an awesome music player. It's a native client, has millions of songs in the Marketplace, movies, etc. It is also gorgeous and non-intrusive. Zune's subscription based (like Spotify) gives you a lot of freedom instead of pay-per-download based fee. Google Music is a bit of pain-in-the-butt, while Zune just works. To get subscription based music, you will need to download Spotify (or others) in Android.

  10. XBOX Live integration. Windows Phone has Windows Live account integration just as Android has Google account integration. But, XBOX Live integration is a part of the Live service that is unique to Windows Phone. Gamer's score, points, avatar, etc are synced and customization in the console and the phone. Some games even allow game integration between the phone and the console.

  11. Nokia hardware option. Although Nokia used to make outdated OS (Symbian), but their hardware is still sets the bar. Having the option of getting Nokia hardware running Windows Phone is just awesome. Nokia with its volume is also able to drive the price down in the market. The Nokia Lumia 710, which is a entry level Windows Phone device is being sold in US at $49 with 2 year contract, and the Lumia 800 is selling in Europe often for free. The rumor is that Nokia Lumia 900 (coming out March 2012) will be sold for $99 with 2 year contract. Wow!

  12. Better cloud integration with SkyDrive. With Windows Phone, you can have free 25 GB of storage. All your OneNotes will sync (no more need for EverNote), auto-upload options for photos, sharing folders and documents, etc. With MS Office, you can view, edit, and create documents on your phone and put them in SkyDrive. I don't know how many times I have used this feature to review documents or Power Point presentations and taking notes - certainly a very beneficial feature for me. 

  13. Better voice control. MS TellMe is much better and easier to use than Google Voice Action. TellMe understands the non-western names in my contact list. It also works better in understanding me and some of my friends. Plus, it is a lot easier to access TellMe (long press on Start) vs Voice Action (launch an app). Granted that Siri (iOS 5) is still better than both.

  14. Email reading, which I do lot of, is a lot better in Windows Phone - with the big clean text and previews. Combined with the panorama display in hubs, this makes categorizing, reading, and managing emails to be a lot easier in Windows Phone. 

  15. Twitter & Facebook integration. If you are into the social networking scene, this is a must. Instead of opening and closing apps, Windows Phone integrates Facebook & Twitter - so you can do all your social networking stuff without the hassle of opening and closing apps. I am an avid Twitter user (not so much on Facebook), so this is a big deal for me.

  16. Much better Exchange integration. If you are an MS Exchange user, Windows Phone do this much much better than Android. Touchdown in Android helps, but it is costly ($19.99). I manage all my contacts and calendar in Exchange, so being able to sync (push) them into my phone is just a must.

  17. Better touch-screen keyboard - across any device. With Android, you get hit and miss.

  18. Windows Phone has the best Foursquare app, called "4th and Mayor". Much better than the official one, in any platform. 

Why go with Android?
  1. Excellent turn-by-turn navigation. I still envy the GPS feature that Android has - until now. This is simply awesome. With Windows Phone, we need 3rd party apps - or continue hoping that Nokia & Bing will one day provide this for all devices. Currently only Nokia devices get the Nokia Drive.

  2. More variety in the market. The cell-phone market is saturated with Android phones. There are probably around 30+ Android phones released every year. In comparison, Apple release 1 version of hardware every year or so and about 10 Windows Phone per year. So more choices for you if you go with Android.

  3. More apps. Android Market has more than 300,000 apps. Windows Phone Marketplace only has around 60,000 apps. Windows Phone still has a lot of catching up to do - but I find all the major apps that I need are already in Marketplace. Yes, there are the missing "tricorder" app that I "need", or the "battery saver" app etc. But with Windows Phone, there is already a native battery-saver feature under "settings" and for the "tricorder", I use the G2 for that, so I can use the tricorder while on the phone.

  4. Most Android phones has dual-core processor. Although this translate very little improvement in daily use (in fact MS did a contest called "Smoked by Windows Phone" during CES, go here for results & detail), but this still becomes a prevalent marketing strategy. 

  5. If you use "WhatsApp" app, the Android version is still better than the Windows Phone one.

  6. No Skype, yet. Nothing much to say here ...

If there is no Windows Phone, I would probably stick with Android - and I used to be an Android lover. But time has changed and Windows Phone (especially Mango) just won me over.
-- read more and comment ...