Comparison: Skyfire and Opera Mini
October 26th, 2009
Ever since I discovered Opera Mini, I had installed it on my first mobile (K300i) and now the latest Opera Mini 5 beta is present on my Nokia E51. Few months ago a new browser came up for S60 3rd Edition Mobiles named Skyfire. The main selling point of this browser was almost full support for javascript and Adobe Flash with near desktop experience; which enabled us to watch YouTube videos on the mobile!
I had been using both browsers side by side for a few months now & came to feel that Opera Mini is a lot better for daily use and Skyfire is better for those one off toughie websites that must work with javascript and other stuff enabled.
Here’s an example: Recently, I started accessing my twitter account through Dabr from Opera Mini. The mobile UI rocks and zoom in and zoom out is instant. It happens in the client side. Opera Mini has an intelligent mix of client side and server side operations, whereas, all operations from Skyfire require an active internet connection. At best, internet access from mobiles through GPRS still remains patchy & hence, Skyfire should have that intelligent mix of operations and where possible, operations should be done at the client rather than server.
Opera desktop’s goodness of Speed Dial has arrived on Opera Mini 5. It’s awesome and saves you tons of clickety-clicks, which are irritating on a mobile. The whole menu system has been completely revamped. UI is smooth and fast (which is a downside with Skyfire)!
The best feature of Opera Mini of all is tabbed browsing. That blows away any other mobile browser on the planet. Being fast and loading heavy pages on separate tabs is a pretty awesome thing. By long pressing on a link, you can open them in new tabs inside Opera Mini. Hence, the Dabr + Opera Mini seems to beat any other twitter competition. Saved pages are really saved pages. They can be accessed even when there’s no connectivity.
Recently we had to book tickets to watch a movie at Mayajaal and Skyfire displayed the website amazingly well. Opera Mini suffered there. Similarly, Opera Mini rocks in opening popup windows (when clicked explicitly), whereas Skyfire fails. All in all, if you are going on a long journey with conservative power, Opera Mini is the way to go. Or if you want near desktop experience on your mobile for all websites, then Skyfire is the way to go.
Skyfire Gripes:
- No tabbed browsing.
- No landscape view of web pages and videos.
- Phone heats up after about 15 minutes of usage. Doesn’t ever happen with Opera Mini.
- Compared to Opera Mini, it is very heavy on battery.
- No option to logout from your Skyfire account. You have to manually delete the “Preferences” file to logout.
- The assumption that an active internet connection is always available.
- Proxy server support and proxy authentication i.e. HTTP code 407. I have been asking this for so long that I’m beginning to feel that this feature won’t come at all.
Opera Mini Gripes:
- No flash support.
- Javascript should be supported better.
- Zoom in to images is dismal. I hope this issue will be corrected when Opera Mini 5 comes out beta.
- This browser also doesn’t have support for proxy servers and proxy authentication.
What are your opinions on these two browsers? What browser are you using on your mobile phone?
Skyfire Review
June 1st, 2009
Skyfire 1.0 is the new kid on the block in the mobile browser war. Its not a kid per se but there are some big boys like Opera Mini and Opera Mobile who don’t give up all too easily. I have been a beta user of it from India since 0.6
and it was fun all this while to keep track of this superb browser. Their main aim is to bring desktop like browsing experience to the mobile browser and they are almost there. So near, yet so far.
Like all other reviews about this browser until now, its safe to tell that it is able to play flash videos pretty well inside the small screen. Here are some notable differences between the earlier betas and this 1.0 version:
- While watching any videos on youtube, my Nokia E51’s rear would just heat up quickly & few minutes down, it would be difficult to hold the phone. This problem has been nearly solved in 1.0. That’s possibly due to power optimization techniques.
- When you scroll very quickly on long web pages, Skyfire usually shows a checkered screen with gray squares (screenshot below), which disappear as and when content appears. Pre 1.0, this checkered screen would take a long time to disappear. With 1.0, this problem has been solved. Same problem used to occur during zoom in/out. Now zoom happens at blazing speed. Neat!

