Friday, July 2, 2010

iPhone 4 and the Bars! Apple's solution - Will it Help?

Everyone is writing about how the bars (indicating network signal) drop and the call drops if you hold in in your left hand. I thought, I'd write some too!

There are two major indicators of signal

1. RSSI - Received Signal Strength Indication: This indicates how much power from the signal tower (base station) is received in the phone. Needless to say if you are close to the tower, the signal strength is usually higher and it falls as you go away from it. (Unless you travel inside a lead capsule)

2. SNR / CINR - These are two terms that are almost used interchangeably. SNR is Signal to Noise Ration and CINR is Channel Interference+Noise Ratio. This parameter indicates the quality of the signal received (as opposed to RSSI which indicates the quantity)

RSSI is measured in logarithmic scale (dBm - decibel meters) and SNR / RSSI is a ratio of signal strength and noise strength (dB)

For RSSI, -50 dBm to -110 dBm are the usual range (-113 dBm in the case of iPhone 4) - But this is dependent on various parameters (technology used GSM/GPRS/3G/WiMax etc), the receiver quality, number of receiver antenna chains (in a Multiple Antenna system / MIMO) etc.

Cellphones usually, sync up to one tower, and then on the move, take decisions to jump across towers esp to the ones that can provide better signal.

A good RSSI does not mean a good quality signal. For e.g., there could be another tower operating in the vicinity in the same frequency/band and this can cause interference with the received signal. In this case, the SNR would be very low (even negative! if SNR is negative, it means that the noise/interference is higher than the received signal)

Otherwise, there are issues called Multipath Issues - For e.g., the same signal can bounce of various surfaces (like buildings) and then reach the cell phone. In this case, the same signal is received multiple times with slightly different delays, thus appearing like interference (There are technologies that help overcome this issues, but this is indeed a problem) - This multipath also causes signal quality to fall low.

The question comes to:
What to do you show on the phone to indicate signal? Is it the signal strength (RSSI), or the signal quality (CINR)? Apple decided to show the signal strength and calibrated the following way:

-51 to -91 : 5 bars
-91 to -101 : 4 bars
-101 to -103 : 3 bars
-103 to -107 : 2 bars
-107 to -113 : 1 bar
lesser : 0 bars

You can see apple has almost a 50 dBm range for the 4-5 bars and 12 dBm range for the remaining 3 bars.

Antenna Problem:
The problem iPhone 4 now has is that it has two antennas (one for WiFi/Bluetooth/GPS) and another for cell phone reception. These two are so close to each other that if you hold them with your left hand (hold it tight) then the two might short thus causing a drop in signal strength.

Apple's solution:
Apple is now trying to split the range evenly spread across the 5 bars. Do you think this will solve the problem? :-) See Apple's solution!

You'll now see lesser drops in bars before your call disconnects by holding it in your left hand :-) - The problem still remains!

[1] I am huge Apple fanboy! I type this in a Macbook Pro and have a Mac Mini @ home! I've bought quite a few iPods (shuffle, Nano, Classic etc)

[2] I've tried to avoid too much technology stuff in this blog and technical people can complain about oversimplification. But that's a stance I took because, I was targeting regular people for this blog entry (and secondly, I am not too much of a techie in this domain)

Thursday, May 13, 2010

Android Rants

I just couldn't hold it any longer:

1. There are too many versions of Android that are mutually incompatible - Google thinks it can release phone software as it can do server software. It is not true. How many iterations have iPhone OS and Symbian S60 gone through in the past few years? And, how many major interface changes have occurred in these iterations? I bet Android did 10X changes in just one year. And these changes are NOT backward compatible. An app that works perfectly fine in 1.5. 1.6 CRASHES on launch in Android 2.0, 2.1. Who's to blame? How will the developer know what changes Google would bring about in future versions?

2. Android Market SUCKS - There is no way to browse apps from the website. You need to have an Android phone to even look at the apps in the market. What you get in is just a gist with featured apps.

3. You cannot delete all contacts - It is funny that an app we wrote for system utilities is nearing 10,000 downloads. There is no way to 'Select All' and delete contacts. I guess it is because of their deep integration with GMail Contacts, Facebook contacts etc. But this should be overwhelming for a new non-tech savvy user. Or, Android should be labeled as 'Geek-only' phone.

