Sunday, September 27, 2015

Using google blobstore through android client

Recently I have been working on an Android project that required me to store some images into cloud. Upon reading through google documentation, I learnt that the best place to store dynamic images is Google BlobService. Unfortunately for me it required some iterations to figure out how to use this service. So I thought I would document it here for the help of others.

It is important to understand how the BlobService workflow works. Following is the typical workflow of a blobservice.

  • The client first creates an upload URL where the image would be uploaded. Since it is hard (not possible) to do a decent authentication scheme around blobservice, I decided to use a appengine endpoint to create the upload URL for me. The code for appengine endpoint implementation is very simple.

    @ApiMethod(name = "getUploadURL")
    public UploadURL getUploadURL() {

        BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
        return new UploadURL(blobstoreService.createUploadUrl("/_ah/uploads"));
The arugument to createUploadUrl is the suffix that would be added to your appengine base URL. We need to understand that the actual  image upload is unauthenticated, i.e. anybody who has the URL can upload the image but the endpoint itself is authenticated and hence nobody would know the URL to upload anything except authenticated users. 
  • Now that we have the URL, the first thing that we need to do is to convert the image into a byte array that we can upload. I have created following utility function to do just that. Basically I don't want to store full sized images, I have created this function that takes a Bitmap and scales the image and converts it to a byte array. The images is scaled with actual aspect ratio with the width fixed at maximum PRODUCT_IMAGE_WIDTH.
    public static byte[] getByteArrayFromBitmap(Bitmap bitmap, boolean scale) {

        Bitmap scaledBitmap = bitmap;
        if (scale) {
            scaledBitmap = scale(bitmap);
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        scaledBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
        return stream.toByteArray();
    public static  Bitmap scale (Bitmap source){
        int w = source.getWidth();
        double factor = 1.0;
        if (w > PRODUCT_IMAGE_WIDTH) {
            factor = ((double)w) / ((double)PRODUCT_IMAGE_WIDTH);
        else {


        int dw = new Double((((double)factor) * ((double)(source.getWidth())))).intValue();
        int dh = new Double((((double)factor) * ((double)(source.getHeight())))).intValue();
        return Bitmap.createScaledBitmap(source, dw, dh, false);
  • Now that we have the image as a byte array, we upload the image from the client using this URL. Since google has removed the old HTTPClient, I had to figure out how to use OkHTTP which seems to be the new HTTP client that needs to be used. It was really not very hard to do this, it is just that documentation around OKHttp is very sparse and it takes some trial and error to make this work. We set a response header so that the client can receive the cloud key that is generated by the blob service. We need to know this key to retrieve the image later.
            String uploadURL = api.getUploadURL().execute().getUrl();
            OkHttpClient httpClient = new OkHttpClient();
            String filename = UUID.randomUUID().toString() + ".png";
            RequestBody body = new MultipartBuilder("image-part-name")
                    .addFormDataPart("file", filename,          

            RequestBody.create(MediaType.parse("image/png"), imageByteArray))
            Request request = new Request.Builder().url(uploadURL).post(body).build();
            Response response = httpClient.newCall(request).execute();
            String cloudKey = response.header("X-MyApplication-Blob-Cloud-key");
            // We can store this cloud key in cloud store entity with the other data related to 
            // image so that we can retrieve it later.
  • Let's look at the implementation of blobservice. We basically need to create a servlet to handle the upload request. The doPost of the servlet should handle the upload. WIth some trial and error, I figured out that the blobservice API looks for a multipart payload with image byte array and header with the name "file". You can also provide the bytearray type, otherwise it decodes it with the filename extension that you provide as part of the value.
    public void doPost(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {

        Map> blobs = blobstoreService.getUploads(req);
        List blobKeys = blobs.get("file");
        if (blobKeys == null || blobKeys.isEmpty()) {
        } else {
            res.setHeader("X-MyApplication-Blob-Cloud-key", blobKeys.get(0).getKeyString());
  • Retrieving the image is also very simple. You need another servlet to do that. In my case I have a servlet with a GET method which returns the image.
    public void doGet(HttpServletRequest req, HttpServletResponse res)
            throws IOException {

        BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
        blobstoreService.serve(blobKey, res);
As we can see, it is quite easy to build a work flow where the image is stored with blobservice and other metadata is stored with google cloud store with cloud key. The image can be retrieved based on the other metadata and lookup from cloud store.

Tuesday, September 9, 2014

Why I think Java is bad for computer industry

I have felt this for quite a long time and after multiple events that have happened in past, I have come to the conclusion that java should not be the first language of anybody who intends to learn programming. Even the regular java programmer should take their time off and code in some other language once in a while.

Why am I saying this. In last many years, I have run a programming competition for the employees of the companies where I have been working in. These are individuals with significant experience in programming. We generally allow people to code in C/C++ and Java.

Most of the problems that we design for these competitions have a standard statement written in them. 
The input is read from standard input till EOF and the output should be written to standard output.

Almost every year I am asked clarifications related to this statement in many different forms.

  1. My program reads from a file standard-input.txt and writes to standard-output.txt
  2. My program reads one line at a time and then you have to run it again 
  3. Standard input doesn't have EOF
Almost always these clarifications come from experienced Java programmers. This leads me to believe that people who start programming in languages that have extremely rich set of libraries forget the basic constructs of language, programming and operating system. These are some basic constructs that I would expect everybody would know Even otherwise, it is just a simple google query away. Since most of these people are experienced programmer, their presumption is that the question must have a typo and then don't bother looking it up.

There, it is off my chest now. I can breathe properly.

Saturday, December 14, 2013

Security concern: NDTV android app

 The latest release of NDTV Android app is asking for full access to your calendar. Given that it is an app from a news site, what's the point of asking for complete access to your calendar on the phone. What do they expect to do with your calendar. I am not going to install this upgrade.

Saturday, December 7, 2013

Accessory Review : Sony DSC-QX100

I finally got a chance to review Sony DSC-QX100, what Sony calls Smartphone attachable lens style camera. Here is my review of the accessory (if you want to call it) after couple of hundred shots. Let me first explain how it works..
What it is
The device is essentially a full blown camera without a viewfinder and most of the control. The only controls available on camera (lens) body are shutter and zoom control.
How does it work
QX100 connects to your smartphone wirelessly. Its can use NFC for authentication, or one can use the password provided on the camera to authenticate and then it uses Wi-Fi to connect, send the control commands and retrieve photos. I used QX100 with Xperia Z and it worked after a failed attempt at connection.
The app that is suggested by Sony to control the camera is Sony PlayMemories for Mobile. I had to download the app from the play store and install on my phone. One would think that sony would make life of its consumers easy by providing some kind of QR code in the package so searching the app becomes easy.
Setting Up
Setting up of camera is easy, I could do it in very little time and effort. But it takes 10 to 30 seconds, depending on the whims and fancy of the camera and app to connect to QX100. This becomes a huge issues because one reason I take a camera phone because I want to take spur of the moment photos. This camera makes it impossible to do that. By the time you take out the camera, mount on phone turn the camera on, start the app and then as it to connect, it is easily half a minute and the spur of the moment has passed away.

You have option to use only camera storage, phone storage or both. QX100 has a slot for SD card and I put a 32GB SD card and it worked without a problem. If you setup the app to simultaneously copy photo to both the camera and mobile phone, the turn around time for the next photo increases significantly. It takes almost 10 seconds to transfer a full size photo from camera to mobile phone and that becomes a huge issue. I tried with that and eventually disabled the functionality of copying the photos to the camera. Another huge problem for me was the Sony PMM app stores the photos somewhere in the internal memory of the phone. This causes two problems. The first being that you can very quickly run out of space on the phone and the second being I have setup Google+ to upload the photos to Picasa automatically. This behavior of PMM breaks that functionality and makes life very difficult.
Other Annoyances
Given that the lens is specifically designed for mobile phones, it is surprising that it does not support location tagging at all. One of the main reason why I take photos from mobile phone is that I want to location tag them. The reason for that seem to be that Sony Camera Remote API, which probably was designed its other line of wifi-enabled cameras does not support passing of location information to camera while clicking, probably because the camera can't handle that. I think this is a very stupid design. Even if a third party software vendor to right an app that replaces Sony PMM, they can't really add location without going through hoops to do that.
The zoom-in/out button on the lens is so close to click button that when I was using it, I would accidentally end up clicking while trying to zoom in/out the lens.
The grip of the camera when mounted on the phone is also very awkward.  You almost don't trust the clip that holds the lens to camera and since only type of viewfinder is the camera LCD, it makes it impossible to take any kind of picture in sunny areas. You practically can't see anything.
The other very significant problem is that because of the way camera is mounted in Xperia line of phones, it obstructs the flash and the PMM app also does not have any way to fire the flash while you are using the app making it absolutely useless after sunset or in dark rooms.
Picture Quality
I found picture quality of this camera definitely better than the stock camera on Xperia Z but not by the magnitude that it made any difference. Below are two picture from Xperia Z and QX 100 for comparison. Some portions of the picture actually look better in Xperia picture.
Sony Xperia Z Picture
DSC-QX100 Picture
As we can see in the picture above, there DSC-QX100 is slightly better, colors are more accurate. Find below a set of images that were taken using this camera for you to decide for yourself.

Friday, May 17, 2013

Apps that I use

Here is a list of applications that I have downloaded from Android Market and use them.

  • Adobe Reader -- For reading PDF documents.
  • Amazon Kindle -- eBooks from Amazon
  • Audible -- Audio books
  • Google Authenticator -- Two factor authentication for Google services
  • Barcode Scanner -- Really essential app, can use the camera to scan any barcode. This app is also used by many other apps for that functionality.
  • -- App for hotel reservation and keeping track of your reservations
  • Bubble -- A surface level testing application
  • CallTrack -- Records your calls to Google Calendar
  • Calorie Counter -- A client for weight losers' social network
  • CamScanner -- Very useful app for creating PDFs out of whiteboard discussions and using the camera as an scanner.
  • Cardio Trainer -- Can record your running sessions along with a google map
  • Citibank India -- Citibank online banking app
  • Cleartrip -- Mobile app for
  • Compass -- A regular direction compass, has analog and digital settings. Pretty useful
  • Concur -- Keeping track of reservations
  • ConvertPad -- Fantastic Unit conversion app
  • Currents -- App for creating magazines (like flipboard). Currently used as a replacement for Reader
  • CWT To Go -- My company's travel agent is CWT, so I use this to keep track for official travels
  • Dictionary -- Mobile app for
  • doubleTwist -- Alternate music player, mostly used for a very good podcast search service
  • Drive -- App for google drive
  • Epocrates -- To make sure that the doctor is not messing up with you
  • Facebook for Android -- What would be life without facebook
  • File Commander -- To access the storage in the phone directly
  • Finance -- Client for Google Finance
  • Flipboard
  • Goggles -- Nifty app that can decipher things based on their pictures, Just point the camera and it would tell you what it is.
  • Google+
  • HDFC Bank -- Very Nice app for online banking
  • IMDb -- All about movies
  • L:IC Mobile -- Keeping track of your policies
  • Linked In
  • Lookout -- Security service
  • Voice -- Client for google Voice. I have it but can't use it in India
  • Layar -- Augmented Reality app, overlays stuff on google map. Pretty cool
  • Listen -- Podcast finder
  • Locale -- Very nifty app to change the settings of your phone based on time or your location.
  • My Tracks -- Records your movements. Very useful to share directions with others.
  • My Backup -- Backups all the user data on SD card. Useful when changing phones.
  • Places Directory -- Another cool app from Google, nice to find places around you.
  • QuickOffice -- Official version integrates very well with Google Drive
  • Seesmic -- A twitter client
  • Shazam -- Can decipher song details by listening to it.
  • Skype
  • SMS Backup+ -- Backups all your SMS messages to your gmail account under a specified Label.
  • Twitter -- Client for twitter
  • Unit Converter -- Converts pretty much any unit to any other unit
  • Ustream Broadcaster -- Broadcast yourself. Pretty good
  • Voice Recorder -- Record voice
  • Yahoo Mail -- That yahoo email account that I never use
Let me know you any of you people out there use any other app that you find useful. I can try that out.

Sony Xperia Z -- A Review

Recently I acquired a Sony Xperia Z and here are my impressions of the phone.
  • Industrial design of the phone is really good. I am a long time Motorola user and compared to the industrial design of Motorola, I could never get the same feel with phones made by LG or Samsung. I was forced to look at a manufacturer other than Motorola because they have pretty much walked out of the India market and there is nothing new from them. Sony's industrial design is really slick. The phone is put together very well. You don't get a plasticky feel from the phone and it feels robust.
    Benchmark Sony Xperia Z
  • Underlying hardware and operating system performs well. Here is the benchmark from Quadrant App. The only phone that I has seen give better number than this one is Galaxy S4.
  • I was earlier using Motorola Razr XT910. With the numbers of apps that I was using, I saw that the phone was running very low on RAM, so for my type of usage, this phone helps with its 2 GB RAM.
  • There is a bunch of crapware installed by Sony on the phone, most of these are meaningless and I would liked not to have them. There are apps like PlayNow, Smart Connect, Socialife, Sony LIV, Sony Music, Sony Select, Xperia Link. Xperia Privilege. Many of these apps may be useful for people who have more Sony gear at home and it is about all of these interworking together. Most of these are completely useless for me.
  • The speaker on the phone is completely useless. It is on the side of the phone and barely audible. It was a complete surprise for me since I expected sony to atleast have a handle on Audio stuff. The sound quality of
    Sony Xperia Z Speeds Airtel Bangalore
    phone call is terrible. The speakerphone can't be used at all. For it to even be audible, you have to keep the phone vertical with it sides facing towards you. If you intend to do many calls with the phone, invest in a bluetooth or wired headset. The interesting part is, the call voice quality is good with any headset. So it is just a problem with the phone.
  • The data connection itself works fine and the speeds delivered are pretty decent. I tested it with Airtel HSPA network in Bangalore and got the 6MBps upload and 1.7 MBps downloads.
In summary, for a phone that costs close to Rs. 39000/- the phone does not meet expectations. The basic features like call quality and speaker quality is well below expectation. Sony also does not have a good car dock which is surprising given the premium nature of the device.

Saturday, March 23, 2013

Apps for Scanning and OCR

One of the needs that I have faced while working in office is to capture the content drawn on whiteboard and OCR. The best app that I have found that does that is CamScanner. Please scan the QR code on the left to install this app.
This app is the best app to take pictures of document or whiteboards. It take the picture, cleans it up and then adjusts the perspective of the picture as well.
One can take multiple pictures and make a PDF document of the many pictures. There is a basic version available for free and one can also buy a paid version with additional features which includes things like cloud sync and some other stuff.
The app also allows one to share the document over many mediums like email, evernote, drive or any other service that you may have installed that can handle pdf documents.
Once we have taken a picture, the next step sometime is to perform an OCR on the picture.  Here one of the old time favorite application from Google stable, Goggles comes in handy. Google Goggle along with Translate offers services for OCR and translation as well. Give these apps a spin.

Wednesday, September 5, 2012

Google Navigation for India

Just checked, Google has enabled voice navigation for India. I will check it out today and post a detailed review. But this is simply great news.

Tuesday, December 20, 2011

Skype and Google Talk

Skype and Google Talk both support video chat on most of phones with front facing camera. I used it to do video calls over both Wi-Fi and 3G networks. Both of these applications work very well and in any decent 3G connection can provide a pretty usable video call function.

Tuesday, November 15, 2011

Save battery and secure your Android Device

The best combination of applications for your android phone are Lookout and Juice Defender. The biggest pet peeve for most of the android (and even iPhone) phones is that the battery does not really last a day if you are regularly using the phone whole day for emails, google maps and other stuff.
Juice Defender disables data connectivity and re-enables it after certain interval to save battery and can increase the life of the battery by 2-3 times.
Lookout Security app is a much because it acts as a virtual guard and can help you to locate the phone if it is really lost. The problem is that if you are running this app with Juice Defender, then you data is disabled and you can not locate the phone.
This is where a hidden feature in Juice Defender comes really handy. There is a feature to define a password that you can send to your phone and Juice Defender would disable itself.
With the combination of these two applications, you can save battery as well as secure your android device.

Friday, November 11, 2011

Moto Razr Android XT910 -- a review

Finally got the latest Moto Razr Android XT910  from UK. Here are my first impressions. I still believe that apart from Apple and Nokia, Motorola has the best mechanical design of its devices and that tradition continues with Moto Razr. The phone looks sleek, really thin.

The camera definitely is an improvement over Atrix.
The video camera also produces decent quality stuff.

Swype IME is bundled with the phone which is definitely better than the standard IME available with the android OS.

The Blur software in the phone seem to have been toned down but still exists. I actually like some of the stuff provided as part of Blur. For example the Favorite Contacts widget is a great tool for keeping few of the favorite people on the home screen.

The phone has the battery compartment sealed (like iPhone) and SIM and SD cards have to be inserted to the side of the phone. Also the phone only accepts micro SIM cards, so one has to either get a micro SIM card or make one by cutting their SIM cards.

On measuring the performance using Quadrant Standard Edition, the phone returns a benchmark figure of 2608 which is almost twice the figure returned by Nexus One 2.2+.

The phone has Smart Actions application which looks very similar to Locale application that has existed in the Android market for quite some time.

The screen is pretty good, although it has same resolution as Atrix but the physical size is higher, which makes it easier to use but little harder to carry. People with smaller hands may find it difficult to hold in their palms.
Here is the details that Android System Info application returned.

OSBrowser UserAgent : Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; XT910 Build/6.5.1-73_SPU-9) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1
BuildInfosAndroid version : 2.3.5Release Codename : RELAPI LEVEL : 10CPU ABI : armeabi-v7aManufacturer : motorolaBootloader : unknownCPU ABI2 : armeabiHardware : mapphone_cdmaRadio : unknownBoard : spyderBrand : MOTODevice : umts_spyderDisplay : 6.5.1-73_SPU-9Fingerprint : MOTO/XT910_RTGB/umts_spyder:2.3.5/6.5.1-73_SPU-9/1319876225:user/release-keysModel : XT910Product : XT910_RTGBTags : release-keys
BatteryDischarging...Level : 60 %Technology : Li-ionTemperature : 32.0 °C (89.6°F)Voltage : 3892 mV
MemoryDownload Cache Max: 708MB/ Free: 692MBdata Max: 3.74GB/ Free: 3.29GBExternal storage Max: 8.00GB/ Free: 7.99GBTotal RAM: 0.91GBFree RAM: 196MBThreshold RAM: 46.00MB
Low Memory Killer LevelsFOREGROUND_APP:__ 12.00MBVISIBLE_APP:_________ 18.00MBSECONDARY_SERVER: 28.12MBHIDDEN_APP:________ 46.00MBCONTENT_PROVIDER: 68.00MBEMPTY_APP:__________ 82.03MB
CPUProcessor ARMv7 Processor rev 3 (v7l)processor 0BogoMIPS 43581.82Features swp half thumb fastmult vfp edsp thumbee neon vfpv3CPU implementer 0x41CPU architecture 7CPU variant 0x1CPU part 0xc09CPU revision 3Hardware mapphone_CDMARevision 0000Serial 0000000000000000Freqency range: 300.0 -> 1200.0MHzCurrent Frequency: 1200.0MHzFrequency Stats (time):- 300.0 MHz 63.77% (3124603)- 600.0 MHz 7.74% (379481)- 800.0 MHz 7.37% (361167)- 1000.0 MHz 7.91% (387678)- 1200.0 MHz 13.2% (646818)
CameraAntibanding: autoColor Effect: noneExposure Compensation: 0Exposure Compensation Step: 0.1Flash Mode: offFocus Mode: autoFocal Length: 4.6Horizontal View Angle: 62.1Jpeg Quality: 95Jpeg Thumbnail Quality: 60Jpeg Thumbnail Size: 240x320Max Exposure Compensation: 30Max Zoom: 15Min Exposure Compensation: -30Picture Format: JPEGPicture Size: 2448x3264Preview Format: NV21Preview Framerate: 30Preview Size: 480x640Supported Antibanding: - off- auto- 50hz- 60hzSupported Color Effects: - none- negative- solarize- sepia- mono- natural- vivid- colourswap- blackwhite- whiteboard- blackboard- aqua- posterize- red-tint- green-tint- blue-tintSupported Flash Modes: - off- on- auto- torchSupported Focus Modes: - fixed- auto- infinity- macro- continuous- continuous-video- extended- portrait- touch- face-prioritySupported Jpeg Thumbnail Sizes:- 0x0- 96x96- 144x176- 144x352- 384x512- 240x320- 120x200- 120x160Supported Picture Formats: - JPEG- YUY2- NV21- RGB_565Supported Picture Sizes: - 240x320- 480x640- 960x1280- 1200x1600- 1536x2048- 1458x2592- 1936x2592- 1840x3264- 2448x3264Supported Preview Formats: - YUY2- NV21- RGB_565Supported Preview Frame Rates: - 30- 25- 24- 20- 15- 10Supported Preview Sizes: - 96x128- 120x160- 144x176- 160x240- 288x352- 240x320- 480x640- 576x768- 480x720- 576x720- 480x800- 480x864- 720x1280- 1080x1920Supported Scene Modes: - auto- macro- action- portrait- landscape- night-portrait- sunset- steadyphotoSupported White Balance: - auto- daylight- cloudy-daylight- shade- tungsten- fluorescent- incandescent- horizon- face-priority- sunset- twilight- warm-fluorescent- sun- cloudy- flash- night-normalWhite Balance: autoVertical View Angle: 48.2Zoom: 0Zoom Ratios: - 100- 115- 132- 152- 174- 200- 230- 264- 303- 348- 400- 459- 528- 606- 696- 800Smooth Zoom Supported: trueZoom Supported: true
ScreenResolution: 540 x 960Refresh Rate: 68.0X factor for DIP: 1.5Density: 240 dpiPixel per inch X: 258.79245 dpi Y: 256.67368 dpi
OpenGLOpenGL Version supported : 2.0OpenGL Version supported : OpenGL ES-CM 1.1 build : Imagination TechnologiesRenderer : PowerVR SGX 540Extensions : GL_OES_byte_coordinates GL_OES_fixed_point GL_OES_single_precision GL_OES_matrix_get GL_OES_read_format GL_OES_compressed_paletted_texture GL_OES_point_sprite GL_OES_point_size_array GL_OES_matrix_palette GL_OES_draw_texture GL_OES_query_matrix GL_OES_texture_env_crossbar GL_OES_texture_mirrored_repeat GL_OES_texture_cube_map GL_OES_blend_subtract GL_OES_blend_func_separate GL_OES_blend_equation_separate GL_OES_stencil_wrap GL_OES_extended_matrix_palette GL_OES_framebuffer_object GL_OES_rgb8_rgba8 GL_OES_depth24 GL_OES_stencil8 GL_OES_compressed_ETC1_RGB8_texture GL_OES_mapbuffer GL_OES_EGL_image GL_EXT_multi_draw_arrays GL_OES_required_internalformat GL_IMG_read_format GL_IMG_texture_compression_pvrtc GL_IMG_texture_format_BGRA8888 GL_EXT_texture_format_BGRA8888 GL_IMG_texture_stream GL_OES_egl_sync GL_IMG_vertex_array_object
SensorsLIS3DH 3-axis Accelerometer: 0.25 mA by ST MicroAK8975 3-axis Magnetic field sensor: 6.8 mA by Asahi KaseiAK8975 Orientation sensor: 7.05 mA by Asahi KaseiCT405 Proximity sensor: 3.0 mA by TAOSCT405 Light sensor: 0.175 mA by TAOSGravity Sensor: 0.25 mA by Google Inc.Linear Acceleration Sensor: 0.25 mA by Google Inc.Rotation Vector Sensor: 7.05 mA by Google Inc.
JavaPropertiesjava.vendor.url: .java.class.version: 46.0os.version: The Android Projectuser.dir: /user.timezone: nullpath.separator: Linuxos.arch: armv7lline.separator: file.separator: / java.version: 0java.home: /system

Thursday, July 28, 2011

Atrix is finally on gingerbread

Finally motorola has delivered android 2.3.4 aka gingerbread for atrix. Many interesting enhancements are part of this update. Video chat on google talk works great. Full hd video recording is also available.
All in all a great update on a hardware that can deliver a performance to match.

Tuesday, March 15, 2011

Motorola Milestone Software Update FroYo

Finally Motorola has made FroYo upgrade available for some countries. I have a phone that was bought in UK and I could upgrade the software. You can see the 3G hotspot and apps2SD and other features that were part of FroYo.

The software update is not available for OTA but you need to download Motorola Software Update utility from here.

Once you have the software and a Windows machine, you can connect the phone using USB cable and after that it is self explanatory.

Thursday, February 10, 2011

Application Review: Lookout

So many days since I posted something. I got to try this new app called Lookout. Very decent app. It provide functionality related to identifying vulnerabilities in the phone, one can request location of the phone from their portal, backup photos, call records and contact book.

Basic application is free but some of the functionality is premium and you need to pay $29.99 per annum for premium functionality. Premium functionality includes backing up of photos and call records and remote lock and wipe of the device.

If one is keeping lots of confidential data on the device, I would say that the premiums version is worth it otherwise one should anyway install the free version.

Friday, March 26, 2010

AppBrain: Application Review

Here is one application which seriously eliminates the shortcomings of android market. I believe that at some stage either Google should fold in this functionality in their market or just acquire these guys. It really eliminates most of the hassles of the market today.
Every time you upgrade software on your phone, you end up having to reinstall all the apps on your phone because the phone does not remember what softwares were installed on it. This application provides that functionality.
Give the application a try, use the QR code attached with this post. One can use their web portal ( to search and install applications and these are automatically pushed to the mobile phone and installed. In summary, I have found this application to be of great use.

Tuesday, January 12, 2010

Ripping movies to watch on Milestone

Here are the instructions to watch movies by converting them from DVD to a format so that they are optimized for Motorola Milestone. These would also work well for a Droid phone.
  • Install Handbrake Software, make sure to install the CLI
  • Install VLC software, Handbrake will not be able to decrypt DVDs without this software and will give error.
  • I use both of these on a Linux machine but both these software are also available for windows and one can easily figure out how to work these from respective websites. 
Once this setup is done, just insert the DVD and run following command line.
HandBrakeCLI -e x264  -q 20.0 -a 1 -E faac -B 128 -6 dpl2 -R 48 -D 0.0 -f mp4 -X 854 -Y 480 -m -x cabac=0:ref=2:me=umh:bframes=0:subme=6:8x8dct=0:trellis=0 -i -o MovieName.m4v --longest

If the DVD has multiple titles then above command will pull out the longest title. Otherwise one can use --title option for getting specific title. This command scales the movie to correct format for Milestone/Droid.