<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C0QESHwzfSp7ImA9WhRUGEU.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027</id><updated>2012-01-30T05:25:09.285+05:30</updated><category term="Social Media" /><category term="TEDxHitechCity" /><category term="Research" /><category term="Hack" /><category term="Outlook" /><category term="Caption" /><category term="Bug" /><category term="Math" /><category term="Softies 2K3" /><category term="Windows" /><category term="Apple" /><category term="Google Books" /><category term="Translation" /><category term="Movie" /><category term="Train" /><category term="Android GingerBread" /><category term="Code" /><category term="eService" /><category term="Web Development" /><category term="Charity" /><category term="AI" /><category term="TEDxChennai" /><category term="Dell" /><category term="Album" /><category term="Easter egg" /><category term="NexuS" /><category term="Video" /><category term="GMail" /><category term="2008" /><category term="Painting" /><category term="Fail" /><category term="PSG Tech" /><category term="Google+" /><category term="Location Aware" /><category term="Energy" /><category term="Wishes" /><category term="CSS" /><category term="Javascript" /><category term="Pune" /><category term="IPL" /><category term="Problems" /><category term="Design" /><category term="Google Mobile" /><category term="Perl" /><category term="Image Editor" /><category term="Tips" /><category term="Workplace" /><category term="Challenge" /><category term="USB" /><category term="Windows Phone 7" /><category term="iPhone" /><category term="Firefox" /><category term="Android ADK" /><category term="NexusOne" /><category term="Chennai" /><category term="Plug-in" /><category term="Internet Explorer" /><category term="CDN" /><category term="Intel" /><category term="Event" /><category term="Blog" /><category term="Random" /><category term="Innovation" /><category term="Printing" /><category term="Help" /><category term="Google Labs" /><category term="Marriage" /><category term="Microsoft" /><category term="Contest" /><category term="ISB" /><category term="JavaFx" /><category term="Swine Flu" /><category term="Statistics" /><category term="Review" /><category term="SMS Channel" /><category term="Scratchpad" /><category term="Batch Day" /><category term="Puzzle" /><category term="Keyboard" /><category term="Google Search" /><category term="NodeJs" /><category term="VLike" /><category term="Google Short Links" /><category term="Tech Talk" /><category term="Arduino" /><category term="VServices" /><category term="Chrome" /><category term="Language" /><category term="Railways" /><category term="Thumb rules" /><category term="Telecom" /><category term="Grow" /><category term="India" /><category term="Facebook" /><category term="Health" /><category term="Cloud" /><category term="BloggerFiesta" /><category term="Tag" /><category term="Multimedia" /><category term="Google Wave" /><category term="Cloud Computing" /><category term="Android 2.3" /><category term="Chrome OS" /><category term="Office" /><category term="Webinar" /><category term="Google Apps Marketplace" /><category term="Earth Hour" /><category term="Project" /><category term="Rupee" /><category term="Humour" /><category term="Fun" /><category term="Algorithms" /><category term="Google" /><category term="DataMining" /><category term="Canvas" /><category term="Tech Day" /><category term="Features" /><category term="Learning by doing" /><category term="CSS3" /><category term="Tamil" /><category term="Database" /><category term="Web Security" /><category term="Tools" /><category term="TimeZone" /><category term="YSlow" /><category term="Ubuntu" /><category term="Samsung" /><category term="Sports" /><category term="Firefox 3.5" /><category term="TED" /><category term="VOIP" /><category term="Public" /><category term="Personal" /><category term="Google Data API" /><category term="AntiVirus" /><category term="SQL" /><category term="Infrastructure" /><category term="Google Docs" /><category term="Climate Change" /><category term="BarCamp" /><category term="Water" /><category term="Delhi" /><category term="Toon" /><category term="Milestone" /><category term="Flash Game" /><category term="Creativity" /><category term="IM bots" /><category term="Computer" /><category term="Quote" /><category term="TWT" /><category term="Flash" /><category term="Games" /><category term="Applicaion" /><category term="RealTime" /><category term="Champions League" /><category term="Career" /><category term="Privacy" /><category term="Sudoku" /><category term="IRCTC" /><category term="UserScripts" /><category term="Ideas" /><category term="Products" /><category term="D.E. Shaw" /><category term="TEDx" /><category term="Funny" /><category term="HTC" /><category term="Google Reader" /><category term="Gadget" /><category term="myGooglePage" /><category term="New year" /><category term="ChennaiGeeks" /><category term="Birthday" /><category term="Vacation" /><category term="Forward" /><category term="Elections" /><category term="Timeline" /><category term="Chat" /><category term="Bangalore" /><category term="VComment" /><category term="Add-On" /><category term="Learning" /><category term="Labs" /><category term="Google Site" /><category term="Hyderabad" /><category term="HTML" /><category term="100" /><category term="Education" /><category term="Festival" /><category term="Safety" /><category term="Google Maps" /><category term="Usage" /><category term="Analytics" /><category term="Twitter" /><category term="Template" /><category term="Unconference" /><category term="Google Fonts" /><category term="Technology" /><category term="VirualBox" /><category term="2011" /><category term="Family" /><category term="Cricket" /><category term="Reader" /><category term="Friends" /><category term="AJAX" /><category term="Awareness" /><category term="Windows Live" /><category term="Reasoning" /><category term="Programming" /><category term="Froyo" /><category term="Best Practice" /><category term="Advertisement" /><category term="Product development" /><category term="Electronics" /><category term="General" /><category term="Dream" /><category term="Mozilla" /><category term="Android development" /><category term="Conference" /><category term="Weather" /><category term="Diwali" /><category term="Blog action day" /><category term="Chart" /><category term="Google Instant" /><category term="Android" /><category term="Yahoo" /><category term="Application" /><category term="HTML5" /><category term="Windows 7" /><category term="Mobile" /><category term="Infibeam" /><category term="Script" /><category term="Internet" /><category term="Sachin" /><category term="How to" /><category term="Chrome Extension" /><category term="2010" /><category term="YouTube" /><category term="Search" /><category term="Science" /><category term="Java" /><category term="Poverty" /><category term="API" /><category term="Voice Search" /><category term="Google App Engine" /><category term="Daylight Saving Scheme" /><category term="Tool" /><category term="Household" /><category term="Browser" /><category term="Sun" /><category term="Securiy" /><category term="Software Engineer" /><category term="GreaseMonkey" /><category term="Google Blogger" /><category term="Colors" /><category term="Hoax" /><category term="Random Clicks" /><category term="Google Instant Previews" /><category term="Android 3.0" /><category term="Orkut" /><category term="JaJah" /><category term="Tablet" /><category term="US" /><category term="Training" /><category term="Text Editor" /><category term="Google Apps" /><category term="Visitors" /><category term="HoneyComb" /><title>Varun's ScratchPad</title><subtitle type="html">Right place to know about my interests!!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://blog.varunkumar.me/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>343</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/varunkumar/scratchpad" /><feedburner:info uri="varunkumar/scratchpad" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>varunkumar/scratchpad</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;AkcMQ3s8eCp7ImA9WhRXGUo.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-7643301467069941726</id><published>2011-12-27T14:58:00.001+05:30</published><updated>2011-12-27T14:58:02.570+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-27T14:58:02.570+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Firefox" /><title>[How to] Use error console in Native UI for Firefox on Android</title><content type="html">&lt;p align="justify"&gt;Developers use different techniques for debugging their web applications. Though there are lots of &lt;a href="http://blog.varunkumar.me/2011/09/javascript-remote-debugging.html" target="_blank"&gt;new techniques&lt;/a&gt; coming up in this space, one technique which is still widely used is console logging. Every browser (including the mobile browsers) supports this feature in some capacity. I have been using Firefox on my Nexus One and it has an in-built error console which can be enabled from &lt;a href="https://quality.mozilla.org/docs/mobile-firefox/firefox-mobile-enabling-the-error-console/" target="_blank"&gt;about:config&lt;/a&gt;.&amp;#160; However, with the new native UI for Firefox on Android, this option does not seem to be available. Read through this post to find out how you can use error console in the native UI.&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Error Console in Firefox Native UI&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Firefox Native UI writes all the console messages to Android system log which can be read via &lt;a href="http://developer.android.com/guide/developing/tools/logcat.html" target="_blank"&gt;logcat&lt;/a&gt; which comes along with the Android SDK.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Android SDK&lt;/strong&gt;. Download and install the latest Android SDK from &lt;a href="http://developer.android.com/index.html"&gt;here&lt;/a&gt;. This comes up with all the tools needed for development and testing of your application. Once the SDK is installed, go to the location on which the SDK is installed. Run &lt;font size="3" face="Courier New"&gt;‘adb logcat’ - &lt;/font&gt;this will show the complete log from Android system. To&amp;#160; view Firefox specific log messages, do a grep: &lt;font size="3" face="Courier New"&gt;‘adb logcat | grep “Gecko”’. &lt;/font&gt;To view Firefox console messages alone, do a grep: &lt;font size="3" face="Courier New"&gt;‘adb logcat | grep “GeckoConsole”’.&lt;/font&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;If you don't want to install Android SDK, you can use apps like &lt;a href="https://market.android.com/details?id=org.jtb.alogcat&amp;amp;hl=en" target="_blank"&gt;aLogCat&lt;/a&gt; (Android app for viewing the logs). The app provides an option for filtering the logs and also comes with lots of other accessibility options. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-j_eacsN6dQE/TvmPl7xsyCI/AAAAAAAAYv0/1MP3qPwwSlA/s1600-h/Screen%252520shot%2525202011-12-10%252520at%2525205.32.00%252520PM%25255B11%25255D.png" target="_blank"&gt;&lt;img title="Firefox Native UI - Conole logs" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Firefox Native UI - Conole logs" src="http://lh5.ggpht.com/-1MzdmIQxm5w/TvmPnT4OmqI/AAAAAAAAYv8/q1QK17pJopE/Screen%252520shot%2525202011-12-10%252520at%2525205.32.00%252520PM_thumb%25255B9%25255D.png?imgmax=800" width="660" height="137" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img title="Firefox Native UI - Conole logs" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; float: none; margin-left: auto; display: block; border-top-width: 0px; margin-right: auto" alt="Firefox Native UI - Conole logs" src="http://lh6.ggpht.com/-aGV8PiE488k/TvmPoWjnFiI/AAAAAAAAYwE/HJ63N3VqaKw/Screen%252520shot%2525202011-12-10%252520at%2525205.32.33%252520PM%25255B13%25255D.png?imgmax=800" width="605" height="381" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-7643301467069941726?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wkTyDXs1vhHhAuLBLwzLkhofyQw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wkTyDXs1vhHhAuLBLwzLkhofyQw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wkTyDXs1vhHhAuLBLwzLkhofyQw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wkTyDXs1vhHhAuLBLwzLkhofyQw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/fxXTf6TUpS8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/7643301467069941726/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=7643301467069941726" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7643301467069941726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7643301467069941726?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/fxXTf6TUpS8/how-to-use-error-console-in-native-ui.html" title="[How to] Use error console in Native UI for Firefox on Android" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-1MzdmIQxm5w/TvmPnT4OmqI/AAAAAAAAYv8/q1QK17pJopE/s72-c/Screen%252520shot%2525202011-12-10%252520at%2525205.32.00%252520PM_thumb%25255B9%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/12/how-to-use-error-console-in-native-ui.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMASX06fSp7ImA9WhRRE04.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-5125099178421755074</id><published>2011-11-27T01:10:00.001+05:30</published><updated>2011-11-27T01:10:48.315+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-27T01:10:48.315+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NodeJs" /><category scheme="http://www.blogger.com/atom/ns#" term="Hack" /><category scheme="http://www.blogger.com/atom/ns#" term="Arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="Android ADK" /><title>Arduino based game controller</title><content type="html">&lt;p align="justify"&gt;Being the big fan of technology that I am, I always wanted to try out the latest things happening on the technology world. Some of the buzz words being talked about in the technology world are HTML5 and mobile development. After having fun writing games during my college days, I was interested in building a HTML5 based game. Then, I came across &lt;a href="http://arandomurl.com/2010/08/05/html5-helicopter.html" target="_blank"&gt;this&lt;/a&gt; HTML5 based implementation of classic Helicopter game. In the mean time, I was also playing around with Android ADK and &lt;a href="http://blog.varunkumar.me/2011/08/new-toy-in-house-arduino-adk.html" target="_blank"&gt;Arduino boards&lt;/a&gt;. Finally, made up my mind to hack something cool connecting all these technologies – HTML5, mobile and USB accessories. And, here is the result of the experiment - “Arduino based game controller”. In a nutshell, it’s a game controller which can be connected to an Android phone using which we can play HTML5 games on the browser. The heart of the hack was built over a weekend and source code of the same can be found &lt;a href="https://github.com/varunkumar/arduino-game-controller" target="_blank"&gt;here&lt;/a&gt;. Check out the video demo of the hack at the end of this post.&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;strong&gt;What is it?&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Arduino based game controller is a Joystick / game controller which can be connected to an Android phone via USB.&amp;#160; Using the controller, we can&amp;#160; play games on the browser. An android driver app has been built which reads the data from the game controller (using &lt;a href="http://developer.android.com/guide/topics/usb/adk.html" target="_blank"&gt;Android ADK&lt;/a&gt;) and routes it to the browser over &lt;a href="http://en.wikipedia.org/wiki/WebSocket" target="_blank"&gt;web sockets&lt;/a&gt;. The game has been hosted &lt;a href="http://varunkumar.no.de" target="_blank"&gt;here&lt;/a&gt; (The multi-player mode might not work properly as the hosting site does not support web sockets). More detailed information can be found &lt;a href="https://github.com/varunkumar/arduino-game-controller" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-38Iu3B37HRY/TtFAkWehLaI/AAAAAAAAYlc/dGU8_L2w5i8/s1600-h/Screen%252520shot%2525202011-11-27%252520at%25252012.17.24%252520AM%25255B18%25255D.png" target="_blank"&gt;&lt;img title="Arduino Game Controller" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; border-top-width: 0px; margin-right: auto" border="0" alt="Arduino Game Controller" src="http://lh6.ggpht.com/-pbKaWfmFfgo/TtFAllviDsI/AAAAAAAAYlk/vQXb4fx0mVc/Screen%252520shot%2525202011-11-27%252520at%25252012.17.24%252520AM_thumb%25255B16%25255D.png?imgmax=800" width="406" height="500" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The hack consists of three core modules:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;1. Game module&lt;/strong&gt;. HTML5 based Helicopter game originally written by Dale Harvey. The game uses HTML5 canvas for rendering the game elements. I have forked &lt;a href="https://github.com/daleharvey/helicopter" target="_blank"&gt;his code&lt;/a&gt; and have built the networking layer of the game. I have integrated the game with &lt;a href="http://nodejs.org" target="_blank"&gt;Node.js&lt;/a&gt; and &lt;a href="http://socket.io" target="_blank"&gt;Socket.io&lt;/a&gt; to support multi-user mode. In order to facilitate seamless communication between the controller and the game module, web socket technologies have been used. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;2. Joystick / Controller module&lt;/strong&gt;. For this hack, I have used &lt;a href="http://www.arduino.cc/en/Main/ArduinoBoardADK" target="_blank"&gt;Arduino Mega ADK&lt;/a&gt; board and a &lt;a href="http://simplelabs.co.in/content/joystick-shield-fully-assembled" target="_blank"&gt;joystick shield&lt;/a&gt; mounted on top of it. Arduino board has been flashed with the firmware which reads analog data from the controller and sends it to the connected Android device using Android accessory protocol. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;3. Android module&lt;/strong&gt;. An android app for linking the game module and the controller. The app can be installed on any device running Android 2.3.4 (Your device needs to have the USB compatibility library). It reads the data from the controller and forwards it to the browser over web sockets. &lt;/p&gt; &lt;center&gt;&lt;iframe height="315" src="http://www.youtube.com/embed/URPEyz5ee9o" frameborder="0" width="560" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/center&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-r1H35qZnf7U/TtFAoxbfFzI/AAAAAAAAYls/2rqRwrSOcVM/s1600-h/Screen%252520shot%2525202011-11-27%252520at%25252012.07.29%252520AM%25255B15%25255D.png" target="_blank"&gt;&lt;img title="HTML5 Helicopter game" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="HTML5 Helicopter game" src="http://lh5.ggpht.com/-jKSJknfiZHQ/TtFAqLzfEXI/AAAAAAAAYl0/B2jZyK9MMSU/Screen%252520shot%2525202011-11-27%252520at%25252012.07.29%252520AM_thumb%25255B13%25255D.png?imgmax=800" width="660" height="420" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-8qZl0JJ4xZ4/TtFArr8ZZCI/AAAAAAAAYl8/vJZDMuRqdFc/s1600-h/IMG_20111105_214847%25255B14%25255D.jpg" target="_blank"&gt;&lt;img title="Arduino Mega ADK board with Joystick shield" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Arduino Mega ADK board with Joystick shield" src="http://lh6.ggpht.com/-P7ZNUWCWcO4/TtFAss5mvtI/AAAAAAAAYmE/oSFLQGB2EOs/IMG_20111105_214847_thumb%25255B11%25255D.jpg?imgmax=800" width="660" height="500" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-Fbi8z_SENe8/TtFAt-b1N7I/AAAAAAAAYmM/ONDQu2uJfgw/s1600-h/ScreenShot%25255B15%25255D.png" target="_blank"&gt;&lt;img title="Android driver app" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="Android driver app" src="http://lh5.ggpht.com/-f8O4WJAdN90/TtFAvaFuK0I/AAAAAAAAYmU/LlHf1O0Bz4o/ScreenShot_thumb%25255B13%25255D.png?imgmax=800" width="500" height="308" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How to contribute?&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The source code is available &lt;a href="https://github.com/varunkumar/arduino-game-controller" target="_blank"&gt;here&lt;/a&gt; under MIT licence. I have added enough inline documentations all around the code. Please send any bugs, feedback, complaints, patches about the hack to me at &lt;a href="mailto:varunkumar.n@gmail.com"&gt;varunkumar.n@gmail.com&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-5125099178421755074?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3xlD9GKIJvV6vXt7OUHv4nSVh-M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3xlD9GKIJvV6vXt7OUHv4nSVh-M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3xlD9GKIJvV6vXt7OUHv4nSVh-M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3xlD9GKIJvV6vXt7OUHv4nSVh-M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/3TUt4D9ufdY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/5125099178421755074/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=5125099178421755074" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/5125099178421755074?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/5125099178421755074?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/3TUt4D9ufdY/arduino-based-game-controller.html" title="Arduino based game controller" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-pbKaWfmFfgo/TtFAllviDsI/AAAAAAAAYlk/vQXb4fx0mVc/s72-c/Screen%252520shot%2525202011-11-27%252520at%25252012.17.24%252520AM_thumb%25255B16%25255D.png?imgmax=800" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/11/arduino-based-game-controller.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AAR347cCp7ImA9WhdbGUQ.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-3104538567022114086</id><published>2011-10-19T10:19:00.001+05:30</published><updated>2011-10-19T10:19:06.008+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-19T10:19:06.008+05:30</app:edited><title>Android 4.0 Ice Cream Sandwich Screenshots</title><content type="html">&lt;p align="justify"&gt;Google and Samsung announced their latest smart phone &lt;a href="http://google.com/nexus" target="_blank"&gt;Galaxy Nexus&lt;/a&gt; earlier today. It has awesome hardware capabilities and the offerings from Android 4.0 are quite exciting. Check out the official blog post &lt;a href="http://googlemobile.blogspot.com/2011/10/unwrapping-ice-cream-sandwich-on-galaxy.html" target="_blank"&gt;here&lt;/a&gt;. Android 4.0 SDK was also released today and you can download it from &lt;a href="http://android-developers.blogspot.com/2011/10/android-40-platform-and-updated-sdk.html" target="_blank"&gt;here&lt;/a&gt;. I downloaded the SDK and played around with the emulator. Emulator seems to be faster than that of HoneyComb but still you will find some slowness compared to previous versions. &lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="center"&gt;&lt;strong&gt;Note: Hover over each screenshot to know more about it. Click on a screenshot to enlarge it.&lt;/strong&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-omwkm555bjU/Tp5V3mfLs6I/AAAAAAAAYW0/QlekneviOPo/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525208.53.22%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Installation" border="0" alt="Android 4.0 SDK - Installation" src="http://lh5.ggpht.com/-ViVBJ3r--XQ/Tp5V4rqc7WI/AAAAAAAAYW8/DdtBnIK8OeM/Screen%252520shot%2525202011-10-19%252520at%2525208.53.22%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="644" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-IX0-LB5Nx6c/Tp5V5bApOuI/AAAAAAAAYXE/fFXJcxzkHYw/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525208.54.44%252520AM%25255B16%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Installation" border="0" alt="Android 4.0 SDK - Installation" src="http://lh3.ggpht.com/-6YrOBTMxPYQ/Tp5V6XkLxfI/AAAAAAAAYXM/JD9EKLBngNc/Screen%252520shot%2525202011-10-19%252520at%2525208.54.44%252520AM_thumb%25255B14%25255D.png?imgmax=800" width="644" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-Q1Vd4sAurJE/Tp5V658wrmI/AAAAAAAAYXU/ZG5apMmsMZ8/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.05.41%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Emulator with Ice Cream Sandwich virtual device" border="0" alt="Android 4.0 SDK - Emulator with Ice Cream Sandwich virtual device" src="http://lh6.ggpht.com/-0fYsNLD0Fow/Tp5V7hh1FaI/AAAAAAAAYXc/3EtgaMIOcdE/Screen%252520shot%2525202011-10-19%252520at%2525209.05.41%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="644" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-OT4pSwbxiOA/Tp5V80dvH3I/AAAAAAAAYXk/9kGjeeIh2z0/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.12.34%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich home screen" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich home screen" src="http://lh4.ggpht.com/-ZCvOWN2Bt5I/Tp5V9yKmkfI/AAAAAAAAYXs/2wTf8JcmcdQ/Screen%252520shot%2525202011-10-19%252520at%2525209.12.34%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-T5pXygfaqzQ/Tp5V_0tEmvI/AAAAAAAAYX0/OsFENTQe5-U/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.12.56%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich lock screen" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich lock screen" src="http://lh4.ggpht.com/-d29A6VAs-BU/Tp5WA5Y-NmI/AAAAAAAAYX8/5ncNE1zWzCk/Screen%252520shot%2525202011-10-19%252520at%2525209.12.56%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-HXv-2mr-Deo/Tp5WCDQEoDI/AAAAAAAAYYE/H2KDaNDLF0Q/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.13.14%252520AM%25255B10%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Apps screen" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Apps screen" src="http://lh3.ggpht.com/-U-8tEW7zkHQ/Tp5WDND4u6I/AAAAAAAAYYM/Zft432fAJFw/Screen%252520shot%2525202011-10-19%252520at%2525209.13.14%252520AM_thumb%25255B8%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-UjJSi17dV68/Tp5WD_aEMwI/AAAAAAAAYYU/Y2qZJMqgK5s/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.13.55%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Widgets screen" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Widgets screen" src="http://lh4.ggpht.com/-gjjLQ-1xaxw/Tp5WE02iiPI/AAAAAAAAYYc/wmbUUF1CT2w/Screen%252520shot%2525202011-10-19%252520at%2525209.13.55%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-quEEUxUCICw/Tp5WGSjNyHI/AAAAAAAAYYk/3qFdmq_yZJQ/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.14.19%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Improved Phone app" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Improved Phone app" src="http://lh3.ggpht.com/-kpQMhrF0KDM/Tp5WHQej-VI/AAAAAAAAYYs/ag47q9Y3GzU/Screen%252520shot%2525202011-10-19%252520at%2525209.14.19%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-xKIlZRDMg8k/Tp5WInMKpCI/AAAAAAAAYY0/lsiEma3OuZs/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.15.18%252520AM%25255B10%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Improved Browser App" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Improved Browser App" src="http://lh4.ggpht.com/-QsWF3ZIjI2o/Tp5WJSAgBzI/AAAAAAAAYY8/6pcM6iMDos4/Screen%252520shot%2525202011-10-19%252520at%2525209.15.18%252520AM_thumb%25255B8%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-LHllXiPZP1Y/Tp5WKhwEAvI/AAAAAAAAYZE/6WUESdsdvPc/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.15.38%252520AM%25255B11%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Browser Options" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Browser Options" src="http://lh4.ggpht.com/-vscTd3BOHEc/Tp5WLqY_3MI/AAAAAAAAYZM/PnkQkY1HA3Y/Screen%252520shot%2525202011-10-19%252520at%2525209.15.38%252520AM_thumb%25255B9%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-5ahb8hK1D74/Tp5WMl4VDGI/AAAAAAAAYZU/nQXZZVcak2s/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.18.36%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Browser Tabbed browsing" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Browser Tabbed browsing" src="http://lh6.ggpht.com/-wqgV4rNqMaI/Tp5WNkJhJCI/AAAAAAAAYZc/Bg2jhGy_xYc/Screen%252520shot%2525202011-10-19%252520at%2525209.18.36%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-XbPKFFP9mUs/Tp5WOmB8U5I/AAAAAAAAYZk/4wBu3NCmALQ/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.19.02%252520AM%25255B10%25255D.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Browser App" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Browser App" src="http://lh4.ggpht.com/-_a87Wl_0FTU/Tp5WPcLwehI/AAAAAAAAYZs/7ebBeu8zwLc/Screen%252520shot%2525202011-10-19%252520at%2525209.19.02%252520AM_thumb%25255B8%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-rnYbZ2gN7j4/Tp5WROZMBqI/AAAAAAAAYZ0/Xa1P054vK28/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.19.34%252520AM%25255B11%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Improved Copy-Paste options" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Improved Copy-Paste options" src="http://lh4.ggpht.com/-XJ5z0XVVmK0/Tp5WSDGN_1I/AAAAAAAAYZ8/8_yDsCkYf3s/Screen%252520shot%2525202011-10-19%252520at%2525209.19.34%252520AM_thumb%25255B9%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-Q5-ytHAMGm4/Tp5WTGZyCLI/AAAAAAAAYaE/RZaON3ibYMk/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.20.01%252520AM%25255B10%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Settings" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Settings" src="http://lh3.ggpht.com/-ZSCRKuof9PY/Tp5WUJEktiI/AAAAAAAAYaM/KjRRRWImM-w/Screen%252520shot%2525202011-10-19%252520at%2525209.20.01%252520AM_thumb%25255B8%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-BNGU_HOXSpA/Tp5WVKcrF1I/AAAAAAAAYaU/n5p2QS_ImpM/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.20.17%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Data Usage app" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Data Usage app" src="http://lh4.ggpht.com/-Y9Q_F3sRf5U/Tp5WV3Au6YI/AAAAAAAAYac/qSI7Gb6w37U/Screen%252520shot%2525202011-10-19%252520at%2525209.20.17%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-20y9nxE8Sis/Tp5WXMG0DJI/AAAAAAAAYak/nlFtSGbx6rM/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.21.29%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Installed apps" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Installed apps" src="http://lh6.ggpht.com/-ZPxqtovMPTI/Tp5WX_38woI/AAAAAAAAYas/0UxzUNWumYM/Screen%252520shot%2525202011-10-19%252520at%2525209.21.29%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-3VaXYdmGQnA/Tp5WZSHWWwI/AAAAAAAAYa0/zw-jnLKph8U/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.21.51%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Resizing widgets" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Resizing widgets" src="http://lh4.ggpht.com/-2d8MVr890Kg/Tp5WaUXAspI/AAAAAAAAYa8/4QQIky_ZnAI/Screen%252520shot%2525202011-10-19%252520at%2525209.21.51%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-lgsf78dUpq4/Tp5Wbr7394I/AAAAAAAAYbE/8rZABhk4Wf4/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.22.09%252520AM%25255B10%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Resizing widgets" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Resizing widgets" src="http://lh6.ggpht.com/-FqQwcgGOX5U/Tp5Wct2tqdI/AAAAAAAAYbM/dWzwC14QIe0/Screen%252520shot%2525202011-10-19%252520at%2525209.22.09%252520AM_thumb%25255B8%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-vcw7PfXG9tM/Tp5WdtQLSoI/AAAAAAAAYbU/W2UKTyDp8vc/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.22.50%252520AM%25255B11%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich People app. Unfortunately I was not able to connect my Google account." border="0" alt="Android 4.0 SDK - Ice Cream Sandwich People app. Unfortunately I was not able to connect my Google account." src="http://lh4.ggpht.com/-gyUsWieJIe8/Tp5WeYhg-iI/AAAAAAAAYbc/px6Sax7w2Kg/Screen%252520shot%2525202011-10-19%252520at%2525209.22.50%252520AM_thumb%25255B9%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/--1NwTZVe2dw/Tp5Wf3KpHkI/AAAAAAAAYbk/LAh-xjNZZ6k/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.23.10%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich Calendar app" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich Calendar app" src="http://lh4.ggpht.com/-ROWz_ruZEUU/Tp5Wgm5b6XI/AAAAAAAAYbs/_HtRu_CXJ5k/Screen%252520shot%2525202011-10-19%252520at%2525209.23.10%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-a797e1_CjGU/Tp5Wh8KiBOI/AAAAAAAAYb0/L7P1uFzJODU/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.23.44%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Ice Cream Sandwich" border="0" alt="Android 4.0 SDK - Ice Cream Sandwich" src="http://lh5.ggpht.com/-CaNG8I5Psis/Tp5WiyETRoI/AAAAAAAAYb8/N2kpa13smaY/Screen%252520shot%2525202011-10-19%252520at%2525209.23.44%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-ejGVihrFcq4/Tp5WjaiBc0I/AAAAAAAAYcE/czH7iJ1Dp4M/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.25.00%252520AM%25255B11%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - Virtual Devices" border="0" alt="Android 4.0 SDK - Virtual Devices" src="http://lh6.ggpht.com/-t9lYwlqCueA/Tp5WkcP234I/AAAAAAAAYcM/1_GYNho4w54/Screen%252520shot%2525202011-10-19%252520at%2525209.25.00%252520AM_thumb%25255B9%25255D.png?imgmax=800" width="644" height="480" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-Rldk3eMsDCU/Tp5Wl5MfV7I/AAAAAAAAYcU/S-xVVspqvxk/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.29.28%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - IceCream Sandwich" border="0" alt="Android 4.0 SDK - IceCream Sandwich" src="http://lh5.ggpht.com/-bcLZsS8fp70/Tp5WmuvQwZI/AAAAAAAAYcc/b-MCx0N7cTs/Screen%252520shot%2525202011-10-19%252520at%2525209.29.28%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-vsXujC1YPso/Tp5Wny431HI/AAAAAAAAYck/VXUFicfFB6s/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.29.56%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - IceCream Sandwich" border="0" alt="Android 4.0 SDK - IceCream Sandwich" src="http://lh3.ggpht.com/-JzL8Mey89zw/Tp5Woz9Jn8I/AAAAAAAAYcs/xYGcGZ8HyG4/Screen%252520shot%2525202011-10-19%252520at%2525209.29.56%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-FpvsRH5npQM/Tp5WrJ2jFtI/AAAAAAAAYc0/gZI-Xka2u9o/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.30.32%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - IceCream Sandwich Account setup. Unfortunately, this does not work on emulator." border="0" alt="Android 4.0 SDK - IceCream Sandwich Account setup. Unfortunately, this does not work on emulator." src="http://lh6.ggpht.com/-PVVbWIdfb7M/Tp5Wsi19-yI/AAAAAAAAYc8/AIY7CRT-5t4/Screen%252520shot%2525202011-10-19%252520at%2525209.30.32%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-aZTfypLV0ks/Tp5WtrDmwSI/AAAAAAAAYdE/yNAz6f-Muzs/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.30.48%252520AM%25255B10%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - IceCream Sandwich Account setup. Unfortunately, this does not work on emulator." border="0" alt="Android 4.0 SDK - IceCream Sandwich Account setup. Unfortunately, this does not work on emulator." src="http://lh4.ggpht.com/-sm-yxUZRBNI/Tp5WuTBUYYI/AAAAAAAAYdM/x2SfzzhNGWI/Screen%252520shot%2525202011-10-19%252520at%2525209.30.48%252520AM_thumb%25255B8%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-j2f5yND_gCs/Tp5WvZ6rpiI/AAAAAAAAYdU/BFaXrF9Q388/s1600-h/Screen%252520shot%2525202011-10-19%252520at%2525209.34.47%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Android 4.0 SDK - IceCream Sandwich. It rocks!!" border="0" alt="Android 4.0 SDK - IceCream Sandwich. It rocks!!" src="http://lh4.ggpht.com/-8vkoX-B-MTk/Tp5WwOV1anI/AAAAAAAAYdc/QRKfwT1r8BU/Screen%252520shot%2525202011-10-19%252520at%2525209.34.47%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="539" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-3104538567022114086?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vZb4OO4fTUyUq7dXCzS4718Dw30/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vZb4OO4fTUyUq7dXCzS4718Dw30/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vZb4OO4fTUyUq7dXCzS4718Dw30/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vZb4OO4fTUyUq7dXCzS4718Dw30/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/YTu_ykJSCdA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/3104538567022114086/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=3104538567022114086" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3104538567022114086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3104538567022114086?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/YTu_ykJSCdA/android-40-ice-cream-sandwich.html" title="Android 4.0 Ice Cream Sandwich Screenshots" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-ViVBJ3r--XQ/Tp5V4rqc7WI/AAAAAAAAYW8/DdtBnIK8OeM/s72-c/Screen%252520shot%2525202011-10-19%252520at%2525208.53.22%252520AM_thumb%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/10/android-40-ice-cream-sandwich.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMERXk8eip7ImA9WhdbGE8.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-7831202316340411915</id><published>2011-10-17T09:20:00.001+05:30</published><updated>2011-10-17T09:20:04.772+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-17T09:20:04.772+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Development" /><title>Less , the dynamic style sheet language</title><content type="html">&lt;p align="justify"&gt;A style sheet language is one which describes how a document has to be structured and styled. The most widely used style sheet language is &lt;a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets" target="_blank"&gt;CSS&lt;/a&gt; and is mostly used for styling web pages written in HTML. If you have developed even a simple web page, you would have definitely come across CSS and would have used it in some form. CSS plays an important role in the success of modern web applications with rich UI. CSS has gone through &lt;a href="http://en.wikipedia.org/wiki/Cascading_Style_Sheets#Variations" target="_blank"&gt;various iterations&lt;/a&gt; with the latest one being CSS3. However, there are some limitations with CSS. We can’t do dynamic stuffs like interpolating a property based on a variable, re-using a property value across classes, etc. &lt;a href="http://lesscss.org/" target="_blank"&gt;Less&lt;/a&gt; is an extension to CSS with dynamic behaviour such as variables, mixins, operations and functions. We can write complex CSS styles with Less. Do more with Less. &lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Highlights&lt;/strong&gt;:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Variables&lt;/strong&gt;. This is a very useful addition to CSS. In most of our CSS files, we would have some repeating values like color, font-size, etc. With Less, we can define global variables for these values and use them across the classes. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;img title="Less - Variables" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="Less - Variables" src="http://lh3.ggpht.com/-7C4cCNAX8F8/Tpul001QMoI/AAAAAAAAYWU/D-TyGeB9uY0/Screen%252520shot%2525202011-10-17%252520at%2525208.17.49%252520AM%25255B4%25255D.png?imgmax=800" width="750" height="223" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Mixins&lt;/strong&gt;. Mixins allow you to embed all the properties of a class into another class by simply including the class name as one of its properties. It’s just like variables, but for whole classes.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="Less - Mixins" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Less - Mixins" src="http://lh5.ggpht.com/-1ReQxL0xD4Q/Tpul18x2fnI/AAAAAAAAYWc/pWgbkCQRv7c/Screen%252520shot%2525202011-10-17%252520at%2525208.18.08%252520AM%25255B4%25255D.png?imgmax=800" width="751" height="296" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Nested Rules&lt;/strong&gt;. Often, we write some complex selectors which are lengthy and hard to read. With Less, you can simply nest selectors inside other selectors. This will improve the readability and makes inheritance clear.&lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="Less - Nested Rules" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Less - Nested Rules" src="http://lh4.ggpht.com/-E2VMYEXlTak/Tpul2lvWC1I/AAAAAAAAYWk/-ciJO6hgN6E/Screen%252520shot%2525202011-10-17%252520at%2525208.18.24%252520AM%25255B4%25255D.png?imgmax=800" width="750" height="331" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Functions &amp;amp; Operations&lt;/strong&gt;. Sometimes we would need to write a class in proportion to an existing class, for example a class for hover will have properties opposite to that of its base class. With Less operations (add, subtract, multiply and divide) on property values, you can build a complex relationship between properties. &lt;/p&gt;  &lt;p align="center"&gt;&lt;img title="Less - Functions &amp;amp; Operations" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="Less - Functions &amp;amp; Operations" src="http://lh5.ggpht.com/-K3dasftSXvo/Tpul6aqkCiI/AAAAAAAAYWs/Ecdtq-AVJA0/Screen%252520shot%2525202011-10-17%252520at%2525208.18.46%252520AM%25255B4%25255D.png?imgmax=800" width="750" height="331" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How to use Less?&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Less can be used on the client side (on browser) as well as on the server side (using &lt;a href="http://nodejs.org" target="_blank"&gt;Node.js&lt;/a&gt;). &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;On the client side, we need someone to understand Less syntax and converts them to browser understandable CSS. This is done by &lt;a href="http://lesscss.googlecode.com/files/less-1.1.3.min.js" target="_blank"&gt;Less.js&lt;/a&gt; which needs to be included on the client side. Less files are saved with .less extension and can be linked to your page with &lt;font face="Courier New"&gt;rel&lt;/font&gt; attribute set to ‘&lt;font face="Courier New"&gt;stylesheet/less&lt;/font&gt;’. Make sure the style sheet is included before loading Less.js. The only drawback with this approach is that the conversion happens every time the page is loaded. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;On the server side, we can pre-render Less files to CSS and serve the compiled CSS files. This is more efficient than doing it on the client side. You need to have Node.js installed to do this pre-rendering. Check out more info &lt;a href="http://lesscss.org/#-client-side-usage" target="_blank"&gt;here&lt;/a&gt;. If you are on Mac, you can use &lt;a href="http://incident57.com/less/" target="_blank"&gt;this app&lt;/a&gt;.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Browser Support&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Since Less uses basic JavaScript techniques, almost all the browsers support Less - IE 6+, Webkit and Firefox.&lt;/p&gt;  &lt;p align="justify"&gt;I have been using Less for quite sometime now and it seems to be very handy. Who else uses this? Twitter uses Less in its UI toolkit &lt;a href="http://twitter.github.com/bootstrap/" target="_blank"&gt;Bootstrap&lt;/a&gt;. Try it out yourself. Do more with Less. The source for Less is available &lt;a href="https://github.com/cloudhead/less.js" target="_blank"&gt;here&lt;/a&gt; under Apache License. Know more about it &lt;a href="http://lesscss.org/#docs" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-7831202316340411915?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r7wp5wqeDepSoQis38v2ioRXk3A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r7wp5wqeDepSoQis38v2ioRXk3A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r7wp5wqeDepSoQis38v2ioRXk3A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r7wp5wqeDepSoQis38v2ioRXk3A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/0HuQFupicSQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/7831202316340411915/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=7831202316340411915" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7831202316340411915?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7831202316340411915?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/0HuQFupicSQ/less-dynamic-style-sheet-language.html" title="Less , the dynamic style sheet language" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-7C4cCNAX8F8/Tpul001QMoI/AAAAAAAAYWU/D-TyGeB9uY0/s72-c/Screen%252520shot%2525202011-10-17%252520at%2525208.17.49%252520AM%25255B4%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/10/less-dynamic-style-sheet-language.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQGSH8-cCp7ImA9WhdbFE4.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-4569549415477295266</id><published>2011-10-12T22:22:00.001+05:30</published><updated>2011-10-12T22:22:09.158+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T22:22:09.158+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>[How to] Run Android apps on Windows</title><content type="html">&lt;p align="justify"&gt;I have written earlier about &lt;a href="http://blog.varunkumar.me/2010/11/how-to-install-android-market-in-google.html" target="_blank"&gt;installing Android market on the emulator&lt;/a&gt; and running Android apps on it. Here is a much simpler way of running Android apps from your PC. &lt;a href="http://bluestacks.com/" target="_blank"&gt;BlueStacks&lt;/a&gt; is a cool app which lets you run Android apps on your Windows PC. The application is available for free and it supports only Windows as of now. There is also an Android app which facilitates syncing of apps between your smartphone and the PC. &lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Features&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Full screen mode for apps.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Sync apps between Android smartphone and PC using BlueStacks Cloud Connect.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Install up to a maximum of 26 apps. (Unlimited in the case of yet to be released Pro version).&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;img title="BlueStacks" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="BlueStacks" src="http://lh6.ggpht.com/-nQuPx9b7y3k/TpXFpp5eWqI/AAAAAAAAYV0/08ZTm8ng_Og/gadget%25255B14%25255D.png?imgmax=800" width="210" height="189" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;img title="BlueStacks Gadget" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="BlueStacks Gadget" src="http://lh4.ggpht.com/--mwh7XOFUXc/TpXFrFqWxiI/AAAAAAAAYV8/Uo-yUYoQZ_o/apps%25255B14%25255D.png?imgmax=800" width="552" height="374" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-N1Ip5OMC9j4/TpXFsl-iwdI/AAAAAAAAYWE/XEPaXKQsO7A/s1600-h/tom%25255B18%25255D.png"&gt;&lt;img title="BlueStacks - Talking Tom2" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; border-left: 0px; display: block; padding-right: 0px; margin-right: auto" border="0" alt="BlueStacks - Talking Tom2" src="http://lh4.ggpht.com/-2YWSgK0xI60/TpXFt-VvOTI/AAAAAAAAYWM/PPwsUWJbCLQ/tom_thumb%25255B16%25255D.png?imgmax=800" width="552" height="415" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Try it out &lt;a href="http://bluestacks.com/" target="_blank"&gt;here&lt;/a&gt;. Mac version of BlueStacks will be available soon.&lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-4569549415477295266?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LoSFx1xjPC2lDkSjoeJ0CfbyHvo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LoSFx1xjPC2lDkSjoeJ0CfbyHvo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LoSFx1xjPC2lDkSjoeJ0CfbyHvo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LoSFx1xjPC2lDkSjoeJ0CfbyHvo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/fj4NXj7ewFA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/4569549415477295266/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=4569549415477295266" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/4569549415477295266?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/4569549415477295266?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/fj4NXj7ewFA/how-to-run-android-apps-on-windows.html" title="[How to] Run Android apps on Windows" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-nQuPx9b7y3k/TpXFpp5eWqI/AAAAAAAAYV0/08ZTm8ng_Og/s72-c/gadget%25255B14%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/10/how-to-run-android-apps-on-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIMQXo4fSp7ImA9WhdUFEQ.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-4365460284345316523</id><published>2011-10-02T01:19:00.001+05:30</published><updated>2011-10-02T01:19:40.435+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-02T01:19:40.435+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><title>Per-Element FullScreen API</title><content type="html">&lt;p align="justify"&gt;I have been following the developments on Chromium channel and one thing which caught my attention last week is the fullscreen API. As the name suggests, the API supports “&lt;strong&gt;per-element&lt;/strong&gt;” fullscreen on the browser. Traditionally browsers have been supporting fullscreen mode for the entire page but not for the elements on the page. This API will be handy if you want to focus on a particular piece of information on the page. Most of the analytics application can make use of this API to show more detailed information. I have worked on applications which spans across two monitors as it displays huge amount of information. With this API, I can utilize the real estate effectively. Multimedia contents can also be shown on fullscreen. The API, which is based on the &lt;a href="https://wiki.mozilla.org/index.php?title=Gecko:FullScreenAPI" target="_blank"&gt;Mozilla’s proposal&lt;/a&gt;, has two JavaScript methods: &lt;font face="Courier New"&gt;requestFullScreen()&lt;/font&gt; and &lt;font face="Courier New"&gt;cancelFullScreen()&lt;/font&gt;. Check out the demo &lt;a href="http://static.varunkumar.me/api/fullscreen.html" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How do we use it?&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The API includes the following methods to all the elements in the DOM: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;font face="Courier New"&gt;requestFullScreen()&lt;/font&gt;: Requesting the browser to render the current element in fullscreen. On using this method, the keys will be disabled and the element will not receive any keyboard events. This is to protect the users from potential phishing attacks in fullscreen mode.&amp;#160; &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;font face="Courier New"&gt;requestFullScreenWithKeys()&lt;/font&gt;: Same as &lt;font face="Courier New"&gt;requestFullScreen()&lt;/font&gt; but with access to keyboard events. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;font face="Courier New"&gt;cancelFullScreen()&lt;/font&gt;: Use this method to return back to the normal mode. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;These methods have been added to all the elements in the DOM. Apart of this, a new attribute &lt;font face="Courier New"&gt;allowfullscreen&lt;/font&gt; has been added for the iframe element. You can also listen to the event &lt;font face="Courier New"&gt;fullscreenchange&lt;/font&gt; to know the state of the element. Three CSS pseudo elements have also been added: &lt;font face="Courier New"&gt;:full-screen&lt;/font&gt;, &lt;font face="Courier New"&gt;:full-screen-doc&lt;/font&gt; and &lt;font face="Courier New"&gt;:full-screen-root-with-target&lt;/font&gt;. Using these pseudo elements, you can control how you want your elements to appear in fullscreen mode. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Criticism&lt;/strong&gt;:&lt;/p&gt;  &lt;p align="justify"&gt;The proposal received many criticism from the security experts. Some of the concerns are: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Attackers can request fullscreen and pre-empt keyboard focus. Your security credentials could possibly be stolen. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Increased chances for phishing attacks.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;One could open up fullscreen mode without user interaction (which in my opinion is very bad).&amp;#160; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;The aforementioned concerns can be addressed if control is given to the users to allow / deny fullscreen mode. Also, plug-ins should be disabled in the fullscreen mode. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Browser Support&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Safari 5+ (with webkit prefix)&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Chrome 14+ (with webkit prefix). Chrome 14 requires the flag: –enable-fullscreen. It has been enabled by default in Chrome 15 (not yet released at the time of this post)&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Implementation of the API is &lt;a href="https://wiki.mozilla.org/Platform/Features/Full_Screen_APIs" target="_blank"&gt;in progress&lt;/a&gt; for Firefox. It is expected to be available as part of Firefox 10. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Check out &lt;a href="http://static.varunkumar.me/api/fullscreen.html" target="_blank"&gt;this page&lt;/a&gt; for demo. More details can be found &lt;a href="https://wiki.mozilla.org/index.php?title=Gecko:FullScreenAPI" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-4365460284345316523?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zw2n6i-cjDrebKTNgsSHK-62IXo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zw2n6i-cjDrebKTNgsSHK-62IXo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zw2n6i-cjDrebKTNgsSHK-62IXo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zw2n6i-cjDrebKTNgsSHK-62IXo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/_FPqWo_Mx5o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/4365460284345316523/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=4365460284345316523" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/4365460284345316523?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/4365460284345316523?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/_FPqWo_Mx5o/per-element-fullscreen-api.html" title="Per-Element FullScreen API" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/10/per-element-fullscreen-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcEQX49fCp7ImA9WhdVFEg.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-2735977602411193070</id><published>2011-09-19T23:43:00.001+05:30</published><updated>2011-09-19T23:43:20.064+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-19T23:43:20.064+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><category scheme="http://www.blogger.com/atom/ns#" term="Web Development" /><title>LocalTunnel: Access your local web server on the internet</title><content type="html">&lt;p align="justify"&gt;If you are a web developer, here is an interesting article for you. At some stage of the development, you might want to share / demo your web application to people outside your local network. This is a common problem in the life of a web developer. There are many ways to expose the contents on your local web server to the external world. Some of the commonly used techniques include: Port forwarding, SSH reverse tunnelling, etc. &lt;a href="http://progrium.com/localtunnel/" target="_blank"&gt;LocalTunnel&lt;/a&gt; is a free service that lets you share your local web server in an easy way.&lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt; LocalTunnel is a &lt;a href="http://ruby-lang.org" target="_blank"&gt;Ruby&lt;/a&gt; program which works on the basis of SSH reverse tunnelling. It connects to a remote host that has Gateway ports enabled. The remote host service is available for free at &lt;a href="http://localtunnel.com"&gt;http://localtunnel.com&lt;/a&gt;. After installing LocalTunnel, localtunnel command facilitates the connection between local server and the remote host.&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How to use?&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;LocalTunnel can be installed using &lt;a href="http://rubygems.org" target="_blank"&gt;RubyGems&lt;/a&gt;. &lt;font face="Courier New"&gt;sudo gem install localtunnel&lt;/font&gt;. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Start your local development server. It can run on any port. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Run the localtunnel command passing the local port number. When the command is executed for the first time, you need to pass the SSH public key. More details &lt;a href="http://en.wikipedia.org/wiki/Ssh-keygen" target="_blank"&gt;here&lt;/a&gt;.&amp;#160; &lt;font face="Courier New"&gt;localtunnel –k ~/.ssh/id_rsa.pub 8888&lt;/font&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;If the command was successfully executed, it will show the URL to access the dev server. Note: The URL is valid only for this session. Share it with your friends. And, you are done. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;LocalTunnel is hosted on &lt;a href="https://github.com/progrium/localtunnel" target="_blank"&gt;github&lt;/a&gt; under MIT license. &lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-2735977602411193070?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FuOHjSSL845pobqnBR3ukwpor44/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FuOHjSSL845pobqnBR3ukwpor44/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FuOHjSSL845pobqnBR3ukwpor44/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FuOHjSSL845pobqnBR3ukwpor44/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/GXcFb4u-7xg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/2735977602411193070/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=2735977602411193070" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/2735977602411193070?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/2735977602411193070?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/GXcFb4u-7xg/localtunnel-access-your-local-web.html" title="LocalTunnel: Access your local web server on the internet" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/09/localtunnel-access-your-local-web.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMASHw-eip7ImA9WhdWGUU.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-7046771521650226337</id><published>2011-09-14T11:28:00.001+05:30</published><updated>2011-09-14T11:37:29.252+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T11:37:29.252+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="Tools" /><title>JavaScript Remote Debugging</title><content type="html">&lt;p align="justify"&gt;Mobile browsers are becoming more powerful day-by-day and you can do almost everything you do on your desktop browser. Many mobile app developers have already started moving towards mobile web app instead of native app. Apps are being built using HTML5 and rich JS libraries. However, one of the major concerns for the developers is the lack of developer tools. The reasons are quite obvious – real estate needed to show the debugger, non-developer friendly environment. The solution to this problem is remote debugging. I have been using &lt;a href="http://www.youtube.com/watch?v=DSH392Gxaho" target="_blank"&gt;JSConsole&lt;/a&gt; for this purpose. It comes handy when we want to inspect DOM of the webpage. I stumbled upon “&lt;a href="http://lexandera.com/aardwolf/" target="_blank"&gt;Aardwolf&lt;/a&gt;” yesterday and it seems to be a better alternative for JSConsole when it comes to JavaScript debugging. Aardwolf is powered by &lt;a href="http://nodejs.org" target="_blank"&gt;Node.js&lt;/a&gt;. &lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Breakpoints&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Call Stack&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Exception reporting&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;JS Console remoting&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-6wYiYUkuOsc/TnBCeAFtJWI/AAAAAAAAYPM/OIT6t3lQeVU/s1600-h/Screen%252520shot%2525202011-09-14%252520at%25252010.00.28%252520AM%25255B19%25255D.png" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="AardWolf" border="0" alt="AardWolf" src="http://lh5.ggpht.com/-0zsDt-9c29Q/TnBCe6E9MEI/AAAAAAAAYPQ/rHIkMYWk5-c/Screen%252520shot%2525202011-09-14%252520at%25252010.00.28%252520AM_thumb%25255B17%25255D.png?imgmax=800" width="660" height="300" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How does it work?&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Aardwolf is a Node application which listens on two ports – One for the debugger UI (8000), another one for the JS file server (8500). It has a code rewriter which rewrites the JS files to be debugged (dynamically). The rewritten JS files are served by the JS file server. The application to be debugged should consume JS files from the above mentioned JS server (rather than the original JS files). This will help establishing connection and adding hooks for debugging. Once the connection is established, we can add breakpoints and debug the JavaScript file.&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How to set up Aardwolf?&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Check out the Aardwolf source code from &lt;a href="https://github.com/lexandera/Aardwolf" target="_blank"&gt;here&lt;/a&gt; or &lt;a href="https://bitbucket.org/lexandera/aardwolf/" target="_blank"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Create a file ‘config/config.local.js’ within the checked out location. Add the following lines to it:&lt;/div&gt;&lt;/li&gt; &lt;/ul&gt;&lt;blockquote&gt;&lt;pre&gt;var config = require('../config/config.defaults.js');&lt;br /&gt;config.serverHost = 'ip-or-hostname-of-your-computer';&lt;br /&gt;config.jsFileServerBaseDir = '/path/to/www/root';&lt;/pre&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="justify"&gt;Start the server by running “node app.js” (Make sure that &lt;a href="http://nodejs.org" target="_blank"&gt;Node.js&lt;/a&gt; is installed on your machine)&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Add the debug library to your web app. Also, all the JS files to be debugged should be served from the JS file server.&lt;br /&gt;      &lt;pre&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ip-or-hostname-of-your-computer:8500/aardwolf.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ip-or-hostname-of-your-computer:8500/some-script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://ip-or-hostname-of-your-computer:8500/some-other-script.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;br /&gt;    &lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;After the server starts up, open &lt;a href="http://localhost:8000"&gt;http://localhost:8000&lt;/a&gt; in your desktop browser. The debugger UI should appear.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;Open the web app on your phone and wait for the page to load. The debugger UI will show “Mobile device connected” once the connection is established.&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div align="justify"&gt;You can set the breakpoints and view the call stacks on the right pane. &lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p align="justify"&gt;The source code is available on &lt;a href="https://github.com/lexandera/Aardwolf" target="_blank"&gt;github&lt;/a&gt; as well as on &lt;a href="https://bitbucket.org/lexandera/aardwolf/" target="_blank"&gt;bitbucket&lt;/a&gt;. The project is available under the MIT license. Aardwolf does not seem to be good at inspecting DOM elements. We can employ both JSConsole and Aardwolf to make our debugging job easier. Happy debugging!!&lt;br /&gt;&lt;br /&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-7046771521650226337?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/51QtS5PVlxQbUezlUdwaWrM-I60/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/51QtS5PVlxQbUezlUdwaWrM-I60/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/51QtS5PVlxQbUezlUdwaWrM-I60/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/51QtS5PVlxQbUezlUdwaWrM-I60/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/8mvJG69DAVw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/7046771521650226337/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=7046771521650226337" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7046771521650226337?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7046771521650226337?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/8mvJG69DAVw/javascript-remote-debugging.html" title="JavaScript Remote Debugging" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-0zsDt-9c29Q/TnBCe6E9MEI/AAAAAAAAYPQ/rHIkMYWk5-c/s72-c/Screen%252520shot%2525202011-09-14%252520at%25252010.00.28%252520AM_thumb%25255B17%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/09/javascript-remote-debugging.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cEQH04eyp7ImA9WhdWGUU.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-9266904928259229</id><published>2011-09-13T22:49:00.001+05:30</published><updated>2011-09-14T11:46:41.333+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-14T11:46:41.333+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Docs" /><title>New sharing option “Comment-Only” in Google Docs</title><content type="html">&lt;p align="justify"&gt;Google has just updated Google Docs with a much needed feature – New sharing option “Comment-Only”. This feature will be rolled out in the coming weeks. In the current version of Google Docs, we need to give edit permission for the collaborator to add comments. With the new “Comment-Only” permission, we can build better workflow system around Google Docs. The reviewer of the doc can only do the job of reviewing. I was planning to write a &lt;a href="http://blog.varunkumar.me/2010/10/google-app-scripts-for-google-sites.html" target="_blank"&gt;Google app script&lt;/a&gt; to implement a similar functionality with Google Docs Spreadsheet. “Comment-Only” permission can be mixed with the access permission for the doc. &lt;/p&gt;  &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px; padding-top: 0px" title="Comment-Only in Google Docs" border="0" alt="Comment-Only in Google Docs" src="http://lh5.ggpht.com/-NwhunJZW-lY/Tm-QohSneeI/AAAAAAAAYPU/4P5R44__ANY/Screen%252520shot%2525202011-09-13%252520at%25252010.28.06%252520PM%25255B6%25255D.png?imgmax=800" width="520" height="478" /&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Comment-Only in Google Docs" border="0" alt="Comment-Only in Google Docs" src="http://lh5.ggpht.com/-RiPgbqXyNWw/Tm-Qps6fnYI/AAAAAAAAYPY/21skWbTrbgA/Screen%252520shot%2525202011-09-13%252520at%25252010.47.39%252520PM%25255B5%25255D.png?imgmax=800" width="508" height="385" /&gt;&lt;/p&gt;  &lt;p&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-9266904928259229?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Mpwk39MU29m5mu0Sz8qd5BQ_mxs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mpwk39MU29m5mu0Sz8qd5BQ_mxs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Mpwk39MU29m5mu0Sz8qd5BQ_mxs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Mpwk39MU29m5mu0Sz8qd5BQ_mxs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/sS3414mVI00" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/9266904928259229/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=9266904928259229" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/9266904928259229?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/9266904928259229?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/sS3414mVI00/new-sharing-option-comment-only-in.html" title="New sharing option “Comment-Only” in Google Docs" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-NwhunJZW-lY/Tm-QohSneeI/AAAAAAAAYPU/4P5R44__ANY/s72-c/Screen%252520shot%2525202011-09-13%252520at%25252010.28.06%252520PM%25255B6%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/09/new-sharing-option-comment-only-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUCQH48eip7ImA9WhdWE04.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-5045779305792941785</id><published>2011-09-07T00:31:00.000+05:30</published><updated>2011-09-07T00:41:01.072+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-07T00:41:01.072+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="India" /><category scheme="http://www.blogger.com/atom/ns#" term="Tech Talk" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="Bangalore" /><category scheme="http://www.blogger.com/atom/ns#" term="Hyderabad" /><title>Google DevFests India 2011</title><content type="html">&lt;div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em; text-align: justify;"&gt;
&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;Google has been organizing many developer events across the globe to meet the developers and understand their expectations. DevFest is one such event which provides a great opportunity to learn more about Google technologies and developer products. Developer advocates and engineers from Google will be present at the event. This will be an useful forum for the developers to interact with Google engineers. The event is open to all. There are only limited seats. Register &lt;a href="http://code.google.com/events/devfests/2011/india.html" target="_blank"&gt;here&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style="padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 1em; text-align: justify;"&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;b&gt;Event &amp;nbsp;&lt;/b&gt;: Google DevFest 2011&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;b&gt;Venue &lt;/b&gt;: The Lalit Ashok Bangalore&lt;/span&gt;&lt;br/&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;b&gt;Date &amp;nbsp; &amp;nbsp;&lt;/b&gt;: Sep 15, 2011 08:30 - 17:00&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;b&gt;Venue &lt;/b&gt;: HICC and Novotel, Hyderabad&lt;/span&gt;&lt;br/&gt;&lt;span class="Apple-style-span" style="line-height: 16px;"&gt;&lt;b&gt;Date &amp;nbsp; &amp;nbsp;&lt;/b&gt;: Sep 17, 2011 08:30 - 17:00&lt;/span&gt;&lt;/blockquote&gt;
More details &lt;a href="http://code.google.com/events/devfests/2011/india.html" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
-- Varun&lt;br /&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-5045779305792941785?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7C1YMR95NBts0qkvjUs8-wbDJcE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7C1YMR95NBts0qkvjUs8-wbDJcE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7C1YMR95NBts0qkvjUs8-wbDJcE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7C1YMR95NBts0qkvjUs8-wbDJcE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/XoOeUPAksl8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/5045779305792941785/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=5045779305792941785" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/5045779305792941785?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/5045779305792941785?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/XoOeUPAksl8/google-devfests-india-2011.html" title="Google DevFests India 2011" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/09/google-devfests-india-2011.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUGQXw8eyp7ImA9WhdQFUg.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-3478281107737655841</id><published>2011-08-17T09:23:00.001+05:30</published><updated>2011-08-17T09:23:40.273+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-17T09:23:40.273+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Arduino" /><category scheme="http://www.blogger.com/atom/ns#" term="Android ADK" /><title>New toy in the house: Arduino ADK</title><content type="html">&lt;p align="justify"&gt;Yay! I have got a new toy in the house to play with – Just bought &lt;a href="http://arduino.cc/en/Main/ArduinoBoardADK" target="_blank"&gt;Arduino ADK board&lt;/a&gt;. Ever since Google announced &lt;a href="http://developer.android.com/guide/topics/usb/adk.html" target="_blank"&gt;Android ADK&lt;/a&gt; at Google I/O 2011, I have been trying to get hold of one. I couldn’t get it till now because of my geographical location and the demand for the board. Finally, I have ordered it from &lt;a href="http://simplelabs.co.in" target="_blank"&gt;SimpleLabs&lt;/a&gt;, Chennai and received the package yesterday. I will be playing around with it in the next couple of weeks and share my experience in this blog. &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;strong&gt;What is Android ADK?&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Android 3.1 introduces powerful new APIs which allows external USB hardware to interact with an Android device. The APIs are based on a USB stack and services that are built into the platform, including support for both USB host and device interactions. Using the APIs, we can create applications that are able to discover, communicate with, and manage a variety of device types connected over USB. More info &lt;a href="http://developer.android.com/guide/topics/usb/adk.html" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh3.ggpht.com/-xfPjlUbSyUg/Tks61uvxTiI/AAAAAAAAYF4/9Lnu_IccdVc/s1600-h/IMG_20110817_005801%25255B8%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="Arduino ADK" border="0" alt="Arduino ADK" src="http://lh6.ggpht.com/-fE5PZ47BTb0/Tks63E4yIgI/AAAAAAAAYF8/CFhyAtQQ3jg/IMG_20110817_005801_thumb%25255B5%25255D.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-Sx9hSboaDew/Tks65pN9M1I/AAAAAAAAYGA/GNMrRawXnZ0/s1600-h/IMG_20110817_005823%25255B5%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Arduino ADK" border="0" alt="Arduino ADK" src="http://lh5.ggpht.com/-WoPyTaSIEb0/Tks67TXUTDI/AAAAAAAAYGE/mbqhsekPv0w/IMG_20110817_005823_thumb%25255B2%25255D.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-A5cgPJpXOdI/Tks69v7mRPI/AAAAAAAAYGI/bBg4TG7lqYU/s1600-h/IMG_20110817_005931%25255B5%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Quick Starter Kit" border="0" alt="Quick Starter Kit" src="http://lh4.ggpht.com/-GH5lA4xgMQg/Tks6_F6c6gI/AAAAAAAAYGM/qzXIyKPwuu8/IMG_20110817_005931_thumb%25255B2%25255D.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-gYGLwibvNxk/Tks7Bl0Q-vI/AAAAAAAAYGQ/DlDtgyDMK08/s1600-h/IMG_20110817_010134%25255B5%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Arduino ADK" border="0" alt="Arduino ADK" src="http://lh3.ggpht.com/-9J1H0-ozCDo/Tks7CpIZb9I/AAAAAAAAYGU/GXQl6swUGsU/IMG_20110817_010134_thumb%25255B2%25255D.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-VXOFZQX43yc/Tks7EyRgYLI/AAAAAAAAYGY/W8QBIu3-raY/s1600-h/IMG_20110817_010311%25255B5%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Arduino ADK" border="0" alt="Arduino ADK" src="http://lh4.ggpht.com/-97mSfoyd7Q0/Tks7GXJDT1I/AAAAAAAAYGc/kLg4w_ETuwk/IMG_20110817_010311_thumb%25255B2%25255D.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-Kr8hkH0X7tg/Tks7Iui0tUI/AAAAAAAAYGg/Z6cj7kFI7io/s1600-h/IMG_20110817_010412%25255B5%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Arduino ADK" border="0" alt="Arduino ADK" src="http://lh6.ggpht.com/-eXrd8Tj3v-Y/Tks7MXq5iNI/AAAAAAAAYGo/4QUqtfJdsNY/IMG_20110817_010412_thumb%25255B2%25255D.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-YYBmbrYT3ac/Tks7PaNc0MI/AAAAAAAAYGs/beeACb09lRs/s1600-h/IMG_20110817_010431%25255B5%25255D.jpg" target="_blank"&gt;&lt;img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="Arduino ADK" border="0" alt="Arduino ADK" src="http://lh6.ggpht.com/-iyl5VvnGkSc/Tks7QnYsstI/AAAAAAAAYGw/lqRdjqHeGB8/IMG_20110817_010431_thumb%25255B2%25255D.jpg?imgmax=800" width="344" height="259" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Arduino ADK&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;The Arduino ADK is a microcontroller board based on the ATmega2560 (&lt;a href="http://www.atmel.com/dyn/resources/prod_documents/doc2549.PDF" target="_blank"&gt;datasheet&lt;/a&gt;). It has a USB host interface to connect with Android based phones, based on the MAX3421e IC. It has 54 digital input/output pins (of which 14 can be used as PWM outputs), 16 analog inputs, 4 UARTs (hardware serial ports), a 16 MHz crystal oscillator, a USB connection, a power jack, an ICSP header, and a reset button. Source: &lt;a href="http://arduino.cc/en/Main/ArduinoBoardADK" target="_blank"&gt;Arduino.cc&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-3478281107737655841?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/30UpgHeU19njLREcf9xzT-f8a7I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/30UpgHeU19njLREcf9xzT-f8a7I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/30UpgHeU19njLREcf9xzT-f8a7I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/30UpgHeU19njLREcf9xzT-f8a7I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/V7ppyRn9Dqo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/3478281107737655841/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=3478281107737655841" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3478281107737655841?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3478281107737655841?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/V7ppyRn9Dqo/new-toy-in-house-arduino-adk.html" title="New toy in the house: Arduino ADK" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-fE5PZ47BTb0/Tks63E4yIgI/AAAAAAAAYF8/CFhyAtQQ3jg/s72-c/IMG_20110817_005801_thumb%25255B5%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/08/new-toy-in-house-arduino-adk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8CQXwyeyp7ImA9WhdRGUw.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-2618223157171424675</id><published>2011-08-10T00:37:00.001+05:30</published><updated>2011-08-10T00:37:40.293+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-10T00:37:40.293+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><title>HTML5: Page Visibility API</title><content type="html">&lt;p align="justify"&gt;Today I stumbled upon an interesting API being introduced in HTML5 – &lt;a href="http://www.w3.org/TR/page-visibility/" target="_blank"&gt;Page Visibility API&lt;/a&gt;. As the name suggests, the API facilitates the developers to programmatically determine the current visibility of the page. User interface designers can take advantage of this API, which is still in Working Draft, to give better experience to the visitors. This will also help in better resource utilization. For example, if your page has an animation, you can efficiently render it only when the page is visible without having to hog the resources. The specification introduces a new interface named “&lt;a href="http://www.w3.org/TR/page-visibility/#pv-document-visibility-interface" target="_blank"&gt;DocumentVisibility&lt;/a&gt;” that provides Web applications with the means to programmatically determine the current visibility of a page and be notified of visibility changes. Check out the demo &lt;a href="http://static.varunkumar.me/api/visibility.html" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;The specification includes three main parts:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Attribute &lt;em&gt;“&lt;strong&gt;document.hidden&lt;/strong&gt;”&lt;/em&gt;: This is a Boolean attribute of &lt;a href="http://www.w3.org/TR/page-visibility/#pv-document-visibility-interface" target="_blank"&gt;DocumentVisibility&lt;/a&gt; interface indicating if the page is hidden from view. It will return ‘false’ even if part of the page is visible. There are vendor specific implementations for this. It is implemented as &lt;em&gt;document.msHidden&lt;/em&gt; in IE and &lt;em&gt;document.webkitHidden&lt;/em&gt; in Chrome. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Attribute &lt;em&gt;“&lt;strong&gt;document.visibilityState&lt;/strong&gt;”&lt;/em&gt;: This is an attribute of DocumentVisibility interface indicating the state of the page. The specification includes three different states: “hidden”, “visible”, “preview” – The page is not visible but a preview of it is visible. Again, its open to vendors to define their own states. Its implemented as &lt;em&gt;document.msVisibilityState &lt;/em&gt;in IE and &lt;em&gt;document.webkitVisibilityState&lt;/em&gt; in Chrome. The major deference, however, is that &lt;em&gt;document.msVisibilityState&lt;/em&gt; is a numeric value where as &lt;em&gt;document.webkitVisibilityState&lt;/em&gt; is a string value. Hence, its better to stick to &lt;em&gt;document.hidden&lt;/em&gt; till the API matures.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Event &lt;em&gt;“&lt;strong&gt;visibilitychange&lt;/strong&gt;”&lt;/em&gt;: The &lt;em&gt;visibilitychange&lt;/em&gt; event will be fired whenever a change is made to the &lt;em&gt;document.visibilityState&lt;/em&gt; attribute. We can listen to this event on document and as mentioned in point#2, its advisable to use &lt;em&gt;document.hidden &lt;/em&gt;to find out the new state within the listener. Here, again, you will have to listen to vendor specific events. &lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Demo&lt;/strong&gt;:&lt;/p&gt;  &lt;p align="justify"&gt;I have setup &lt;a href="http://static.varunkumar.me/api/visibility.html" target="_blank"&gt;this demo page&lt;/a&gt; to explore the Page Visibility API. It runs a timer to show clock on the page. The timer will be disabled whenever we move away from the page and will be re-activated as we enter the page with the adjusted clock timing. Smart developers always view the source. View the page source to know more. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Browser Support&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Internet Explorer (10+)&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Chrome (12+)&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Page Visibility API will be really useful if vendors follow the specifications completely and move away from the vendor prefixes. More info about Page Visibility can be found &lt;a href="http://www.w3.org/TR/page-visibility/" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-2618223157171424675?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/UfkVyO9HGQuxbJ2267Hvt5RXaG4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UfkVyO9HGQuxbJ2267Hvt5RXaG4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/UfkVyO9HGQuxbJ2267Hvt5RXaG4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/UfkVyO9HGQuxbJ2267Hvt5RXaG4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/IOjmpoZ09dw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/2618223157171424675/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=2618223157171424675" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/2618223157171424675?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/2618223157171424675?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/IOjmpoZ09dw/html5-page-visibility-api.html" title="HTML5: Page Visibility API" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/08/html5-page-visibility-api.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcHSXc9eSp7ImA9WhdSFkg.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-5299569820946493620</id><published>2011-07-26T09:50:00.001+05:30</published><updated>2011-07-26T09:50:38.961+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-26T09:50:38.961+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NodeJs" /><title>Diving into Node.js</title><content type="html">&lt;p align="justify"&gt;If you are following the posts on &lt;a href="http://news.ycombinator.com/" target="_blank"&gt;Hacker News&lt;/a&gt;, you would have definitely heard about &lt;a href="http://nodejs.org" target="_blank"&gt;Node.js&lt;/a&gt;. At least one of the posts related to Node.js will be on the front page of Hacker News everyday. Node.js is an event driven server side JavaScript environment. Its a runtime which can execute JavaScript files on the server side using the JavaScript engine &lt;a href="http://en.wikipedia.org/wiki/V8_(JavaScript_engine)" target="_blank"&gt;V8&lt;/a&gt;. It is intended for writing scalable applications like web servers. It was created by &lt;a href="http://en.wikipedia.org/wiki/Ryan_Dahl" target="_blank"&gt;Ryan Dahl&lt;/a&gt; in 2009. I have been playing around with Node.js for about a month now and this post is a consolidation of different things I have came across in the process of learning.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;&lt;center&gt;&lt;iframe src="http://www.youtube.com/embed/jo_B4LTHi3I" frameborder="0" width="560" height="349" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/center&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Node.js resources&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://nodejs.org" target="_blank"&gt;Node.js official site&lt;/a&gt;. Check out the Wiki on this site.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Node.js &lt;a href="http://www.stoimen.com/blog/2010/11/16/diving-into-node-js-introduction-and-installation/" target="_blank"&gt;Introduction &amp;amp; Installation&lt;/a&gt;. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://nodebeginner.org/index.html" target="_blank"&gt;The Node beginner book&lt;/a&gt; by &lt;a href="http://twitter.com/manuelkiessling" target="_blank"&gt;Manuel Kiessling&lt;/a&gt;. This is an excellent book to get started with Node.js and server side JavaScript. It is a great work by the author. He has chosen to explain the concepts via “How not to” and I am really impressed with his writing style. Hats off to the author. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://blog.osbutler.com/categories/node-by-example/" target="_blank"&gt;Node by example&lt;/a&gt;. This is an excellent series of posts to showcase some of the available features of Node.js. It is a collection of short code examples.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="https://github.com/joyent/node/wiki/modules" target="_blank"&gt;Node Modules&lt;/a&gt;. This is the list of modules which you can hook into your code. Its a huge list and you can find modules for almost anything you wanted to.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="https://github.com/joyent/node/wiki/hosting" target="_blank"&gt;Node.js hosting&lt;/a&gt;. This page contains list of hosting sites where you can host your Node.js applications.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;If you are from Java background, you can also go through &lt;a href="http://blog.shinetech.com/2011/06/10/nodejs-from-the-enterprise-java-perspective/" target="_blank"&gt;this&lt;/a&gt; and &lt;a href="http://blog.maxant.co.uk/pebble/2011/05/22/1306092969466.html" target="_blank"&gt;this&lt;/a&gt; to know about Node.js from an Enterprise Java perspective. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Note&lt;/strong&gt;: I have read through all the materials posted here and found them to be useful. If you come across any interesting links about Node.js, share them via comments. &lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-5299569820946493620?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/R9oACyXnknsuqc1QL3IGbQr13BQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R9oACyXnknsuqc1QL3IGbQr13BQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/R9oACyXnknsuqc1QL3IGbQr13BQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/R9oACyXnknsuqc1QL3IGbQr13BQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/RW0FCiJa4gg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/5299569820946493620/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=5299569820946493620" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/5299569820946493620?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/5299569820946493620?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/RW0FCiJa4gg/diving-into-nodejs.html" title="Diving into Node.js" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/jo_B4LTHi3I/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/07/diving-into-nodejs.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIDQnk-fip7ImA9WhZaGE0.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-7730939218522826802</id><published>2011-07-05T00:39:00.001+05:30</published><updated>2011-07-05T00:39:33.756+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-05T00:39:33.756+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google+" /><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="VServices" /><title>Facebook Circles Importer: Import Google+ Circles into Facebook</title><content type="html">&lt;p align="justify"&gt;Ever since Google announced its social product &lt;a href="http://google.com/+" target="_blank"&gt;Google+&lt;/a&gt; last week, hackers around the world have built some cool hacks. Here is one such hack built around Google+ and Facebook. Google+ sports a simple and neat interface and the highlight is the interface of &lt;a href="https://plus.google.com/circles" target="_blank"&gt;Google+ Circles&lt;/a&gt;. And, few engineers from Facebook have already built “&lt;a href="http://www.circlehack.com/" target="_blank"&gt;Circle Hack&lt;/a&gt;” and ported the interface of Circles to Facebook (Lists) in no time. This piece of work of mine is an extension to Circles hack which facilitates importing Circles into Facebook. Access it &lt;a href="http://services.varunkumar.me/circles" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Circle Hack&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;One of the important features of Google+ (as bragged about) is Google+ Circles which helps you to share your data with a specific group of people. A similar feature already exists (Lists) on Facebook but is hidden inside a bunch of other features and is not very user friendly. &lt;a href="http://www.circlehack.com/" target="_blank"&gt;Circle Hack&lt;/a&gt; is an excellent piece of work done by few engineers from Facebook to provide a friendly interface to Facebook lists. Circle hack is developed as a node.js application and the backbone of the hack is the &lt;a href="https://github.com/voloko/uki" target="_blank"&gt;UI Kit&lt;/a&gt; developed by the &lt;a href="https://github.com/voloko" target="_blank"&gt;same author&lt;/a&gt;. It is a very popular UI framework for building complex web apps. Again, the author has done a very good job. Source code of Circle Hack can be found &lt;a href="https://github.com/voloko/facebook-circles" target="_blank"&gt;here&lt;/a&gt;. I was hacking through Circle Hack as well as UI Kit and was quite impressed with the offerings of UI Kit. I have browserified the node modules and ported it into &lt;a href="http://services.varunkumar.me" target="_blank"&gt;VServices&lt;/a&gt;, which I already own.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-uEtY0_JtIk8/ThIP2yH49bI/AAAAAAAAOLA/2Lr9B4wPC5k/s1600-h/Screen%252520shot%2525202011-07-04%252520at%25252011.36.48%252520PM%25255B17%25255D.png" target="_blank"&gt;&lt;img title="&amp;#39;Circle Hack&amp;#39; ported into VServices" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="484" alt="&amp;#39;Circle Hack&amp;#39; ported into VServices" src="http://lh6.ggpht.com/-mS08GOxU_9M/ThIP3sItjBI/AAAAAAAAOLE/mOi12MAzjPU/Screen%252520shot%2525202011-07-04%252520at%25252011.36.48%252520PM_thumb%25255B15%25255D.png?imgmax=800" width="605" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;a href="http://lh4.ggpht.com/-IWnYnmfVXC0/ThIP4ckM5uI/AAAAAAAAOLI/pdb8Nfo8siI/s1600-h/Screen%252520shot%2525202011-07-04%252520at%25252011.37.25%252520PM%25255B12%25255D.png" target="_blank"&gt;&lt;img title="Circle Hack" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="180" alt="Circle Hack" src="http://lh3.ggpht.com/-VgIp2ActyXw/ThIP5MD0kiI/AAAAAAAAOLM/2hVOaZGvWsU/Screen%252520shot%2525202011-07-04%252520at%25252011.37.25%252520PM_thumb%25255B10%25255D.png?imgmax=800" width="660" border="0" /&gt;&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Circles Importer&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://services.varunkumar.me/circles" target="_blank"&gt;Circles Importer&lt;/a&gt; is an extension to Circle Hack which facilitates importing contacts from an external source (like Google+)&amp;#160; into Facebook and create lists out of them. Facebook mail invite has a similar feature of importing contacts but you have to take the pain of creating the lists yourselves. That is where this tool will fit in. &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-FySSjw-k_DA/ThIP6De35GI/AAAAAAAAOLQ/CFO4RLVjej8/s1600-h/Screen%252520shot%2525202011-07-05%252520at%25252012.16.36%252520AM%25255B9%25255D.png" target="_blank"&gt;&lt;img title="Facebook Circles Importer" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Facebook Circles Importer" src="http://lh6.ggpht.com/-5M14BaY5r8I/ThIP7PEH5dI/AAAAAAAAOLU/i8aXtkuS73c/Screen%252520shot%2525202011-07-05%252520at%25252012.16.36%252520AM_thumb%25255B7%25255D.png?imgmax=800" width="603" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Steps to import Google+ Circles into Facebook?&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;Google has provided us with a handy tool (&lt;a href="https://www.google.com/takeout/" target="_blank"&gt;Google TakeOut&lt;/a&gt;) to extract our data from Google+ whenever we wanted to. Google Takeout lets you download an archive your data from various Google services including Buzz, Contacts and Circles, Picasa, etc. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Sign in to Google Take Out and select the service “Contacts and Circles” for archival. Download the archive (zip). &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;On extracting the archive, you will find &lt;a href="http://en.wikipedia.org/wiki/VCard" target="_blank"&gt;.vcf files&lt;/a&gt; under contacts folder. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Upload the .vcf file to the Circles Importer. You can even drag-drop files from your desktop.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Circles Importer will parse the VCard and shows the list of Facebook friends who are part of the uploaded circle.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Choose an existing list from the auto-complete text box or provide a name for the list. Click on ‘Add to list’ to complete the process.&amp;#160; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-7730939218522826802?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OY17e5afXsDxtpYi3aShtW7M_VI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OY17e5afXsDxtpYi3aShtW7M_VI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OY17e5afXsDxtpYi3aShtW7M_VI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OY17e5afXsDxtpYi3aShtW7M_VI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/e8qhM-vxzxA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/7730939218522826802/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=7730939218522826802" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7730939218522826802?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7730939218522826802?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/e8qhM-vxzxA/facebook-circles-importer-import-google.html" title="Facebook Circles Importer: Import Google+ Circles into Facebook" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-mS08GOxU_9M/ThIP3sItjBI/AAAAAAAAOLE/mOi12MAzjPU/s72-c/Screen%252520shot%2525202011-07-04%252520at%25252011.36.48%252520PM_thumb%25255B15%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/07/facebook-circles-importer-import-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcHQX4yfCp7ImA9WhZaFE0.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-3238332447301989738</id><published>2011-06-30T09:54:00.001+05:30</published><updated>2011-06-30T09:57:10.094+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-30T09:57:10.094+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="UserScripts" /><category scheme="http://www.blogger.com/atom/ns#" term="GreaseMonkey" /><title>DotJs – A GreaseMonkey alternative</title><content type="html">&lt;p&gt;If you love customizing pages on the web using user scripts, here is an alternative for GreaseMonkey. &lt;a href="https://github.com/defunkt/dotjs" target="_blank"&gt;DotJs&lt;/a&gt; is a Google Chrome extension that executes JavaScript files in &lt;font face="Arial"&gt;&lt;code&gt;~/.js&lt;/code&gt; based on their filename. To customize &lt;code&gt;http://www.google.com/&lt;/code&gt;, you will have to create the userscript&lt;code&gt;&amp;#160; ~/.js/google.com.js&lt;/code&gt;. &lt;/font&gt;&lt;a href="https://github.com/defunkt" target="_blank"&gt;The author&lt;/a&gt; originally built this for Chrome only but was later ported to other browsers &lt;a href="https://github.com/rlr/dotjs-addon" target="_blank"&gt;Firefox&lt;/a&gt;, &lt;a href="https://github.com/wfarr/dotjs.safariextension" target="_blank"&gt;Safari&lt;/a&gt; and &lt;a href="https://github.com/sj26/dotjs-fluid" target="_blank"&gt;Fluid&lt;/a&gt;. Currently, it works **only on OSX**. &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p&gt;&lt;strong&gt;How to install?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;font face="Arial"&gt;Installation requires you to have Ruby 1.8 and &lt;/font&gt;&lt;a href="http://rake.rubyforge.org/" target="_blank"&gt;&lt;font face="Arial"&gt;rake&lt;/font&gt;&lt;/a&gt;&lt;font face="Arial"&gt; installed. Follow the instructions below to install DotJs.&lt;/font&gt;&lt;/code&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code&gt;&lt;font face="Arial"&gt;git clone &lt;/font&gt;&lt;a href="http://github.com/defunkt/dotjs"&gt;&lt;font face="Arial"&gt;http://github.com/defunkt/dotjs&lt;/font&gt;&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;font face="Arial"&gt;cd dotjs&lt;/font&gt;&lt;/code&gt;&lt;/p&gt;    &lt;p&gt;&lt;code&gt;&lt;font face="Arial"&gt;rake install&lt;/font&gt;&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;How does it work?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;There is a security restriction in Chrome which prevents access to the local file system. To overcome this problem, DotJs runs a tiny web server on port 3131 which serves the files from ~/.js. Hence, the need for Ruby. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Is it better than GreaseMonkey?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;DotJs is just an alternative technique which offers the same functionalities as GreaseMonkey offers. The userscripts in DotJs will not be able to use the GM_ functions which means not all your GM scripts will work directly here. However, you can implement the GM_ methods and make all the GM scripts compatible here. The userscripts in DotJs will have jQuery 1.6 loaded regardless of whether the site you're hacking uses jQuery. Also, it adds support for additional plug-ins and other helper functions. &lt;/p&gt;  &lt;p&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-3238332447301989738?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7YxNeHv0lulCD9HngeC1WQPMS3Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7YxNeHv0lulCD9HngeC1WQPMS3Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7YxNeHv0lulCD9HngeC1WQPMS3Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7YxNeHv0lulCD9HngeC1WQPMS3Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/W6nKj6lCVNI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/3238332447301989738/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=3238332447301989738" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3238332447301989738?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3238332447301989738?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/W6nKj6lCVNI/dotjs-greasemonkey-alternative.html" title="DotJs – A GreaseMonkey alternative" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/06/dotjs-greasemonkey-alternative.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cDQHg4fCp7ImA9WhZaE0w.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-3597570238785213956</id><published>2011-06-29T03:14:00.001+05:30</published><updated>2011-06-29T09:14:31.634+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-29T09:14:31.634+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google+" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>[Screenshots] Google+</title><content type="html">&lt;p align="justify"&gt;I got the chance to explore Google+ today. To me, it looks like Facebook with privacy concerns addressed. The interface looks simple and easy to use unlike Google Wave. The mobile version of Google+ looks equally impressive. Will it be a Facebook killer? I don’t see that happening anytime soon. Lets wait and watch. Check out the rest of the post for screenshots. &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;Hover over the images to know more about them.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh4.ggpht.com/-7HmhTmvtWYE/TgpKrRbEUZI/AAAAAAAAOG8/REhRFkk6HUA/s1600-h/Screen%252520shot%2525202011-06-29%252520at%25252012.57.13%252520AM%25255B13%25255D.png" target="_blank"&gt;&lt;img title="Google+ invitation" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="388" alt="Google+ invitation" src="http://lh5.ggpht.com/--1ueCr_uvO4/TgpKsKlyXTI/AAAAAAAAOHA/kPf5KJOZJ9o/Screen%252520shot%2525202011-06-29%252520at%25252012.57.13%252520AM_thumb%25255B11%25255D.png?imgmax=800" width="660" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh5.ggpht.com/-Rp4v4ajvLXo/TgpKtB-q78I/AAAAAAAAOHE/hDRNgGbddIE/s1600-h/Screen%252520shot%2525202011-06-29%252520at%25252012.57.28%252520AM%25255B11%25255D.png" target="_blank"&gt;&lt;img title="Linking Picasa albums with Google+" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="284" alt="Linking Picasa albums with Google+" src="http://lh4.ggpht.com/-GaXvumj-Oes/TgpKt_KuSXI/AAAAAAAAOHI/OUWgvQhTDzc/Screen%252520shot%2525202011-06-29%252520at%25252012.57.28%252520AM_thumb%25255B9%25255D.png?imgmax=800" width="660" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-Oy7yFB6b1wU/TgqNW2EDYvI/AAAAAAAAOJI/68mYnVrHbnY/s1600-h/Screen%252520shot%2525202011-06-29%252520at%2525207.48.37%252520AM%25255B10%25255D.png" target="_blank"&gt;&lt;img title="Google+ Web interface welcome page" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="378" alt="Google+ Web interface welcome page" src="http://lh4.ggpht.com/-WrNZrgX_HAE/TgqNX5o67TI/AAAAAAAAOJM/Os1DUZeI9BA/Screen%252520shot%2525202011-06-29%252520at%2525207.48.37%252520AM_thumb%25255B8%25255D.png?imgmax=800" width="660" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://lh6.ggpht.com/-I0-fzjzADbA/TgpKu_nMrRI/AAAAAAAAOHM/ouLquPtkDwU/s1600-h/Screen%252520shot%2525202011-06-29%252520at%2525201.14.41%252520AM%25255B12%25255D.png" target="_blank"&gt;&lt;img title="Google+ Circles" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="362" alt="Google+ Circles" src="http://lh5.ggpht.com/-9ADmml5zwGg/TgpKv7rH8mI/AAAAAAAAOHQ/UZehh4MOvdg/Screen%252520shot%2525202011-06-29%252520at%2525201.14.41%252520AM_thumb%25255B10%25255D.png?imgmax=800" width="660" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-mgf8EWiU66Y/TgpKwnaeMbI/AAAAAAAAOHU/mq1LOccwHZM/s1600-h/Screen%252520shot%2525202011-06-29%252520at%2525201.16.50%252520AM%25255B12%25255D.png" target="_blank"&gt;&lt;img title="Google+ Sparks" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="386" alt="Google+ Sparks" src="http://lh5.ggpht.com/-FSsuPikbKNw/TgpKxoZQ99I/AAAAAAAAOHY/xFSbuPgljNU/Screen%252520shot%2525202011-06-29%252520at%2525201.16.50%252520AM_thumb%25255B10%25255D.png?imgmax=800" width="660" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-NkOwFsKm5qI/TgpKycwDuhI/AAAAAAAAOHg/hf1EMYroYho/s1600-h/Screen%252520shot%2525202011-06-29%252520at%2525201.31.10%252520AM%25255B11%25255D.png" target="_blank"&gt;&lt;img title="Google+ Stream" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="358" alt="Google+ Stream" src="http://lh4.ggpht.com/-PlggPVsxLVo/TgpKzXtMpVI/AAAAAAAAOHk/LH82fU70sag/Screen%252520shot%2525202011-06-29%252520at%2525201.31.10%252520AM_thumb%25255B9%25255D.png?imgmax=800" width="660" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-l6cHbeCSvME/TgpK0Oo9QOI/AAAAAAAAOHo/dILzXtmmexA/s1600-h/Screen%252520shot%2525202011-06-29%252520at%2525201.37.40%252520AM%25255B11%25255D.png" target="_blank"&gt;&lt;img title="Google+ Hangout" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="500" alt="Google+ Hangout" src="http://lh3.ggpht.com/-1ZKm0DvD9YM/TgpK0wYpyQI/AAAAAAAAOHs/_ckz8tTDULk/Screen%252520shot%2525202011-06-29%252520at%2525201.37.40%252520AM_thumb%25255B9%25255D.png?imgmax=800" width="596" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-SIKyiRaughM/TgpK2AA7ROI/AAAAAAAAOHw/WrkcW6G8qgU/s1600-h/Screen%252520shot%2525202011-06-29%252520at%2525202.26.27%252520AM%25255B11%25255D.png" target="_blank"&gt;&lt;img title="Google+ Web Interface" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="379" alt="Google+ Web Interface" src="http://lh5.ggpht.com/-AGTOYhmD0F0/TgpK3Ouy-3I/AAAAAAAAOH0/q60AMZIQBI4/Screen%252520shot%2525202011-06-29%252520at%2525202.26.27%252520AM_thumb%25255B9%25255D.png?imgmax=800" width="660" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="center"&gt;&amp;#160;&lt;strong&gt;&lt;font size="4"&gt;Google+ Android Native App&lt;/font&gt;&lt;/strong&gt;&lt;a href="http://lh4.ggpht.com/-mjJjDJmL2n0/TgpK4UlY9xI/AAAAAAAAOH4/YKVsjN_O330/s1600-h/screenshot%25255B12%25255D.png" target="_blank"&gt;&lt;img title="Google+ &amp;amp; Huddle Android app" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="484" alt="Google+ &amp;amp; Huddle Android app" src="http://lh6.ggpht.com/-97rtdoDdeFA/TgpK5gFxWLI/AAAAAAAAOH8/W9Q2-bKBbOQ/screenshot_thumb%25255B10%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt;&lt;a href="http://lh6.ggpht.com/-FUNJ7V0Em34/TgpK6XGqdNI/AAAAAAAAOIA/Fv2xIypyGck/s1600-h/screenshot_3%25255B10%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobile enabling Instant Upload" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Google+ Mobile enabling Instant Upload" src="http://lh3.ggpht.com/-Lr7boTi3_Hg/TgpK7DAYKVI/AAAAAAAAOIE/M5UxMOM3QVQ/screenshot_3_thumb%25255B8%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-MRsNCLiFPqc/TgpK8D-Vn4I/AAAAAAAAOII/llsbeIZMx8k/s1600-h/screenshot_4%25255B9%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobile Interface" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Google+ Mobile Interface" src="http://lh6.ggpht.com/-ZUn9SEm5_xY/TgpK8-UIx8I/AAAAAAAAOIM/1-mlX_FUwac/screenshot_4_thumb%25255B7%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-NjbnxAI6yEc/TgpK9oqNYPI/AAAAAAAAOIQ/gS21OV3rnLM/s1600-h/screenshot_5%25255B10%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobile Stream" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Google+ Mobile Stream" src="http://lh5.ggpht.com/-etj2cP54AJ4/TgpK-qVUx_I/AAAAAAAAOIU/dl3R8pWl2tE/screenshot_5_thumb%25255B8%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-mEu2t0Fp8hw/TgpK_T9V9gI/AAAAAAAAOIY/PVHnc1o1l4Y/s1600-h/screenshot_6%25255B9%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobile Location" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Google+ Mobile Location" src="http://lh6.ggpht.com/-zJ_Qx-P3mks/TgpLAOnPM2I/AAAAAAAAOIc/_J9simD6MP4/screenshot_6_thumb%25255B7%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-XD_r32C73UI/TgpLBJ7L5PI/AAAAAAAAOIg/dL1EQR03WvE/s1600-h/screenshot_8%25255B9%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobile Instant Upload" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Google+ Mobile Instant Upload" src="http://lh3.ggpht.com/-ry6SnYBpiyU/TgpLCE_ogkI/AAAAAAAAOIk/UcuduvpqMN4/screenshot_8_thumb%25255B7%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-NrHS4AxXEUQ/TgpLC27WLCI/AAAAAAAAOIo/wTOe-6BhtFM/s1600-h/screenshot_9%25255B14%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobile Post " style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Google+ Mobile Post " src="http://lh3.ggpht.com/-KbeL__jN7ns/TgpLDlp-wWI/AAAAAAAAOIs/v3XF02yWkXU/screenshot_9_thumb%25255B12%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-I-m89RPiqcU/TgpLEbltNrI/AAAAAAAAOIw/0T84SRNdvPU/s1600-h/screenshot_11%25255B20%25255D.png" target="_blank"&gt;&lt;img title="Google+ Huddle" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Google+ Huddle" src="http://lh6.ggpht.com/-cEC0yPyCu_M/TgpLFPrHSiI/AAAAAAAAOI0/b5rLWQmK8hA/screenshot_11_thumb%25255B18%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-vWvcdTrOMek/TgpLF2KtXXI/AAAAAAAAOI4/hOt2W8O2ffY/s1600-h/screenshot_13%25255B11%25255D.png" target="_blank"&gt;&lt;img title="Google+ Huddle" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Google+ Huddle" src="http://lh3.ggpht.com/-vNqcX7_miuY/TgpLGq36shI/AAAAAAAAOI8/MRApWVXyf5c/screenshot_13_thumb%25255B9%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh3.ggpht.com/-JI7OIRdOTRg/TgpLHXw7UUI/AAAAAAAAOJA/dI3v4160jHc/s1600-h/screenshot_14%25255B17%25255D.png" target="_blank"&gt;&lt;img title="Google+ Huddle" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="484" alt="Google+ Huddle" src="http://lh3.ggpht.com/-oPIqSeRQ-pI/TgpLIAGwwgI/AAAAAAAAOJE/ddzuwoErP_c/screenshot_14_thumb%25255B15%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;strong&gt;&lt;font size="4"&gt;Google+ Mobile Web&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-qL9zCYUVED0/TgqfhMvdQhI/AAAAAAAAOJk/s_MaY4R1DSs/s1600-h/screenshot_20%25255B4%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobile Web (Android, iOS)" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="484" alt="Google+ Mobile Web (Android, iOS)" src="http://lh3.ggpht.com/-ErgYeSwGqdQ/TgqfiHfQpoI/AAAAAAAAOJo/-5KvI7MFwiI/screenshot_20_thumb%25255B2%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-r2P85fOLhjY/Tgqfj2dOYnI/AAAAAAAAOJs/-GZwfSqOSQo/s1600-h/screenshot_22%25255B4%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobiel Web" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="484" alt="Google+ Mobiel Web" src="http://lh6.ggpht.com/-V9uecAyYVlY/TgqfkkCtowI/AAAAAAAAOJw/Q7kSiQJQavc/screenshot_22_thumb%25255B2%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh4.ggpht.com/-20HgSnSXSeI/TgqflYPUNgI/AAAAAAAAOJ0/KAef0q_-QkA/s1600-h/screenshot_25%25255B4%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobile Web" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="484" alt="Google+ Mobile Web" src="http://lh5.ggpht.com/-G5-O3WCpSRQ/TgqfmNYGGoI/AAAAAAAAOJ4/d7NmZGYG_QI/screenshot_25_thumb%25255B2%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://lh6.ggpht.com/-2eE_5G0drD8/TgqfmqpBqMI/AAAAAAAAOJ8/JpeOwOyqFMY/s1600-h/screenshot_24%25255B4%25255D.png" target="_blank"&gt;&lt;img title="Google+ Mobile Web" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="484" alt="Google+ Mobile Web" src="http://lh4.ggpht.com/-JcU6tVy7VTw/Tgqfnh2fFcI/AAAAAAAAOKA/TzPGmOlCTkM/screenshot_24_thumb%25255B2%25255D.png?imgmax=800" width="292" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Take an interactive demo &lt;a href="http://www.google.com/intl/en/+/demo/" target="_blank"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-3597570238785213956?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ri2iYMo7c6P5fgkmq8WQEs7z11I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ri2iYMo7c6P5fgkmq8WQEs7z11I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ri2iYMo7c6P5fgkmq8WQEs7z11I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ri2iYMo7c6P5fgkmq8WQEs7z11I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/dxH6lKuazyA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/3597570238785213956/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=3597570238785213956" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3597570238785213956?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3597570238785213956?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/dxH6lKuazyA/screenshots-google.html" title="[Screenshots] Google+" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/--1ueCr_uvO4/TgpKsKlyXTI/AAAAAAAAOHA/kPf5KJOZJ9o/s72-c/Screen%252520shot%2525202011-06-29%252520at%25252012.57.13%252520AM_thumb%25255B11%25255D.png?imgmax=800" height="72" width="72" /><thr:total>11</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/06/screenshots-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMERng8fCp7ImA9WhZaEkU.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-3755647563874150711</id><published>2011-06-29T00:08:00.001+05:30</published><updated>2011-06-29T00:10:07.674+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-29T00:10:07.674+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google Labs" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>Make your Flash contents playable on iPhone with Swiffy</title><content type="html">&lt;p align="justify"&gt;Ever since Steve Jobs termed Flash as a &lt;a href="http://iphonehelp.in/2010/02/19/jobs-terms-flash-as-dying-technology-no-chance-on-iphone-os/"&gt;dying technology&lt;/a&gt; and confirmed that they don’t have any such plans of supporting Flash - “we don’t spend a lot of energy on old technology”, there were many attempts to make the flash content playable on devices running iOS. Some of &lt;a href="http://blog.varunkumar.me/2010/02/how-to-make-your-flash-contents.html" target="_blank"&gt;them&lt;/a&gt; succeeded to some extent. Google has taken a step on this direction to promote open technologies. Google has pushed a new product into Google Labs – &lt;a href="http://swiffy.googlelabs.com/" target="_blank"&gt;Swiffy&lt;/a&gt;, a SWF to HTML5 converter. This product from Google is definitely much better. This labs product allows you to upload a SWF file, and it will produce an HTML5 version which will run in modern browsers with a high level of SVG support such as Chrome and Safari. &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;img title="Flash content on iOS devices" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="308" alt="Flash content on iOS devices" src="http://lh3.ggpht.com/_gJMNFMNmQj8/S37lEqIqysI/AAAAAAAANHI/NR0SFXdGuCg/image_thumb%5B2%5D.png?imgmax=800" width="308" border="0" /&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Highlights&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Swiffy animations are almost as compact as that of the original SWF files. Swiffy uses a compact JSON representation of the animation, which is rendered using SVG and a bit of HTML5 and CSS3.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Swiffy animations take advantage of the advancements in JavaScript execution speed and hardware accelerated 2D graphics.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Supports a bunch of user interactions apart from the plain old animations. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Wide range of browser support. Check out the browsers supporting SVG &lt;a href="http://caniuse.com/#search=SVG" target="_blank"&gt;here&lt;/a&gt;.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Try it out yourself &lt;a href="http://swiffy.googlelabs.com/" target="_blank"&gt;here&lt;/a&gt;. Check out the &lt;a href="http://swiffy.googlelabs.com/gallery.html" target="_blank"&gt;gallery&lt;/a&gt; of converted SWF files.&lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-3755647563874150711?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LCV_6jtjPIdpmzBONkhSTLQRXKo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LCV_6jtjPIdpmzBONkhSTLQRXKo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LCV_6jtjPIdpmzBONkhSTLQRXKo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LCV_6jtjPIdpmzBONkhSTLQRXKo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/aR9mOeBVMgA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/3755647563874150711/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=3755647563874150711" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3755647563874150711?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/3755647563874150711?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/aR9mOeBVMgA/make-your-flash-contents-playable-on.html" title="Make your Flash contents playable on iPhone with Swiffy" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_gJMNFMNmQj8/S37lEqIqysI/AAAAAAAANHI/NR0SFXdGuCg/s72-c/image_thumb%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/06/make-your-flash-contents-playable-on.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUERXg5cCp7ImA9WhZbEkU.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-1682574786018528951</id><published>2011-06-17T10:50:00.001+05:30</published><updated>2011-06-17T10:53:24.628+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-17T10:53:24.628+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="HTML5" /><category scheme="http://www.blogger.com/atom/ns#" term="Personal" /><title>Me, Myself and I</title><content type="html">&lt;p align="justify"&gt;Nah, this post is not about the &lt;a href="http://googlepublicpolicy.blogspot.com/2011/06/me-myself-and-i-helping-to-manage-your.html" target="_blank"&gt;tool&lt;/a&gt; that Google has announced recently to manage your identity on the web. Its about the site that I have built to manage my identity on the web. I have recently built this new personal site &lt;a href="http://www.varunkumar.me" target="_blank"&gt;www.varunkumar.me&lt;/a&gt; to act as a landing page for all my activities on the web. I have taken up this exercise with the intension of learning something new out of this. The site may look simple but lots of cool features are hidden within it. This post is a summary of things I have learnt out of that piece of work. &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;a href="http://www.varunkumar.me" target="_blank"&gt;&lt;img title="www.varunkumar.me" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="342" alt="www.varunkumar.me" src="http://lh4.ggpht.com/-ons3MHCm_XQ/TfrkAeuIQII/AAAAAAAAOE4/JATL8J1Ly-o/Screenshot20110617at10.27.24AM5.png?imgmax=800" width="644" border="0" /&gt;&lt;/a&gt;&amp;#160;&lt;strong&gt;Highlights&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;HTML5 Semantics&lt;/strong&gt;. HTML5 introduces lots of new semantic elements – section, nav, header, footer, etc. I have implemented the various techniques described &lt;a href="http://diveintohtml5.org/semantics.html" target="_blank"&gt;here&lt;/a&gt; to add semantics to different sections of the site. Bots / screen readers can easily understand the contents of the site. View page source to know more about this. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Offline access&lt;/strong&gt;. The site is available for access in offline mode as well. Honestly there is no real need for offline access here but how else one can learn things. I have used &lt;a href="http://www.html5rocks.com/en/tutorials/appcache/beginner/" target="_blank"&gt;Application Cache&lt;/a&gt; to offer this feature. It is a very straight forward technique but the real challenge is with detecting the connectivity and updating the content whenever it changes. The key is to update the manifest file whenever a static file changes. I am using maven to auto-increment the version number on manifest to serve a fresh copy whenever the content changes. For detecting the network connectivity, I have used the techniques described &lt;a href="http://www.html5rocks.com/en/mobile/workingoffthegrid.html" target="_blank"&gt;here&lt;/a&gt;.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;img title="Offline access" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="218" alt="Offline access" src="http://lh3.ggpht.com/-H1CLuTrC4Ds/TfrkBdKnrII/AAAAAAAAOE8/7vWtXigyN6g/Screen%252520shot%2525202011-06-17%252520at%25252010.34.49%252520AM%25255B9%25255D.png?imgmax=800" width="504" border="0" /&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Spam-proofing email address&lt;/strong&gt;. This is a by-product of another hobby project (I am working on) which requires spam-proofing of email addresses. Two things to be considered while spam-proofing email address: 1. It should be clickable 2. It should be easy to copy the address. I can secure the email address (to some extent) like this: varunkumar(dot)n(at)gmail(dot)com but the usability is not so good. I have implemented two out of the ten techniques discussed &lt;a href="http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/" target="_blank"&gt;here&lt;/a&gt; to spam-proof the email address. It uses hidden garbage text and ROT13 encoding techniques. Inspect the email address shown on the site to know more. More details about the implementation of this can be found &lt;a href="http://jace.zaiki.in/2011/03/22/spam-proofing-email-addresses" target="_blank"&gt;here&lt;/a&gt;. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;img title="Spam-proofing after JS based ROT13 decryption" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="166" alt="Spam-proofing after JS based ROT13 decryption" src="http://lh6.ggpht.com/-AwL0pB7jzvY/TfrkCUsSp4I/AAAAAAAAOFA/w8e2LHxhzdQ/Screen%252520shot%2525202011-06-17%252520at%25252010.39.00%252520AM%25255B5%25255D.png?imgmax=800" width="520" border="0" /&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;CSS3&lt;/strong&gt;. Most of the animations and styling on the page are achieved using CSS3. The following properties are employed to get the visual style on the page: box-shadow, transform, transition, etc. &lt;a href="http://blogs.sitepoint.com/pure-css3-paper-curl/" target="_blank"&gt;Page curl effect&lt;/a&gt;. &lt;a href="http://www.zurb.com/article/305/easily-turn-your-images-into-polaroids-wi" target="_blank"&gt;Polaroid effect&lt;/a&gt;. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Deliberate vulnerabilities&lt;/strong&gt;. The site features a link to my complete profile but it is not open to all. It is password protected. However, I have introduced deliberate vulnerabilities to the system. There are at least three different techniques using which you can break into my profile page. And, they are not really hard. If you are able to reach my profile page, take a screenshot and post it on the comments section along with the technique applied.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;&lt;img title="Password protected profile page" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="142" alt="Password protected profile page" src="http://lh3.ggpht.com/-0zWKk7majk4/TfrkDG0QEcI/AAAAAAAAOFE/O9YdC5C7YNw/Screen%252520shot%2525202011-06-17%252520at%25252010.31.04%252520AM%25255B8%25255D.png?imgmax=800" width="500" border="0" /&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Smartphone friendly layout using ‘Media Queries’&lt;/strong&gt;. The site is built as a set of sections and depending on the real estate of the screen I am attaching / detaching the sections. This is done via the &lt;a href="http://www.alistapart.com/articles/responsive-web-design/" target="_blank"&gt;media queries&lt;/a&gt;. If you are accessing from your desktop browser, keep reducing the width of your browser to see how the layout changes.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Browser support&lt;/strong&gt;. The site is best viewed on the following browsers: Chrome 4+, Firefox 4+, Safari 5+, IE 9+, Opera 10+, Safari Mobile, Android webkit browser. I have not tested the site on other browsers. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;The site is hosted on Google App Engine and I have &lt;a href="http://blog.varunkumar.me/2011/02/how-to-setup-personal-project.html" target="_blank"&gt;setup a local git repo&lt;/a&gt; for this project. You can view the page source to know more about the things described above. Smart developers always do so. Pass on your comments / feedback about the site.&lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-1682574786018528951?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oubwwxwpfXkMXpg7mNiFClcgjUA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oubwwxwpfXkMXpg7mNiFClcgjUA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oubwwxwpfXkMXpg7mNiFClcgjUA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oubwwxwpfXkMXpg7mNiFClcgjUA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/b5VT7eAZufg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/1682574786018528951/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=1682574786018528951" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/1682574786018528951?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/1682574786018528951?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/b5VT7eAZufg/me-myself-and-i.html" title="Me, Myself and I" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-ons3MHCm_XQ/TfrkAeuIQII/AAAAAAAAOE4/JATL8J1Ly-o/s72-c/Screenshot20110617at10.27.24AM5.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/06/me-myself-and-i.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UGRXs7eip7ImA9WhZUEUo.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-2058836968446787771</id><published>2011-06-04T14:48:00.001+05:30</published><updated>2011-06-04T14:50:24.502+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-04T14:50:24.502+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="GreaseMonkey" /><category scheme="http://www.blogger.com/atom/ns#" term="Android" /><title>GreaseMonkey for Android via TamperMonkey</title><content type="html">&lt;p align="justify"&gt;If you love customizing pages on the web using &lt;a href="http://en.wikipedia.org/wiki/Greasemonkey" target="_blank"&gt;GreaseMonkey&lt;/a&gt; (GM) scripts, here is a good news for you. &lt;a href="https://chrome.google.com/webstore/detail/dhdgffkkebhmkfjojejmpbldmpobfkfo" target="_blank"&gt;TamperMonkey&lt;/a&gt;, originally a Chrome extension which provides enhanced userscript support on Google Chrome and Chromium browsers,&amp;#160; has been ported to Android. The Android app is still in beta and it comes with &lt;a href="http://blog.varunkumar.me/2011/01/make-your-greasemonkey-script-fully.html" target="_blank"&gt;all the functionalities&lt;/a&gt; provided by TamperMonkey. TamperMonkey Android app comes along with a browser where in you can use the userscripts you have installed.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="center"&gt;&lt;a href="http://lh5.ggpht.com/-LZBpJjUMEjE/Ten4MeoKkbI/AAAAAAAAOD0/_3pq_z9IPKI/s1600-h/install%25255B9%25255D.png" target="_blank"&gt;&lt;img title="TamperMonkey - Install userscripts" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="TamperMonkey - Install userscripts" src="http://lh5.ggpht.com/-3VZMt-MKUmk/Ten4Nird1ZI/AAAAAAAAOD4/XQXZfmNFQAc/install_thumb%25255B7%25255D.png?imgmax=800" width="200" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lh5.ggpht.com/-O_gYfuFP2j4/Ten4QEXjVjI/AAAAAAAAOD8/mCmr1PXPywM/s1600-h/homepage%25255B13%25255D.png" target="_blank"&gt;&lt;img title="TamperMonkey - Home" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="TamperMonkey - Home" src="http://lh5.ggpht.com/-hTadgYBNUyE/Ten4Sj19HzI/AAAAAAAAOEA/Q4LzlU_AHeI/homepage_thumb%25255B11%25255D.png?imgmax=800" width="200" border="0" /&gt;&lt;/a&gt; &lt;a href="http://lh6.ggpht.com/-bcZkJ4j9ai0/Ten4TkQS7vI/AAAAAAAAOEE/O7_Ms50POpo/s1600-h/options%25255B9%25255D.png" target="_blank"&gt;&lt;img title="TamperMonkey - Options" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="320" alt="TamperMonkey - Options" src="http://lh4.ggpht.com/-nqTs6C7JOmQ/Ten4VKDGt_I/AAAAAAAAOEI/qWxW76TfusM/options_thumb%25255B7%25255D.png?imgmax=800" width="200" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;How to use TamperMonkey Android app?&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;Install the beta version of the app from &lt;a href="http://api.viglink.com/api/click?format=go&amp;amp;drKey=1359&amp;amp;loc=http%3A%2F%2Fforum.xda-developers.com%2Fshowthread.php%3Ft%3D990768&amp;amp;v=1&amp;amp;libid=1307074776704&amp;amp;out=https%3A%2F%2Fmarket.android.com%2Fdetails%3Fid%3Dnet.biniok.tampermonkey&amp;amp;ref=http%3A%2F%2Fwww.xda-developers.com%2Fandroid%2Frun-your-favorite-greasemonkey-scripts-on-your-phone-with-tampermonkey-for-android%2F&amp;amp;title=%5BAPP%5D%20Tampermonkey%20-%20A%20Greasemonkey%20compatible%20userscript%20manger%20-%20xda-developers&amp;amp;txt=https%3A%2F%2Fmarket.android.com%2Fdetails%3Fi...k.tampermonkey" target="_blank"&gt;Android market&lt;/a&gt;.&amp;#160; &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Launch the application. It will open a browser which acts as the host for the scripts.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Click on Menu –&amp;gt; “Context” –&amp;gt; “Get new scripts…” to add new scripts from &lt;a href="http://userscripts.org" target="_blank"&gt;Userscripts.org&lt;/a&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Browser through the pages and the installed userscripts will be activated by TamperMonkey. &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;TamperMonkey will take care of updating the scripts as well.&amp;#160; &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;The app is still in beta and it seems to be slow on my Nexus One. More info &lt;a href="http://forum.xda-developers.com/showthread.php?t=990768" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-2058836968446787771?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/fxZ792WM-LiDEiArWGf9kWTivQs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fxZ792WM-LiDEiArWGf9kWTivQs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/fxZ792WM-LiDEiArWGf9kWTivQs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/fxZ792WM-LiDEiArWGf9kWTivQs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/1kCi_Yhthxo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/2058836968446787771/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=2058836968446787771" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/2058836968446787771?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/2058836968446787771?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/1kCi_Yhthxo/greasemonkey-for-android-via.html" title="GreaseMonkey for Android via TamperMonkey" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-3VZMt-MKUmk/Ten4Nird1ZI/AAAAAAAAOD4/XQXZfmNFQAc/s72-c/install_thumb%25255B7%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/06/greasemonkey-for-android-via.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0EHR3s6cCp7ImA9WhZWGUs.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-5565397067846417763</id><published>2011-05-21T12:37:00.001+05:30</published><updated>2011-05-21T12:37:16.518+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-21T12:37:16.518+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Ideas" /><category scheme="http://www.blogger.com/atom/ns#" term="Innovation" /><title>Precursor, a novel touch screen layer</title><content type="html">&lt;p align="justify"&gt;PreCursor is a research project worked upon by &lt;a href="http://www.pranavmistry.com/" target="_blank"&gt;Pranav Mistry&lt;/a&gt; of the MIT Fluid Interfaces group. The project aims at building an invisible layer that hovers in front of the screen and enables novel interaction that reaches beyond the current touch screens. PreCursor provides the missing hover interaction to touch screens. &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;&lt;center&gt;&lt;iframe src="http://www.youtube.com/embed/9gLjXjVzgAQ" frameborder="0" width="560" height="349" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/center&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-5565397067846417763?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6WvpG2hOXELqN8KeyH1EhJ9ckdY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6WvpG2hOXELqN8KeyH1EhJ9ckdY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6WvpG2hOXELqN8KeyH1EhJ9ckdY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6WvpG2hOXELqN8KeyH1EhJ9ckdY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/qnB7jE5uq7E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/5565397067846417763/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=5565397067846417763" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/5565397067846417763?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/5565397067846417763?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/qnB7jE5uq7E/precursor-novel-touch-screen-layer.html" title="Precursor, a novel touch screen layer" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/9gLjXjVzgAQ/default.jpg" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/05/precursor-novel-touch-screen-layer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMCRHo8cCp7ImA9WhZWEEU.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-4943659170714746155</id><published>2011-05-11T09:31:00.001+05:30</published><updated>2011-05-11T09:31:05.478+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-11T09:31:05.478+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>Google App Engine 1.5: What’s new</title><content type="html">&lt;p align="justify"&gt;The first day of &lt;a href="http://www.google.com/events/io/2011/agenda.html" target="_blank"&gt;Google I/O 2011&lt;/a&gt; is over and Google has already released updates to bunch of its products. Google App Engine is no exception to that. Google App Engine got upgraded to 1.5 with some interesting features. This upgrade is mainly focused on the maintenance aspect of your applications. New features are being introduced to ease the maintenance process and build a better application infrastructure. A new runtime for &lt;a href="http://golang.org/" target="_blank"&gt;Go Programming Language&lt;/a&gt; has also been introduced. &lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Highlights&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Backends&lt;/strong&gt;:&amp;#160; Now, you can write applications which can run for a longer duration of time. Backends are developer-controlled, long-running, addressable sets of instances which are as large as the developer specifies. There are no request deadlines, they can be started and stopped (or dynamically start when called), they can use between 128M and 1G of memory and proportional CPU. With this, you can think about creating applications like reporting, etc.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Pull Queues&lt;/strong&gt;: Now the applications can pull tasks from the queue whenever it is ready to process. Pull Queues linked with Backends will be really handy for batch processing.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;strong&gt;Go runtime&lt;/strong&gt;: The third official programming language to be supported by Google App Engine. An experimental runtime for &lt;a href="http://golang.org/" target="_blank"&gt;Go Programming Language&lt;/a&gt; has also been bundled with 1.5 upgrade. Not sure how many developers are actually using Go (Of course, some Googlers will be using it).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;HTTP response size: HTTP request and response size has been upgraded to 32 MB.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Apart from the owners, the users who have uploaded the code can also download it from the admin console.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;Google App Engine is going to be graduated from Preview later this year. Check out the &lt;a href="http://googleappengine.blogspot.com/2011/05/year-ahead-for-google-app-engine.html" target="_blank"&gt;new pricing model&lt;/a&gt; once it goes live. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;For more details, check out the official &lt;a href="http://googleappengine.blogspot.com/2011/05/app-engine-150-release.html" target="_blank"&gt;blog post&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-4943659170714746155?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wLUbxKdm4ADz0z4WWjo5VrYAPqI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wLUbxKdm4ADz0z4WWjo5VrYAPqI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wLUbxKdm4ADz0z4WWjo5VrYAPqI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wLUbxKdm4ADz0z4WWjo5VrYAPqI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/BrD7Zvx7VZo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/4943659170714746155/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=4943659170714746155" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/4943659170714746155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/4943659170714746155?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/BrD7Zvx7VZo/google-app-engine-15-whats-new.html" title="Google App Engine 1.5: What’s new" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/05/google-app-engine-15-whats-new.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08MRXkyfSp7ImA9WhZXEU0.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-4059306401192320614</id><published>2011-04-30T02:08:00.002+05:30</published><updated>2011-04-30T02:14:44.795+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-30T02:14:44.795+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Labs" /><category scheme="http://www.blogger.com/atom/ns#" term="Mozilla" /><title>Build your own browser with Mozilla Chromeless</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: justify;"&gt;Today I came across an interesting article posted on Hacker News about a labs product from Mozilla - &lt;a href="http://mozillalabs.com/chromeless" target="_blank"&gt;Chromeless&lt;/a&gt;. In short, this project allows you to create your own browser interface using standard web technologies such as HTML, JavaScript, CSS, etc.&amp;nbsp;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;b&gt;What is Mozilla Chromeless?&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;The “&lt;a href="http://mozillalabs.com/chromeless" target="_blank"&gt;Chromeless&lt;/a&gt;” project experiments with the idea of removing the current browser user interface and replacing it with a flexible platform which allows for the creation of new browser UI using standard web technologies such as HTML, CSS and JavaScript.&amp;nbsp;In other words, this lets you create native applications using standard web technologies.&amp;nbsp;&lt;/div&gt;&lt;br /&gt;
&lt;div style="text-align: justify;"&gt;&lt;b&gt;What can I do?&lt;/b&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Though the project was originally started to facilitate building of custom browsers, it has eventually become a platform for building native apps. So, you can build native apps powered by HTML5.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Chromeless uses the same rendering engine (Gecko) used by Firefox 4.0. It supports WebM, multitouch, hardware acceleration, etc.&lt;/li&gt;
&lt;li&gt;You can add menus and key bindings for your app. Then, you can package your application as a standalone native app.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Chromeless supports embedding web contents. Using this, you can design your own browser.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;img border="0" height="319" src="http://1.bp.blogspot.com/-qKvmX2lla-k/TbsgWUwnTpI/AAAAAAAAOCQ/tHFUvcherbg/s400/Screen+shot+2011-04-30+at+2.01.02+AM.png" width="400"style="border: 0px"/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Browser built using Chromeless&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;Where can I get this?&lt;/b&gt;&lt;/div&gt;The "Chromeless" project is hosted on GitHub. Get the source code from &lt;a href="http://github.com/mozilla/chromeless" target="_blank"&gt;here&lt;/a&gt;. The project requires Python 2.5-2.7. Read &lt;a href="https://github.com/mozilla/chromeless/blob/master/README.md" target="_blank"&gt;this document&lt;/a&gt; to get started.&lt;br /&gt;
&lt;br /&gt;
-- Varun&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-4059306401192320614?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U7nRax3D7ntkUdGpcXZaMs6Re3Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U7nRax3D7ntkUdGpcXZaMs6Re3Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U7nRax3D7ntkUdGpcXZaMs6Re3Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U7nRax3D7ntkUdGpcXZaMs6Re3Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/scQrwv92mgU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/4059306401192320614/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=4059306401192320614" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/4059306401192320614?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/4059306401192320614?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/scQrwv92mgU/build-your-own-browser-with-mozilla.html" title="Build your own browser with Mozilla Chromeless" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-qKvmX2lla-k/TbsgWUwnTpI/AAAAAAAAOCQ/tHFUvcherbg/s72-c/Screen+shot+2011-04-30+at+2.01.02+AM.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/04/build-your-own-browser-with-mozilla.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AERXg_fip7ImA9WhZRFUo.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-971557347592498575</id><published>2011-04-12T08:03:00.001+05:30</published><updated>2011-04-12T08:05:04.646+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-12T08:05:04.646+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="YouTube" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>Google Yoodle</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="text-align: justify;"&gt;If you are an internet user, I am sure you would have heard about &lt;a href="http://en.wikipedia.org/wiki/Google_logo#Google_Doodle" target="_blank"&gt;Google Doodle&lt;/a&gt; - Google's special logos for special events. Heard about Google Yoodle?? Yoodle is YouTube's version of Google Doodle. Today, while I was watching some videos on YouTube, I noticed YouTube sporting a new logo. It is to celebrate the "50th Anniversary of the First Human Spaceflight". Clicking on the logo will take you to a free film "&lt;a href="http://www.youtube.com/firstorbit?feature=yoodle" target="_blank"&gt;First Orbit&lt;/a&gt;" on YouTube. Check the address bar on the page and you will find this - "feature=yoodle". This feature seems to be there for &lt;a href="http://www.sharkeydesign.com/news/?p=425" target="_blank"&gt;around 9 months&lt;/a&gt; now. If you know abt the first Yoodle, post the details here as a comment.&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img style="border: 0px;" src="http://2.bp.blogspot.com/-p3m443sGaiw/TaO41gt_h7I/AAAAAAAAOBc/O5Fg_MsizCI/s1600/YT.png" /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="text-align: justify;"&gt;-- Varun&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-971557347592498575?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qVSyMNzjT5EvW0vK5xr0RG1NK64/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qVSyMNzjT5EvW0vK5xr0RG1NK64/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qVSyMNzjT5EvW0vK5xr0RG1NK64/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qVSyMNzjT5EvW0vK5xr0RG1NK64/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/gVCR9b7YGQ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/971557347592498575/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=971557347592498575" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/971557347592498575?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/971557347592498575?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/gVCR9b7YGQ4/google-yoodle.html" title="Google Yoodle" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-p3m443sGaiw/TaO41gt_h7I/AAAAAAAAOBc/O5Fg_MsizCI/s72-c/YT.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/04/google-yoodle.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcFR3c_fSp7ImA9WhZREUk.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-7920436005796070650</id><published>2011-04-07T09:00:00.000+05:30</published><updated>2011-04-07T09:00:16.945+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-07T09:00:16.945+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Easter egg" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>Google's 'Tilt' Easter Egg</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Friends at &lt;a href="http://searchengineland.com/funny-search-for-tilt-on-google-via-iphone-71744" target="_blank"&gt;Search Engine Land&lt;/a&gt; have just discovered an interesting Easter Egg on the lines of &lt;a href="http://www.google.com/search?q=recursion" target="_blank"&gt;recursion&lt;/a&gt;&amp;nbsp;- Just type any of these keywords '&lt;a href="http://www.google.com/search?q=tilt" target="_blank"&gt;Tilt&lt;/a&gt;', '&lt;a href="http://www.google.com/search?q=tilted" target="_blank"&gt;Tilted&lt;/a&gt;', or '&lt;a href="http://www.google.com/search?q=askew" target="_blank"&gt;Askew&lt;/a&gt;'. If you find out more such keywords, let me know through comments. &lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-272ILFqbMIo/TZ0udm3CFdI/AAAAAAAAOA8/3fKCkGjYVbM/s320/device.png" width="192" /&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-7hXWKJp4Poo/TZ0uguDybPI/AAAAAAAAOBA/uzSTNHZmVW4/s320/photo.PNG" width="213" /&gt;&lt;/div&gt;-- Varun&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-7920436005796070650?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Ahka--GbFnwrWBjApsqEuYySUUg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ahka--GbFnwrWBjApsqEuYySUUg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Ahka--GbFnwrWBjApsqEuYySUUg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Ahka--GbFnwrWBjApsqEuYySUUg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/GMTtY4Gf_Ck" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/7920436005796070650/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=7920436005796070650" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7920436005796070650?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/7920436005796070650?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/GMTtY4Gf_Ck/googles-tilt-easter-egg.html" title="Google's 'Tilt' Easter Egg" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-272ILFqbMIo/TZ0udm3CFdI/AAAAAAAAOA8/3fKCkGjYVbM/s72-c/device.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/04/googles-tilt-easter-egg.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMHR306eip7ImA9WhZTFEw.&quot;"><id>tag:blogger.com,1999:blog-2950942336441072027.post-2312193242247980607</id><published>2011-03-18T08:33:00.001+05:30</published><updated>2011-03-18T08:33:56.312+05:30</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-18T08:33:56.312+05:30</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Research" /><title>Call for developers</title><content type="html">&lt;p align="justify"&gt;I watched an interesting video recently on TED. It’s a talk by &lt;a href="http://en.wikipedia.org/wiki/Salman_Khan_(educator)" target="_blank"&gt;Salman Khan&lt;/a&gt; of &lt;a href="http://en.wikipedia.org/wiki/Khan_Academy" target="_blank"&gt;Khan Academy&lt;/a&gt; “Let’s use video to reinvent education”. The talk was very impressive. It reminded me off some of the work I have &lt;a href="http://scholar.google.com/scholar?hl=en&amp;amp;q=%22Varunkumar+Nagarajan%22&amp;amp;btnG=Search&amp;amp;as_sdt=0%2C5&amp;amp;as_ylo=&amp;amp;as_vis=0" target="_blank"&gt;done&lt;/a&gt; on the related space. Back in my college days, me and couple of other friends along with a research scholar “Yaser Nouh” worked on an “Intelligent Tutoring System” (based on Bayesian model). Bayesian Cognitive model was proposed and we implemented a working prototype of it. But, we never implemented it as a product. “Something can be called me as an initiative only if its completed”. Hence, calling for interested developers to take this forward. If anyone is interested in implementing the paper and productize it, do pass a comment in this post. I will be happy to help. Some of our work can be found &lt;a href="http://scholar.google.com/scholar?hl=en&amp;amp;q=%22Varunkumar+Nagarajan%22&amp;amp;btnG=Search&amp;amp;as_sdt=0%2C5&amp;amp;as_ylo=&amp;amp;as_vis=0" target="_blank"&gt;here&lt;/a&gt; and &lt;a href="http://scholar.google.com/scholar?hl=en&amp;amp;q=%22Yaser+Nouh%22&amp;amp;btnG=Search&amp;amp;as_sdt=0%2C5&amp;amp;as_ylo=&amp;amp;as_vis=0" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;a name='more'&gt;&lt;/a&gt;  &lt;p align="center"&gt;&lt;iframe title="YouTube video player" height="390" src="http://www.youtube.com/embed/nTFEUsudhfs" frameborder="0" width="640" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;-- Varun&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2950942336441072027-2312193242247980607?l=blog.varunkumar.me' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6fsyX6mjGT3c3QE6TtVp3mJvS4k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6fsyX6mjGT3c3QE6TtVp3mJvS4k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6fsyX6mjGT3c3QE6TtVp3mJvS4k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6fsyX6mjGT3c3QE6TtVp3mJvS4k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/varunkumar/scratchpad/~4/cmp6WOOp4cE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://blog.varunkumar.me/feeds/2312193242247980607/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=2950942336441072027&amp;postID=2312193242247980607" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/2312193242247980607?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2950942336441072027/posts/default/2312193242247980607?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/varunkumar/scratchpad/~3/cmp6WOOp4cE/call-for-developers.html" title="Call for developers" /><author><name>Varunkumar Nagarajan</name><uri>https://profiles.google.com/108687347728474862071</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-x8lDrdZs-8Y/AAAAAAAAAAI/AAAAAAAAYHU/7KRY78wIqGs/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://img.youtube.com/vi/nTFEUsudhfs/default.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://blog.varunkumar.me/2011/03/call-for-developers.html</feedburner:origLink></entry></feed>

