<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Waves &#187; techblog</title>
	<atom:link href="http://www.aswinanand.com/category/techblog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.aswinanand.com</link>
	<description></description>
	<lastBuildDate>Thu, 29 Dec 2011 09:39:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
<cloud domain='www.aswinanand.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Buxfer &#8211; Automatic Data Backup</title>
		<link>http://www.aswinanand.com/2011/02/buxfer-automatic-data-backup/</link>
		<comments>http://www.aswinanand.com/2011/02/buxfer-automatic-data-backup/#comments</comments>
		<pubDate>Tue, 15 Feb 2011 15:38:57 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/?p=846</guid>
		<description><![CDATA[A month ago, Buxfer.com went down &#38; took down a month&#8217;s worth of data along with it. Thankfully I had a CSV export of my data before the website went down. After that, I wrote a simple utility script that will automatically do a full CSV export of Buxfer accounts data and email it. At the [...]]]></description>
			<content:encoded><![CDATA[<p>A month ago, <a title="Buxfer.com" href="http://www.buxfer.com/" target="_blank">Buxfer.com</a> went down &amp; took down a month&#8217;s worth of data along with it. Thankfully I had a CSV export of my data before the website went down.</p>
<p>After that, I wrote a simple utility script that will automatically do a full CSV export of Buxfer accounts data and email it. At the start of the script, there are couple of PHP variables that you can use to customize it &#8211; your buxfer id and password, from email address, to email address, email content etc. To automate it completely, use crontab to schedule its execution and rest in peace <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p>I have hosted the code at GitHub. Do check it out and let me know your feedback. Or better yet, fork it and add your bells and whistles.</p>
<p><a title="Git repository of the buxfer backup script" href="https://github.com/aswinanand/Buxfer-backup-script" target="_blank">You can access the GitHub repository here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2011/02/buxfer-automatic-data-backup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Send Instant Message to all your buddies</title>
		<link>http://www.aswinanand.com/2010/08/send-instant-message-to-all-your-buddies/</link>
		<comments>http://www.aswinanand.com/2010/08/send-instant-message-to-all-your-buddies/#comments</comments>
		<pubDate>Tue, 10 Aug 2010 15:01:47 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/?p=797</guid>
		<description><![CDATA[Are you one of those who has this need to ping all your buddies with a message? If so, your search ends here! Here&#8217;s what you need to do: Get Firefox browser. Get greasemonkey addon. Grab my greasemonkey script here. Login to www.meebo.com. That&#8217;s about it. Fill up the textbox and hit send. The message [...]]]></description>
			<content:encoded><![CDATA[<p>Are you one of those who has this need to ping all your buddies with a message? If so, your search ends here! Here&#8217;s what you need to do:</p>
<ol>
<li><a title="Firefox Browser" href="http://www.getfirefox.com/" target="_blank">Get Firefox browser</a>.</li>
<li><a title="Greasemonkey" href="https://addons.mozilla.org/en-US/firefox/addon/748/" target="_blank">Get greasemonkey addon</a>.</li>
<li><a title="Greasemonkey IM script" href="http://www.aswinanand.com/downloads/meebo_all_at_once.user.js" target="_blank">Grab my greasemonkey script here</a>.</li>
<li>Login to <a title="Meebo" href="http://www.meebo.com/" target="_blank">www.meebo.com</a>.</li>
</ol>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2010/08/meebo1.png"><img class="aligncenter size-full wp-image-800" title="Meebo" src="http://www.aswinanand.com/wp-content/uploads/2010/08/meebo1.png" alt="" width="338" height="340" /></a></p>
<p>That&#8217;s about it. Fill up the textbox and hit send. The message will be sent to <strong><em>all</em></strong> your IM buddies.</p>
<p>If you are savvy enough, you can make some customizations to the script.</p>
<ol>
<li> Right click on greasemonkey icon and click on &#8220;Manage User Scripts&#8221;.</li>
<li>Select &#8220;meebo all at once&#8221; and click &#8220;Edit&#8221; at the bottom of the window.<a href="http://www.aswinanand.com/wp-content/uploads/2010/08/meebo2.png"><img class="aligncenter size-full wp-image-801" title="Edit user scripts" src="http://www.aswinanand.com/wp-content/uploads/2010/08/meebo2.png" alt="" width="487" height="427" /></a></li>
<li>The script will be opened for editing in your favourite text editor.</li>
<li>Follow the instructions and make changes to the block marked in the source code. <a href="http://www.aswinanand.com/wp-content/uploads/2010/08/meebo3.png"><img class="aligncenter size-full wp-image-802" title="Customization options" src="http://www.aswinanand.com/wp-content/uploads/2010/08/meebo3.png" alt="" width="534" height="490" /></a></li>
<li>Then reload www.meebo.com.</li>
</ol>
<p>That&#8217;s pretty much it. I quickly hacked it up in couple of hours so there might be some loose ends. If so, please let me know and I will fix it at the earliest. If you wish to make improvements yourself, you can <a title="Repository" href="http://gist.github.com/517314" target="_blank">fork the script at the Github repository</a>.</p>
<p><strong>Summary</strong></p>
<ol>
<li><a href="http://www.aswinanand.com/downloads/meebo_all_at_once.user.js">Link to the script</a>.</li>
<li><a title="Repository" href="http://gist.github.com/517314" target="_blank">Link to the repository</a>.</li>
</ol>
<p>If you are even more savvy, you might want to check the Meebo analysis below.</p>
<p><span id="more-797"></span></p>
<p><strong><span style="color: #ff6600;">Analysis of Meebo</span></strong></p>
<p>Meebo makes heavy use of the <a title="Comet Programming" href="http://en.wikipedia.org/wiki/Comet_(programming)" target="_blank">Comet programming paradigm</a>. Once the user is logged on, the server returns a session key and a client ID. After that, it makes a series of &#8220;event&#8221; AJAX requests. Each of those requests receive a JSON response. E.g. <strong>{&#8220;rev&#8221;:3,&#8221;events&#8221;:[{&#8220;type&#8221;:&#8221;buddy::online&#8221;,&#8221;data&#8221;:{&#8220;user&#8221;:&#8221;aswinanand@meebo.org\/Meebo&#8221;</strong>, &#8230; The <strong>rev</strong> parameter that is sent with each request is incremented by one for every request from a given client ID. The list of buddies for a given provider &#8211; Yahoo! Messenger, Google Talk etc. &#8211; are received in parts over multiple long lived HTTP requests.</p>
<p>Once the list of buddies are received, it constructs a few javascript global objects based on the JSON response. Such objects include:</p>
<ol>
<li><strong>gBuddyList</strong> &#8211; instance of meebo.BuddyList</li>
<li><strong>gNetworkMgr</strong> &#8211; instance of meebo.NetworkMgr. This is the core network manager that handles AJAX requests and their asynchronous responses.</li>
<li><strong>gIMGateway</strong> &#8211; contains the client ID required to make the AJAX request</li>
</ol>
<p>&#8230; and many more.</p>
<p>I found out these global objects by enumerating the properties of <strong>window</strong> javascript object. There&#8217;s a property called <strong>m_buddies</strong> in <strong>gBuddyList</strong> that contains the set of buddies and their related metadata such as whether the user is online or not, their status message, network (yahoo, gtalk etc.) and other such details. It also has a length property and a nice bunch of helper methods such as <strong>getByIndex</strong>, <strong>getBuddyById</strong> etc.</p>
<p><strong><span style="color: #ff6600;">AJAX Requests</span></strong></p>
<p>When a message is sent to a buddy, an AJAX request is fired to <strong>http://www.meebo.com/mcmd/send</strong> with a list of parameters that include: receiver, sender, protocol, clientID, sessionKey, mt, msg. In the usual scenarios, we need to reconstruct the AJAX request. But when we have <strong>gNetworkMgr</strong> global object, this stuff becames a breeze. Hence, a simple called to <strong>gNetworkMgr.doRequest(&#8220;send&#8221;, args)</strong> fired the request with the needed parameters. Here, <strong>args</strong> is a custom constructed javascript object that contains the request parameters. The first parameter &#8220;send&#8221; is used by gNetworkMgr to construct the actual URL at which the AJAX request has to be sent.</p>
<p>Currently, the script doesn&#8217;t monitor the AJAX response. But it could be done if required. Do try out the greasemonkey script and give feedback. Hope you enjoyed the lecture <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2010/08/send-instant-message-to-all-your-buddies/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cameras must be WiFi enabled</title>
		<link>http://www.aswinanand.com/2010/04/cameras-must-be-wifi-enabled/</link>
		<comments>http://www.aswinanand.com/2010/04/cameras-must-be-wifi-enabled/#comments</comments>
		<pubDate>Thu, 29 Apr 2010 18:41:19 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/?p=722</guid>
		<description><![CDATA[Few months ago, I purchased a Panasonic Lumix DMC FZ-28 digital camera. It&#8217;s a bridge camera and has plenty of features. I&#8217;m totally in love with the camera. However, cameras such as this, Canon Powershot SX 20 IS etc. should have a few more features along with wifi enabled so that we amateurs are able [...]]]></description>
			<content:encoded><![CDATA[<p>Few months ago, I purchased a Panasonic Lumix DMC FZ-28 digital camera. It&#8217;s a bridge camera and has plenty of features. I&#8217;m totally in love with the camera. However, cameras such as this, Canon Powershot SX 20 IS etc. should have a few more features along with wifi enabled so that we amateurs are able to do a lot more easily <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong><span style="color: #ff6600;">Here&#8217;s a typical work flow for my trek photos:</span></strong></p>
<p>Go on a trek <span style="color: #ff6600;"><strong>&#8211;&gt;</strong></span> Click nice pictures <strong><span style="color: #ff6600;">&#8211;&gt;</span></strong> Transfer the photos to the computer <strong><span style="color: #ff6600;">&#8211;&gt;</span></strong> Make minor modifications such as contrast, brightness, saturation, cropping etc. <strong><span style="color: #ff6600;">&#8211;&gt;</span></strong> Remove duplicates <strong><span style="color: #ff6600;">&#8211;&gt;</span></strong> Add signature, copyright notice <strong><span style="color: #ff6600;">&#8211;&gt;</span></strong> Generate a low resolution version of the final photographs <strong><span style="color: #ff6600;">&#8211;&gt;</span></strong> Upload them to Flickr/Picasa/Facebook to share them with the world.</p>
<p>With these powerful cameras, much of this can be done on the camera itself. For e.g. my camera already allows adding signatures to pictures through a text stamp feature. It also allows notes to be added to pictures. The pictures can be cropped and frame freezes can be obtained from HD videos shot with this camera. While cropping, a tiny popup containing contrast, saturation and brightness could be displayed. Pictures can be marked with a star so that they can be cycled through while viewing the clicks.</p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2010/04/fz28.jpg"><img class="aligncenter size-full wp-image-726" title="Panasonic Lumix DMC FZ-28" src="http://www.aswinanand.com/wp-content/uploads/2010/04/fz28.jpg" alt="Panasonic Lumix DMC FZ-28" width="300" height="225" /></a></p>
<p><strong><span style="color: #ff6600;">What I want now</span></strong></p>
<p>Each camera should have a nice file system API, network API and GUI API. Using these APIs, third party applications would be able to fetch photos from the memory card and do the required modifications. More detailed descriptions would be added to the photos and they would be preserved as part of the picture&#8217;s EXIF data.</p>
<p>The memory card should be formatted in a special way so that it can hold third party applications in a separate shell. This shell would be accessible through an iTunes like desktop software from which third party applications for the camera can be installed or removed. Once an application is installed, it should be displayed in an Application settings screen on the camera, from where the application can be activated or deactivated.</p>
<p>Once the necessary modifications are done, using the network APIs and WiFi, the application should upload the &#8220;starred&#8221; photos to flickr, picasa, facebook or any other service the application supports. All these and other services support HTTP APIs. Instead of the camera themselves supporting various services, it could just provide nice APIs and let the developers do the magic. While uploading each picture, a very high resolution picture should be scaled down for the web dynamically.</p>
<p><strong><span style="color: #ff6600;">Geo Tagging</span></strong></p>
<p>Oh wait! I want to geo-tag the photos as well. So, while clicking each photo, they should be geo-tagged in the background so that the actual speed of clicking a photo isn&#8217;t affected. Manually geo-tagging photos are a huge pain in the wrong places.</p>
<p>So, there you go! Click pictures <strong><span style="color: #ff6600;">&#8211;&gt;</span></strong> Geo tag them in background <strong><span style="color: #ff6600;">&#8211;&gt;</span></strong> crop them &amp; make other minor modifications <span style="color: #ff6600;">&#8211;&gt;</span> add text stamp for copyright notice <strong><span style="color: #ff6600;">&#8211;&gt;</span></strong> Generate low resolution versions dynamically (cache them if required) and upload them!</p>
<p>Since most of the work is done by software in digital cameras, I think the stuff mentioned above is very much feasible. At least geo-tagging should be brought in as a feature.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2010/04/cameras-must-be-wifi-enabled/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Facebook Funnel called the &#8216;Like&#8217; button</title>
		<link>http://www.aswinanand.com/2010/04/the-facebook-funnel-called-the-like-button/</link>
		<comments>http://www.aswinanand.com/2010/04/the-facebook-funnel-called-the-like-button/#comments</comments>
		<pubDate>Mon, 26 Apr 2010 03:20:33 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/?p=710</guid>
		<description><![CDATA[Note: I haven&#8217;t yet published some trekking posts since Feb. But this couldn&#8217;t wait. So they&#8217;ll be up soon. By now, everyone must have been aware of the recent Facebook announcement of the universal Like button. As probably talked about all over the web, this one button is like giving too much of power to [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Note:</strong> I haven&#8217;t yet published some <a title="Trekking and Touring" href="http://www.aswinanand.com/category/tour/" target="_blank">trekking posts</a> since Feb. But this couldn&#8217;t wait. So they&#8217;ll be up soon.</p>
<p>By now, everyone must have been aware of the recent Facebook announcement of the <a title="Facebook's Universal Like Button" href="http://developers.facebook.com/docs/reference/plugins/like" target="_blank">universal Like button</a>. As probably talked about all over the web, this one button is like giving too much of power to one company. By now the Like button should have appeared on thousands of websites already. Famous press blogs running wordpress should have had the Like button along their standard &#8216;share this&#8217; toolbar. Facebook&#8217;s 400 million+ user base is a huge audience to showcase your content to &amp; everyone wants a piece of the pie!</p>
<p>However, this like button reopens an old problem in a new way&#8230; User Privacy. Few years ago, when doubleclick.net installed tracking cookies for sending customized advertisements, it created a huge uproar. Similar stuff happened when Google History came about. But now, Facebook uses a clever way to track users that, you cannot even opt out if you don&#8217;t like the process. It makes of full use of the way how the web and ultimately, <a title="Hypertext Transfer Protocol" href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol" target="_blank">HTTP(S)</a> works.</p>
<p>I&#8217;m not even talking about the case where you are logged in to Facebook and click on a &#8216;Like&#8217; button on a website. That&#8217;s voluntary. You like a piece of content and you spread it to your friends and fans on Facebook. I&#8217;m talking about the case where you just visit a certain website containing the Like button and that data will be harvested by Facebook.</p>
<p><strong>Like this on Facebook to understand how it works:</strong> <iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.aswinanand.com%2F2010%2F04%2Fthe-facebook-funnel-called-the-like-button&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;font=verdana&amp;colorscheme=light" scrolling="no" frameborder="0" allowTransparency="true" style="border:none; overflow:hidden; width:450px; height:px"></iframe></p>
<p><strong><span style="color: #ff6600;">How it works</span></strong></p>
<p>Let us take it step by step:</p>
<ol>
<li>Clear cookies on your browser. If you are using Firefox or Chrome, press Ctrl+Shift+Del.</li>
<li>Visit www.facebook.com</li>
<li>Login to Facebook.</li>
<li>Visit other websites to be tracked. So simple isn&#8217;t it?</li>
</ol>
<p>When you first visit Facebook.com, it sets a cookie called &#8220;datr&#8221;, whose expiry is two years from now. So, if you visit Facebook.com today and never clear your browser&#8217;s cookies, you will be tracked for the first two years with &#8220;datr&#8221;. When that period expires, it will be replaced with a new cookie <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  and you will continue to be tracked. After you login to Facebook, it sets some more cookies on your browser along with a cookie called &#8220;xs&#8221; which is the session cookie for your Facebook session. If you remove this cookie, you will be redirected to Facebook&#8217;s login page. After login, &#8220;datr&#8221; and &#8220;xs&#8221; cookies will be refreshed.</p>
<p style="text-align: center;"><img class="size-full wp-image-715 aligncenter" title="Sunrise" src="http://www.aswinanand.com/wp-content/uploads/2010/04/sunrise.jpg" alt="Sunrise" width="250" height="188" /></p>
<p>When you embed the Like button on your website, it loads in an iframe in the Facebook.com domain. When a request is sent to any website by clicking on a link or by typing it on the browser&#8217;s address bar, the browser sends all the active (non-expired) cookies to the domain. So, when the Like button loads on a website, it makes a request to http://www.facebook.com/plugins/like.php. Along with this request, it will send the &#8220;datr&#8221; and &#8220;xs&#8221; cookies. It will also set the HTTP &#8216;Referer&#8217; header to the originating website. For example, if you click on a Facebook.com link from <a title="My website" href="http://www.aswinanand.com/">my website</a>, the Referer header will be set as &#8216;www.aswinanand.com&#8217;. This is used by other websites to determine where the user is coming from.</p>
<p>Now, when the &#8216;Like&#8217; button loads on a website inside Facebook&#8217;s iframe, the Referer header will be set to your website&#8217;s page, &#8220;datr&#8221; cookie will be sent and if you have already logged in to Facebook, &#8220;xs&#8221; cookie will also be sent. So, just by loading Facebook&#8217;s Like button, Facebook will know what websites you had visited. Since the expiry for &#8220;datr&#8221; is set to two years, it will associate your Facebook logins to this cookie&#8230; which means, even if you logout of Facebook, it will know who the user is. Moreover, when you are logged in and move from one place to another, Facebook will know during what times of the day you are active and during what times you are inactive. When you are active, it will know from where your web browsing occurs and by being able to find location from IP address, they will know where exactly you are moving. Don&#8217;t worry, all this data will also be combined with your Facebook mobile usage and a final stat will be arrived at! That&#8217;s scary because it could reveal so much about a user &amp; all privacy is gone with the wind.</p>
<p><strong><span style="color: #ff6600;">Targeted Advertisements</span></strong></p>
<p>This kind of tracking is something the user cannot opt out because sending cookies and setting HTTP Referer headers are part of the protocol. That means, you are tracked by default. Without your knowledge, your online behaviour and all the websites you visit (assuming they have added the Like button) after logging into Facebook are tracked by Facebook. This is useful for a lot of cases. Say you visit IMDB after logging in to Facebook. Each of the movie pages will have the like button. So Facebook will know which movies you are visiting. When you click on the &#8216;Like&#8217; button for a certain movie, it gets to know your tastes and offer more movies along similar lines when you visit IMDB next. This same technique could also be used by spammers to <a title="Deceiving Users with the Facebook Like Button" href="http://arnab.org/blog/deceiving-users-facebook-button" target="_blank">trick you in to &#8216;liking&#8217; some random link of their choice</a>.</p>
<p>Like this, through the iframe based &#8216;Like&#8217; button, Facebook funnels all required data to create a customized and scary experience.</p>
<p><strong><span style="color: #ff6600;">Why not Google?</span></strong></p>
<p>Ideally speaking, this was something that Google should have done a year or two ago. Most people I know are logged in to Google all their day and web browsing happens simultaneously. Just think of what would would happen if Google had done this. With their already powerful search tracking user behaviour and statistics, adsense would use this data to send specific advertisements to users. Google analytics is already deployed on tons and tons of websites all over the web. This one &#8216;GLike&#8217; button could also be used to track statistics so easily. Now all of that happens on Facebook. Facebook is luring developers and users alike with its huge user base <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Combining a utility like &#8216;Like&#8217; button with Google&#8217;s powerful anti-spam, anti-phishing and other anti-* mechanisms, it would indeed become a formidable force on the web.</p>
<p><strong><span style="color: #ff6600;">What if you don&#8217;t want to be tracked?</span></strong></p>
<p>If you don&#8217;t want to be tracked without your explicit approval, I would suggest browsing Facebook in Incognito browsing mode in Chrome, <a title="Create multiple=" href="http://www.aswinanand.com/2009/05/open-2-gmail-accounts-with-firefox/" target="_blank">multiple profiles in Firefox</a> or InPrivate browsing mode in Internet Explorer. All these modes will clear cookies and other history data when you close the browser window. So you might not be tracked as efficiently as possible.</p>
<p>I hope Facebook addresses this privacy concern. Facebook, please don&#8217;t be evil <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  with our data. I wouldn&#8217;t be surprised if Facebook launches a general purpose search engine in the next couple of years!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2010/04/the-facebook-funnel-called-the-like-button/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Comparison: Skyfire and Opera Mini</title>
		<link>http://www.aswinanand.com/2009/10/comparison-skyfire-and-opera-mini/</link>
		<comments>http://www.aswinanand.com/2009/10/comparison-skyfire-and-opera-mini/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 15:07:54 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[mobility]]></category>
		<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/?p=531</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since I discovered <a title="Opera Mini" href="http://mini.opera.com/" target="_blank">Opera Mini</a>, I had installed it on my first mobile (<a title="Sony Ericsson K300i" href="http://www.aswinanand.com/2006/05/a-new-mobile/">K300i</a>) and now the latest<a title="Opera Mini 5 beta" href="http://www.opera.com/mini/next/" target="_blank"> Opera Mini 5 beta</a> is present on my <a title="Nokia E51 Review" href="http://www.aswinanand.com/2008/01/on-a-brand-new-kick-ass-nokia-e51/">Nokia E51</a>. Few months ago a new browser came up for S60 3rd Edition Mobiles named <a title="Skyfire" href="http://www.skyfire.com/" target="_blank">Skyfire</a>. 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!</p>
<p>I had been using both browsers side by side for a few months now &amp; 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.</p>
<p>Here&#8217;s an example: Recently, I started accessing my twitter account through <a title="Dabr" href="http://dabr.co.uk/" target="_blank">Dabr</a> 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 &amp; hence, Skyfire should have that intelligent mix of operations and where possible, operations should be done at the client rather than server.</p>
<p>Opera desktop&#8217;s goodness of Speed Dial has arrived on Opera Mini 5. It&#8217;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)!</p>
<p>The best feature of Opera Mini of all is <em><strong>tabbed browsing</strong></em>. 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&#8217;s no connectivity.</p>
<p>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.</p>
<p><span style="color: #ff6600;"><strong>Skyfire Gripes:</strong></span></p>
<ol>
<li>No tabbed browsing.</li>
<li>No landscape view of web pages and videos.</li>
<li>Phone heats up after about 15 minutes of usage. Doesn&#8217;t ever happen with Opera Mini.</li>
<li>Compared to Opera Mini, it is very heavy on battery.</li>
<li>No option to logout from your Skyfire account. You have to manually delete the &#8220;Preferences&#8221; file to logout.</li>
<li>The assumption that an active internet connection is always available.</li>
<li>Proxy server support and proxy authentication i.e. HTTP code 407. I have been asking this for so long that I&#8217;m beginning to feel that this feature won&#8217;t come at all.</li>
</ol>
<p><span style="color: #ff6600;"><strong>Opera Mini Gripes:</strong></span></p>
<ol>
<li>No flash support.</li>
<li>Javascript should be supported better.</li>
<li>Zoom in to images is dismal. I hope this issue will be corrected when Opera Mini 5 comes out beta.</li>
<li>This browser also doesn&#8217;t have support for proxy servers and proxy authentication.</li>
</ol>
<p>What are your opinions on these two browsers? What browser are you using on your mobile phone?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2009/10/comparison-skyfire-and-opera-mini/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Skyfire Review</title>
		<link>http://www.aswinanand.com/2009/06/skyfire-review/</link>
		<comments>http://www.aswinanand.com/2009/06/skyfire-review/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 14:47:59 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[firefox 2.0]]></category>
		<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/?p=387</guid>
		<description><![CDATA[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&#8217;t give up all too easily. I have been a beta user of it from India since 0.6 and it was fun [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Skyfire" href="http://www.skyfire.com/" target="_blank">Skyfire 1.0</a> is the new kid on the block in the <a title="Skyfire Launches 1.0" href="http://www.skyfire.com/blog/2009/05/27/skyfire-launches-10/" target="_blank">mobile browser</a> war. Its not a kid per se but there are some big boys like Opera Mini and Opera Mobile who don&#8217;t give up all too easily. I have been a beta user of it from India since 0.6 <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  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.</p>
<p>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:</p>
<ol>
<li>While watching any videos on youtube, my <a title="Nokia E51" href="http://www.aswinanand.com/2008/01/on-a-brand-new-kick-ass-nokia-e51/" target="_blank">Nokia E51</a>&#8216;s rear would just heat up quickly &amp; few minutes down, it would be difficult to hold the phone. This problem has been nearly solved in 1.0. That&#8217;s possibly due to power optimization techniques.</li>
<li>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!</li>
<li><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0023.jpg"><img class="alignnone size-full wp-image-391" title="The checkered placeholder" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0023.jpg" alt="The checkered placeholder" width="240" height="320" /></a></li>
<li>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.</li>
<li>Video quality is maintained even during zoom in and zoom out. This was a major drawback in pre 1.0 versions.</li>
<li>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.</li>
<li>File downloads happens excellently. Kudos for this. This is a major drawback with the E51&#8242;s native browser.</li>
</ol>
<p><span id="more-387"></span></p>
<p><strong>Testing Skyfire with Zoho Writer</strong></p>
<p>However, of all the above, the one feature that Skyfire prides itself in is the use of full blown AJAX apps. <a title="Zoho Writer" href="http://writer.zoho.com/" target="_blank">Zoho Writer</a> is an AJAX heavy web application, typically used for word processing on the browser. Since I wanted to test out how well Skyfire performs with respect to Zoho Writer, I fired up http://writer.zoho.com/. The initial login page came pretty quickly.</p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0025.jpg"><img class="alignnone size-full wp-image-392" title="Zoho Writer Homepage" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0025.jpg" alt="Zoho Writer Homepage" width="240" height="320" /></a> <a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0027.jpg"><img class="alignnone size-full wp-image-394" title="Login Dialog, zoomed in" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0027.jpg" alt="Login Dialog, zoomed in" width="240" height="320" /></a></p>
<p>Login was quick and Zoho Writer&#8217;s interface loaded up beautifully &#8211; as seen in the desktop version. That was a pleasant surprise!</p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0028.jpg"><img class="alignnone size-full wp-image-395" title="My Docs View" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0028.jpg" alt="My Docs View" width="240" height="320" /></a> <a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0029.jpg"><img class="alignnone size-full wp-image-396" title="Shared Docs View" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0029.jpg" alt="Shared Docs View" width="240" height="320" /></a></p>
<p>I quickly scrolled down and clicked on &#8220;Shared Docs&#8221; on the left panel. It slid into view by moving towards the top. Then I clicked on &#8220;My Docs&#8221; again &amp; the shared docs panel scrolled down and away from view. That was another surprise!</p>
<p>Along each document in &#8220;My Docs&#8221;, clicking on the &#8220;*&#8221; icon brought up the context menu for that document as in the desktop version. Since the context menu was overlapping on the editor, editor took preference to get focus rather than the menu. Then I clicked on the editor &amp; in a second, it sprung into action, giving me an editable text area where I can input the document&#8217;s contents. I finished typing some stuff and clicked on the &#8220;save&#8221; icon. Here&#8217;s another surprise. Writer&#8217;s modal save dialog showed up. I clicked on save and immediately the &#8220;My Docs&#8221; panel also got refreshed as on the desktop. Neat!</p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0031.jpg"><img class="alignnone size-full wp-image-398" title="Editor" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0031.jpg" alt="Editor" width="240" height="320" /></a> <a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0033.jpg"><img class="alignnone size-full wp-image-399" title="Editor - After text has been typed" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0033.jpg" alt="Editor - After text has been typed" width="240" height="320" /></a></p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0034.jpg"><img class="alignnone size-full wp-image-400" title="Save Dialog" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0034.jpg" alt="Save Dialog" width="240" height="320" /></a> <a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0036.jpg"><img class="alignnone size-full wp-image-402" title="Updated My Docs view on save" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0036.jpg" alt="Updated My Docs view on save" width="240" height="320" /></a></p>
<p>Then I clicked on the &#8220;New&#8221; icon on left top corner. It opened a new document tab as in the desktop version <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0040.jpg"><img class="alignnone size-full wp-image-405" title="Multiple Documents - Tabbed View" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0040.jpg" alt="Multiple Documents - Tabbed View" width="240" height="320" /></a> <a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0041.jpg"><img class="alignnone size-full wp-image-406" title="The Javascript Alert box" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0041.jpg" alt="The Javascript Alert box" width="240" height="320" /></a></p>
<p>Apart from all this AJAXified beauty, there were some problems too:</p>
<ol>
<li>I couldn&#8217;t switch between documents.</li>
<li>I couldn&#8217;t switch between the menus on the toolbar nor could I see the drop down.</li>
<li>Deleting documents didn&#8217;t happen as expected. I had to go to desktop browser to delete the selected documents.</li>
</ol>
<p>All in all, if you are on the move and if you are using Skyfire, you can use Zoho Writer to create simple documents. You could also use <a title="Zoho Mobile" href="http://mobile.zoho.com/" target="_blank">Zoho Mobile</a> to create text documents. But using a full fledged desktop browser version blows you away. I wonder how collaboration works. May be in upcoming versions of Skyfire, you would be able to live collaborate with your colleagues from the mobile phone on the move (when they are on the desktop version). I think this possibility is not far off.</p>
<p><strong>Testing Skyfire with Sathyam Cinemas</strong></p>
<p>Few months ago, <a title="Sathyam Cinemas" href="http://thecinema.in" target="_blank">Sathyam Cinemas</a> moved their website from flash to an AJAXified version. Then the world rejoiced because despite Skyfire&#8217;s claim of running flash on the browser, you still couldn&#8217;t give text inputs that were present inside the flash movies. But now that the site is fully HTML/CSS/JS, it loaded perfectly as in the desktop version.</p>
<p>I was able to flawlessly select the movie I wanted, selected a date on the right side, picked a show and then clicked on &#8220;Book Now&#8221;. I then gave my username/password and then followed the usual routine of picking up seat, snacks and then clicked on &#8220;Pay&#8221; button. It took me to Citibank&#8217;s payment gateway and I roared away to bliss. This is pretty cool I should say. I didn&#8217;t face any problem with this website on Skyfire &amp; all stuff just rolled along. Skyfire is here to stay.</p>
<p>Check out the screenshots. Thanks to the awesome <a title="S60 Screenshot" href="http://www.antonypranata.com/screenshot" target="_blank">S60 screenshot software</a> by <a title="Antony Pranata" href="http://www.antonypranata.com/" target="_blank">Antony Pranata</a>!</p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0047.jpg"><img class="alignnone size-full wp-image-410" title="Tamil Movie List" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0047.jpg" alt="Tamil Movie List" width="240" height="320" /></a> <a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0049.jpg"><img class="alignnone size-full wp-image-412" title="Pick a show!" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0049.jpg" alt="Pick a show!" width="240" height="320" /></a></p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0048.jpg"><img class="alignnone size-full wp-image-411" title="Finalized Booking View" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0048.jpg" alt="Finalized Booking View" width="240" height="320" /></a> <a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0050.jpg"><img class="alignnone size-full wp-image-413" title="Login :-)" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0050.jpg" alt="Login :-)" width="240" height="320" /></a></p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0051.jpg"><img class="alignnone size-full wp-image-414" title="Select Seats" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0051.jpg" alt="Select Seats" width="240" height="320" /></a> <a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0053.jpg"><img class="alignnone size-full wp-image-416" title="Payment Selection" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0053.jpg" alt="Payment Selection" width="240" height="320" /></a></p>
<p><a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0054.jpg"><img class="alignnone size-full wp-image-417" title="Citibank Payment Gateway" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0054.jpg" alt="Citibank Payment Gateway" width="240" height="320" /></a> <a href="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0056.jpg"><img class="alignnone size-full wp-image-419" title="Credit Card Details" src="http://www.aswinanand.com/wp-content/uploads/2009/06/screenshot0056.jpg" alt="Credit Card Details" width="240" height="320" /></a></p>
<p><strong>User Agent</strong></p>
<p>An interesting thing with Skyfire is that it uses Mozilla Firefox 2.0&#8242;s user agent when a request is sent. This is to prevent web servers from identifying Skyfire as a mobile browser so that they will send full content instead of mobile content. I think Skyfire runs chromeless firefox browser instances on its servers, which send requests on user&#8217;s behalf. Moreover once a website sends its HTML response, the to-be-rendered UI is compressed as a bitmap and sent to the client. Along this way, the compressed UI&#8217;s coordinates would be mapped to the uncompressed one on the server, with remapping performed during every zoom in or zoom out. So, if any action is performed on the client, the same operation would be performed on skyfire&#8217;s servers (on chromeless firefox processes) along the mapped coordinates. Then may be a new bitmap is again generated and sent to the client again after the server finishes processing javascript and AJAX if any.This is probably one of the ways in which the stuff is done. Guess its time Skyfire moved on to FF3.</p>
<p>I wonder how HTTPS connections are handled. That&#8217;s because I haven&#8217;t seen any dialog popup when accessing websites in HTTPS mode. Not sure what exactly happens. Makes me to be doubly safe with credit cards and email logins.</p>
<p><strong>Battery Usage</strong></p>
<p>Though there had been substantial power optimizations, Skyfire still drinks battery like water; a little less slowly though when compared to earlier versions. When you are done browsing for about 30-40 minutes, the power charge would have gone down by a point or two. I think this has to be improved drastically. Opera Mini is pretty awesome on battery.</p>
<p><strong>Some Gripes</strong></p>
<p>No software is perfect &amp; any software for that matter evolves over a period of time. So, here are my share of gripes. Hope they are addressed in upcoming versions:</p>
<ol>
<li>Proxy authentication support. Firefox has it, IE has it &amp; so does any self respecting desktop browser. Its high time mobile browsers started offering proxy support with authentication.</li>
<li>Speed optimization on GPRS/Edge. GPRS and Edge speeds are pathetic. Even on such speeds, Opera Mini functions very well. But Skyfire doesn&#8217;t.</li>
<li>Skyfire should have more keyboard shortcuts. Opera mini has an awesome bunch of keyboard shortcuts.</li>
<li>Power consumption. This may take some time to address. But I believe it carries lot of importance.</li>
<li>No landscape mode. This should be there too. Landscape mode makes watching videos a pleasure.</li>
<li>Save and open web pages from the phone.</li>
</ol>
<p>For me proxy authentication support is a must have thing in any modern web browser. Hope it is brought on soon!</p>
<p>How was your experience with Skyfire 1.0? Do share your experience in the comments. Thanks for making it this far <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2009/06/skyfire-review/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Cancelling default browser events in Javascript</title>
		<link>http://www.aswinanand.com/2009/05/cancelling-default-browser-events-in-javascript/</link>
		<comments>http://www.aswinanand.com/2009/05/cancelling-default-browser-events-in-javascript/#comments</comments>
		<pubDate>Sat, 23 May 2009 03:21:30 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/?p=380</guid>
		<description><![CDATA[This one could save you lot of time In short, the answer is to &#8220;return false;&#8221;. That&#8217;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 [...]]]></description>
			<content:encoded><![CDATA[<p>This one could save you lot of time <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  In short, the answer is to &#8220;return false;&#8221;. That&#8217;s it. If you want to know more details, read ahead.</p>
<p>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.</p>
<p>Same goes with keyboard. &#8216;onkeypress&#8217; 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 &amp; oh! 99% of them don&#8217;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:</p>
<ol>
<li>Create an event handler and capture the event.</li>
<li>Do something.</li>
<li>&#8220;return false;&#8221;</li>
</ol>
<p>That&#8217;s all. Have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2009/05/cancelling-default-browser-events-in-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How To: Open 2 Gmail accounts with the same Firefox Version</title>
		<link>http://www.aswinanand.com/2009/05/open-2-gmail-accounts-with-firefox/</link>
		<comments>http://www.aswinanand.com/2009/05/open-2-gmail-accounts-with-firefox/#comments</comments>
		<pubDate>Mon, 04 May 2009 06:33:34 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[How-To]]></category>
		<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/?p=369</guid>
		<description><![CDATA[Here&#8217;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 &#8220;firefox -p -no-remote&#8221;. This will bring up firefox&#8217;s profiles dialog box. Click on &#8220;Create Profile&#8221; and follow the wizard. Lets assume you named [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s the trick below to open multiple gmail accounts with the same version of firefox.</p>
<ol>
<li>Open the Run dialog. In linux, press Alt+F2. On Windows, press WinKey+R.</li>
<li>In the dialog box, type &#8220;firefox -p -no-remote&#8221;. This will bring up firefox&#8217;s profiles dialog box.</li>
<li>Click on &#8220;Create Profile&#8221; and follow the wizard. Lets assume you named the profile as &#8220;<span style="color: #ff6600;"><em><strong>gmail2</strong></em></span>&#8220;.</li>
<li>Now close the dialogs and return to desktop.</li>
</ol>
<p>Now, open the Run dialog again. In the dialog box, type &#8220;<span style="color: #ff6600;"><em><strong>firefox -p gmail2 -no-remote</strong></em></span>&#8220;.</p>
<p>&#8220;-no-remote&#8221; 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&#8217;t want).</p>
<p>Now, since sessions aren&#8217;t shared between different profiles, you can open two accounts and happily have them.</p>
<p><strong>Suggested Improvement for Firefox:</strong></p>
<p>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-&gt;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.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2009/05/open-2-gmail-accounts-with-firefox/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Bulk Assign Categories to Multiple Posts</title>
		<link>http://www.aswinanand.com/2008/10/bulk-assign-categories-to-multiple-posts/</link>
		<comments>http://www.aswinanand.com/2008/10/bulk-assign-categories-to-multiple-posts/#comments</comments>
		<pubDate>Tue, 14 Oct 2008 18:03:21 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/blog/?p=219</guid>
		<description><![CDATA[Here&#8217;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 [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a cool new wordpress plugin that allows you to <strong><em>assign one or more categories to multiple posts in a single shot, with or without preserving existing categories</em></strong>.</p>
<p>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.</p>
<p>Enter this plugin.</p>
<p>With this plugin, assigning multiple categories to one or more posts is a breeze. Pop the plugin&#8217;s PHP file to your wordpress plugin directory, activate it and click on &#8220;Assign Categories&#8221; 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 &#8220;Assign Categories&#8221; at the bottom of the page. Now, all your posts will be assigned the new categories. </p>
<p>Currently, the plugin is in &#8220;beta&#8221;. The beta will go off in a few days <span style="text-decoration: line-through;">and will contain search functionality also</span>. The plugin has been updated with search functionality. Please download the plugin again.</p>
<p>The plugin is licensed under GPL v2 (the same as wordpress).</p>
<p><a title="Assign Categories Plugin" href="http://www.aswinanand.com/downloads/assign_categories.zip">Download the plugin</a>, take it for a test drive and let me know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2008/10/bulk-assign-categories-to-multiple-posts/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Dissecting iMobile &#8211; Security Analysis of ICICI Mobile Banking App</title>
		<link>http://www.aswinanand.com/2008/09/imobile-security-analysis/</link>
		<comments>http://www.aswinanand.com/2008/09/imobile-security-analysis/#comments</comments>
		<pubDate>Sat, 27 Sep 2008 15:06:59 +0000</pubDate>
		<dc:creator>Aswin Anand</dc:creator>
				<category><![CDATA[mobile]]></category>
		<category><![CDATA[mobility]]></category>
		<category><![CDATA[techblog]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://www.aswinanand.com/blog/?p=209</guid>
		<description><![CDATA[ICICI Bank&#8217;s iMobile website has some of the worst server side validations ever, which is what prompted me to download the mobile app&#8217;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 [...]]]></description>
			<content:encoded><![CDATA[<p>ICICI Bank&#8217;s iMobile website has some of the worst <a title="Server Side Validation" href="http://www.aswinanand.com/blog/2008/01/server-side-validation-importance/">server side validations</a> ever, which is what prompted me to download the mobile app&#8217;s JAR file, study it in detail and write this post. According to the website, until the Reserve Bank of India comes out with <a title="Mobile Banking Guidelines" href="http://www.rbi.org.in/scripts/BS_PressReleaseDisplay.aspx?prid=19124" target="_blank">mobile banking guidelines</a> and approves it, mobile banking is supposed to be halted. Technically, it means that, all existing users shouldn&#8217;t be able to use the service what-so-ever and new user signups should be prevented &amp; a notification stating that they should retry later should be shown.</p>
<p>Therefore, in this scenario, I shouldn&#8217;t have been able to download the app to my mobile device. The website of ICICI fails in <strong>not enforcing</strong> this by providing the following ways:</p>
<ol>
<li>Existing users who have already installed the app are given an option to &#8216;Upgrade&#8217; from within the mobile app itself. This opens up a webpage in the phone&#8217;s native browser, whose URL is <a title="ICICI Bank Mobile App" href="http://mobile.icicibank.com/upgrade?version=null" target="_blank">http://mobile.icicibank.com/upgrade?version=null</a>.</li>
<li>The <a title="iMobile website" href="https://infinity.icicibank.co.in/web/appDownload.html" target="_blank">actual iMobile website</a> 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.</li>
</ol>
<p><strong>Which brings me to explain Step 2 in detail:</strong></p>
<div>On any browser, go to View-&gt;Source. This will display the source code of the rendered HTML page. Notice the first &lt;script&gt; tag. It contains many functions &amp; the most important functions to us are &#8220;submitForm&#8221; and &#8220;displayOption&#8221;. The line of interest in submitForm method is <code style="font-size: 8pt;">document.jump1.action="https://infinity.icicibank.co.in/web/apps/"+fileName;</code>. 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.</div>
<p><strong>What filename do you have to give and How?</strong></p>
<div>That&#8217;s where our displayOption function is very useful. That function contains a set of simple If-Else conditional statements, which have the respective filenames. For e.g. if you want to download &#8220;M20P1520ALL1.jar&#8221;, then just append it to the URL &amp; access it using the address bar. Therefore, the URL becomes https://infinity.icicibank.co.in/web/apps/M20P1520ALL1.jar <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Being a JAR file, most browsers will display a &#8220;Save As&#8221; dialog box. Now, just download the file and transfer it to your mobile. The application is fairly straight forward.</div>
<p><strong>Where ICICI Bank failed?</strong></p>
<div>
<ol>
<li>They should have disabled the link mentioned in #1 above and replaced it with some text that says, &#8220;RBI mobile banking guidelines blah blah&#8230;&#8221;. 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 &#8220;404 &#8211; Resource Not Found&#8221; error. Got it? Implementing this is pretty simple.</li>
<li>There shouldn&#8217;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 &#8220;404 &#8211; Resource Not Found&#8221; error page.</li>
<li>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&#8217;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.</li>
<li>There&#8217;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 &#8220;OK&#8221; to synchronize, it will wait for a few minutes and show a message as, &#8220;There is no data to synchronize&#8221;. When you proceed further and try to access your info, it will again prompt you to sync the data. That&#8217;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&#8217;s not followed too.</li>
</ol>
<div>For me, all these things imply only thing. ICICI wants the existing users to continue using the app, thereby disobeying RBI&#8217;s orders or they are having some really bad programmers who don&#8217;t know the stuff they are doing. At a time when people fear about Google tracking their internet usage, this is MY/YOUR FINANCIAL INFORMATION, which is at risk Right?</div>
<p>That was a long post already <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  We still have some more to go. Lets take a break.</p>
<p><img src="http://farm2.static.flickr.com/1349/830113325_8c929bfb9f_m.jpg" alt="Tea Break" width="240" height="240" /> <a title="Image Credits" href="http://www.flickr.com/photos/xerones/830113325/" target="_blank">Image Credits</a></p>
<p>Back? Ok <img src='http://www.aswinanand.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Now, lets dissect the actual JAR file and look into the technical details of its implementation.</p>
<p><strong>The Manifest File:</strong></p>
<div>Rename the .JAR extension to .ZIP extension and extract it to your favourite folder. Open the &#8220;META-INF&#8221; folder and open the &#8220;MANIFEST.MF&#8221; file in a text editor. As you will note, it contains lots of very valuable information, especially the socket URLs of various mobile service providers. User agent is also very interesting. When sending HTTP requests through the application, it uses that property for setting the &#8220;user-agent&#8221; HTTP header. They also have debug strings enabled, which means by snoping around using a good file manager for your mobile, you will be able to get technical errors! thereby, letting us know how the app works itself, what requests it sends, its behaviour etc.</div>
<p>Another important item is, &#8220;MIDlet-Name&#8221; 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 &#8220;MIDlet-Name&#8221; 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&#8217;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 &#8220;Invalid JAR&#8221; error message because of MD5 sum checks etc.</p>
<p><strong>Some more Holes:</strong></p>
<div>Now, move back to the folder where the JAR file has been extracted. It contains a bunch of .class files. Pass it through a decompiler. You will get &#8220;perfect&#8221; java source code files. The code looks obfuscated. But its not obfuscated enough. Anybody will be able to make good sense from the source code. All the URLs, all the used strings and everything else will be clearly visible. By using the app on your mobile side-by-side, you will be easily able to go through the source code. All in all, I wouldn&#8217;t use this app anymore until the security measures are tighter.</div>
<p><strong>What should the bank do here?</strong></p>
<div>
<ol>
<li>Shouldn&#8217;t allow the installation of 2 apps of the same JAR with different names. Take this example of the Yahoo! Go JAR file.</li>
<li>I guess these mobile providers&#8217; socket URLs are used for a one time basis to send verification SMS. If that be the case, they shouldn&#8217;t be present in the manifest file for a variety of reasons that I won&#8217;t discuss here.</li>
<li>There&#8217;s an interesting property named &#8220;WSCDomainName&#8221; in the manifest file. I guess it expands to &#8220;Web Service Client Domain Name&#8221;, though I&#8217;m not sure about it. Suggestion: Encrypt the name value pairs.</li>
<li><strong>Most importantly, sign the application using the Java Signed program</strong>. C&#8217;mon, users are doing financial transactions and a signed app will increase their confidence of using this application.</li>
</ol>
<p><strong>Suggestion for Users:</strong></p>
<div>Users should install these kinds of apps on their mobile&#8217;s inbuilt memory, instead of the memory card. That is, when you connect your phone to the PC in thumb drive mode, all the RMS file stores for the mobile app are clearly visible. There are many decoders available on the internet that can read content from the RMS file stores. When you store this app on your mobile&#8217;s inbuilt memory, you can&#8217;t read those stores directly and there are a number of checks in place, that prevent reading it.</div>
<p><strong>Thats about it !</strong></p>
<p>Of course, this blog post can&#8217;t be termed as a full fledged security analysis. But most of what has been ignored by the bank are mere basics. They <strong><em>must</em></strong> have more secure systems in place.</p>
</div>
<p>If you liked this article, kindly do me a favour by <a title="Digg this!" href="http://digg.com/security/Security_Analysis_of_ICICI_Mobile_Banking_Application" target="_blank">digging it</a>. Thanks for your time.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.aswinanand.com/2008/09/imobile-security-analysis/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

