<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="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" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-7937326</atom:id><lastBuildDate>Sat, 28 Jan 2012 05:09:03 +0000</lastBuildDate><category>processing</category><category>typeface</category><category>cli</category><category>icons</category><category>news</category><category>bug</category><category>books</category><category>apt-get</category><category>fonts</category><category>offline</category><category>hosting</category><category>tsa</category><category>inkface</category><category>chrome</category><category>sprint</category><category>audio</category><category>OSiM mobile open-source nokia Openmoko</category><category>git</category><category>extension</category><category>rss</category><category>thoughts</category><category>gdata</category><category>email</category><category>APL</category><category>mashup</category><category>c++</category><category>Openmoko</category><category>reading</category><category>n900</category><category>visualization</category><category>silicon-valley</category><category>LVM</category><category>java</category><category>authentication</category><category>wifi</category><category>friendfeed</category><category>toolchain</category><category>graphics</category><category>battery</category><category>themes</category><category>networking</category><category>c</category><category>patents</category><category>maemo</category><category>readerscope</category><category>desktop</category><category>googlenews</category><category>opinion</category><category>festival</category><category>n810</category><category>command-line</category><category>design</category><category>payment</category><category>ubuntu</category><category>nvidia</category><category>open-source</category><category>google</category><category>subversion</category><category>OSiM</category><category>technology</category><category>podcast</category><category>packaging</category><category>openmoko android neo1973 hacking</category><category>magic</category><category>demo</category><category>GUI</category><category>hollywood</category><category>nokia</category><category>clutter</category><category>opensource</category><category>plugin</category><category>animation</category><category>macbook</category><category>canvas</category><category>code</category><category>image</category><category>async</category><category>inkscape</category><category>comments</category><category>repository</category><category>webworkers</category><category>share</category><category>hack</category><category>fragmentation</category><category>text-to-speech</category><category>idealistic</category><category>notify-send</category><category>music</category><category>deb</category><category>gae</category><category>wikipedia</category><category>Einstein</category><category>twitter</category><category>pygame</category><category>foss</category><category>cairo</category><category>gmail</category><category>mobile</category><category>show</category><category>stacktrace</category><category>html5</category><category>asserts</category><category>flattr</category><category>storage</category><category>art</category><category>phone</category><category>freerunner</category><category>stackoverflow</category><category>growlnotify</category><category>mutt</category><category>iphone</category><category>travel</category><category>css</category><category>micropayment</category><category>eclipse</category><category>vim</category><category>guitar</category><category>featurecreep</category><category>review</category><category>palmpre</category><category>xml</category><category>business</category><category>beatifier</category><category>economy</category><category>cloud</category><category>india</category><category>bash</category><category>game</category><category>webgl</category><category>johnmayer</category><category>movie</category><category>opengl-es</category><category>android</category><category>text2speech</category><category>chromeos</category><category>svg</category><category>digg</category><category>software</category><category>html</category><category>python xmlrpc apache</category><category>coding</category><category>dropbox</category><category>accelerometer</category><category>testing</category><category>vcs</category><category>pre</category><category>webapps</category><category>goobook</category><category>node.js</category><category>google-app-engine</category><category>evas</category><category>tts</category><category>javascript</category><category>cache</category><category>debugging</category><category>apple</category><category>ipad</category><category>social</category><category>fedora</category><category>youtube</category><category>evolution</category><category>zoom</category><category>opengl</category><category>sdk</category><category>python</category><category>processingjs</category><category>browser</category><category>debian</category><category>bono</category><category>thunderbird</category><category>hero</category><category>science</category><category>googlereader</category><category>memory leak</category><category>fretsonfire</category><category>linux</category><category>crash</category><category>enlightenment</category><category>tabs</category><category>programming</category><category>dvcs</category><category>politics</category><category>random</category><category>htc</category><category>multithreading</category><category>webdesign</category><category>altcanvas</category><category>book</category><category>reddit</category><category>television</category><category>music ipod</category><category>time</category><category>source</category><category>economics</category><category>languages</category><category>search</category><category>microsoft</category><category>quotes</category><category>airtravel</category><category>reader</category><title>Code Overtones</title><description /><link>http://jyro.blogspot.com/</link><managingEditor>noreply@blogger.com (Jayesh)</managingEditor><generator>Blogger</generator><openSearch:totalResults>195</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/rss+xml" href="http://feeds.feedburner.com/codeovertones" /><feedburner:info uri="codeovertones" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-5111114848213581693</guid><pubDate>Sun, 27 Nov 2011 18:53:00 +0000</pubDate><atom:updated>2011-11-27T10:54:24.811-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">show</category><category domain="http://www.blogger.com/atom/ns#">art</category><category domain="http://www.blogger.com/atom/ns#">random</category><category domain="http://www.blogger.com/atom/ns#">television</category><category domain="http://www.blogger.com/atom/ns#">movie</category><title>Master pieces from screen</title><description>A key characteristic of memorable movies/shows is they have a dense storyline.&lt;br /&gt;
&lt;br /&gt;
They tell a lot of things in very short span of time. When you recall individual parts of these stories, they seem a lot bigger by themselves. Over time different plots from the &amp;nbsp;movie bubble up in your memory and as you review them at your own pace you see the details and angles you missed before. The separate scenes appear much longer in your mind, when they actually take few minutes on screen. After years when you watch the movie again, you feel surprised that all those things happened in the span of mere couple of hours.&lt;br /&gt;
&lt;br /&gt;
A classic example is Godfather. Many times I find it hard to believe that Michael Corleone turns from a soldier to the head of mafia family only in Godfather-I. That scene when he protects his father in hospital, that scene when he fumbles for revolver in restaurant bathroom before making his first kill, his exile in Italy when he gets married first time and subsequently looses her, the scene when Vito Corleone dies while chasing his grandson, the scene when Michael makes an offer to Moe Greene and dominates Fredo, the scene of baptism ceremony with killings of his competitors interspersed. Each one of these scenes makes deep impression in our memories, but only take few minutes on screen.&lt;br /&gt;
&lt;br /&gt;
Recently I had the same experience when I watched first episode of Mad Men again. So many things happen in that first episode. It gives the first glimpse of every character's character. A dialog, a casual comment, a side glance or even a pause tells so much about the character. None of it is unintended. There is great meaning even in non-action, like when Don won't take Pete's extended hand calling him "Buddy". Of course you don't get it the first time. But after you have watched the characters for four seasons and you have known their true natures, you really appreciate how their first appearance in that first episode was thoughtfully composed to give you hints of their attitudes and aptitudes. It must take a master mind to compose and direct such potent work.&lt;br /&gt;
&lt;br /&gt;
I plan to watch the first four seasons of Mad Men again, before the fifth one starts in March next year.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-5111114848213581693?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/oX34bAn_7VU" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/oX34bAn_7VU/master-pieces-from-screen.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/11/master-pieces-from-screen.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-4680022496715159799</guid><pubDate>Fri, 23 Sep 2011 02:49:00 +0000</pubDate><atom:updated>2011-09-22T19:52:26.944-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">command-line</category><category domain="http://www.blogger.com/atom/ns#">cli</category><category domain="http://www.blogger.com/atom/ns#">node.js</category><title>How to write interactive CLI utility in node.js</title><description>Node.js is mainly a server development framework - accepting requests and responding to them over network. But sometimes need arises to write a CLI utility using node.js. The asynchronous nature of node.js can make it difficult to write a simple CLI utility that will ask series of questions and accept answers from the user. Recently I ran into such situation, here is how I wrote one. (Learnt about the &lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;ask&lt;/span&gt; function from this &lt;a href="http://st-on-it.blogspot.com/2011/05/how-to-read-user-input-with-nodejs.html"&gt;post&lt;/a&gt;)&lt;br /&gt;
&lt;a href="https://gist.github.com/1236634"&gt;gist&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/1236634.js?file=node-cli.js"&gt;
&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-4680022496715159799?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/wiywIQkrZgo" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/wiywIQkrZgo/how-to-write-interactive-cli-utility-in.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/09/how-to-write-interactive-cli-utility-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-4321292539618330631</guid><pubDate>Sun, 28 Aug 2011 16:11:00 +0000</pubDate><atom:updated>2011-08-28T09:11:34.122-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">books</category><category domain="http://www.blogger.com/atom/ns#">review</category><category domain="http://www.blogger.com/atom/ns#">reading</category><title>The Gods Themselves by Isaac Asimov</title><description>&lt;a href="http://www.goodreads.com/book/show/41821.The_Gods_Themselves" style="float: left; padding-right: 20px;"&gt;&lt;img alt="The Gods Themselves" border="0" src="http://ecx.images-amazon.com/images/I/51C9NNP0FKL._SX106_.jpg" /&gt;&lt;/a&gt;&lt;a href="http://www.goodreads.com/book/show/41821.The_Gods_Themselves"&gt;The Gods Themselves&lt;/a&gt; by &lt;a href="http://www.goodreads.com/author/show/16667.Isaac_Asimov"&gt;Isaac Asimov&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
My rating: &lt;a href="http://www.goodreads.com/review/show/202903783"&gt;5 of 5 stars&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I started reading this book, when I found that it was a Hugo award winner and I was looking for some intellectually entertaining science fiction. It didn't disappoint me. OTOH it turned out to be one of the best scifi novels I've ever read.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It takes real imaginative power and also thorough knowledge of science and technology to weave a story around them. &lt;a href="http://www.goodreads.com/author/show/16667.Isaac_Asimov" title="Isaac Asimov"&gt;Asimov&lt;/a&gt; has tackled three extremely imaginative topics - Parallel Universes, Procreation that takes 3 individuals of a species instead of 2, Life on Moon - and he has done full justice to each one of them.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.goodreads.com/review/list/6052014-jayesh-salvi"&gt;View all my reviews&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-4321292539618330631?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/Zk8vWr0zpXA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/Zk8vWr0zpXA/gods-themselves-by-isaac-asimov.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/08/gods-themselves-by-isaac-asimov.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-3317612822075642910</guid><pubDate>Fri, 26 Aug 2011 13:58:00 +0000</pubDate><atom:updated>2011-08-26T07:00:21.960-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">webgl</category><category domain="http://www.blogger.com/atom/ns#">opengl-es</category><category domain="http://www.blogger.com/atom/ns#">graphics</category><title>Why OpenGL ES is so hard?</title><description>Because it takes minimum &lt;b&gt;76 lines&lt;/b&gt; of code to produce even the least meaningful output - A straight line. (And that too, only after doing unfair hard coding of matrix values)&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://gist.github.com/1173433"&gt;Gist&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/1173433.js?file=minimum-opengles-code.html"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-zPUXn0dRUU8/TlemWcAQjqI/AAAAAAAAD-c/Q3LvGj63Hhw/s1600/Screen+shot+2011-08-26+at+7.27.17+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="218" src="http://4.bp.blogspot.com/-zPUXn0dRUU8/TlemWcAQjqI/AAAAAAAAD-c/Q3LvGj63Hhw/s320/Screen+shot+2011-08-26+at+7.27.17+PM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
[Do not confuse OpenGL ES with OpenGL. It might be possible to write a shorter program to do this task in OpenGL, but in OpenGL ES you need to use shaders even for the shortest of programs]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-3317612822075642910?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/zOLqE1DRGy8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/zOLqE1DRGy8/why-opengl-es-is-so-hard.html</link><author>noreply@blogger.com (Jayesh)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-zPUXn0dRUU8/TlemWcAQjqI/AAAAAAAAD-c/Q3LvGj63Hhw/s72-c/Screen+shot+2011-08-26+at+7.27.17+PM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/08/why-opengl-es-is-so-hard.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-1941862417547662778</guid><pubDate>Sat, 20 Aug 2011 10:35:00 +0000</pubDate><atom:updated>2011-08-20T03:35:45.184-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">debugging</category><category domain="http://www.blogger.com/atom/ns#">stacktrace</category><title>How to print stack trace anywhere in Javascript</title><description>It's well know how to print a stack trace after catching an exception/error in Javascript. But what if you are not catching anything? You see something happening at a particular line in code, but you want to know what's the code path through which the control flow reached that line when that interesting thing happened. In other words, you want to know what's the stack trace (series of function calls, starting from beginning of the program), at that particular line of code.&lt;br /&gt;
&lt;br /&gt;
It's quite easy. If you don't have an exception, create one. Then you can print the stack trace off of it. Like this (&lt;a href="https://gist.github.com/1158940"&gt;gist&lt;/a&gt;) ...&lt;br /&gt;
&lt;br /&gt;
&lt;script src="https://gist.github.com/1158940.js?file=stack-trace-without-exception.js"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-1941862417547662778?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/REEBWS0l7gM" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/REEBWS0l7gM/how-to-print-stack-trace-anywhere-in.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/08/how-to-print-stack-trace-anywhere-in.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-1295944693281610452</guid><pubDate>Tue, 16 Aug 2011 15:36:00 +0000</pubDate><atom:updated>2011-08-16T08:36:05.907-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">multithreading</category><category domain="http://www.blogger.com/atom/ns#">debugging</category><title>How to debug WebWorker threads?</title><description>WebWorkers offer your Web app a way to do multithreading. If your advanced web app does some number crunching keeping the CPU busy for a while, then it makes sense to do it in a separate thread instead of doing it in the main thread, which may lead to blocking the browser tab (Chrome) or the entire browser (Firefox and others). One of the troubles of writing programs in WebWorkers is, they are hard to debug. Two key mechanisms required for debugging a program are not available in WebWorkers - print statements (console.log is not available) and breakpoints (even if you manage to place breakpoints in the code running in WebWorker, they won't be hit).&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;During my work on &lt;a href="http://www.3dtin.com/"&gt;3DTin&lt;/a&gt;, I have learnt couple of techniques that help me debug my WebWorker code.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;1. Use postMessage as replacement for console.log&lt;/b&gt;&lt;/div&gt;&lt;div&gt;postMessage is how you send some data from the WebWorker thread to the main thread. This is the primary way of returning the result of the computation you perform in WebWorker. But we can use it for other purposes too. Here is how you can use the postMessage mechanism for communicating both the successful response as well as debug messages.&lt;/div&gt;&lt;script src="https://gist.github.com/1149347.js?file=webworker-debug.js"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;b&gt;2. Catch exceptions and send their stack trace over postMessage&lt;/b&gt;&lt;/div&gt;&lt;div&gt;When an exception occurs in the code running in WebWorker, the debugger will print the line at which exception&amp;nbsp;occurred, but not the entire stack trace. In most cases the whole stack trace can help you find the root cause quickly. To achieve that, place most of your code that runs in the WebWorker inside a try-catch statement. Then in the catch clause extract the stack trace of the exception, format it nicely and send it to the main thread using postMessage, as discussed in the first technique above. Here is the exception handling code that helps you extract stack trace at least on Google Chrome and other Webkit browsers. I have cherry-picked it from the &lt;a href="http://stacktracejs.org/"&gt;stacktrace.js&lt;/a&gt; library. If you need a browser agnostic solution, paste the stacktrace.js library at the beginning of your WebWorker code.&lt;/div&gt;&lt;script src="https://gist.github.com/1149363.js?file=webworker-stacktrace.js"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;I hope this makes your life easy while debugging WebWorker code.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-1295944693281610452?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/2zY55EqAt70" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/2zY55EqAt70/how-to-debug-webworker-threads.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/08/how-to-debug-webworker-threads.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-1438153487150593514</guid><pubDate>Fri, 29 Apr 2011 05:55:00 +0000</pubDate><atom:updated>2011-04-28T22:55:07.475-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">quotes</category><title>Elon Musk quote</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;Some original thoughts I've heard about running a company (from the latest &lt;a href="http://www.businessweek.com/magazine/content/11_19/b4227076914379.htm"&gt;Elon Musk interview&lt;/a&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Helvetica, Arial, sans-serif; font-size: 14px; line-height: 21px;"&gt;I run both [electric car company] Tesla (&lt;a href="http://investing.businessweek.com/research/stocks/snapshot/snapshot.asp?symbol=TSLA" style="color: #007cd5; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: underline;"&gt;TSLA&lt;/a&gt;) and SpaceX myself. It's a heavy workload, and I've never really wanted to run companies. Unfortunately, I came to the conclusion I was better than the CEOs we hired. If I'm not CEO, I can't make the inventions happen in the way they need to happen. Professional managers—MBA CEOs—are not very creative or adaptable, and their skills don't suit a startup. Business is like a multidimensional probabilistic chessboard. The rules aren't set, and the same moves don't always make you win. A lot of people can be really good in a set-piece battle; my biggest differentiating skill is I can invent new pieces.&lt;/span&gt;&lt;/blockquote&gt;When you think you are better than others, admit it.&lt;br /&gt;
&lt;br /&gt;
&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/7937326-1438153487150593514?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/Iyf2R6UyJOE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/Iyf2R6UyJOE/elon-musk-quote.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/04/elon-musk-quote.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-5806849673719833534</guid><pubDate>Fri, 04 Feb 2011 14:21:00 +0000</pubDate><atom:updated>2011-02-04T06:21:40.010-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">java</category><category domain="http://www.blogger.com/atom/ns#">node.js</category><category domain="http://www.blogger.com/atom/ns#">html5</category><category domain="http://www.blogger.com/atom/ns#">python</category><category domain="http://www.blogger.com/atom/ns#">programming</category><category domain="http://www.blogger.com/atom/ns#">c</category><category domain="http://www.blogger.com/atom/ns#">languages</category><title>JavaScript is the next C</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;I've been coding in JavaScript for almost a year now. I find it a decent language to write code in. The code written in JavaScript doesn't look as pretty as python, but it doesn't look as bloated as Java either. But that's not why I chose the title of this post. It's everything else that's happening around JavaScript that makes me think that it's going to play as significant a role in computing as C has played.&lt;br /&gt;
&lt;br /&gt;
Before C, there was assembly. (I know there were many other languages before programming evolved from assembly to C, but I am talking about only the mainstream candidates.) The abstraction that C provided was perfect enough that programmers didn't have to learn about the Assembly details. That made C the perfect candidate to build a solid layer on top of Assembly. Programmers could write accounting software, graphic programs, games without bothering about what CPU architecture and memory bus size they were running on. It all worked and C became an integral part of computing stack. Today we don't use C to write new programs, but all operating systems, their device drivers, native libraries are written in C. C has become &lt;a href="http://www.pbs.org/cringely/pulpit/2007/pulpit_20070629_002360.html"&gt;so ubiquitous that it's now invisible&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
We have spent a long time searching for a candidate language to build the next layer, on top of the one built by C. C made our code hardware-agnostic. But over time we developed a variety of operating system platforms that created their own stacks of libraries. With the advent of Internet we needed to transfer code over the wire and be sure that it can be run on all the machines irrespective of which platform they were running. We needed a write-once-run-everywhere solution. Java emerged as the solution to specifically fill that need. For a period of time, it seemed it would indeed be the one. But for several reasons it failed. Today when we are deciding a platform independent solution to write a GUI program, what number does Swing score in our preferred list? Java did a great job of freeing the programmers from worries of memory management. But the main reason for its failure is probably its awkward ownership by a single commercial entity Sun (and now Oracle). The lawsuit Google is facing over Android is enough to corroborate this. If someone can sue you for using their language, then how can such language be adopted by entire industry.&lt;br /&gt;
&lt;br /&gt;
The latest candidate to build the next abstraction layer in the computing stack is JavaScript. It's hardly a new language. It's hardly a perfect language. But there are two technologies that will make JavaScript the next C - HTML5 and Node.js.&lt;br /&gt;
&lt;br /&gt;
HTML5 (and whatever goes under that umbrella name) is a new web framework whose primary programming language is JavaScript. It is bound to succeed, in fact if you consider it as just a new fancy name for HTML then it has already&amp;nbsp;succeeded. It's not developed by a single company, but many big guns are simultaneously promoting it &amp;nbsp;- Google, Mozilla, Apple, Microsoft (by accepting most of the standard for IE9), are writing virtual machines that keep improving the speed of JavaScript. The new age behemoths - Twitter and Facebook - have strengthened HTML5 merely by adopting it.&lt;br /&gt;
&lt;br /&gt;
On the other hand, Node.js has become a great success. It has a teeming community around it. The success of a platform depends on the libraries its provides to do various tasks. Just look at &lt;a href="https://github.com/ry/node/wiki/modules"&gt;this wiki page&lt;/a&gt; that lists different Node.js modules to accomplish various tasks. I spent last week writing a &lt;a href="http://blog.3dtin.com/export-smooth-models-in-stl-and-obj"&gt;factory server&lt;/a&gt; for &lt;a href="http://www.3dtin.com/"&gt;3DTin&lt;/a&gt; using Node.js. Everything I needed - from binary encoding library to canvas rendering libraries - I got it from this page. And there are more than one option for each job. Most of the libraries are nascent and will mature over coming few months. But they are a strong sign of a solid platform taking shape.&lt;br /&gt;
&lt;br /&gt;
Yet another sign of JavaScript's growing might is, its choice as a target language for compilers of other languages. There are projects compiling &lt;a href="http://ejohn.org/blog/ruby-vm-in-javascript/"&gt;Ruby&lt;/a&gt;, &lt;a href="http://pyjs.org/"&gt;Python&lt;/a&gt;, &lt;a href="http://code.google.com/webtoolkit/"&gt;Java&lt;/a&gt;&amp;nbsp;right into JavaScript. The shortcomings of JavaScript as a language are being fixed by many frameworks successfully, think of jQuery. Libraries like &lt;a href="http://documentcloud.github.com/underscore/"&gt;Underscore.js&lt;/a&gt; or projects like &lt;a href="http://jashkenas.github.com/coffee-script/"&gt;CoffeeScript&lt;/a&gt; are making programming in JavaScript more fun.&lt;br /&gt;
&lt;br /&gt;
Between HTML5 and Node.js you can now be sure that if you write your next application in JavaScript it will run on any server, desktop or mobile. JavaScript will build that next layer in computing stack that we are waiting for and that's why it will be the next C - ubiquitous and then invisible.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-5806849673719833534?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/Gi2ePHXKUmI" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/Gi2ePHXKUmI/javascript-is-next-c.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/02/javascript-is-next-c.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-1332515713787473632</guid><pubDate>Sat, 08 Jan 2011 08:09:00 +0000</pubDate><atom:updated>2011-01-08T00:14:33.365-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">offline</category><category domain="http://www.blogger.com/atom/ns#">webworkers</category><category domain="http://www.blogger.com/atom/ns#">html5</category><category domain="http://www.blogger.com/atom/ns#">webapps</category><category domain="http://www.blogger.com/atom/ns#">cache</category><title>HTML5 offline cache - use swapCache carefully</title><description>HTML5 Offline caching is an incredibly useful feature that allows your users to load your website even when they are not connected to the Internet. When they visit your website first, the browser checks if your webpage mentions a cache manifest file in its html tag. If so, the browser downloads the manifest file and then downloads all the resources mentioned in that file. You are supposed to add all the resources that your webpage needs in the manifest file, so that when user is offline the browser can load the webpage from the cached version of those resources. You will find many articles that will help you implement offline caching for your website- like this &lt;a href="http://www.html5rocks.com/tutorials/appcache/beginner/"&gt;one&lt;/a&gt;. This post isn't about it.&lt;br /&gt;
&lt;br /&gt;
If you are using offline caching, you may want to use advanced features like handling the events that are fired when the browser is updating the cache. If you frequently change your webapp, this is a good idea. I handle these events in &lt;a href="http://www.3dtin.com/"&gt;3DTin&lt;/a&gt; to let the user know that the browser has found a newer version of the app on server and is now downloading it in background. When the download is complete, I show the user a refresh button which they can use to reload the page so that they can start using the new version.&lt;br /&gt;
&lt;br /&gt;
It was while coding this functionality that I came across the swapCache() API call. It sounded very cool and from some examples that I read I got to believe that when the cache download is finished (i.e. in the onupdateready handler), I can simply call swapCache() and user will start using the new version of my app. He/she won't have to reload the page. If you don't read the &lt;a href="http://www.w3.org/TR/html5/offline.html#application-cache-api"&gt;documentation&lt;/a&gt; of swapCache carefully you will get the same impression from simple examples around the net. It may not be a big issue, if your cache contains passive resources like image files. But my erroneous interpretation of swapCache led to a nasty bug in 3DTin few days ago, because I am caching javascript files too.&lt;br /&gt;
&lt;br /&gt;
The documentation clearly says:&lt;br /&gt;
&lt;pre&gt;&lt;span style="margin-left: 20px;"&gt;[swapCache] does not cause previously-loaded resources to be reloaded; for example, images do not suddenly get reloaded and style sheets and scripts do not get reparsed or reevaluated. The only change is that subsequent requests for cached resources will obtain the newer copies.&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;
This has huge impact if you are loading javascript or css files from cache. In my case, I use WebWorkers which load a separate javascript file after they are started. When 3DTin cache was updated by the browser and swapCache was called, the javascript file that WebWorker used to load was at a different version than all the other files that were loaded when webpage was opened. This led to failures that left me scratching my head for some time. Eventually when I realized this is what was happeneing, I stopped calling swapCache() and instead showed user a button to reload the app manually.&lt;br /&gt;
&lt;br /&gt;
I hope this post will save you from doing the same mistake that I did.&lt;/div&gt;&lt;br /&gt;
&lt;a href="http://flattr.com/thing/113848/HTML5-offline-cache-use-swapCache-carefully" target="_blank"&gt;&lt;br /&gt;
&lt;img src="http://api.flattr.com/button/flattr-badge-large.png" alt="Flattr this" title="Flattr this" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-1332515713787473632?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/owTt4QxEZjA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/owTt4QxEZjA/html5-offline-cache-use-swapcache.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>2</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/01/html5-offline-cache-use-swapcache.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-873983489158196071</guid><pubDate>Thu, 06 Jan 2011 14:08:00 +0000</pubDate><atom:updated>2011-01-06T06:08:54.343-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">wikipedia</category><category domain="http://www.blogger.com/atom/ns#">economics</category><category domain="http://www.blogger.com/atom/ns#">micropayment</category><category domain="http://www.blogger.com/atom/ns#">flattr</category><category domain="http://www.blogger.com/atom/ns#">payment</category><category domain="http://www.blogger.com/atom/ns#">business</category><title>How Wikipedia and Flattr can together change the World</title><description>Wikipedia is one of the best things that could have happened to humanity. That's why it feels awkward to see Wikipedia beg for funds every year, due to their decision to not generate revenue via advertisements. A debate between whether contextual ads are better or worse than page wide banners of Jimmy Wales can go to any length, without result. On the other hand, there is however a middle ground. Why doesn't Wikipedia accept micropayments?&lt;br /&gt;
&lt;br /&gt;
&lt;a href="https://flattr.com/"&gt;Flattr&lt;/a&gt; is a micropayment service, that launched last year. If you have a blog, photo gallery or any "Thing" that has its webpage, you can place a Flattr button on it. Visitors of your page will click on that button, like they drop a dime in a tip jar. This action - called flattring - will gain you some monetary compensation. The way it works is, your visitor has a Flattr account that he/she fills with some money each month. During that month while browsing the web they encounter the Flattr buttons on various sites (like yours). They click on those buttons if they like what they see. At the end of the month Flattr divides their monthly payment by the number of Flattr-clicks they did in that month and pays that amount to the owners of those webpages.&lt;br /&gt;
&lt;br /&gt;
Although Flattr has a very compelling solution for micropayments, I have seen some problems with the model from my own experience. The biggest problem is that, your visitor has to have a Flattr account. Whenever I come across a flattr button while browsing, I wish I had a flattr account so that I could tip this guy. But creating a Flattr account costs at least&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: x-small; line-height: 15px;"&gt;€&lt;/span&gt;2. It is very small amount, but it's not as attractive as&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: x-small; line-height: 15px;"&gt;€&lt;/span&gt;0 (to see how big that difference is, read some books on behavioral&amp;nbsp;economics&amp;nbsp;listed at the end) and it's a monthly expense. It doesn't help that I do not see Flattr buttons all that often while browsing. If I were to see them as frequently as Facebook Like buttons, I would definitely go register with Flattr. In my opinion, this is going to be the biggest hurdle in adoption of Flattr or similar micropayment solutions.&lt;br /&gt;
&lt;br /&gt;
My guess is, the people who register a Flattr account are the ones who also have a creative "Thing" on which they want to place the Flattr button. Take my example. I had Flattr account since it was invite-only, but I never saw any point activating it by putting money into it. I hardly come across 2-4 pages each month that have Flattr button. Only yesterday when it struck me that I can put a Flattr button on &lt;a href="http://www.3dtin.com/"&gt;3DTin&lt;/a&gt;, did I take the pain of adding 3 euros and activating my Flattr account. So it seems that content creators have a reason to register with Flattr. But they are the minority in the population of the internet. The majority of netizens are consumers. Unless the consumers adopt micropayment, the creators cannot hope to make meaningful living out of Flattr like schemes.&lt;br /&gt;
&lt;br /&gt;
Now imagine: What if Wikipedia places a Flattr button on each wikipedia page?&lt;br /&gt;
&lt;br /&gt;
I read at least 5 Wikipedia articles every day, I am sure if you are reading this post, you have similar appetite for Wikipedia. When we read those articles we thank that Wikipedia exists. But most of us didn't pay $25 when Jimmy Wales asks for it once a year. We get the benefit of wikipedia in micro packets everyday, so when it comes to compare the its benefit with a big monetary sum, we tend to value money more. Therefore micro payments is the ideal model for us to express our gratutide to wikipedia.&lt;br /&gt;
&lt;br /&gt;
If wikipedia adopts Flattr as their micropayment solution, overnight tons of people will open a Flattr account. And that is the exact impetus a service like Flattr needs to get over the critical mass. Once that limit is crossed, Flattr will be everywhere and will become a standard for micropayments. Then every content creator will be able to put Flattr button on their page with a confidence that their visitors will very likely be Flattr users too.&lt;br /&gt;
&lt;br /&gt;
Wikipedia is in a unique position to bring a revolution in online payment. Any micropayment solution they choose will become a standard for the web and it will benefit Wikipedia too, without allowing advertisements on their pages.&lt;br /&gt;
&lt;br /&gt;
So what's stopping this from happening?&lt;br /&gt;
&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=B00342VEP6&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0061353248&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-873983489158196071?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/VXYCNdM-cbc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/VXYCNdM-cbc/how-wikipedia-and-flattr-can-together.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>3</thr:total><feedburner:origLink>http://jyro.blogspot.com/2011/01/how-wikipedia-and-flattr-can-together.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-3439810723778506481</guid><pubDate>Tue, 30 Nov 2010 05:54:00 +0000</pubDate><atom:updated>2010-11-29T21:54:30.740-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">extension</category><category domain="http://www.blogger.com/atom/ns#">chromeos</category><category domain="http://www.blogger.com/atom/ns#">chrome</category><category domain="http://www.blogger.com/atom/ns#">google</category><category domain="http://www.blogger.com/atom/ns#">youtube</category><category domain="http://www.blogger.com/atom/ns#">browser</category><title>Youtube ETA - Chrome extension</title><description>If you have ever tried to watch a youtube video on a slow network connection, you will know the frustration I often face. Wondering when that red progress bar will reach its end. Thanks to a chrome extension like &lt;a href="https://chrome.google.com/extensions/detail/lgdfnbpkmkkdhgidgcpdkgpdlfjcgnnh"&gt;Stop Autoplay&lt;/a&gt;, I can let the youtube video open in background tab and let it buffer as I browse other webpages. But still I have to go back to the youtube video's tab to find out if the video is downloaded, can I start watching it?&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So I always wished someone had written an extension which will do something about this problem. After going through 3-4 pages of search results on chrome extension website with the query 'Youtube', I figured no such extension exists. This weekend, the itch became unbearable. So I peeked into the Stop Autoplay's short code and with some searching found out there exists a &lt;a href="http://code.google.com/apis/youtube/js_api_reference.html"&gt;Javascript API&lt;/a&gt; to control the youtube player's behavior. It provided the API calls that were sufficient for me to calculate the speed (in bytes-per-sec) at which youtube video is downloading. Combine that with total size and total duration of the video and I had the solution I was looking for.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;So I decided to write an extension out of it. You can get it from &lt;a href="https://chrome.google.com/extensions/detail/dihdfccldmpeiacniemennlegenkkhnh"&gt;here&lt;/a&gt;.&amp;nbsp;&lt;/div&gt;&lt;div style="text-align: right;"&gt;&lt;a href="http://1.bp.blogspot.com/_W6UcJjyXr24/TPSQNvj3JNI/AAAAAAAADrY/tnEw15IlICo/s1600/icon128.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_W6UcJjyXr24/TPSQNvj3JNI/AAAAAAAADrY/tnEw15IlICo/s1600/icon128.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;It does following things:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Pauses the video at the start, i.e. disables the autoplay&lt;/li&gt;
&lt;li&gt;It calculates an estimated time it would take to download the video completely. Shows it in a red box in the top left corner.&lt;/li&gt;
&lt;li&gt;It also prepends a short version of this estimated time to the title of page. So even if you are browsing in other tabs or windows, you can tell how much longer it is going to take, without visiting the youtube page.&lt;/li&gt;
&lt;li&gt;There is an instant of time, when the video is not yet downloaded completely, but if you start watching the video after that point, you can be assured that the entire video will be downloaded by the time you reach the end. That way it is guaranteed that you won't have any interruption while watching the video. The extension smartly calculates that instant and informs you by turning the red box into orange. It also adds '*' to the timestamp in title after this point.&lt;/li&gt;
&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;Give it a shot. The extension won't yet work with HTML5 player, I will fix that soon though.&lt;/div&gt;&lt;div&gt;&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/7937326-3439810723778506481?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/L0MWbs6f8og" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/L0MWbs6f8og/youtube-eta-chrome-extension.html</link><author>noreply@blogger.com (Jayesh)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_W6UcJjyXr24/TPSQNvj3JNI/AAAAAAAADrY/tnEw15IlICo/s72-c/icon128.png" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/11/youtube-eta-chrome-extension.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-2897933925718560811</guid><pubDate>Tue, 16 Nov 2010 03:49:00 +0000</pubDate><atom:updated>2010-11-15T19:49:27.661-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">airtravel</category><category domain="http://www.blogger.com/atom/ns#">tsa</category><title>Why secure airports when it's planes that fly?</title><description>With all the debate going over TSA's naked scanners and intimate pat-downs, I think one simple question is being totally ignored.&lt;br /&gt;
&lt;br /&gt;
Why secure the entire airport when it's only the planes that fly in the sky. The reason we need added security for air travel is their unique vulnerability as compared to other forms of transport. An accident or attack in mid-air can lead to nearly 100% fatality. Also planes can be used as weapons in even more significant disasters as demonstrated by 9/11. So the objective of securing air travel should be to keep the flying objects safe. Anything and anyone that boards the airliner should be thoroughly checked. But why secure the entire airport?&lt;br /&gt;
&lt;br /&gt;
Airport is tens of square miles of area with hundreds of access points. To try to secure this entire area is to make the task at hand enormously difficult than it has to be. There is nothing more special about an airport than is about Grand central railway station. A terrorist group is not going to achieve anything more significant by blasting a bomb at airport gate than he would by blasting it on a railway platform. Consequently, security of airport can be as tight (or loose) as that of a railway station. All the extra vigilance however should be concentrated at the gates where passengers and crew board the airplane - the real vulnerable entity that needs protection.&lt;br /&gt;
&lt;br /&gt;
It is a matter of common sense that smaller the area to protect, more effectively it can be done. Why not apply that to air travel security?&lt;br /&gt;
&lt;br /&gt;
Moreover, securing entire airport varies from country to country. Flights fly to US from all over the world, in multiple hops. Securing the safety of a flight bound to US, then depends on securing the boundaries of all the airports where the flight was boarded. Imagine how behemoth that task is and how easy to breach. Establishing the checks at the doors of the actual plane simplifies that problem by magnitudes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-2897933925718560811?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/lmGU2hjLnhc" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/lmGU2hjLnhc/why-secure-airports-when-its-planes.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>2</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/11/why-secure-airports-when-its-planes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-6588117513505714781</guid><pubDate>Fri, 29 Oct 2010 08:23:00 +0000</pubDate><atom:updated>2010-10-29T01:23:37.510-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">linux</category><category domain="http://www.blogger.com/atom/ns#">audio</category><category domain="http://www.blogger.com/atom/ns#">ubuntu</category><category domain="http://www.blogger.com/atom/ns#">macbook</category><title>Mac book red light audio jack problem on Linux</title><description>When I upgraded my Macbook (2,1) to Ubunut 10.10 last week, I realized after a while that it wouldn't play any audio through the audio jack. The built-in speakers were working well, but as soon as I plugged in the headphone the built-in speakers would go off (as expected) and the headphone would be quiet too.&lt;br /&gt;
&lt;br /&gt;
Then I got little concerned when I saw the red glow coming out of the audio jack. This macbook is now 4 years old, so I assumed the red light means some malfunction. But after I searched around, I found it was a known issue. The red light wasn't any indicator, but optical audio output. Many mac forums had discussions on this topic. Most of them fixed it by sticking a pin or toothpick into the jack, juggling around a little or shorting some internal probes. They reported that this eventually turns the light off and audio out was switched back to traditional wired output. I tried the same, but no luck. In retrospect, those all posts were with Mac OSX installed. So in their case, the optical audio output was probably turned on in hardware and had no way to turn off in software. Whatever the case, their solution didn't work on my Ubuntu installation.&lt;br /&gt;
&lt;br /&gt;
I figured that, the optical audio output was not turned on in hardware, because when I rebooted the laptop in Mac OSX the red light used to go off and headphones worked. So now it remained to find some software tweak to fix the problem. Eventually I found this &lt;a href="http://ubuntuforums.org/showthread.php?t=898904"&gt;thread&lt;/a&gt; on ubuntu forums. Following two commands fixed the problem.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;# Turns off the optical audio out
amixer set IEC958 off

# Turns on the headphone speakers
amixer set Speaker,1 on

# In case you want to tweak built-in speakers
amixer set Speaker,0 on
&lt;/pre&gt;&lt;br /&gt;
If your system is different than mine, it will help to run&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;amixer &lt;/span&gt;without any options and see the list of audio channels and their states it prints out.&lt;br /&gt;
&lt;br /&gt;
Hope this trick helps someone.&lt;br /&gt;
&lt;br /&gt;
Ads:&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0470082933&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=013254248X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0321278542&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0596153287&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-6588117513505714781?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/0gTfFu8Rqjw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/0gTfFu8Rqjw/mac-book-red-light-audio-jack-problem.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>9</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/10/mac-book-red-light-audio-jack-problem.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-3091615167600952426</guid><pubDate>Thu, 28 Oct 2010 17:38:00 +0000</pubDate><atom:updated>2010-10-28T10:38:59.411-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">image</category><category domain="http://www.blogger.com/atom/ns#">html5</category><category domain="http://www.blogger.com/atom/ns#">google-app-engine</category><category domain="http://www.blogger.com/atom/ns#">canvas</category><category domain="http://www.blogger.com/atom/ns#">gae</category><title>How to save HTML5 canvas image to Google App Engine</title><description>This is a very specific problem and not many would have it. But I had to implement it and came up with a solution that works for me. This is how I did it for &lt;a href="http://www.3dtin.com/"&gt;3DTin&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
First why it's specific. In a typical case a web app wants to save user submitted images to Google app engine data store. This can be simply done by presenting user with a form and adding an 'input' tag with type 'file'. The submitted image can be extracted in GAE using request.get() and packaged into db.Blob to eventually store into BlobProperty. I am not going to explain this typical case, because it's covered nicely in the&amp;nbsp;&lt;a href="http://code.google.com/appengine/docs/python/images/usingimages.html"&gt;GAE's documentation&lt;/a&gt;. However, the process is not as straightforward when the image you want to store is not an image file on user's computer, but a dump of HTML5 canvas element in the web app.&lt;br /&gt;
&lt;br /&gt;
An HTML5 canvas element lets you export its content as jpeg or png image with the &lt;a href="http://www.w3.org/TR/html5/the-canvas-element.html#dom-canvas-todataurl"&gt;toDataURL API&lt;/a&gt;. This function returns a data URL that contains base64 encoded jpeg/png image. So how do we convert this image data into GAE's db.Blob object?&lt;br /&gt;
&lt;br /&gt;
The solution is to send the base64 encoded data as POST param to GAE app, do some regex matching to extract the exact portion of the data URL that is the encoded image and pass it through the base64 decoder (which is part of standard python library).&lt;br /&gt;
&lt;br /&gt;
Here is client side:&lt;br /&gt;
&lt;script src="http://gist.github.com/651811.js?file=imguploader.js"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
Here is server side code:&lt;br /&gt;
&lt;script src="http://gist.github.com/651811.js?file=imgsaver.py"&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;br /&gt;
Code is also accessible as gist &lt;a href="http://gist.github.com/651811"&gt;here&lt;/a&gt;, in case you can't see the embedded version above.&lt;br /&gt;
&lt;br /&gt;
This code works in &lt;a href="http://www.3dtin.com/"&gt;3DTin&lt;/a&gt; where a thumbnail of user's canvas is sent to GAE app for storage. It works without problem.&lt;br /&gt;
&lt;br /&gt;
Ads:&lt;br /&gt;
&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=1430227907&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0470464933&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=059652272X&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0240813286&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;iframe align="left" frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm.amazon.com/e/cm?t=myfreq-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=bpl&amp;amp;asins=0596806027&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="align: left; height: 245px; padding-right: 10px; padding-top: 5px; width: 131px;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-3091615167600952426?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/zmfu4paSjRk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/zmfu4paSjRk/how-to-save-html5-canvas-image-to.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/10/how-to-save-html5-canvas-image-to.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-8393161198776353778</guid><pubDate>Wed, 06 Oct 2010 03:13:00 +0000</pubDate><atom:updated>2010-10-05T20:13:19.415-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">opinion</category><category domain="http://www.blogger.com/atom/ns#">thoughts</category><category domain="http://www.blogger.com/atom/ns#">technology</category><category domain="http://www.blogger.com/atom/ns#">silicon-valley</category><category domain="http://www.blogger.com/atom/ns#">science</category><title>Silicon Valley and Hi-tech</title><description>I grew up with a dream of doing something in the "Hi-tech" industry. Back then I imagined it will be some breakthrough scientific work like inventing a perpetual energy machine or engineering a space elevator... something that will fall under the category of rocket science.&lt;br /&gt;
&lt;br /&gt;
They say Silicon valley "&lt;a href="http://en.wikipedia.org/wiki/Silicon_valley"&gt;is home to many of the world's largest technology companies&lt;/a&gt;". No doubt, any young technologist like me had his eyes set on Silicon Valley. So when I compare the nature of today's so-called "hi-tech" hot companies, namely Facebook, Twitter... I can't help but wonder where is the Science and Technology in them?&lt;br /&gt;
&lt;br /&gt;
This morning I read &lt;a href="http://twitter.com/sarahcuda"&gt;Sarah Lacy&lt;/a&gt;'s Techcrunch article "&lt;a href="http://techcrunch.com/2010/10/05/silicon-valley-at-a-cross-roads-entertainment-or-science/"&gt;Silicon Valley at a Cross Roads: Entertainment or Science?&lt;/a&gt;" and it all made sense.&lt;br /&gt;
&lt;br /&gt;
She put into the words the very question that lingered in my mind.&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Will it [Silicon Valley] follow the Web 2.0 path further down the road of media and entertainment or go back to its roots of hardcore science and technology?&lt;/span&gt;&lt;/blockquote&gt;According to her the valley made a choice between real hi-tech and Web 2.0 (that would lead to media innovation), back in early 2000s.&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;But in the early 2000s, the Valley was at a crossroads. Was the future cleantech or Web 2.0? Put another way, was the future starting a new stack or continuing to iterate on top of the mostly-built out one? The cleantech camp was championed by a lot of top Valley names– most famously John Doerr– who saw it as the most important way to change the world and an undeniably huge market that required real innovation. The Web 2.0 camp was championed largely by the PayPal Mafia’s angel investors like Reid Hoffman and Peter Thiel, and a handful of other angels and mentors like Marc Andreessen. Many of them prized the fact that Web companies were the opposite of cleantech: Thanks to decades of technology build out they were cheap and low-tech to start, utterly changing everything about these companies from the size of the exit you needed to have a good return to how quickly you could know if you had something or not.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;Ultimately, Web 2.0 won the Valley’s heart and hype....&lt;/span&gt;&lt;/blockquote&gt;She then makes a logical guess about future that the valley will continue down "&lt;span class="Apple-style-span" style="font-family: 'Helvetica Neue', Arial, Helvetica, sans-serif;"&gt;a path where San Francisco becomes the center of Web media, the way New York was the center of news media and LA was the center for entertainment media. These businesses are easier to understand, quicker to evaluate and more likely to produce a series of newsy blog posts&lt;/span&gt;"&lt;br /&gt;
&lt;br /&gt;
I have to say, her post brought a moment of clarity to me this morning. You should read the &lt;a href="http://techcrunch.com/2010/10/05/silicon-valley-at-a-cross-roads-entertainment-or-science/"&gt;entire article&lt;/a&gt;. Few people have the ability to observe a big industry over a long period of time and make sense about where it came from and where it is leading. Sarah Lacy is one of them.&lt;br /&gt;
&lt;br /&gt;
My understanding and my hope is that even though Silicon Valley takes the route of a media industry, their will be "real" hi-tech innovation somewhere in the world. I feel confident about it when I read about Elon Musk's &lt;a href="http://www.wired.com/magazine/2010/09/ff_tesla/all/1"&gt;Tesla&lt;/a&gt; and &lt;a href="http://www.spacex.com/updates.php"&gt;SpaceX&lt;/a&gt;, Richard Branson's &lt;a href="http://www.virgingalactic.com/"&gt;Virgin Galactic&lt;/a&gt;, or the Mega Machines episodes on Discovery channel that show behemoth engineering projects in China, Japan, S Korea. I also find promise in the grassroot culture of "Makers" that is taking shape in the form of &lt;a href="http://makerfaire.com/"&gt;Maker faire&lt;/a&gt;&amp;nbsp;and the new industry of personal manufacturing that is evolving in the form of 3D printing. Hopefully we will build on top of the Web infrastructure that Silicon Valley provides and the true hi-tech innovation will take place in this virtual world and not in a specific physical valley.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-8393161198776353778?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/BD1b5XdKk_0" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/BD1b5XdKk_0/silicon-valley-and-hi-tech.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/10/silicon-valley-and-hi-tech.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-3711993732792467623</guid><pubDate>Thu, 08 Jul 2010 03:00:00 +0000</pubDate><atom:updated>2010-07-07T20:00:33.201-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">science</category><title>Indirect experiments</title><description>I like how some advanced experiments in science are fantastically indirect. Take for example this experiment of measuring mass of proton (&lt;a href="http://news.nationalgeographic.com/news/2010/07/100707-science-proton-smaller-standard-model-quantum-physics/?source=link_tw07072010e"&gt;source&lt;/a&gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;For each hydrogen atom, the team replaced the atom's electron with a particle called a muon, which is 200 times more massive than an electron.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;"Because the muon is so much heavier, it orbits very close to the proton, so it is sensitive to the proton's size," said team member Aldo Antognini, of the Paul-Scherrer Institute in Switzerland.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Muons are unstable, and they decay into other particles in just 2.2 microseconds. The team knew that firing a laser at the atom before the muon decays should excite the muon, causing it to move to a higher energy level—a higher orbit around the proton. The muon should then release the extra energy as x-rays and move to a lower energy level.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;The distance between these energy levels is determined by the size of the proton, which in turn dictates the frequency of the emitted x-rays.&lt;/span&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;But based on the accepted proton radius, the experiment failed to produce x-rays at the anticipated frequency.&lt;/span&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-3711993732792467623?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/DFd5y7oIe04" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/DFd5y7oIe04/indirect-experiments.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/07/indirect-experiments.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-531370884809702862</guid><pubDate>Sat, 03 Jul 2010 07:51:00 +0000</pubDate><atom:updated>2010-07-03T00:51:26.132-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">altcanvas</category><category domain="http://www.blogger.com/atom/ns#">googlereader</category><category domain="http://www.blogger.com/atom/ns#">readerscope</category><title>ReaderScope 2.0.6 - Find Comments</title><description>If you didn't notice, in recent releases the Digg and Reddit social beacons were missing. They were removed some time ago to make space for a better method of discovering comments. I had released a stand-alone app &lt;a href="http://jyro.blogspot.com/2010/03/new-app-find-comments.html"&gt;FindComments&lt;/a&gt; few weeks ago. It uses ContextVoice to find comments from all sources (Twitter, Digg, Reddit, and many more). In v2.0.6 that app is integrated with ReaderScope. You will see a new icon on the action panel, which you can tap to find comments on the current news item from all over the web.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_W6UcJjyXr24/TC7rJ7EERWI/AAAAAAAADpM/zMf1TbZniYk/s1600/screenshot2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_W6UcJjyXr24/TC7rJ7EERWI/AAAAAAAADpM/zMf1TbZniYk/s320/screenshot2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Try it on some popular news stories from Slashdot or XKCD to see how it works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-531370884809702862?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/ycZKU2wGxtA" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/ycZKU2wGxtA/readerscope-206-find-comments.html</link><author>noreply@blogger.com (Jayesh)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_W6UcJjyXr24/TC7rJ7EERWI/AAAAAAAADpM/zMf1TbZniYk/s72-c/screenshot2.png" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/07/readerscope-206-find-comments.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-2976950348778537178</guid><pubDate>Mon, 07 Jun 2010 10:22:00 +0000</pubDate><atom:updated>2010-06-07T03:22:59.589-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">altcanvas</category><category domain="http://www.blogger.com/atom/ns#">android</category><category domain="http://www.blogger.com/atom/ns#">readerscope</category><title>ReaderScope 2.0</title><description>ReaderScope 2.0 is out in the Market today.&lt;br /&gt;
&lt;br /&gt;
As explained in &lt;a href="http://jyro.blogspot.com/2010/06/readerscope-upcoming-changes.html"&gt;last post&lt;/a&gt;, the rules of free have changed in this version. Instead of giving a crippled version for unlimited time at no cost; now ReaderScope will be available in its full glory but for limited time - 5 days. After that you can buy the &lt;a href="http://market.altcanvas.com/readerscope"&gt;Value Pack&lt;/a&gt; for $2.49 and unlock the expired version.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_W6UcJjyXr24/TAzHqF9qXFI/AAAAAAAADo0/JgnW0M8uW48/s1600/screenshot1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://1.bp.blogspot.com/_W6UcJjyXr24/TAzHqF9qXFI/AAAAAAAADo0/JgnW0M8uW48/s400/screenshot1.png" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_W6UcJjyXr24/TAzHtxa1h6I/AAAAAAAADo8/7_vVgo2aTAo/s1600/screenshot2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://3.bp.blogspot.com/_W6UcJjyXr24/TAzHtxa1h6I/AAAAAAAADo8/7_vVgo2aTAo/s400/screenshot2.png" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_W6UcJjyXr24/TAzHw3OsqEI/AAAAAAAADpE/P69nBFxcn4M/s1600/screenshot3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_W6UcJjyXr24/TAzHw3OsqEI/AAAAAAAADpE/P69nBFxcn4M/s400/screenshot3.png" width="266" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-2976950348778537178?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/R8EXJ74J2ds" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/R8EXJ74J2ds/readerscope-20.html</link><author>noreply@blogger.com (Jayesh)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_W6UcJjyXr24/TAzHqF9qXFI/AAAAAAAADo0/JgnW0M8uW48/s72-c/screenshot1.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/06/readerscope-20.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-7831008227170491821</guid><pubDate>Wed, 02 Jun 2010 07:16:00 +0000</pubDate><atom:updated>2010-06-02T00:17:41.195-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">altcanvas</category><category domain="http://www.blogger.com/atom/ns#">readerscope</category><title>ReaderScope upcoming changes</title><description>Last weekend I released ReaderScope 1.9.8. It has some changes that should fix crashes that some users have reported in comments at Android market. These crashes went unnoticed for such a long time, because I didn't see them myself during my testing and they were not captured by the built-in crash reporting mechanism. But I found about them last week, thanks to &lt;a href="http://android-developers.blogspot.com/2010/05/google-feedback-for-android.html"&gt;Android market's new crash report collection&lt;/a&gt;&amp;nbsp;mechanism.&amp;nbsp;One frequent crash was happening in the background download service and it wasn't captured by RS's crash handler. It should be fixed in v1.9.8. So thumbs up to Android team for adding this new facility to Market.&lt;br /&gt;
&lt;br /&gt;
But this post is mainly about what's coming next. For starters, the version number will now graduate to 2.x. And then there will be a key change in the way free version of ReaderScope works.&lt;br /&gt;
&lt;br /&gt;
Right now you can download ReaderScope from various market places for FREE. It has the basic look, with what is known as Legacy color scheme. It has Ads below the news screen. It has a handy widget, but it cannot be refreshed unless the app is unlocked with Value pack. The value pack is available for $2.49. Once you buy it and enter the unlock code, you get full access to 3 additional themes, no Ads, fully functional widget and ability to see favicons against your feeds.&lt;br /&gt;
&lt;br /&gt;
Starting with 2.x, you will be able to access the full functionality of ReaderScope right out of the box, when you install the free app from any market place. The default color scheme will be changed from Legacy to Night (which so far I've heard is most popular), but you can change to others if you want. There will be no ads. You will have fully functional widget (If you are like me, you will read half of your news via the widget). The favicons will be visible.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_W6UcJjyXr24/TAYCHznGa6I/AAAAAAAADoo/6_0C3MQiVyY/s1600/preview_night.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="400" src="http://2.bp.blogspot.com/_W6UcJjyXr24/TAYCHznGa6I/AAAAAAAADoo/6_0C3MQiVyY/s400/preview_night.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
So what's the catch? The free version will expire in 5 days. You can buy the Value pack for $2.49 and unlock it.&lt;br /&gt;
&lt;br /&gt;
In addition, support for Android 1.5 will be dropped.&lt;br /&gt;
&lt;br /&gt;
Why this change?&lt;br /&gt;
&lt;br /&gt;
There are couple of reasons.&lt;br /&gt;
&lt;br /&gt;
1. The default (legacy) color scheme is super dull. And yet, that's the first impression users get when they download the free app. I have read many users complaining about the "awful" UI of ReaderScope, and I believe part of it is the dull color scheme. So even though some pretty color schemes are hidden in the app, users don't know about them until they dig down 2 layers of settings and see the theme previews.&lt;br /&gt;
&lt;br /&gt;
2. The admob code can make the UI sluggish on slow networks. When the app starts, the admob jar downloads an Ad over network. So if the network is slow, this request can sometimes add to the startup time of the app. And the worse part is, it happens even when you have unlocked the app. With the unlocked app, you won't see the ads, but I don't have control over admob code and make it stop fetch that one ad at startup. With 2.x, admob jar will be completely removed.&lt;br /&gt;
&lt;br /&gt;
3. Dropping support for 1.5 had to be done someday. Only after that features from 1.6+ SDKs could be used. I hope, the users stuck with 1.5 will soon get updated by their carriers (or they will start using cyanogen like me ;).&lt;br /&gt;
&lt;br /&gt;
The 2.x version will make no difference to users who have already bought the value pack, they will keep getting updates as usual. Others who have been using the app without the Value pack, will see a 5 day expiration notice upon upgrade. They will need to buy the value pack within that time.&lt;br /&gt;
&lt;br /&gt;
However, if you are happy with the way free ReaderScope is right now, you will have an option. You will find v1.9.8 apk available for download &lt;a href="http://readerscope.googlegroups.com/web/ReaderScope-1.9.8.apk"&gt;here&lt;/a&gt;. Obviously, it won't get any fixes/features, but the app is quite stable as it is today and you can use it for free if you want. However if you want ongoing fixes and features, you will have to upgrade to 2.x and buy a value pack within 5 days.&lt;br /&gt;
&lt;br /&gt;
First 2.x release should hit the market around next week. Till then please, let me know your feedback on this change.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-7831008227170491821?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/PUJ23WTOrvE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/PUJ23WTOrvE/readerscope-upcoming-changes.html</link><author>noreply@blogger.com (Jayesh)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_W6UcJjyXr24/TAYCHznGa6I/AAAAAAAADoo/6_0C3MQiVyY/s72-c/preview_night.png" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/06/readerscope-upcoming-changes.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-4911491625746977246</guid><pubDate>Tue, 27 Apr 2010 17:11:00 +0000</pubDate><atom:updated>2010-04-27T10:11:52.415-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">mutt</category><category domain="http://www.blogger.com/atom/ns#">goobook</category><category domain="http://www.blogger.com/atom/ns#">gdata</category><category domain="http://www.blogger.com/atom/ns#">email</category><category domain="http://www.blogger.com/atom/ns#">notify-send</category><category domain="http://www.blogger.com/atom/ns#">gmail</category><category domain="http://www.blogger.com/atom/ns#">growlnotify</category><title>Mutt, Gmail, gdata, notify-send: A Perfect Email solution</title><description>Ever since I started working on my own, GMail has become my primary email account. I was mostly satisfied with the default web interface. However, the heavy javascript interface takes eternity to load on my slow network. The basic HTML interface is slim but doesn't have keyboard shortcuts, so it's useless. Moreover recently I found the GMail tab hogging most amount of memory in Chrome task manager. That gave me the final push to switch to a local email client.&lt;br /&gt;
&lt;br /&gt;
I have used Thunderbird and Evolution in the past, but they are not light weight by any means. I had tried Mutt before, but left it because I didn't get hang of all its shortcuts. Nonetheless I decided to give Mutt another try.&lt;br /&gt;
&lt;br /&gt;
Here are my basic requirements from the email setup:&lt;br /&gt;
1. &lt;i&gt;Light weight&lt;/i&gt; - Should launch quickly when I want to check the mail. Should do only the bare minimum network I/O required to fetch new messages.&lt;br /&gt;
2. &lt;i&gt;Notifications&lt;/i&gt; - Should check the mailbox at regular intervals and notify me using desktop's default notification system.&lt;br /&gt;
3. Access to &lt;i&gt;GMail contacts&lt;/i&gt;&lt;br /&gt;
4. Ability to Archive messages or move them to other &lt;i&gt;GMail folders&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
So far I have figured out how to do all of the above and then some. So here are my solutions numbered same as corresponding requirements above.&lt;br /&gt;
&lt;br /&gt;
1. Setting up GMail IMAP has become significantly easy. All you have to do it create a .muttrc file in your home directory and start mutt. A simple google &lt;a href="http://www.google.com/search?sourceid=chrome&amp;amp;ie=UTF-8&amp;amp;q=Mutt+Gmail+imap&amp;amp;qscrl=1"&gt;search&lt;/a&gt; will tell you what to put in that file. As you kick off mutt from command line, it will fetch the contents of your gmail inbox seamlessly (except if you've skipped the password in .muttrc, then it will ask you to enter it).&lt;br /&gt;
&lt;br /&gt;
2. Mutt does not support notifications. Apparently it doesn't fit into the design philosophy of its developers. But a brave soul has created a &lt;a href="http://mndrix.blogspot.com/2005/11/notification-when-mutt-receives-new.html"&gt;patch&lt;/a&gt; if you are interested in building your custom mutt. As for me, I didn't go that route. I setup an alternate script that uses GMail's gdata interface to check the new messages and delievers the alerts using notify-send (on my linux box) or growlnotify (on my Mac OSX). I took a simple script from &lt;a href="http://www.imath.kiev.ua/~mellit/python/gmailatom.py"&gt;here&lt;/a&gt; and added my modifications. You can get my version &lt;a href="http://code.google.com/p/altcanvas/source/browse/trunk/scripts/chkgmail"&gt;here&lt;/a&gt;. It reads the username and password from your .muttrc files. It does some rudimentary checks to find if it's on Linux or Mac OSX and accordingly calls notify-send or growlnotify; you might have to tweak the paths to suite your system.&lt;br /&gt;
[Now that I searched for it, I found many easy to use &lt;a href="http://techcityinc.com/2009/02/08/top-5-gmail-notifiers-for-linux-2/"&gt;solutions&lt;/a&gt;&amp;nbsp;for notifications. Nonetheless I enjoyed writing the script, so that's a plus for me.]&lt;br /&gt;
&lt;br /&gt;
3. There is one straight forward solution for accessing GMail contacts from mutt - &lt;a href="http://pypi.python.org/pypi/goobook/1.3a1"&gt;Goobook&lt;/a&gt;. It also uses the gdata interface, but it is a well packaged pypi project and once installed all you need to do is put&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;set query_command = "goobook query '%s'" &lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;in your .muttrc.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;4. If you delete messages from mutt, they are archived on your GMail server after you sync (keyboard shortcut $). GMail labels are virtual folders and they are visible from mutt as IMAP folders. Just press&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;c &lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;and then&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;TAB&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;. If you want to move a message from your inbox to a specific folder, press&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;s &lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;(for save) while you are viewing the message, you will be prompted for folder to save the message to. Press&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;? &lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;to get the list of IMAP folders and choose the one you want. I guess it's not possible to apply multiple labels to a message in this setup. The way I understand it is, GMail first designed labels and when they offered IMAP support they exposed labels as virtual folders over IMAP. So for any IMAP client they are folders and a single message cannot reside in multiple folders at the same time. (I might be wrong, give a shout if you know so).&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;A small tip for managing .muttrc. I use two machines a linux desktop and a Macbook with Mac OSX. I have set up both to use mutt. So instead of having duplicate copies of .muttrc, I have stored a common copy in my ~/Dropbox/config folder and I just&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;source ~/Dropbox/config/.muttrc &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;from my&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;~/.muttrc&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;Hope you find my tips useful. If you have any of your own, feel free to put them in comments.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Ads:&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
*&amp;nbsp;&lt;a href="http://www.amazon.com/Taming-Email-Beast-Randall-Dean/dp/0977202550?ie=UTF8&amp;amp;tag=myfreq-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Taming The Email Beast&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=myfreq-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0977202550" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
*&amp;nbsp;&lt;a href="http://www.amazon.com/Linux-Administration-Handbook-2nd-Nemeth/dp/0131480049?ie=UTF8&amp;amp;tag=myfreq-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Linux Administration Handbook (2nd Edition)&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=myfreq-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0131480049" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
*&amp;nbsp;&lt;a href="http://www.amazon.com/Unix-Linux-System-Administration-Handbook/dp/0131480057?ie=UTF8&amp;amp;tag=myfreq-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Unix and Linux System Administration Handbook (4th Edition)&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=myfreq-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0131480057" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; white-space: normal;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-4911491625746977246?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/ONQy4GQBVGE" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/ONQy4GQBVGE/mutt-gmail-gdata-notify-send-perfect.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/04/mutt-gmail-gdata-notify-send-perfect.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-220724910857123118</guid><pubDate>Mon, 19 Apr 2010 03:58:00 +0000</pubDate><atom:updated>2010-04-18T20:58:15.517-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">hollywood</category><category domain="http://www.blogger.com/atom/ns#">movie</category><title>Are you the Matt Damon of your game?</title><description>This is generally a technical blog, but some observations, although non-technical, are too interesting to not write about. I love Hollywood movies and I like Matt Damon ones a lot. Until last night however I didn't realize the most interesting pattern in the roles Matt Damon has portrayed over the years. It struck me after I watched Rounders last night.&lt;br /&gt;
&lt;br /&gt;
Count the number of movies in which Matt Damon has played a character who is the absolute genius of his field. Here is a list.&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;&lt;b&gt;Good Will Hunting&lt;/b&gt; A Math Prodigy&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The Rainmaker&lt;/b&gt; A talented lawyer who wins his first case barely out of the law school and against a behemoth Insurance company.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Rounders&lt;/b&gt; A genius poker player&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The Talented Mr. Ripley&lt;/b&gt; A murderer who is unusually talented in covering his tracks&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The Legend of Bagger Vance&lt;/b&gt; A prodigy Golf player&lt;/li&gt;
&lt;li&gt;&lt;b&gt;The Bourne {Identity, Supremacy, Ultimatum}&lt;/b&gt; A one of a kind CIA operative who is absolutely unbeatable&lt;/li&gt;
&lt;/ol&gt;He has a thing about playing a genius, doesn't he? And no doubt he is very good at it too. All his characters are thoroughly entertaining and deeply inspirational at the same time.&lt;br /&gt;
&lt;br /&gt;
Hoping to see his latest movie soon - &lt;b&gt;Green zone&lt;/b&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-220724910857123118?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/kKv9_gnVJv8" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/kKv9_gnVJv8/are-you-matt-damon-of-your-game.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>0</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/04/are-you-matt-damon-of-your-game.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-2934234062584283881</guid><pubDate>Sat, 17 Apr 2010 09:21:00 +0000</pubDate><atom:updated>2010-04-18T20:19:14.113-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">altcanvas</category><category domain="http://www.blogger.com/atom/ns#">googlereader</category><category domain="http://www.blogger.com/atom/ns#">readerscope</category><title>ReaderScope 1.9 - OAuth</title><description>For past month or so, some of you (ReaderScope users) might be facing problems if you were using AutoLogin. This happened after I updated the login mechanism&amp;nbsp;in&amp;nbsp;&lt;a href="http://jyro.blogspot.com/2010/03/readerscope-1823-new-authentication-and.html"&gt;v1.8.2&lt;/a&gt;&amp;nbsp;to support Google Reader authentication changes. I won't go into the details, but AutoLogin is very likely to fail in the new scheme of authentication. So I advised some of you who sent me the error reports to switch to Username/Password login. It was a temporary solution.&lt;br /&gt;
&lt;br /&gt;
Today I am glad to announce that starting with v1.9 ReaderScope supports &lt;b&gt;OAuth&lt;/b&gt; login for Google Reader - the right way&lt;b&gt; to login &lt;/b&gt;&lt;i&gt;&lt;b&gt;without password &lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;(compared to other password less alternatives at least)&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://farm3.static.flickr.com/2074/1529124811_67fcabab2d_m_d.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://farm3.static.flickr.com/2074/1529124811_67fcabab2d_m_d.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
This has been possible only after Google Reader team &lt;a href="http://groups.google.com/group/fougrapi/browse_thread/thread/4430c9a6dea4d70f"&gt;enabled OAuth login&lt;/a&gt;&amp;nbsp;for their service a few weeks ago. I have been working since to get ReaderScope working with OAuth. Not all the time was spent on OAuth, but in order to implement OAuth I had redesign entire networking layer of ReaderScope (which I am glad I did because I could improve some things along the way).&lt;br /&gt;
&lt;br /&gt;
Finally RS with OAuth is ready. If you were still using AutoLogin, then after upgrading to v1.9 you will get a warning message that AutoLogin is no longer supported and you will be automatically logged out. On restart you will be taken to Login screen where you can start doing OAuth login.&lt;br /&gt;
&lt;br /&gt;
If you are using username/password, then after upgrading to v1.9 you will get a message informing that a new password less login option is available. You won't be forcefully logged out though. You can choose to logout and relogin.&lt;br /&gt;
&lt;br /&gt;
I have been testing most of the functionality in past couple of days. But I won't be surprised if some holes were left out. Please report any problems you might face or sent crash reports if you get any.&lt;br /&gt;
&lt;br /&gt;
Enjoy the upgrade!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-2934234062584283881?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/_GTmWJFyoEg" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/_GTmWJFyoEg/readerscope-19-oauth.html</link><author>noreply@blogger.com (Jayesh)</author><thr:total>13</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/04/readerscope-19-oauth.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-59593992736572682</guid><pubDate>Wed, 17 Mar 2010 08:23:00 +0000</pubDate><atom:updated>2010-03-17T01:23:33.731-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">altcanvas</category><category domain="http://www.blogger.com/atom/ns#">social</category><category domain="http://www.blogger.com/atom/ns#">comments</category><category domain="http://www.blogger.com/atom/ns#">news</category><category domain="http://www.blogger.com/atom/ns#">mashup</category><category domain="http://www.blogger.com/atom/ns#">android</category><category domain="http://www.blogger.com/atom/ns#">readerscope</category><title>New app "Find Comments"</title><description>Over the weekend I found a simple API from &lt;a href="http://contextvoice.com/"&gt;ContextVoice&lt;/a&gt;. It was something I was looking for a long time. A service that when given a URL of a news story, returns reader comments from all over the web.&lt;br /&gt;
&lt;br /&gt;
It didn't take long to put together a simple app around this API.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;
FindComments is really simple.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_W6UcJjyXr24/S6CH7nG5VsI/AAAAAAAADnQ/ibX7k8IC4t4/s1600-h/icon.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_W6UcJjyXr24/S6CH7nG5VsI/AAAAAAAADnQ/ibX7k8IC4t4/s320/icon.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
1) Install app&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: #999999;"&gt;1.1) Do NOT look for a new icon in the launcher. You won't find it.&lt;/span&gt;&lt;br /&gt;
2) Browse any news story or blog post in the browser.&lt;br /&gt;
3) Press Menu &amp;gt; Share Page&lt;br /&gt;
4) Press "Find Comments"&lt;br /&gt;
&lt;br /&gt;
Voila!&lt;br /&gt;
&lt;br /&gt;
Available in &lt;a href="market://search/?q=pname:com.altcanvas.findcomments"&gt;Android Market&lt;/a&gt;, &lt;a href="http://andappstore.com/AndroidApplications/apps/FindComments"&gt;AndAppStore&lt;/a&gt;, &lt;a href="http://slideme.org/application/find-comments"&gt;Slideme&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Here are screenshots. Give it a spin.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_W6UcJjyXr24/S6CHVxVrGSI/AAAAAAAADnI/i06h6tOiLf4/s1600-h/fcomm-full.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/_W6UcJjyXr24/S6CHVxVrGSI/AAAAAAAADnI/i06h6tOiLf4/s640/fcomm-full.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
ReaderScope users, give it a try. Would you like to see this integrated tightly with ReaderScope?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-59593992736572682?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/kjujFXINMbk" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/kjujFXINMbk/new-app-find-comments.html</link><author>noreply@blogger.com (Jayesh)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_W6UcJjyXr24/S6CH7nG5VsI/AAAAAAAADnQ/ibX7k8IC4t4/s72-c/icon.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/03/new-app-find-comments.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-8679154133833245616</guid><pubDate>Mon, 15 Mar 2010 10:19:00 +0000</pubDate><atom:updated>2010-03-15T03:19:49.425-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">altcanvas</category><category domain="http://www.blogger.com/atom/ns#">fonts</category><category domain="http://www.blogger.com/atom/ns#">typeface</category><category domain="http://www.blogger.com/atom/ns#">html</category><category domain="http://www.blogger.com/atom/ns#">webdesign</category><category domain="http://www.blogger.com/atom/ns#">css</category><title>@font-face-lift</title><description>I always found that customizing the look of one's website is greatly constrained by the inability to customize the typeface. Traditionally browsers use pre-installed fonts and with the CSS&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;font-family &lt;span class="Apple-style-span" style="font-family: Verdana; white-space: normal;"&gt;property, you can provide a list of typefaces that you would like your text to be rendered with&amp;nbsp;(Trebuchet MS, Verdana, Sans-Serif, monospace, for instance). But this list is merely a suggestion. You don't have complete control over how your web page is going to look like in X browser on Y platform.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
On last friday however I found that it is about to change now (at least in my hopes). I stumbled upon a &lt;a href="http://nimbledesign.com/post/441423115/the-path-of-most-resistance"&gt;blog post&lt;/a&gt; which had its text rendered in a very beautiful font. After some digging through its source, I discovered the&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;@font-face &lt;span class="Apple-style-span" style="font-family: Verdana; white-space: normal;"&gt;CSS property.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
It's not that this is some brand new thing in latest CSS spec, but it seems to have become of practical use only in latest browsers. You can learn more about how to use it in &lt;a href="http://nicewebtype.com/notes/2009/10/30/how-to-use-css-font-face/"&gt;this post&lt;/a&gt;. I am going to talk about my experience with it and how it is still not perfect.&lt;br /&gt;
&lt;br /&gt;
If you are reading this post in an RSS reader, go on and open it up on my blog at this point. You will see it rendered in a beautiful font. But not all of you may be. What it should ideally look like is:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_W6UcJjyXr24/S53Jiq32cLI/AAAAAAAADmU/ntNa1TF8OHI/s1600-h/font-face.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="228" src="http://4.bp.blogspot.com/_W6UcJjyXr24/S53Jiq32cLI/AAAAAAAADmU/ntNa1TF8OHI/s640/font-face.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
But is that what you see?&lt;br /&gt;
&lt;br /&gt;
The snapshot above is of Safari 4.0.4 on Mac OS X. I believe it looks the same on latest Chrome versions of Linux and Mac OS X. It looks similar in Chrome on Windows XP, but on my eeepc it looks very light for some reason. It won't look anything like it at all in Firefox on any OS. That really disappointed me, but the fault here is not of Firefox, but of my blogging site blogger.com.&lt;br /&gt;
&lt;br /&gt;
After a lot of debugging of why Firefox wasn't loading @font-face, I found that Firefox does not allow a webpage to load fonts that are served on a different domain. Blogger does not allow the user to host any arbitrary file, so I host my font files on www.altcanvas.com. That offends Firefox and instead of loading the custom fonts (&lt;a href="http://www.fontsquirrel.com/fonts/junction-regular"&gt;Junction&lt;/a&gt;, &lt;a href="http://www.fontsquirrel.com/fonts/Santana"&gt;Santana&lt;/a&gt;), it falls back to Trebuchet MS. You can find more details about Firefox's policy on this matter in this &lt;a href="https://developer.mozilla.org/En/HTTP_access_control"&gt;article&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
I spent whole friday doing fun-font research for my blog. But it stoked me enough that I started redesigning www.altcanvas.com too, which desperately needed a facelift anyway.&lt;br /&gt;
&lt;br /&gt;
So over the weekend with the help of two new fonts (&lt;a href="http://www.fontsquirrel.com/fonts/junction-regular"&gt;Junction&lt;/a&gt; and &lt;a href="http://www.fontsquirrel.com/fonts/Comfortaa"&gt;Comfortaa&lt;/a&gt;) and my recently learnt CSS tricks, I redesigned my website. Check out the new look of&amp;nbsp;&lt;a href="http://www.altcanvas.com/"&gt;http://www.altcanvas.com&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
Again the ideal look is like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_W6UcJjyXr24/S53Quk0wK_I/AAAAAAAADmc/f3bsSbEkOBo/s1600-h/font-face-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="380" src="http://2.bp.blogspot.com/_W6UcJjyXr24/S53Quk0wK_I/AAAAAAAADmc/f3bsSbEkOBo/s640/font-face-2.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Don't know what you will get to see. But this time, Firefox's rendering will look &amp;nbsp;just like what you see above. That's because the fonts are now hosted under the same domain that is serving the web-pages.&lt;br /&gt;
&lt;br /&gt;
What I also found was, even if all modern browsers successfully show custom fonts defined with&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;@font-face&lt;span class="Apple-style-span" style="font-family: Verdana; white-space: normal;"&gt;, their rendering differs. For instance, the Junction font is only available in Regular font-weight and no bold variant is available. So the bold text doesn't look any different from normal text when viewed in webkit browsers (Chrome, Safari), but Firefox (and I believe IE too) smartly creates a bold variant of the typeface. Also I guess, the final look is affected by the OS platform, screen resolution, Anti-Aliasing settings, etc. (The 'e's look poor for Junction font in IE.)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
So in conclusion, we have a new powerful tool. It's not perfect, but it's pretty good.&lt;br /&gt;
&lt;br /&gt;
If you want to customize typeface of your own website or blog, I highly recommend &lt;a href="http://www.fontsquirrel.com/fontface"&gt;fontsquirrel's free @font-face kits&lt;/a&gt;.&lt;br /&gt;
&lt;div style="color: #666666;"&gt;&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;span style="color: #666666;"&gt;Ads:&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
* &lt;a href="http://www.amazon.com/CSS-Missing-David-Sawyer-McFarland/dp/0596802447?ie=UTF8&amp;amp;tag=myfreq-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;CSS: The Missing Manual&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=myfreq-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0596802447" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;br /&gt;
* &lt;a href="http://www.amazon.com/Head-First-HTML-CSS-XHTML/dp/059610197X?ie=UTF8&amp;amp;tag=myfreq-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Head First HTML with CSS &amp;amp; XHTML&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=myfreq-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=059610197X" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;br /&gt;
* &lt;a href="http://www.amazon.com/Fonts-Encodings-Yannis-Haralambous/dp/0596102429?ie=UTF8&amp;amp;tag=myfreq-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Fonts &amp;amp; Encodings&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=myfreq-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0596102429" style="border: medium none ! important; margin: 0px ! important; padding: 0px ! important;" width="1" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-8679154133833245616?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/QQzhTPAnHdw" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/QQzhTPAnHdw/font-face-lift.html</link><author>noreply@blogger.com (Jayesh)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_W6UcJjyXr24/S53Jiq32cLI/AAAAAAAADmU/ntNa1TF8OHI/s72-c/font-face.png" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/03/font-face-lift.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-7937326.post-5931650346292014752</guid><pubDate>Sat, 13 Mar 2010 05:31:00 +0000</pubDate><atom:updated>2010-03-12T21:31:27.529-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">altcanvas</category><category domain="http://www.blogger.com/atom/ns#">social</category><category domain="http://www.blogger.com/atom/ns#">share</category><category domain="http://www.blogger.com/atom/ns#">authentication</category><category domain="http://www.blogger.com/atom/ns#">googlereader</category><category domain="http://www.blogger.com/atom/ns#">readerscope</category><title>ReaderScope 1.8.{2,3} - new authentication and global share</title><description>I released 1.8.2 couple of days ago. The only change it had was the new login mechanism. Google reader team &lt;a href="http://groups.google.com/group/fougrapi/browse_thread/thread/e331f37f7f126c00"&gt;announced&lt;/a&gt; on fougrapi group (that stands for "Friends of the Unofficial Google Reader API") that Google Reader soon will be discontinuing the old SID-based login mechanism. Thanks to them for announcing this well before the actual change is supposed to happen (sometime in April). ReaderScope accordingly has been updated to follow the new rules.&lt;br /&gt;
&lt;br /&gt;
This change is almost painless for username/password based logins. However the &amp;nbsp;AutoLogin is a little hairy issue. The &lt;a href="http://github.com/android/platform_frameworks_opt_com.google.android/blob/master/framework.jar"&gt;library&lt;/a&gt; used to get AutoLogin working is unsupported and undocumented. There is an official way to do AutoLogin kind of thing on Android 2.0 devices, but it requires access to actual device to test and still I hear it's not well documented. Besides the devices at versions &amp;lt;2.0 are going to be there for &amp;nbsp;a long time. Therefore I got the undocumented and unsupported library to get working somehow with the new auth mechanism. However the changes I had to make were only little short of hocus-pocus. So I was very skeptical about how it was working. I released a &lt;a href="http://groups.google.com/group/readerscope/browse_thread/thread/75267859c5edd897"&gt;preview&lt;/a&gt; on ReaderScope mailing list. So far the feedback of the preview release and actual 1.8.2 has been positive. I haven't seen anyone reporting issues due to failed logins. I have strategic log statements to detect if things go wrong with authentication. So just mail me the logs if you see suspicious behavior. Settings &amp;gt; Logs. Menu &amp;gt; Email.&lt;br /&gt;
&lt;br /&gt;
Today in 1.8.3, I also fixed a bug which would have caused auth problems if anyone was upgrading from pre-1.2.5 installation.&lt;br /&gt;
&lt;br /&gt;
With the new authentication done, I have a very exciting feature implemented&amp;nbsp;in 1.8.3.&lt;br /&gt;
&lt;br /&gt;
When you share the news item now, you will have option to trigger the global sharing apps. They could be your favorite Twitter, Facebook, Email clients. The most useful one I found was "Read It Later" which lets you save the news item to your &lt;a href="http://www.instapaper.com/"&gt;InstaPaper&lt;/a&gt; account for reading later. These are the same apps that you see when you "Share Page" from browser.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_W6UcJjyXr24/S5sdQs35fpI/AAAAAAAADl0/aNW-5Wyt_nc/s1600-h/share-global-image.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="443" src="http://1.bp.blogspot.com/_W6UcJjyXr24/S5sdQs35fpI/AAAAAAAADl0/aNW-5Wyt_nc/s640/share-global-image.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I remember someone had requested this feature once long time ago. I am sorry it took so long to implement. But now that it is here, I am sure you will enjoy it.&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: #666666;"&gt;Ads:&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;*&amp;nbsp;&lt;a href="http://www.amazon.com/Hello-Android-Introducing-Development-Programmers/dp/1934356492?ie=UTF8&amp;amp;tag=myfreq-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Hello, Android: Introducing Google's Mobile Development Platform (Pragmatic Programmers)&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=myfreq-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=1934356492" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;*&amp;nbsp;&lt;a href="http://www.amazon.com/Professional-Android-Application-Development-Programmer/dp/0470344717?ie=UTF8&amp;amp;tag=myfreq-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Professional Android Application Development (Wrox Programmer to Programmer)&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=myfreq-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0470344717" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;*&amp;nbsp;&lt;a href="http://www.amazon.com/Android-Wireless-Application-Development-Conder/dp/0321627091?ie=UTF8&amp;amp;tag=myfreq-20&amp;amp;link_code=btl&amp;amp;camp=213689&amp;amp;creative=392969" target="_blank"&gt;Android Wireless Application Development&lt;/a&gt;&lt;img alt="" border="0" height="1" src="http://www.assoc-amazon.com/e/ir?t=myfreq-20&amp;amp;l=btl&amp;amp;camp=213689&amp;amp;creative=392969&amp;amp;o=1&amp;amp;a=0321627091" style="border: none !important; margin: 0px !important; padding: 0px !important;" width="1" /&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7937326-5931650346292014752?l=jyro.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/codeovertones/~4/6Rxzwtel73A" height="1" width="1"/&gt;</description><link>http://feedproxy.google.com/~r/codeovertones/~3/6Rxzwtel73A/readerscope-1823-new-authentication-and.html</link><author>noreply@blogger.com (Jayesh)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_W6UcJjyXr24/S5sdQs35fpI/AAAAAAAADl0/aNW-5Wyt_nc/s72-c/share-global-image.png" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://jyro.blogspot.com/2010/03/readerscope-1823-new-authentication-and.html</feedburner:origLink></item></channel></rss>

