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")
                    .type(MultipartBuilder.FORM)
                    .addFormDataPart("file", filename,          

            RequestBody.create(MediaType.parse("image/png"), imageByteArray))
                    .build();
            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.
    @Override
    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.
    @Override
    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.

Storage
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.
  • Booking.com -- 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 http://www.fatsecret.com
  • 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 cleartrip.com
  • 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 dictionary.com
  • 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

CamScanner
Goggle
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.
Translate
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 expansys.com 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 1.7.17.4958Vendor : 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.
Featuresandroid.hardware.wifiandroid.hardware.location.networkandroid.hardware.telephonyandroid.hardware.locationandroid.hardware.touchscreen.multitouchandroid.hardware.sensor.compassandroid.hardware.cameraandroid.hardware.touchscreen.multitouch.distinctandroid.hardware.bluetoothandroid.hardware.sensor.proximityandroid.hardware.sensor.lightandroid.hardware.microphoneandroid.hardware.location.gpsandroid.hardware.camera.autofocusandroid.hardware.telephony.gsmandroid.hardware.telephony.cdmaandroid.hardware.camera.frontandroid.software.live_wallpaperandroid.hardware.sensor.accelerometerandroid.hardware.touchscreenandroid.hardware.camera.flashglEsVers=2.0
JavaPropertiesjava.vendor.url: http://www.android.com/java.class.path: .java.class.version: 46.0os.version: 2.6.35.7-ge439ab5java.vendor: The Android Projectuser.dir: /user.timezone: nullpath.separator: :os.name: Linuxos.arch: armv7lline.separator: file.separator: /user.name: 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 (http://www.appbrain.com) 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.

Wednesday, December 16, 2009

Application Review: App to QR

qrcode
Another small and useful app in the android market. This application can give the searchable URL for any application installed on your phone or generate a QR Code that you can use to share via the camera with another friend. I have found it extremely useful. Use the QR Code on the right to go to this application.

Application Review : Ringdroid

qrcodeHere is an application that is available on android market for quite some time. I just never tried it primarily because my ADP1 just ran out of space for installing additional application. The application is called Ringdroid. The application can read any MP3 stored on your phone or you can record any sound and then it allows you to define the boundaries of what you want to set as ring tone.

Works pretty well and I found it useful. Use the QR Code on the right to jump to this application in the market.

Tuesday, December 15, 2009

Facebook App for Android

Finally after long time, a Facebook app for Android is in market. Since the benchmark app for Facebook on mobile devices seems to be one on iPhone, I thought let me compare how the current Android App stands up against iPhone App. Please note that I do not have a iPhone but a iPod Touch so my comparison is between those two.

Category
Android App
iPhone/iPod Touch
Main Screen
Six main icons, New Feed, Friends, Photos, Take Photo, Profile, Notifications
Nine main icons, News Feed, Friends, Photos, Profile, Inbox, Chat, Requests, Events, photos, Notes
News Feed
New Feed screens look very similar. iPhone has a + button to add comments while Android has long touch. iPhone also has a large Rolodex like menu which essentially maps to facebook menu where you can choose a filter for your feed.
Profile
Profile screen is almost identical in both the apps with tabs for wall, info and photos being on top on Android and on bottom in iPhone. Also relationship status on iPhone is better with the photo of the spouse being shown with the name while Android app just says that "Married". Android app also does not show the IM addresses while iPhone app shows them.
Photos is very similar with iPhone app having an additional album for Profile photos which Android app does not have.
Friends
Friends screen is very similar in both with Facebook app sorted on last name while android app sorted on first name. Also the first character selection on iPhone on the right hand side of screen is pretty useful to directly jump to a person whose name starts with a specific character.
Notifications
Screens are very similar but surprisingly Android app does not allow one to click on a name and go to his profile. Also number of notifications in Android app seems to be much less compared to what is there on iPhone. For example I could not find notifications related to people commenting on my status in Android app while these are there on iPhone client.
Photos
Very similar screens, similar functionality.
Events
Android does not this option at all
iPhone client allow you to have a look at events.
Inbox
Android does not this option at all
iPhone client shows the messages in the Inbox and lets you reply to them.
Chat
Android does not this option at all
You can chat with online friends.
Requests
Android does not this option at all
You can see pending requests and respond to them.
To sum it up, even though Android client is far improved compared to the last version, it still lags too much compared to iPhone client. Many features are really very important omissions. If I had any say in prioritizing these, I would put them in following order.
  1. Chat -- very important, many people are only available for chat on Facebook and can't get them on google talk
  2. Friend requests -- Very important option, since currently the best solution is to click on the email received and go to web browser and then accept/reject the request.
  3. Inbox/Event
  4. Catch up to other features that I have listed in the table above.

Motorola Milestone, Apps that I use

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

  • 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.
  • Bubble -- A surface level testing application
  • Calorie Counter -- A client for weight losers' social network http://www.fatsecret.com
  • Cardio Trainer -- Can record your running sessions along with a google map
  • Compass -- A regular direction compass, has analog and digital settings. Pretty useful
  • Documents to Go -- Office compatible document reader and editing capability
  • Facebook for Android -- What would be life without facebook
  • Finance -- Client for Google Finance
  • Fring -- IM client for many systems, supports skype
  • Goggles -- Nifty app that can decipher things based on their pictures, Just point the camera and it would tell you what it is.
  • 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.
  • Seesmic -- A twitter client
  • Shazam -- Can decipher song details by listening to it.
  • ShopSavvy -- Retail app, not very useful for India but apparently very popular in Japan
  • SMS Backup -- Backups all your SMS messages to your gmail account under a specified Label.
  • Toggle Wifi -- Does what it says, I place it as a shortcut on home screen to control WiFi
  • TouchDown -- Exchange App, I prefer it over what is already on the phone
  • Twidroid -- Client for twitter, I prefer it over seesmic
  • Unit Converter -- Converts pretty much any unit to any other unit
  • Ustream Broadcaster -- Broadcast yourself. Pretty good
  • Voice Recorder -- Record voice
Let me know you any of you people out there use any other app that you find useful. I can try that out.