4. VCard Support - You cannot receive a contact as VCard and save it as contact in your contacts. Believe this! Eons old Nokia phones would do this.

'Nuff said!

Tuesday, February 2, 2010

Where are You? featured in Gizmoji!

Our latest app "Where are you?" is now featured in Gizmoji! Check out a quick review!

Python S60 and contacts

I've been dabbling in and out with Python for S60 (EXCELLENT stuff) for programming Symbian mobiles - We have a couple of S60 phones - N85(Series 3, FP2) and 5800 ExpressMusic (Series 5)

In UMA, we have used Java ME and Java to manipulate the contacts in Symbian and Android phones. However, today we wanted to prototype some app, and we thought Python was the best way to go. (some people see vested interests in me doing this :D)

Looks like it is non-trivial to access contacts in Python. I'll quickly share what I learnt

ContactsDB is the database of contacts. This is obtained by calling open() function from contacts module.

>>> import contacts
>>> cdb =

By not giving any argument to open() we open the default contacts list (the one you want to manipulate most likely)

Now, to access contacts from the cdb, you can do the following

>>> ckeys = cdb.keys()
>>> for i in ckeys:
>>> c = ckeys[k]

Contacts are stored in ContactsDB like a dictionary of type - So, we can access each contact by using the ID which is obtained from cdb.keys()

Now, comes the question of accessing the fields inside a contact. For this, we need to understand how a Contact is constructed - It is constructed as a list of ContactField type. To access say first_name, do:

>>> names = c.find('first_name') #names is a list now
>>> name = names[0] # There is only one first name :D
>>> print name.value # This would print the first name

Make sure you check if len(names) > 0, because sometimes this field may not be present in the contact

find() returns the list of ContactField type. This is because, you can access mobile number by

>>> mobile_nos = c.find('mobile_number')
>>> for m in mobile_nos: print m.value

This would print the list of all mobile numbers for Contact - c. Just that the same interface is used for first name and last name.

More info on:
1. ContactsDB
2. Contact
3. ContactField

Btw, do you guys use the Bluetooth console from PC onto the Python on the phone - It is quite cool. Probably, I'll write a short note on how to get that going in my next post.

Monday, February 1, 2010

Where Are You?

Finally, we released 'Where Are You?' also called WAY in the Android Market. This is a cool app that can help you locate friends / family.

Basically, we need to launch the WAY app and keep it running. When you need to locate someone, you switch to this app, and identify the contact you need to locate. The other person should have authorized you to locate him/her.

WAY sends a command to the remote user as a text message. This app is based on a cross-platform command execution engine that can run on platforms including Google Android, Java ME / Symbian.

WAY should be running for the other user too. WAY in other Android phone understands the command and responds with the location if the requester is authorized.

So, there is no need to call and ask for the other person's location. Just use WAY!Or, as we call, Go To Way!

A detailed manual can be found here

Saturday, October 17, 2009

How to delete all contacts from an Android phone?

When we started developing a cross-platform 'Contacts Sync' app, we found that in Android there is no way to do it straight. I was quite skeptical that a feature like that was not available :-)

Anyway, we wrote an app, intuitively called "Delete All Contacts" :P and started using it. The code is pretty trivial (if you can see a couple of posts earlier "Contacts in Android")

However, we added some jazz (like our logo) and a feature to delete contacts with a particular name / pattern. (My Beceem friends would fondly remember the set of commands I created in a debug tool called swin that let us read / write variables with a particular pattern in the name)

To download this app, just right-click here and save the android package. Then use 'Apps Installer' or adb to install the program.

Wednesday, October 7, 2009

Google does not have Search

Yes, Google does not have have Search.

At least, I did not find one in Android Market place. How much ever I squinted my eyes and searched, I couldn't find a single button that said search in that website. I do agree that the number of apps in Android is limited - But, that doesn't mean you shouldn't give a search button!

I had to scroll over all the items that were listed, and I still couldn't find what I wanted - However, we are able to locate the app when we search using our HTC Hero Android phone.

Thumbs down, Google!