- Its able to handle basic javascript very well. For e.g. its able to display the hover menus that are present on top of my blog. Its also able to show alert boxes.
- Video quality is maintained even during zoom in and zoom out. This was a major drawback in pre 1.0 versions.
- The initial loading and shutdown of the browser would take a long time in pre 1.0 releases. Not so in this current release. This has been drastically improved.
- File downloads happens excellently. Kudos for this. This is a major drawback with the E51’s native browser.
Cancelling default browser events in Javascript
May 23rd, 2009
This one could save you lot of time
In short, the answer is to “return false;”. That’s it. If you want to know more details, read ahead.
Say, you have an awesome page where you want to disable right click and also disable Ctrl+C (copy), Ctrl+S (save page). The process is simple. Just register an event for right click and when the event fires, just return false. Since false is being returned, the browser will cancel the event.
Same goes with keyboard. ‘onkeypress’ event is fired whenever a key is pressed. To reject any key, just capture that event and return false. If you want to do anything special, just do it before returning false. Ctrl+S is interesting. In most web browsers (notably google chrome), it brings up the default Save Dialog. Most web apps have keyboard shortcuts these days & oh! 99% of them don’t return false, only to find the user experience irritating when the save dialog pops up; when something else should occur. Hence, if you wish to customize the functionality of the default browser specific keyboard shortcuts, do the following:
- Create an event handler and capture the event.
- Do something.
- “return false;”
That’s all. Have fun!
Here’s the trick below to open multiple gmail accounts with the same version of firefox.
- Open the Run dialog. In linux, press Alt+F2. On Windows, press WinKey+R.
- In the dialog box, type “firefox -p -no-remote”. This will bring up firefox’s profiles dialog box.
- Click on “Create Profile” and follow the wizard. Lets assume you named the profile as “gmail2“.
- Now close the dialogs and return to desktop.
Now, open the Run dialog again. In the dialog box, type “firefox -p gmail2 -no-remote“.
“-no-remote” option is very important because it creates an isolated session that is different from the currently open firefox windows of other profiles. If -no-remote option is not given, then a new window of the currently running profile or the default profile is opened, where session sharing happens (which we don’t want).
Now, since sessions aren’t shared between different profiles, you can open two accounts and happily have them.
Suggested Improvement for Firefox:
Internet Explorer 8 has this amazing option in the File menu where you can open a completely new session of IE. Sessions are completly isolated and gives lot of relief. Its available at File->New Session. Hope this feature is brought into Firefox as well. Or if this feature is already available as a plugin, please let me know in the comments. Actually speaking, this feature was available in IE since IE 6 (AFAIK). In IE6/7, you can open a completely new session by clicking the IE icon on the desktop.
Bulk Assign Categories to Multiple Posts
October 14th, 2008
Here’s a cool new wordpress plugin that allows you to assign one or more categories to multiple posts in a single shot, with or without preserving existing categories.
This plugin will be very useful when you are migrating to your own wordpress blog, hosted on your domain. The default wordpress functionality is that, you can assign new categories to posts only by editing each post and changing the category assigned to it. So, if you have a large number of posts, then it will be a nightmare.
Enter this plugin.
With this plugin, assigning multiple categories to one or more posts is a breeze. Pop the plugin’s PHP file to your wordpress plugin directory, activate it and click on “Assign Categories” under the Manage menu. The page will show the list of available categories, followed by the available blog posts. You can select the categories, select the required posts and then click on “Assign Categories” at the bottom of the page. Now, all your posts will be assigned the new categories.
Currently, the plugin is in “beta”. The beta will go off in a few days and will contain search functionality also. The plugin has been updated with search functionality. Please download the plugin again.
The plugin is licensed under GPL v2 (the same as wordpress).
Download the plugin, take it for a test drive and let me know.
Dissecting iMobile – Security Analysis of ICICI Mobile Banking App
September 27th, 2008
ICICI Bank’s iMobile website has some of the worst server side validations ever, which is what prompted me to download the mobile app’s JAR file, study it in detail and write this post. According to the website, until the Reserve Bank of India comes out with mobile banking guidelines and approves it, mobile banking is supposed to be halted. Technically, it means that, all existing users shouldn’t be able to use the service what-so-ever and new user signups should be prevented & a notification stating that they should retry later should be shown.
Therefore, in this scenario, I shouldn’t have been able to download the app to my mobile device. The website of ICICI fails in not enforcing this by providing the following ways:
- Existing users who have already installed the app are given an option to ‘Upgrade’ from within the mobile app itself. This opens up a webpage in the phone’s native browser, whose URL is http://mobile.icicibank.com/upgrade?version=null.
- The actual iMobile website has some stupid javascript validation, which is very easy to bypass using modern browsers. Heck, just by browsing the HTML source code of the page, you will be able to easily find the URL for the application JAR files. Put 2 and 2 together and you will be able to download the app.
Which brings me to explain Step 2 in detail:
document.jump1.action="https://infinity.icicibank.co.in/web/apps/"+fileName;. That line pretty much gives away everything. All you have to do is, navigate to the above mentioned URL and append a filename to it for download.What filename do you have to give and How?
Where ICICI Bank failed?
- They should have disabled the link mentioned in #1 above and replaced it with some text that says, “RBI mobile banking guidelines blah blah…”. But some clever users will bookmark the link to the JAR file and try to access the JAR file by bypassing the link itself. When they do that, the web server should return a “404 – Resource Not Found” error. Got it? Implementing this is pretty simple.
- There shouldn’t have been such a lot of useless javascript on the page. Firstly, they should have removed the device selection drop down box. Secondly, they should have replaced this page with an alternative. Thirdly, this mobile banking link should have been removed in the home page itself. Fourthly, they should have validated on the server for JAR file downloads and should have displayed the “404 – Resource Not Found” error page.
- Ok. Leave aside #1 and #2. At least the mobile app should have thrown soft errors when users try to access mobile banking from the JavaME app. Any bank would store all activity data for a certain period of time. So when you access the bank’s service from a mobile device, the server software surely knows about it, which means, the server software should have returned errors to the user instead of allowing the user to do transactions.
- There’s one more bug in the app itself. When you launch the app, it will prompt you to sync the data on the device to its servers for faster access the next time. When you click “OK” to synchronize, it will wait for a few minutes and show a message as, “There is no data to synchronize”. When you proceed further and try to access your info, it will again prompt you to sync the data. That’s frustrating. Either you should sync the data properly or you should access the server every time over a secure channel. As simple as that. That’s not followed too.
That was a long post already
We still have some more to go. Lets take a break.
Back? Ok
Now, lets dissect the actual JAR file and look into the technical details of its implementation.
The Manifest File:
Another important item is, “MIDlet-Name” property in the manifest. This property determines what name the user sees after he installs the app on his mobile. Using the same name, when future upgrades are made available, the app is just replaced in place of the old one, which means, if you modify the “MIDlet-Name” property and install the app again, you will have 2 copies of the same app. THIS SHOULD NEVER BE ALLOWED FOR A HIGHLY CRITICAL FINANCIAL APPLICATION. Isn’t it? As an example, try changing the MIDlet-Name of the Yahoo! Go JAR file and try to install the app again on your mobile. My E51 shows an “Invalid JAR” error message because of MD5 sum checks etc.
Some more Holes:
What should the bank do here?
- Shouldn’t allow the installation of 2 apps of the same JAR with different names. Take this example of the Yahoo! Go JAR file.
- I guess these mobile providers’ socket URLs are used for a one time basis to send verification SMS. If that be the case, they shouldn’t be present in the manifest file for a variety of reasons that I won’t discuss here.
- There’s an interesting property named “WSCDomainName” in the manifest file. I guess it expands to “Web Service Client Domain Name”, though I’m not sure about it. Suggestion: Encrypt the name value pairs.
- Most importantly, sign the application using the Java Signed program. C’mon, users are doing financial transactions and a signed app will increase their confidence of using this application.
Suggestion for Users:
Thats about it !
Of course, this blog post can’t be termed as a full fledged security analysis. But most of what has been ignored by the bank are mere basics. They must have more secure systems in place.
If you liked this article, kindly do me a favour by digging it. Thanks for your time.
Send Free SMS – Web Service
July 17th, 2008
Update: There seems to be some problem when the API is being accessed from my domain. Kindly try hosting the script in your own domains.
Hi friends, if you are in India and if you are developing software prototypes which has to send SMS alerts to various Indian mobile numbers, you needn’t spend a lot to buy SMS credits at the various sites. Over the last weekend, I spent some time hacking up a quick SOAP based web service which you can consume in your programs.
Please note that you need to create an account at www.way2sms.com before proceeding further.
How to Use – Method 1:
Currently the web service is active at http://www.aswinanand.com/sendsms.php. This accepts four parameters.
| Parameter Name | Description |
|---|---|
| uid | This represents the 10 digit phone number with which you have to login at way2sms. Note: This web service may not work if you try logging in with email address. |
| pwd | Your way2sms password |
| phone | One or more phone numbers to which SMS has to be sent. Phone numbers should be separated by semicolon (;). E.g. 9812345678;9933445566 |
| msg | Message that has to be sent. |
The URL – http://www.aswinanand.com/sendsms.php – can be invoked with the parameters as follows:
http://www.aswinanand.com/sendsms.php?uid=9933445566&pwd=password&phone= 9812345678;9933445566&msg=Hello+World
You can also do a HTTP POST to the same URL to send the SMS. Here’s an example:
<form method=”post” action=”http://www.aswinanand.com/sendsms.php“>
<input type=”hidden” name=”uid” value=”9933445566″ />
<input type=”hidden” name=”pwd” value=”password” />
<input type=”hidden” name=”phone” value=”9812345678;9933445566″ />
<input type=”hidden” name=”msg” value=”Hello World” />
<input type=”submit” value=”Send SMS” />
</form>
How to Use – Method 2:
The functionality is also exposed as a SOAP (Simple Object Access Protocol) WSDL (Web Service Description Language). WSDL can be accessed at http://www.aswinanand.com/sendsms.php?wsdl. To know more about how to use this WSDL in Microsoft Visual Studio, check out this article.
To deploy this SMS script on your own server, first download the source code & follow the instructions:
- Let us assume that you wish to run the service at http://www.example.com/sms/sendsms.php. Here, http://www.example.com/ is your domain, “sms” is the folder and “sendsms.php” is the PHP script in that folder.
- Hence, using FTP or SSH, login to your domain hosting space and create a folder named “sms”.
- Extract the source code to the “sms” folder. If you don’t want to expose a SOAP WSDL, feel free to skip to step 6.
- Since the SMS source code supports SOAP, you have to download the ‘nusoap’ library. Then extract the ‘nusoap’ library to the same “sms” folder.
- Once everything is extracted, the folder structure should be:
- example.com
- sms/
- sendsms.php
- htmlparser.inc (optional)
- nusoap/
- class.nusoap_base.php
- class.soap_transport_http.php
- class.wsdlcache.php
- class.soap_fault.php
- class.soap_val.php
- class.xmlschema.php
- class.soap_parser.php
- class.soapclient.php
- class.soap_server.php
- class.wsdl.php
- nusoapmime.php
- nusoap.php
- sms/
- example.com
- Try accessing your web service at http://www.example.com/sms/sendsms.php now.
http://www.example.com/sms/sendsms.php?uid=9933445566&pwd=password&phone= 9812345678;9933445566&msg=Hello+World
or you can also do a HTTP POST as indicated above.
License Information:
The source code is licensed under “Creative Commons Attribution-Noncommercial”. Downloading the file(s) mean that you have agreed license terms.
Download:
Download the PHP source code here.
Other Languages:
Currently this SMS web service is available in the following programming languages:
Misc:
If you liked this web service, please digg it
. Kindly take it for a test drive and let me know if you find any bugs.
RSS Feed Proxy – Finally one data format to parse all feeds
July 12th, 2008
Hey guys! I discovered two feed proxies.
- http://www.netvibes.com/proxy/feedProxy.php?test=1&url=__FEED_URL__
- http://my.live.com/cfw/news.aspx?fetchurl=__FEED_URL__
Replace the __FEED_URL__ with the feed URL of your choice. Of the two feed proxies above, I like Netvibe’s proxy as the best because of the following reasons:
- Feed output is JSON. This means that, netvibes has done all the necessary work to convert feeds of any type (RSS, ATOM, RDF etc.) into JSON.
- If you are writing a script to examine feeds from various sites, you have only one data structure to deal with
- Almost all programming languages support JSON. Refer to www.json.org for JSON libraries available for various programming languages.
- JSON by itself is very lightweight and eliminates most of the overhead of XML, thereby preserving bandwidth.
- A simple program in VB.NET to parse a JSON structure and get the required feed data in a Dictionary datatype is only about 9 lines of code. In Ruby, it will be even lesser. Compare the same with XML output. Even though feed parsers are available, you have to create your own wrapper above everything to get everything to work out properly. Reuse what you already have (DRY Principle). Netvibes has already done the bull work to convert all kinds of feeds into a common format.
- Best of all, no authentication is necessary to access these links :D
Live.com’s feed proxy returns the actual feed output. So, if the feed you are referring to gives RSS output, this proxy returns that. The same happens with ATOM, RDF etc. Keep watching this space. I will update the post with other feed proxy URLs that I encounter. If you go across any, please mention them in the comments section.
NTFS, Gmail Keyboard Shortcuts
April 18th, 2008
Two things today:
Few days ago, I was searching for information on NTFS and found 2 amazing articles from the good old MSJ (Microsoft Systems Journal). The links are below. Do go through them when you find time. Even though the articles are old, they offer a wealth of information.
- Windows NT 5.0 File System – http://www.microsoft.com/msj/1198/ntfs/ntfs.aspx
- NTFS Change Journal – http://www.microsoft.com/msj/0999/journal/journal.aspx
There are lot more articles available. I will post the links as and when I read them. Nice stuff !
As you already know, I have enabled keyboard shortcuts on my gmail account. Gmail actually shows you the list of available shortcuts right inside your mailbox, without us having to visit the keyboard shortcuts page. To access the list of keyboard shortcuts, you need to press “?” key, which is “Shift + /“. You will get the translucent black popup as shown in the below screenshot. You can press any key to close it.
Click the image to see a larger version.
New post on tech blog
February 8th, 2007
After a long time, I have done a post on my tech blog. The post is about “sc.exe”

