<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5777290109635933739</id><updated>2025-12-23T01:11:18.325+05:30</updated><category term="python"/><category term="artwork"/><category term="projects"/><category term="SPOJ"/><category term="college"/><category term="linux"/><category term="programming"/><category term="CodeFire"/><category term="allegro"/><category term="programming contest"/><category term="Ruby"/><category term="gsoc2010"/><category term="gwibber"/><category term="image processing"/><category term="rants"/><category term="twitter"/><category term="Google App Engine"/><category term="javascript"/><category term="meetup"/><category term="old times"/><category term="pycon"/><category term="recursion"/><category term="web design"/><category term="BeleniX"/><category term="Space Lock"/><category term="UI/UX"/><category term="art"/><category term="css"/><category term="domains"/><category term="experiments"/><category term="foo"/><category term="game programming"/><category term="github"/><category term="graphics"/><category term="ideas"/><category term="madetokill.com"/><category term="memoization"/><category term="news"/><category term="nincompoop"/><category term="open srouce"/><category term="processing"/><category term="pygame"/><category term="pykata"/><category term="research"/><category term="sahanapy"/><category term="tips n tricks"/><category term="web2.0"/><category term="/dev/random"/><category term="FOSS"/><category term="GTA"/><category term="GW-BASIC"/><category term="ICPC"/><category term="Microsoft"/><category term="PSF"/><category term="QBASIC"/><category term="XUL"/><category term="adbrite"/><category term="ai"/><category term="ajax"/><category term="analysis of algorithms"/><category term="apt-offline"/><category term="archlinux"/><category term="artrage"/><category term="asus"/><category term="augumented reality"/><category term="bakabot"/><category term="bangalore"/><category term="books"/><category term="bugs"/><category term="c++"/><category term="caching"/><category term="code-reuse"/><category term="codechef"/><category term="comics"/><category term="crowdsourcing"/><category term="css3"/><category term="debugging"/><category term="delhi"/><category term="directi"/><category term="django"/><category term="doga"/><category term="dynamic programming"/><category term="eee pc"/><category term="extdev"/><category term="facebook"/><category term="firefox"/><category term="freebies"/><category term="friends"/><category term="fun"/><category term="gdb"/><category term="gnome"/><category term="gtweetbar"/><category term="hackfest"/><category term="iLike It"/><category term="lenny.in"/><category term="lucknow"/><category term="maemo"/><category term="meaningless"/><category term="microblogging"/><category term="movies"/><category term="msl"/><category term="music"/><category term="musings"/><category term="mypaint"/><category term="mysql"/><category term="netbook"/><category term="odd observations"/><category term="opensolaris"/><category term="photoshop"/><category term="php"/><category term="productivity"/><category term="public speaking"/><category term="pygtk"/><category term="pymos"/><category term="quine"/><category term="sahana eden"/><category term="school"/><category term="social media"/><category term="startups"/><category term="student2business"/><category term="summer"/><category term="talks"/><category term="techniques"/><category term="ubuntu"/><category term="urllib2"/><category term="vps"/><category term="web services"/><category term="web2hunter"/><category term="web2py"/><category term="webkit"/><category term="websockets"/><category term="word games"/><category term="wow"/><title type='text'>IdeaMonk</title><subtitle type='html'>thoughts, ideas, code, + loads of other garbage</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>87</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-4091661151078108443</id><published>2011-01-05T16:18:00.000+05:30</published><updated>2018-06-10T14:53:56.523+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="public speaking"/><category scheme="http://www.blogger.com/atom/ns#" term="pycon"/><category scheme="http://www.blogger.com/atom/ns#" term="talks"/><title type='text'>Scraping in Python for fun and profit</title><content type='html'>Missed out on this one lately.&lt;br /&gt;&lt;br /&gt;&lt;embed src=&quot;http://blip.tv/play/AYKV6k0C&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;390&quot; width=&quot;480&quot;&gt;&lt;/embed&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/4091661151078108443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2011/02/scraping-in-python-for-fun-and-profit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4091661151078108443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4091661151078108443'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2011/02/scraping-in-python-for-fun-and-profit.html' title='Scraping in Python for fun and profit'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-387904381372331408</id><published>2010-10-24T21:08:00.000+05:30</published><updated>2018-06-10T14:58:25.886+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ruby"/><title type='text'>Q1 of BORQ - Mad Libs</title><content type='html'>My solution for Mad Libs, I need to practice some more regular expression. &lt;a href=&quot;http://www.rubular.com/&quot;&gt;Rubular&lt;/a&gt; is a great help for people like me. RegExp is in a more free-form in Ruby compared to python, which is quite good for quick experiments on irb.&lt;br /&gt;&lt;script src=&quot;http://gist.github.com/643663.js?file=BORQ_1_MadLibs.rb&quot;&gt;&lt;/script&gt;&lt;br /&gt;I wish I could even get rid of the &quot;if&quot;s and make it sexier. Can&#39;t think more on this one right now.</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/387904381372331408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/10/q1-of-borq-mad-libs.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/387904381372331408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/387904381372331408'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/10/q1-of-borq-mad-libs.html' title='Q1 of BORQ - Mad Libs'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-4428617315111024296</id><published>2010-10-24T21:06:00.000+05:30</published><updated>2018-06-10T14:58:26.111+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Ruby"/><title type='text'>Q2. of BORQ - LCD display</title><content type='html'>This is an old one, pretty famously seen on uva, etc. I found &lt;a href=&quot;http://choice.rubyforge.org/&quot;&gt;Choice&lt;/a&gt; to be better than OptParse, as said in Choice docs - it like writing poems for command-line parsing :D&lt;br /&gt;&lt;script src=&quot;http://gist.github.com/643917.js?file=q2_borq_lcd.rb&quot;&gt;&lt;/script&gt;&lt;br /&gt;Initially I was doing a string[j].chr.to_i which seemed like a required bullshit, I wish it could&#39;ve been string[j].to_i but string[i] gives back a decimal. Now one could talk about the C style &#39;5&#39;-&#39;0&#39; conversion to number, but then, that machine dependent (think ascii, ebcdic, etc). The slightly more ruby-ish way - string[j..j].to_i :)&lt;br /&gt;&lt;br /&gt;Here&#39;s my number -&lt;br /&gt;&lt;pre&gt;abhishekmishra@mbp [~/code/BORQ]&amp;gt; ruby q2_lcd_numbers.rb -s 3 9535009187&lt;br /&gt; ---   ---   ---   ---   ---   ---   ---         ---   ---&lt;br /&gt;|   | |         | |     |   | |   | |   |     | |   |     |&lt;br /&gt;|   | |         | |     |   | |   | |   |     | |   |     |&lt;br /&gt;|   | |         | |     |   | |   | |   |     | |   |     |&lt;br /&gt; ---   ---   ---   ---               ---         ---&lt;br /&gt;    |     |     |     | |   | |   |     |     | |   |     |&lt;br /&gt;    |     |     |     | |   | |   |     |     | |   |     |&lt;br /&gt;    |     |     |     | |   | |   |     |     | |   |     |&lt;br /&gt;       ---   ---   ---   ---   ---               ---&lt;/pre&gt;&lt;br /&gt;Surprisingly the PyMos core code is 180 lines while this reaches upto 108. Python =&amp;gt; more results per line? The absence of &#39;end&#39; in python is one big reason for this. Besides I dont find my ruby code so ruby-ish at this stage.</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/4428617315111024296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/10/q2-of-borq-lcd-display.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4428617315111024296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4428617315111024296'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/10/q2-of-borq-lcd-display.html' title='Q2. of BORQ - LCD display'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-2007816389725744081</id><published>2010-09-22T00:45:00.000+05:30</published><updated>2018-06-10T14:58:25.380+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="pycon"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Speaking at PyCon this weekend :)</title><content type='html'>Here are the slides for talk at the upcoming PyCon India 2010. See you this weekend.&lt;br /&gt;&lt;div id=&quot;__ss_5171849&quot; style=&quot;width: 425px;&quot;&gt;&lt;strong&gt;&lt;a title=&quot;Scraping with Python for Fun and Profit - PyCon India 2010&quot; href=&quot;http://www.slideshare.net/ideamonk/scraping-with-python-for-fun-and-profit-pycon-india-2010&quot;&gt;Scraping with Python for Fun and Profit - PyCon India 2010&lt;/a&gt;&lt;/strong&gt;&lt;object id=&quot;__sse5171849&quot; classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; width=&quot;425&quot; height=&quot;355&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;src&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pycon2010-scrapingwithpythonforfunandprofitideamonk-100910055740-phpapp02&amp;amp;stripped_title=scraping-with-python-for-fun-and-profit-pycon-india-2010&quot; /&gt;&lt;param name=&quot;name&quot; value=&quot;__sse5171849&quot; /&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;&lt;embed id=&quot;__sse5171849&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;425&quot; height=&quot;355&quot; src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=pycon2010-scrapingwithpythonforfunandprofitideamonk-100910055740-phpapp02&amp;amp;stripped_title=scraping-with-python-for-fun-and-profit-pycon-india-2010&quot; name=&quot;__sse5171849&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div style=&quot;padding: 5px 0 12px;&quot;&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/ideamonk&quot;&gt;Abhishek Mishra&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;See you there!</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/2007816389725744081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/09/speaking-at-pycon-this-weekend.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/2007816389725744081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/2007816389725744081'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/09/speaking-at-pycon-this-weekend.html' title='Speaking at PyCon this weekend :)'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-7828149356215429932</id><published>2010-07-17T06:10:00.021+05:30</published><updated>2018-06-10T14:58:27.199+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="caching"/><category scheme="http://www.blogger.com/atom/ns#" term="experiments"/><category scheme="http://www.blogger.com/atom/ns#" term="memoization"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Poorly implementing caching in python - eye opener</title><content type='html'>So after looking at some slides on &lt;a href=&quot;http://ejohn.org/apps/learn/#19&quot;&gt;caching function returns&lt;/a&gt; in javascript, I was keen on trying out so in Python. And LOL I came up with this logic -&lt;br /&gt;&lt;pre&gt;fun(val):&lt;br /&gt;  if val in cache.keys():&lt;br /&gt;    return cache[val]&lt;br /&gt;  else:&lt;br /&gt;    do the right thing...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;But it seems, though &quot;if val in cache.keys()&quot; sounds very human friendly, it definitely would suck for a very big cache, and so it does in the following test.&lt;br /&gt;&lt;br /&gt;I guess I&#39;m not using timeit in the classical way where I would pass some statements in string and ask it to do them for N number of times, but it seems passing some variables from existing code to statement string is a pain, tried global etc, didn&#39;t work. Hence a simple time diff test.&lt;br /&gt;&lt;pre class=&quot;python&quot; name=&quot;code&quot;&gt;# -*- coding: utf-8 -*-&lt;br /&gt;import random&lt;br /&gt;from timeit import Timer&lt;br /&gt;&lt;br /&gt;class PlainColorParser:&lt;br /&gt;    def parse(self,value):&lt;br /&gt;        rgb = int(value[1:], 16)&lt;br /&gt;        r = rgb &amp;gt;&amp;gt; 16 &amp; 0xff&lt;br /&gt;        g = rgb &amp;gt;&amp;gt;  8 &amp; 0xff&lt;br /&gt;        b = rgb &amp; 0xff&lt;br /&gt;        return (r,g,b)&lt;br /&gt;&lt;br /&gt;    def __call__(self,value):&lt;br /&gt;        return self.parse(value)&lt;br /&gt;&lt;br /&gt;class NoBitColorParser:&lt;br /&gt;    def __call__(self,value):&lt;br /&gt;        return (int(value[1:3],16), int(value[3:5],16), int(value[5:7],16))&lt;br /&gt;&lt;br /&gt;class PoorCachedColorParser(PlainColorParser):&lt;br /&gt;    def __init__(self):&lt;br /&gt;        self.cache = {}&lt;br /&gt;&lt;br /&gt;    def __call__(self,value):&lt;br /&gt;        if value in self.cache.keys():&lt;br /&gt;            return self.cache[value]&lt;br /&gt;        self.cache[value] = self.parse(value)&lt;br /&gt;        return self.cache[value]&lt;br /&gt;&lt;br /&gt;class CachedExceptionColorParser(PlainColorParser):&lt;br /&gt;    def __init__(self):&lt;br /&gt;        self.cache = {}&lt;br /&gt;&lt;br /&gt;    def __call__(self,value):&lt;br /&gt;        try:&lt;br /&gt;            return self.cache[value]&lt;br /&gt;        except KeyError:&lt;br /&gt;            self.cache[value] = self.parse(value)&lt;br /&gt;            return self.cache[value]&lt;br /&gt;&lt;br /&gt;class CachedColorParser(PlainColorParser):&lt;br /&gt;    def __init__(self):&lt;br /&gt;        self.cache = {}&lt;br /&gt;&lt;br /&gt;    def __call__(self,value):&lt;br /&gt;        if value in self.cache:&lt;br /&gt;            return self.cache[value]&lt;br /&gt;        else:&lt;br /&gt;            self.cache[value] = self.parse(value)&lt;br /&gt;            return self.cache[value]&lt;br /&gt;&lt;br /&gt;if __name__ == &quot;__main__&quot;:&lt;br /&gt;    t = Timer()&lt;br /&gt;    pccParse = PoorCachedColorParser()&lt;br /&gt;    cecParse = CachedExceptionColorParser()&lt;br /&gt;    ccParse = CachedColorParser()&lt;br /&gt;    pcParse = PlainColorParser()&lt;br /&gt;    nbParse = NoBitColorParser()&lt;br /&gt;&lt;br /&gt;    # setup some random data to test&lt;br /&gt;    colors = []&lt;br /&gt;    for i in xrange(100000):&lt;br /&gt;        colors.append(&quot;#&quot; + hex(random.randint(0xfe0000, 0xff0aff))[2:])&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    def timeDiff(obj):&lt;br /&gt;        start = t.timer()&lt;br /&gt;        for c in colors:&lt;br /&gt;            obj(c)&lt;br /&gt;        stop = t.timer()&lt;br /&gt;        return ((1000000*stop - 1000000*start)/1000000)&lt;br /&gt;&lt;br /&gt;    # ---- test poorly cached&lt;br /&gt;    print &quot;Poorly Cached - %.2fs&quot; % timeDiff(pccParse)&lt;br /&gt;&lt;br /&gt;    # ---- test exception cached&lt;br /&gt;    print &quot;Exception Cached - %.2fs&quot; % timeDiff(cecParse)&lt;br /&gt;&lt;br /&gt;    # ---- test cached&lt;br /&gt;    print &quot;Cached - %.2fs&quot; % timeDiff(ccParse)&lt;br /&gt;&lt;br /&gt;    # ---- test uncached&lt;br /&gt;    print &quot;Non Cached - %.2fs&quot; % timeDiff(pcParse)&lt;br /&gt;&lt;br /&gt;    # ---- test no bitwise, uncached&lt;br /&gt;    print &quot;Not Bitwise, Non Cached - %.2fs&quot; % timeDiff(nbParse)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So we&#39;ve got &lt;del&gt;4&lt;/del&gt; 5 classes to represent different ways of parsing an html hex code for color e.g. &quot;#f00f00&quot; into a tuple of (r,g,b) integers. PlainColorParser and NoBitColorParser could easily be functions with no need of classes over them as they do not cache, but to bring them a little equal to other two cached ones, I&#39;ve bound them in classes.&lt;br /&gt;&lt;br /&gt;NoBitColorParser does string manipulations and parses 3 times before returning a tuple. PlainColorParser does better than that, it uses bit shifts and AND masks to filter out content after 1 round of parsing integer from string. PoorCachedColorParser does caching in an obvious way &quot;if its there in cache keys... else ...&quot;, and &lt;del&gt;CachedColorParser&lt;/del&gt; CachedExceptionColorParser complies to the philosophy of &lt;a href=&quot;http://wiki.python.org/moin/PythonSpeed/PerformanceTips#InitializingDictionaryElements&quot;&gt;&quot;Fail early, fail often&quot;&lt;/a&gt;, which is quite interesting :D &lt;span style=&quot;color: rgb(0, 102, 0); font-weight: bold;&quot;&gt;&lt;br /&gt;but recent findings reveal that CachedColorParser is the right, fast, pythonic way.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;What the test does is - generate 100000 random color codes, pick them from a range of 2816 colors (0xff0aff - 0xff0000 + 1). Obviously many colors are bound to get repeated says pigeon hole.&lt;br /&gt;&lt;br /&gt;Here&#39;s what goes on in an average run on my machine -&lt;br /&gt;&lt;pre&gt;abhishekmishra@mbp [~/code]&gt; python pycaching.py&lt;br /&gt;Poorly Cached - 340.23s&lt;br /&gt;Exception Cached - 0.30s&lt;br /&gt;Cached - 0.18s&lt;br /&gt;Non Cached - 0.15s&lt;br /&gt;Not Bitwise, Non Cached - 0.16s&lt;/pre&gt;&lt;br /&gt;&quot;if value in self.cache.keys():&quot; in PoorCachedColorParser gives you a thumbs down with a sucky performance, obviously not the right thing to do!!! (I was mistaken)&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-style: italic;&quot;&gt;CachedExceptionColorParser gives a sweet 0.30s, &quot;Fail early, Fail often&quot; works :)&lt;br /&gt;&lt;span style=&quot;color: rgb(0, 102, 0); font-weight: bold;&quot;&gt;But wait, CachedColorParser goes further even a bit more with just 0.18s.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;NoBitColorParser is suckier than the Non Cached PlainColorParser, which points out that string ops, parsing integers is one costly affair.&lt;br /&gt;&lt;br /&gt;So much for food to my sleeplessness. Oh I remember doing something similar in &lt;a href=&quot;http://blog.ideamonk.in/2009/11/pymos-creating-mosaics-of-your-photos.html&quot;&gt;PyMos&lt;/a&gt; too :D.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold; color: rgb(0, 102, 0);&quot;&gt;More updates - &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Looking at &lt;a href=&quot;http://mail.python.org/pipermail/bangpypers/2010-August/004911.html&quot;&gt;Dhananjay&#39;s code&lt;/a&gt; on &lt;a href=&quot;http://mail.python.org/mailman/listinfo/bangpypers&quot;&gt;BangPypers&lt;/a&gt;, I think I was too excited to throw in the idion of fail fast in this place, it can albeit be done in a cleaner way. So instead of -&lt;pre&gt;try:&lt;br /&gt;    return self.cache[value]&lt;br /&gt;except KeyError:&lt;br /&gt;    self.cache[value] = self.parse(value)&lt;br /&gt;    return self.cache[value]&lt;/pre&gt;&lt;br /&gt;You could just write in much cleaner way -&lt;pre&gt;if value in self.cache:&lt;br /&gt;    return self.cache[value]&lt;br /&gt;else:&lt;br /&gt;    self.cache[value] = self.parse(value)&lt;br /&gt;    return self.cache[value]&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So the issue was with cache.keys(), which now seems like an obvious slow and shitty way.&lt;br /&gt;New stats reveal that even Try: Except:... fail fast is even not the right way.&lt;br /&gt;&lt;br /&gt;Notice the almost double time difference between &quot;try.. except..&quot; way and &quot;if value in self.cache&quot;.&lt;br /&gt;&lt;br /&gt;Lesson learnt :)</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/7828149356215429932/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/07/poorly-implementing-caching-in-python.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/7828149356215429932'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/7828149356215429932'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/07/poorly-implementing-caching-in-python.html' title='Poorly implementing caching in python - eye opener'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-2750796248405510101</id><published>2010-07-14T15:13:00.000+05:30</published><updated>2018-06-10T15:14:52.727+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="rants"/><title type='text'>अपने घर के चोर</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;pre style=&quot;font-weight: bold;&quot;&gt;&lt;span style=&quot;background-color: white;&quot;&gt;You find it to be a sorry ass pussy system 
that fails to respond to situations in time, 
you read up, watch stuff and blame on them for &quot;not doing anything&quot;, 
but hardly would it strike to your conditioned imagination 
that they might just be so pre-occupied in doing something else 
that you could have never imagined. 

And yet you passive cunt, you take it all for granted
and sleep for the next day to come by,
expecting everything to be normal.

Who knows for everything,
that you quoted the system to be pussy about,
over your cup of tea and a morning newspaper,
there were these &quot;अपने घर के चोर&quot;,
thiefs, filling their pockets.


On a side note,
Now that things have become so well connected,
the systems are so well informed, fed by numerous channels,
and fingers just like the ones that typed out this piece of brainf*ck,
clicking out zillions of preferences,
we&#39;re not far from the point when
it would be possible to crunch these into
a whole new understanding, meaning, life.

Just that in this spiderweb,
analyzing nodes, reaching from one to another,
predicting their minds and way of thinking has become easier.&lt;/span&gt;&lt;span style=&quot;background-color: black; color: green;&quot;&gt;
&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/2750796248405510101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2018/06/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/2750796248405510101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/2750796248405510101'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2018/06/blog-post.html' title='अपने घर के चोर'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-8554827507960821234</id><published>2010-06-21T11:58:00.003+05:30</published><updated>2018-06-10T14:58:27.478+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="archlinux"/><title type='text'>DWM-ified</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZzfq9KHtB7Z69CPKW467EqBy5TMFhx22IbXrVm0U2HqH7o3NWDCJduLNWyX3lEJM2QPbDupQvcG7-SdRHR2PIJmDrt92h9x-Rqd5aGIY6Q0kcGOmLFtfx1oXFsfNZyVtSV97b6M_gqaxN/s1600/screenFetch-2010-06-21.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 225px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZzfq9KHtB7Z69CPKW467EqBy5TMFhx22IbXrVm0U2HqH7o3NWDCJduLNWyX3lEJM2QPbDupQvcG7-SdRHR2PIJmDrt92h9x-Rqd5aGIY6Q0kcGOmLFtfx1oXFsfNZyVtSV97b6M_gqaxN/s400/screenFetch-2010-06-21.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5485110495382787202&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;Arch + Dwm + Conky + Dzen2 + links + vim + irssi (plus ram eaten by chrome, firefox, thunderbird, and eden) otherwise awesome at ~100MB, ideal light &amp;amp; fast setup for my netbook :)</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/8554827507960821234/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/06/dwm-ified.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/8554827507960821234'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/8554827507960821234'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/06/dwm-ified.html' title='DWM-ified'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZzfq9KHtB7Z69CPKW467EqBy5TMFhx22IbXrVm0U2HqH7o3NWDCJduLNWyX3lEJM2QPbDupQvcG7-SdRHR2PIJmDrt92h9x-Rqd5aGIY6Q0kcGOmLFtfx1oXFsfNZyVtSV97b6M_gqaxN/s72-c/screenFetch-2010-06-21.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-8045927930444679276</id><published>2010-05-21T12:19:00.002+05:30</published><updated>2018-06-10T14:58:27.255+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="foo"/><category scheme="http://www.blogger.com/atom/ns#" term="musings"/><title type='text'>Release early, release often, release immediately?</title><content type='html'>Okay nothing much for this post, but I was just thinking about the &lt;a href=&quot;http://catb.org/esr/writings/homesteading/cathedral-bazaar/ar01s04.html&quot;&gt;RERO &lt;/a&gt;philosophy apparently popularized by &lt;a href=&quot;http://en.wikipedia.org/wiki/Release_early,_release_often#cite_note-raymond-2&quot;&gt;ESR&lt;/a&gt; in &lt;a href=&quot;http://oreilly.com/catalog/9780596001087/&quot;&gt;CATB&lt;/a&gt; (I guess I won&#39;t need to read the 256 pages).&lt;div&gt;&lt;br /&gt;&lt;div&gt;Anyways so I was wondering if releasing immediately is a good thing to do? Picture yourself working whole night over a cool project that you intend to release for the public. Its 6 AM, you&#39;re done with your last commit, nothing seems to be broken, yet is it the right time to release? The problem has nothing to do with any sort of technicalities, but is a psychological one and completely based on my experiences with such quick releases.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The question is, are you left with enough energy after working for 2-3 days straight to take the criticism, suggestions and comments seriously in a positive way? At least I as a lone developer of something that I put forward to the public haven&#39;t been able to harness the feedback that people gave me. I ponder over the reasons, and I&#39;m not sure of why is that. But mostly it went something like this -&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&quot;Could you possibly include feature XYZ into it?&quot;&lt;br /&gt;and I think - oh cummon, I just got over with this work and now I need a break.&lt;/li&gt;&lt;li&gt;&quot;This stuff seems broken, I cant move X to Y.&quot;&lt;br /&gt;and I think - who said I made it for you :/&lt;/li&gt;&lt;li&gt;&quot;It would be nice if you include ABC and XYZ also&quot;&lt;br /&gt;and I just write a good reply to the person, add it to my non-existant list of todos in mind or Tasks in gmail and it stays there forever.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This has happened many a times, even valuable suggestions have just ended up in a todo list rather than getting implemented and the projects hardly getting touched again.&lt;/div&gt;&lt;div&gt;How do you go about it? or is it just me who keeps hopping over ideas and leaves the old ones half done. Or is it the procrastination that engulfs on dawn of winter and summer vacations.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;An interesting observation over procrastination. During this end sem exams, we were given a 5 day prep leave, and LOL I completely spent the whole time writing some piece of code instead of doing maths. Same story for any intermediate breaks between exams, reading something, watching some anime, writing some code but zero preparation for any exam. And yes a hell lot of ideas cooking in your mind for coming vacations.&lt;/div&gt;&lt;div&gt;Surprisingly it happens, not once but many times, that when exams end - I go completely blank over things I had planned. And with &quot;Oh come on! exams just got over!&quot; mentality I start spending days being useless to myself and everyone else.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And even though some new work arrives, I still end up behaving as if I&#39;m super busy with things. Hoping to get rid of this soon and maybe hack this &quot;Not doing what I am supposed to do at this time.&quot; way of life for greater goods. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/procrastination&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Okay the blogger WYSIWYG editor is really not good on chrome. It doesn&#39;t render &amp;lt;, &amp;gt; properly and end up putting in loads of DIVs instead of beautiful Ps as in firefox. Why can&#39;t they have a standard across two browsers for same webapp.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/8045927930444679276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/05/release-early-release-often-release.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/8045927930444679276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/8045927930444679276'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/05/release-early-release-often-release.html' title='Release early, release often, release immediately?'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-3058219897339091563</id><published>2010-05-16T13:10:00.006+05:30</published><updated>2018-06-10T14:58:25.663+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="gsoc2010"/><category scheme="http://www.blogger.com/atom/ns#" term="sahana eden"/><category scheme="http://www.blogger.com/atom/ns#" term="web2py"/><title type='text'>Summer 2010 #1</title><content type='html'>&lt;div style=&quot;text-align: left;&quot;&gt;So this is 16th already. Today, being a Sunday - we still had some college classes to attend, namely the placement classes. Glad that I bunked and got proxy in majority of them. I mean seriously, it sucks to have your college delay you from your planned schedule.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So this is the action plan for today -&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Setup local repositories, branches for gsoc on launchpad and a latest copy of web2py.&lt;/li&gt;&lt;li&gt;Go through the all mails you missed out during exams.&lt;/li&gt;&lt;li&gt;Do something with web2py quickly to go through everything it offers (maybe port bugbase to web2py)&lt;/li&gt;&lt;li&gt;Make notes on my understandings, raise doubts, go though UI testing chapters sent by Michael.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;I will end it there to KISS as the evening might be a little pre-occupied with a friend coming over.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 0, 238); -webkit-text-decorations-in-effect: underline; &quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga_76gbJsK00FUhGPCzAeBJIzlTX9eUVmjEx6p_LeKTfR6edIX9o45JNla-CsuZ5ULTDWVjxymD7D3ovuwGqAqSqc0JuMRXP8zJK9LhXiPjwyzr55WXoo0eDgFmhe8DlkZpMkd6ZR_IjXI/s320/Screenshot-60.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5471781254658770850&quot; style=&quot;float: left; margin-top: 0px; margin-right: 10px; margin-bottom: 10px; margin-left: 0px; cursor: pointer; width: 220px; height: 120px; &quot; /&gt;&lt;/span&gt;&lt;div&gt;This leaves me with a week before community bonding ends, to finish off with getting as familiar as possible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Keeping myself on the right track would be the job of Korganizer and RTM.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I had been using KDE&#39;s RTM plasmoid to keep track of things till April end when I got my netbook.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;On gnome I&#39;m sticking with GTG (Getting things Gnome) but nothing beats a todo reminder like RTM plasmoid on KDE which omnipresently reminds you of what needs to be done.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRr3p6_TfmQiHUwBOS8MnXOqqIEfL_6zekyV1JUKngo_G_PZYum2MKEBwUEw9DcwBkuN2Zm5x1IQsYj2e0UBxADlER5Jxh5EXR2ObFeFnnA6ymMifgW1Ra9mxqyhcu7wkigfXf4ik4vaa1/s1600/social_small.png&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRr3p6_TfmQiHUwBOS8MnXOqqIEfL_6zekyV1JUKngo_G_PZYum2MKEBwUEw9DcwBkuN2Zm5x1IQsYj2e0UBxADlER5Jxh5EXR2ObFeFnnA6ymMifgW1Ra9mxqyhcu7wkigfXf4ik4vaa1/s320/social_small.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5471784153986167394&quot; style=&quot;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 320px; height: 307px; &quot; /&gt;&lt;/a&gt;&lt;div style=&quot;text-align: center;&quot;&gt;RTM plasmoid - adding another step to KDE&#39;s social desktop&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjY8ck_wljVHxOm8WZ-yRJLbZROK5Nqsf_xdZ9_ZQq78HqhJ_nGMwqwQjG5S3tkuG7DT2KE14tWzamZ0Nfmu6lZUDK1EBhT6s4nFqaKcbBDkIe9c460oYXpjmzekQYVsLAyo0ZfadGR3KU/s1600/gtg.png&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjY8ck_wljVHxOm8WZ-yRJLbZROK5Nqsf_xdZ9_ZQq78HqhJ_nGMwqwQjG5S3tkuG7DT2KE14tWzamZ0Nfmu6lZUDK1EBhT6s4nFqaKcbBDkIe9c460oYXpjmzekQYVsLAyo0ZfadGR3KU/s320/gtg.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5471784143837705570&quot; style=&quot;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 268px; height: 320px; &quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;GTG - syncs and sits in try making you lazier&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/3058219897339091563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/05/summer-2010-1.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/3058219897339091563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/3058219897339091563'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/05/summer-2010-1.html' title='Summer 2010 #1'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEga_76gbJsK00FUhGPCzAeBJIzlTX9eUVmjEx6p_LeKTfR6edIX9o45JNla-CsuZ5ULTDWVjxymD7D3ovuwGqAqSqc0JuMRXP8zJK9LhXiPjwyzr55WXoo0eDgFmhe8DlkZpMkd6ZR_IjXI/s72-c/Screenshot-60.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-4558198317608290202</id><published>2010-05-16T10:30:00.000+05:30</published><updated>2018-06-10T14:58:26.167+05:30</updated><title type='text'>Some afterthoughts on yesterday&#39;s talks</title><content type='html'>One interesting observation that comes to my mind after </content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/4558198317608290202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/05/some-afterthoughts-on-yesterdays-talks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4558198317608290202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4558198317608290202'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/05/some-afterthoughts-on-yesterdays-talks.html' title='Some afterthoughts on yesterday&#39;s talks'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-6208041667518517530</id><published>2010-05-15T16:41:00.003+05:30</published><updated>2018-06-10T14:58:26.697+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="freebies"/><category scheme="http://www.blogger.com/atom/ns#" term="linux"/><category scheme="http://www.blogger.com/atom/ns#" term="wow"/><title type='text'>Yay! Freebies arrive :D</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl-YhDSOWtyaMnFQQiyyQXkr-1J1uW7grdFF23SgmP-7EiVgaDa3W1D1b6cA4tYuB-Q6bpdvh8iQQJif1uXrSsNiMsZ26-K5F9ii3JOPCJLCfG6t1fFcRnqnQi6ht8G0f_P9JJ33ydKTG3/s1600/2010-05-15-163752.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl-YhDSOWtyaMnFQQiyyQXkr-1J1uW7grdFF23SgmP-7EiVgaDa3W1D1b6cA4tYuB-Q6bpdvh8iQQJif1uXrSsNiMsZ26-K5F9ii3JOPCJLCfG6t1fFcRnqnQi6ht8G0f_P9JJ33ydKTG3/s400/2010-05-15-163752.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5471453579139203458&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS5NxLmugAZ7ghndDHmKyA2ovFq49gbHW9KJJn7HlAnjJMLVagG9uAfBEtyKNgpOh7tBECCE9kKFxwCqX8Tg8KwL88VyN3AZuyDOKwJnOvKeezDm550s4uU4oJZeyoE4K_j1QQxUboWbeZ/s1600/2010-05-15-163804.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS5NxLmugAZ7ghndDHmKyA2ovFq49gbHW9KJJn7HlAnjJMLVagG9uAfBEtyKNgpOh7tBECCE9kKFxwCqX8Tg8KwL88VyN3AZuyDOKwJnOvKeezDm550s4uU4oJZeyoE4K_j1QQxUboWbeZ/s400/2010-05-15-163804.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5471453575188952834&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Just got back home from WebApps 2010 to find these two awesome books from Linux Format magazine kept on my chair. Thanks to Graham Morrison for the initiative. Love the color print in the one from Yahoo Press.&lt;/div&gt;&lt;div&gt;Met a good designer from Shrishti college Chennai, had great time discussing the borderline between a developer&#39;s and a designer&#39;s perspective. Interesting day by chance, otherwise apart from a few talks from rediff.com VP, and Mr. Satyadeep Vusuthy of Yahoo India R&amp;amp;D and @&lt;a href=&quot;http://blog.flexgeek.in/&quot;&gt;hsivaram&lt;/a&gt; of Adobe, the others were a little boring. Had to be like that, for the geekiness quotient was low in the masses.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Linux++&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/6208041667518517530/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/05/yay-freebies-arrive-d.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/6208041667518517530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/6208041667518517530'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/05/yay-freebies-arrive-d.html' title='Yay! Freebies arrive :D'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl-YhDSOWtyaMnFQQiyyQXkr-1J1uW7grdFF23SgmP-7EiVgaDa3W1D1b6cA4tYuB-Q6bpdvh8iQQJif1uXrSsNiMsZ26-K5F9ii3JOPCJLCfG6t1fFcRnqnQi6ht8G0f_P9JJ33ydKTG3/s72-c/2010-05-15-163752.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-4004049514044145866</id><published>2010-05-05T23:05:00.002+05:30</published><updated>2018-06-10T14:58:25.942+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="comics"/><category scheme="http://www.blogger.com/atom/ns#" term="doga"/><category scheme="http://www.blogger.com/atom/ns#" term="social media"/><title type='text'>Orkut spotted in Doga</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZZtRXCYj-QHyogAWuIoqvXd8yeeXTnU1v1AIc9Po1eqSNUpdRC-ojIguKueaf7SQJ9FA9QblRvb5n9wo1xARuiRoK1MoifTLzCfu9nJ1j3abdn3EfqBPNht2J47DNWhiWrmHPMrrWIdOS/s1600/2010-05-05-225928.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 300px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZZtRXCYj-QHyogAWuIoqvXd8yeeXTnU1v1AIc9Po1eqSNUpdRC-ojIguKueaf7SQJ9FA9QblRvb5n9wo1xARuiRoK1MoifTLzCfu9nJ1j3abdn3EfqBPNht2J47DNWhiWrmHPMrrWIdOS/s400/2010-05-05-225928.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5467841369453188178&quot; /&gt;&lt;/a&gt;&lt;div style=&quot;text-align: center;&quot;&gt;Orkut is pretty much a part and parcel of our daily lives - even in Indian comics now - &lt;a href=&quot;http://en.wikipedia.org/wiki/Doga_(comics)&quot;&gt;Doga&lt;/a&gt;- the best Indian comic action hero with some serious balls. (courtesy &lt;a href=&quot;http://www.animesh.in/&quot;&gt;@ixpu&lt;/a&gt;)&lt;/div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/4004049514044145866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/05/orkut-spotted-in-doga.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4004049514044145866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4004049514044145866'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/05/orkut-spotted-in-doga.html' title='Orkut spotted in Doga'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZZtRXCYj-QHyogAWuIoqvXd8yeeXTnU1v1AIc9Po1eqSNUpdRC-ojIguKueaf7SQJ9FA9QblRvb5n9wo1xARuiRoK1MoifTLzCfu9nJ1j3abdn3EfqBPNht2J47DNWhiWrmHPMrrWIdOS/s72-c/2010-05-05-225928.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-3088832880322715672</id><published>2010-05-02T17:04:00.006+05:30</published><updated>2018-06-10T14:58:25.719+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="asus"/><category scheme="http://www.blogger.com/atom/ns#" term="eee pc"/><category scheme="http://www.blogger.com/atom/ns#" term="netbook"/><category scheme="http://www.blogger.com/atom/ns#" term="productivity"/><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu"/><title type='text'>ASUS eee PC 1005P review</title><content type='html'>&lt;table id=&quot;asus&quot; style=&quot;margin-top: -400px;&quot; valign=&quot;top&quot; align=&quot;center&quot; border=&quot;0&quot; cellpadding=&quot;4px&quot; cellspacing=&quot;5px&quot;&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcAtgefmEFMSdKtyUq5q8hpEidxGhRfod37NLi92nN4tJVRcyM_6K75C5DB1fMTnwCiIonMG7K9Zi3-2KcuFNUTAab2xl-rXK5Y6Q9r-epngJkBRqpWboXOZWb5gW1DeKCYJ63ezVRYKyn/s1600/2010-05-02-154148.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcAtgefmEFMSdKtyUq5q8hpEidxGhRfod37NLi92nN4tJVRcyM_6K75C5DB1fMTnwCiIonMG7K9Zi3-2KcuFNUTAab2xl-rXK5Y6Q9r-epngJkBRqpWboXOZWb5gW1DeKCYJ63ezVRYKyn/s200/2010-05-02-154148.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466634956406208706&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;1. Small form&lt;br /&gt;Keeps the desk clean&lt;br /&gt;Easy to carry&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhop339mfgvz31vx0B5GmdXbXd9TeOPb1lzFS25YuiEbDj5fv9s96YSn4kROrstJkgF6sZjbqdhLkhxQGEn81qsfk8j1_WpLFKx9qIL6pJ_dU7GQkYzunQwhctDO__-bH1VnTq13h79w6NF/s1600/2010-05-02-152341.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhop339mfgvz31vx0B5GmdXbXd9TeOPb1lzFS25YuiEbDj5fv9s96YSn4kROrstJkgF6sZjbqdhLkhxQGEn81qsfk8j1_WpLFKx9qIL6pJ_dU7GQkYzunQwhctDO__-bH1VnTq13h79w6NF/s200/2010-05-02-152341.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466635878022794754&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;2. Glossy screen&lt;br /&gt;:( reflects bright light&lt;br /&gt;:) gives good picture quality&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt; &lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjqokfNzs8thKS7r2t_b1ELA-0-6W1bL7ponPkjPYNtLy1jXK7wHfE7998GOVDvzRZBH2rnhs4dZaEYmOYVxWLGnOn3y1bYEmGkulo1mQGRlANju65thrN9Kyo5Kjx2N5mi2MXxaDu3art/s1600/2010-05-02-152929.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjqokfNzs8thKS7r2t_b1ELA-0-6W1bL7ponPkjPYNtLy1jXK7wHfE7998GOVDvzRZBH2rnhs4dZaEYmOYVxWLGnOn3y1bYEmGkulo1mQGRlANju65thrN9Kyo5Kjx2N5mi2MXxaDu3art/s200/2010-05-02-152929.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466635873009455922&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;3. 11 hours battery backup. Works for 6hrs max on linux, starts from 10hrs on Windows 7&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpMXBnG2NnX8fsxNq5GfEg0n7PcSboQHE_KTuHPeXN4yV6fYa6CUmTCwMjphOu5q8I6IwANtxPjDImF6clBtftpzCupJWU27ThgaAb23n6tMm-5dy8E9DQ7_jG_cB7QN60JGOIAqChMPG4/s1600/2010-05-02-153728.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpMXBnG2NnX8fsxNq5GfEg0n7PcSboQHE_KTuHPeXN4yV6fYa6CUmTCwMjphOu5q8I6IwANtxPjDImF6clBtftpzCupJWU27ThgaAb23n6tMm-5dy8E9DQ7_jG_cB7QN60JGOIAqChMPG4/s200/2010-05-02-153728.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466634979959254386&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;4. as wide as a book&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI-c6gONayGK2VZU7nb6hqudFB56Eeraakqr1QpUJ06hjaXSYXOvx3WokZAhvzhGvZVgVyAc-q8EgPC3TBJwPEvNjNqDIdP00Xak40MD7ILfhm72yVQDt8kwfxSXys6YLZkQ51jtMfAKg9/s1600/2010-05-02-153834.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgI-c6gONayGK2VZU7nb6hqudFB56Eeraakqr1QpUJ06hjaXSYXOvx3WokZAhvzhGvZVgVyAc-q8EgPC3TBJwPEvNjNqDIdP00Xak40MD7ILfhm72yVQDt8kwfxSXys6YLZkQ51jtMfAKg9/s200/2010-05-02-153834.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466634977438206434&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;5. as thin as a book&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKpFemVtoE8P985AQeJymklisD7rKlR3jQNO3Kepp2DBa3eViI4vWA1t48e2akaTjLAfF5vavX69J6EKfo7JydHTZ1td0p2aUylSfmoqGiFrD9XSmZMMzPs1DRlv2byfr1g6jqyJSO4ypn/s1600/2010-05-02-153956.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKpFemVtoE8P985AQeJymklisD7rKlR3jQNO3Kepp2DBa3eViI4vWA1t48e2akaTjLAfF5vavX69J6EKfo7JydHTZ1td0p2aUylSfmoqGiFrD9XSmZMMzPs1DRlv2byfr1g6jqyJSO4ypn/s200/2010-05-02-153956.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466634973533937426&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;6. as thick as 2 books :D&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUbABw4-Gwr7LnL6x68J7AbtQ51ZA_CRacc6NCiJdsFB_zkY92LpYSKnDwonpBsJCnPnFjvlDRcmNiCiAh4nhF-G-HwCklOsKO4ISyUgGpVXeLzXBpcCSFF295HjjEDswRCzbjIv5TA8tf/s1600/2010-05-02-154100.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUbABw4-Gwr7LnL6x68J7AbtQ51ZA_CRacc6NCiJdsFB_zkY92LpYSKnDwonpBsJCnPnFjvlDRcmNiCiAh4nhF-G-HwCklOsKO4ISyUgGpVXeLzXBpcCSFF295HjjEDswRCzbjIv5TA8tf/s200/2010-05-02-154100.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466634964069685042&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;7. Great touchpad, never becomes slippery/sticky&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6tziEALIC8Fogrl8MiNo0fuBIoFl_PeTnI5zYEMIGs66l3ODuSxfa1Xf3N2po-cF7b-eA3DmCSNj_UddjitRvaBspbiyzfIWDkc4anrXGWW9cmlWdtZCseoKeMsY_pCl-aYSA7F-fCGvL/s1600/2010-05-02-152954.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6tziEALIC8Fogrl8MiNo0fuBIoFl_PeTnI5zYEMIGs66l3ODuSxfa1Xf3N2po-cF7b-eA3DmCSNj_UddjitRvaBspbiyzfIWDkc4anrXGWW9cmlWdtZCseoKeMsY_pCl-aYSA7F-fCGvL/s200/2010-05-02-152954.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466635864892622626&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;8. Chicklet keyboard, effortless to type, takes time getting used to&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0Vae7efCr9lx5UII5MGBTpLQytueHRcxxUPH8qol88bBkfd2WEx2BW8uT4w-IEeVKvOIl10W1zIm1Hr68mbe2oQwNbLodel3PopN2U4fALlly4DbDjmuSsIbSMyi6cEBKST4ohFZzQgFr/s1600/2010-05-02-153229.jpg&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0Vae7efCr9lx5UII5MGBTpLQytueHRcxxUPH8qol88bBkfd2WEx2BW8uT4w-IEeVKvOIl10W1zIm1Hr68mbe2oQwNbLodel3PopN2U4fALlly4DbDjmuSsIbSMyi6cEBKST4ohFZzQgFr/s200/2010-05-02-153229.jpg&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466635876256174562&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;9. Runs Ubuntu 10.04 decently&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-xdLN6Zp8KovlHROAn8F5aKo39_QiGlX7V8t6F6NUrjRPG-KLc4HUCkkowO5TBEwd0XLfLcnUZrT3D8QH9Xky5cdxzFLVl4ylzjpYpw6cVUb41S0WqQ5CCjF7zT1pZQn_-hwQ_tkBDunA/s1600/Screenshot-19.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 66px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-xdLN6Zp8KovlHROAn8F5aKo39_QiGlX7V8t6F6NUrjRPG-KLc4HUCkkowO5TBEwd0XLfLcnUZrT3D8QH9Xky5cdxzFLVl4ylzjpYpw6cVUb41S0WqQ5CCjF7zT1pZQn_-hwQ_tkBDunA/s200/Screenshot-19.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466637474145977458&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;10. 30 lines of code at a time&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaAtAHflEGZYlMvvn7PpqRRBcPBWdkFQeWRSH8KcDvny6yprBoSM2akYdW2858uZSZe52nJ3fEiZBjOs6Pc3t2EuPfN1ywO4AOwj1Ev7gIhGkcTPgcSLytfjRQvma1tiiUEuXqFNG9yCrI/s1600/Screenshot-18.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 66px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiaAtAHflEGZYlMvvn7PpqRRBcPBWdkFQeWRSH8KcDvny6yprBoSM2akYdW2858uZSZe52nJ3fEiZBjOs6Pc3t2EuPfN1ywO4AOwj1Ev7gIhGkcTPgcSLytfjRQvma1tiiUEuXqFNG9yCrI/s200/Screenshot-18.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466637793262907538&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;11. Completing a &lt;a href=&quot;http://github.com/ideamonk/code--&quot;&gt;college project&lt;/a&gt; in QtCreator was an okay experience, project build was slow.&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3lxh3Xhts9brpNcVmtVk_iuFurfqBXLxcwyesZrQOn9F-diOhTWXlcFp2gShrPuZyqHFPrAD50FaC-Y6P76Dbt8np5sNLlHWBlyNNX-8oX4ZAW6dDVRTA7VtB3oe6HeZBs59V4LIiH6i4/s1600/snapshot35.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 66px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh3lxh3Xhts9brpNcVmtVk_iuFurfqBXLxcwyesZrQOn9F-diOhTWXlcFp2gShrPuZyqHFPrAD50FaC-Y6P76Dbt8np5sNLlHWBlyNNX-8oX4ZAW6dDVRTA7VtB3oe6HeZBs59V4LIiH6i4/s200/snapshot35.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466637476348310482&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;12. Wrote &lt;a href=&quot;http://blog.ideamonk.in/2010/04/introducing-bugbase-10.html&quot;&gt;a PHP webapp&lt;/a&gt; on it, wasn&#39;t a pain!&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbBZ8HNKeu80uDpc8_pZnoQe9YqrfnLyyCmHIM6GGAgmZFWD0MfEwTyoHJDbPqiEDtkEkbqD7kdByEVRMyu9GWRGJI_AEzI-dhS2v06vl5XldP7YbucxJo0DgCkVYLWik0j4enV2Xde22x/s1600/Screenshot-8.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 66px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbBZ8HNKeu80uDpc8_pZnoQe9YqrfnLyyCmHIM6GGAgmZFWD0MfEwTyoHJDbPqiEDtkEkbqD7kdByEVRMyu9GWRGJI_AEzI-dhS2v06vl5XldP7YbucxJo0DgCkVYLWik0j4enV2Xde22x/s200/Screenshot-8.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466637460679533650&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;13. Plays HD as well, good to catchup with anime while travelling&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw2_kE4Oksw0PRYRm9n-xnn-K6PU5y1AJAfBwnPWPWT6gWprAzpzlOoqpbTaU4-97tfae46R1F4uDwDmkkH-v7gHT-p2oBn0BzGwEoquIDyuOG3DTmOSdtnXyM14QdVNpOR7d_MyPcbGBJ/s1600/Screenshot-10.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 66px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw2_kE4Oksw0PRYRm9n-xnn-K6PU5y1AJAfBwnPWPWT6gWprAzpzlOoqpbTaU4-97tfae46R1F4uDwDmkkH-v7gHT-p2oBn0BzGwEoquIDyuOG3DTmOSdtnXyM14QdVNpOR7d_MyPcbGBJ/s200/Screenshot-10.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466637463555578306&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;14. Decent fullscreen performance&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;td valign=&quot;top&quot; width=&quot;33.3%&quot; align=&quot;center&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp3MSuKj12L3_NrrCgjKa5T2v1IHfVbMMwj4dgeW6cHatPlIpyxwzmPWn_F0tOAA7jMFE7OnzCKPB6gcg2-Ao0Uz3MZBbxplZ2rQ3XYC1hhxbbUBRa0Jqpm8Oq0_r3icWdsc_us2CYFvgB/s1600/Screenshot-33.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 100px; height: 66px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp3MSuKj12L3_NrrCgjKa5T2v1IHfVbMMwj4dgeW6cHatPlIpyxwzmPWn_F0tOAA7jMFE7OnzCKPB6gcg2-Ao0Uz3MZBbxplZ2rQ3XYC1hhxbbUBRa0Jqpm8Oq0_r3icWdsc_us2CYFvgB/s200/Screenshot-33.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466637480419249778&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;15. No No No don&#39;t do this with it&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Been using it for a month now, bought it from Staples, Koramangala for Rs. 18900. Somehow the prices of netbooks are little hiked up here compared to ones mentioned on Amazon. In some more depth -&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In its small form it encloses decent power -&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Atom N450 (1.66 Ghz) processor&lt;/li&gt;&lt;li&gt;a 250 GB harddisk&lt;/li&gt;&lt;li&gt;a 0.3 mp webcam&lt;br /&gt;&lt;/li&gt;&lt;li&gt;1 GB RAM (which is enough if you run fvwm2 or awesome wm)&lt;br /&gt;Basically Ubuntu+Chrome+Flashplayer+20 tabs is destined to screw this machine, don&#39;t even run two browsers!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;It has a 10.1 inch glossy display and supports upto 1024x600 resolution. Its pretty decent for web browsing with Chrome or a customized Firefox with menus, statusbar, etc removed using addons.&lt;/li&gt;&lt;li&gt;Claims 11 hours of battery life, well that&#39;s if you keep running what it came with - Windows 7. Unfortunately I removed it 2 days after the purchase and have been looking for a large capacity USB to restore in future. On linux, battery life is a pain, though on Arch linux sans a functioning window manager/desktop, I could run it for 3 hours watching movies in mplayer and the battery drained till 48%.&lt;br /&gt;Copying things from an external harddisk sucks battery very quickly. Don&#39;t keep ntfs partitions mounted otherwise flush and jdb2 calls every 3 seconds will suck more.&lt;br /&gt;On average, use wifi, watch youtube, keep surfing for 4 hours without any worries.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Again pretty light on my college bag, just like a book.&lt;/li&gt;&lt;li&gt;Decently thin too, and it is something that you can really hold in your lap.&lt;br /&gt;Beware of dust though, looking at heat outlet openings, and being able to see some circuitary from there, it gives you scary thoughts of &quot;what if... ?&quot;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Little thicker towards battery side though. It does generate less heat than my previous laptop, though I haven&#39;t tried compiling KDE on this.&lt;/li&gt;&lt;li&gt;I like the touchpad, look at those protrusions over it, it never gets sticky at all, now matter how bad your fingers are. Though touchpad sometimes interferes with your typing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Small keyboard sucks initially, specially the Fn key and Home and End button placement. While coding I do a lot of Home, Ctrl+Home, now I have to press 2 and 3 keys respectively. Once you get used to this keyboard, you can type faster.&lt;/li&gt;&lt;li&gt;I tried both Ubuntu and Arch on it. It started from Ubuntu 10.04 alpha on which 3d accerelation magically worked. Upon dist-upgrade to beta and subsequently to LTS, it gave up on 3d acceleration and runs in VESA mode, which I&#39;m okay with, just that I can&#39;t enjoy Quake 3 for some time.&lt;br /&gt;The &lt;a href=&quot;http://en.wikipedia.org/wiki/Poulsbo_%28chipset%29&quot;&gt;Poulsbo&lt;/a&gt; graphics chipset is pretty new and would take time to get support here. Some guys in Mandriva have found solution, while the ones in Arch community are still in discussions. The problem is that Xorg-server 1.7.x as on arch, doesn&#39;t even run with VESA on this hardware, which is something that should work.&lt;br /&gt;I wish to put Arch as my main OS here soon, will try by downgrading the Xorg-server to 1.5.x-gentoo from AUR.&lt;/li&gt;&lt;li&gt;Coding on a netbook - yes its possible. All IDEs and editors gave me decent 30 line view after some tweak :)&lt;/li&gt;&lt;li&gt;Coming to IDEs I wouldn&#39;t recommend running Eclipse on it to anyone, though Qt Creater did a good performance. Build takes some 3-5 seconds more than what it took on old laptop. The embedded Qt designer in QtCreater is impossible to use though, better stick to launching Qt Designer externally.&lt;/li&gt;&lt;li&gt;Web development is what goes good with netbooks, you really don&#39;t need to compile anything here, and having an instance of apache2 and mysql in background doesn&#39;t hurt at all. Though you won&#39;t be able to do a lot of Firebug here as it would eat most of the browser real estate. Same goes with multi-resolution testing. Good part is that it attaches to an external very well and you can still get resolution like 1920x1080 to work on.&lt;br /&gt;I&#39;ve used GIMP - again a pain to use on a netbook and Photoshop 7 over wine - which is relatively less painful.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Coming to moves, yes, this is something the device is very good at. Is able to play full HD quality movies at full screen :)&lt;/li&gt;&lt;li&gt;You can watch around 2-3 movies in a row given it works for 6hrs on your distro. Besides what people commonly say about display eating most of the battery, is true. You can see instant gains in battery life when you dim the display. Perfect for catching up with movies before you sleep with lights off in your room.&lt;/li&gt;&lt;li&gt;Ah! don&#39;t think of doing this. Virtualization, bah! obviously not. Though I did it for the same Qt project to write some more lines to make it crossplatform compatible, horrible build time in a QtCreater inside vm - almost 2-4 minutes to build the project./&lt;br /&gt;Also a netbook isn&#39;t the right hardware to compile anything substantially big.&lt;/li&gt;&lt;/ol&gt;&lt;del&gt;The only problem I face right now is the Poulsbo compatibility issues with Arch and some more distros, am little annoyed to see that X is freezing even in vesa mode.&lt;/del&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Update&lt;/span&gt;: &lt;span style=&quot;color: rgb(0, 102, 0); font-weight: bold;&quot;&gt;As of now the lastest release of Arch linux works like a charm, I&#39;m running dwm on it and its the best thing that could happen to a netbook.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Otherwise a netbook is the best way to roam around with a full-fledged linux box in your back pack. I sync my mails offline, catch them up whenever you got time. Play school-time Super Nintendo roms when bored. Catchup an Anime while coming back home from college. Experimenting with some code when it comes to mind. Giving presentations wherever you may be, writing down your thoughts as they come to your mind anytime anywhere, and what not...&lt;br /&gt;&lt;br /&gt;New upcoming models from asus are even more awesome - &lt;a href=&quot;http://www.laptopmag.com/review/laptops/asus-1201n.aspx&quot;&gt;1201N&lt;/a&gt; - metal body - 2GB ram - 1366x768 killer resolution! - 256 MB Nvidia ION all for around $499</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/3088832880322715672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2009/05/asus-eee-pc-1005p-review.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/3088832880322715672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/3088832880322715672'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2009/05/asus-eee-pc-1005p-review.html' title='ASUS eee PC 1005P review'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcAtgefmEFMSdKtyUq5q8hpEidxGhRfod37NLi92nN4tJVRcyM_6K75C5DB1fMTnwCiIonMG7K9Zi3-2KcuFNUTAab2xl-rXK5Y6Q9r-epngJkBRqpWboXOZWb5gW1DeKCYJ63ezVRYKyn/s72-c/2010-05-02-154148.jpg" height="72" width="72"/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-3190319130705024365</id><published>2010-05-01T19:21:00.009+05:30</published><updated>2018-06-10T14:58:25.775+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="GW-BASIC"/><category scheme="http://www.blogger.com/atom/ns#" term="lucknow"/><category scheme="http://www.blogger.com/atom/ns#" term="msl"/><category scheme="http://www.blogger.com/atom/ns#" term="old times"/><category scheme="http://www.blogger.com/atom/ns#" term="school"/><title type='text'>Inspiration and the inspired</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifnkQnoYuESlhEG1h6l-HB1kIjBfZHyrST7aLc4KObIRZh3-UTpa_139uvZeaFxCMzBN_rrm7a_Sro4LpojSQYAJIQo3n-SqIQ7544LOW6BN23JP-ozmM3VkcKr_kcTXPRoTsHLe1TUIfi/s1600/ixpu_kbc.png&quot;&gt;&lt;img align=&quot;left&quot; style=&quot;cursor:pointer; cursor:hand;width: 192px; height: 400px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifnkQnoYuESlhEG1h6l-HB1kIjBfZHyrST7aLc4KObIRZh3-UTpa_139uvZeaFxCMzBN_rrm7a_Sro4LpojSQYAJIQo3n-SqIQ7544LOW6BN23JP-ozmM3VkcKr_kcTXPRoTsHLe1TUIfi/s400/ixpu_kbc.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466303936006397282&quot; /&gt;&lt;/a&gt;Dad just brought over this clipping from way back in 2001 to me today. OMAN this is so cool, they covered our GW-BASIC programs in news paper :)&lt;div&gt;&lt;br /&gt;&lt;div&gt;I had written a wheel of fortune program with colors, wheel animation (the wheel never rotated, the colors did), funny sounds from the PC speakers, all in 320x200 screen 13 :). I remember Mohit&#39;s brother fortunately did win the complete game.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;While my brother &lt;a href=&quot;http://twitter.com/ixpu&quot;&gt;@ixpu&lt;/a&gt; , who is more into chasing &lt;a href=&quot;http://www.animesh.in/&quot;&gt;electrons&lt;/a&gt; and writes more C# these days, had made a clone of Kaun Banega Crorepati, again in GW BASIC, I guess he was using screen 12 (640x400 I guess)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The only difference between today and those days - it was hell lot more exciting back then with all the time to create things like these.&lt;/div&gt;&lt;div&gt;While today it happens to be a mixture of passion and time-management between pointless acads and programming.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I wish I could see some of the source codes from those days, which eventually got destroyed in format wars between us.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Wooh 9 years, well that was the un-procedural language with line numbers and many GOTOs here and there.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/3190319130705024365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/05/inspiration-and-inspired.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/3190319130705024365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/3190319130705024365'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/05/inspiration-and-inspired.html' title='Inspiration and the inspired'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifnkQnoYuESlhEG1h6l-HB1kIjBfZHyrST7aLc4KObIRZh3-UTpa_139uvZeaFxCMzBN_rrm7a_Sro4LpojSQYAJIQo3n-SqIQ7544LOW6BN23JP-ozmM3VkcKr_kcTXPRoTsHLe1TUIfi/s72-c/ixpu_kbc.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-6772410098527205797</id><published>2010-05-01T11:59:00.009+05:30</published><updated>2018-06-10T14:58:26.864+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="gsoc2010"/><category scheme="http://www.blogger.com/atom/ns#" term="sahanapy"/><category scheme="http://www.blogger.com/atom/ns#" term="summer"/><title type='text'>GSOC 2010 - Would be working on Sahana Eden this summer :)</title><content type='html'>&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizEWg02u-NBWxaSfSwCFZ-XODBzR2V_C8sU_f1Ww06gKk-nB9KWVJ4prR5kj6cFODuAF5jUYJncdkXcceK-F3LKdfYPkY0v5GAwKkiVmiKXWS2KrcPoNNn6SAinV-Y7a2QKTYxe0Eredms/s1600/2010_300x267px.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 300px; height: 267px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizEWg02u-NBWxaSfSwCFZ-XODBzR2V_C8sU_f1Ww06gKk-nB9KWVJ4prR5kj6cFODuAF5jUYJncdkXcceK-F3LKdfYPkY0v5GAwKkiVmiKXWS2KrcPoNNn6SAinV-Y7a2QKTYxe0Eredms/s400/2010_300x267px.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466192515479786242&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF9ljK2gffsfZJ2Os5w7DrpyOQqNTM1a0hRkYOoyGQZvhcdX9O_1FFdvvgxRCQ_j0bX9-9_XolLAFbZKwAKUlElv8mKndSdB3VdT0uVVeKQ6gWWXCtQrywq5Rn1IojkNW5H0Ehqaxa0qmh/s1600/selected.jpg&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjF9ljK2gffsfZJ2Os5w7DrpyOQqNTM1a0hRkYOoyGQZvhcdX9O_1FFdvvgxRCQ_j0bX9-9_XolLAFbZKwAKUlElv8mKndSdB3VdT0uVVeKQ6gWWXCtQrywq5Rn1IojkNW5H0Ehqaxa0qmh/s400/selected.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466199443037336114&quot; style=&quot;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 226px; &quot; /&gt;&lt;/a&gt;&lt;div&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8jzp1NPPpzcCSxAsmLF27tXbbPDCtVBw4c5f7dV_x6hOpeFxllfmGWj3k1Qpi0Pc8OZwCFkoKzoB-FHWlrxNByAfgF8rnjIkSqbKFdlPbmJ6ZhRqSywssS-8pWMY1Gzac03RILYxpwtXH/s1600/happy.jfif&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8jzp1NPPpzcCSxAsmLF27tXbbPDCtVBw4c5f7dV_x6hOpeFxllfmGWj3k1Qpi0Pc8OZwCFkoKzoB-FHWlrxNByAfgF8rnjIkSqbKFdlPbmJ6ZhRqSywssS-8pWMY1Gzac03RILYxpwtXH/s400/happy.jfif&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466197266570640258&quot; style=&quot;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 226px; &quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;I applied for two orgs for GSoC 2010 this time - Sahana Software Foundation, PSF and have been selected for my &quot;&lt;a href=&quot;http://blog.ideamonk.in/2010/04/my-gsoc-proposal-for-sahanapy-htmljs.html&quot;&gt;HTML/JS based reusable frontend for S3XRC&lt;/a&gt;&quot; proposal for &lt;a href=&quot;http://eden.sahanafoundation.org/&quot;&gt;&lt;b&gt;Sahana Eden&lt;/b&gt;&lt;/a&gt; (previously known as SahanaPy). I wish I had applied about an year ago too.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most of all I&#39;m so&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifbKvDMv35xeTLXG7bAhfdLYel-KwGuRHYfGxApekq6ZzEuCl9rTH3foI0US92t-7tkEAEsfd9TrFPMl9kvNCbRkHNs_oUlZsvvIIxHSNu2wIiouK_THNE4xIIqUSMAmqhScml3mPZExuf/s1600/happy.jfif&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifbKvDMv35xeTLXG7bAhfdLYel-KwGuRHYfGxApekq6ZzEuCl9rTH3foI0US92t-7tkEAEsfd9TrFPMl9kvNCbRkHNs_oUlZsvvIIxHSNu2wIiouK_THNE4xIIqUSMAmqhScml3mPZExuf/s200/happy.jfif&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466203914079116546&quot; style=&quot;cursor: pointer; width: 40px; height: 20px; &quot; /&gt;&lt;/a&gt; because I&#39;m gonna be working on things I love -&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2TZ6O1_kniQvDwm1kD1uUxt5WFbGPSexNQY-ZH3LsKUxDI6U6DbGxKnAspzVYegTNR93ykkIjNTr32AodhaZBbjvqZhj57Osc1TPytz2U_6kHfPcRBlTfwjemCxsKYKuiHN18efHnes-n/s1600/iLove.jfif&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2TZ6O1_kniQvDwm1kD1uUxt5WFbGPSexNQY-ZH3LsKUxDI6U6DbGxKnAspzVYegTNR93ykkIjNTr32AodhaZBbjvqZhj57Osc1TPytz2U_6kHfPcRBlTfwjemCxsKYKuiHN18efHnes-n/s400/iLove.jfif&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466204511816953826&quot; style=&quot;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 226px; &quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://eden.sahanafoundation.org/&quot;&gt;Sahana Eden&lt;/a&gt; is an Emergency Development Environment - a framework to rapidly build powerful applications for Emergency Management. It is something which you can take and quickly customize to suit the nature of disaster, &lt;a href=&quot;http://eden.sahanafoundation.org/wiki/BluePrintGISAPI&quot;&gt;location&lt;/a&gt;, &lt;a href=&quot;http://translate.hfoss.eu/&quot;&gt;language&lt;/a&gt;, etc. It can be morphed into many faces, as per the demands from the use-case. A really life saving app which has a proven record of assistance in disaster struck areas. Sahana Eden has been used in Haiti, World Food Project, etc while previous versions of Sahana have helped a lot in Sri Lanka, Bihar.&lt;/div&gt;&lt;div&gt;A brief history of project Sahana &lt;a href=&quot;http://daveshields.wordpress.com/2007/05/21/a-brief-history-of-sahana-by-sanjiva-weerawarana/&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Working with the Sahana Eden team at &lt;a href=&quot;http://foss.in/2009/schedules/talkdetailspub.php?talkid=22&quot;&gt;FOSS.in &#39;09&lt;/a&gt; was a delight, from there on I could contribute little more till my winter break ended, but haven&#39;t been able to hack more since then due to the _busy_ _busy_ college life in India :/ (which ofcourse I hate a lot). I&#39;m gonna quench all my thirst this summer.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfvqQXLcpbh0R0lyPj0fg0Qhr7PsXifjEuGXcAyosLXQtxt_mCge3BhzQfx6mgkAA1ieGqh-6elJbyPLX3E912hzDFa97cVFs_aY1MZ4ngxTVQ9AW5PX2bbh9f_cc2g_TUfBKReqa6C_Hi/s1600/4175736953_ea9458de53.jpg&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfvqQXLcpbh0R0lyPj0fg0Qhr7PsXifjEuGXcAyosLXQtxt_mCge3BhzQfx6mgkAA1ieGqh-6elJbyPLX3E912hzDFa97cVFs_aY1MZ4ngxTVQ9AW5PX2bbh9f_cc2g_TUfBKReqa6C_Hi/s400/4175736953_ea9458de53.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466212400312383282&quot; style=&quot;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 266px; &quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6pn1xYLP0tFw11kvPt2LKPNr2-EJsjp-445tymw1D4cbWl6hLhOWEtmv3emwdQgfBjf1SjnYi-6nZ3nhPzxgzkhN2EPIipMDnq-rY6YMyo5mzzVMRQ0KuPx1zZIAjkKeOg64zxzbikxJj/s1600/4175769035_3e740a26a5.jpg&quot;&gt;&lt;img src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6pn1xYLP0tFw11kvPt2LKPNr2-EJsjp-445tymw1D4cbWl6hLhOWEtmv3emwdQgfBjf1SjnYi-6nZ3nhPzxgzkhN2EPIipMDnq-rY6YMyo5mzzVMRQ0KuPx1zZIAjkKeOg64zxzbikxJj/s400/4175769035_3e740a26a5.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5466212390292492514&quot; style=&quot;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 300px; &quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/6772410098527205797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/05/gsoc-2010-would-be-working-on-sahana.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/6772410098527205797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/6772410098527205797'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/05/gsoc-2010-would-be-working-on-sahana.html' title='GSOC 2010 - Would be working on Sahana Eden this summer :)'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizEWg02u-NBWxaSfSwCFZ-XODBzR2V_C8sU_f1Ww06gKk-nB9KWVJ4prR5kj6cFODuAF5jUYJncdkXcceK-F3LKdfYPkY0v5GAwKkiVmiKXWS2KrcPoNNn6SAinV-Y7a2QKTYxe0Eredms/s72-c/2010_300x267px.jpg" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-8521636133812399494</id><published>2010-04-27T03:56:00.003+05:30</published><updated>2018-06-10T14:58:27.367+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="bugs"/><category scheme="http://www.blogger.com/atom/ns#" term="college"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="projects"/><title type='text'>Introducing BugBase 1.0</title><content type='html'>Here&#39;s something about what has kept me busy since last week - a college miniproject. The quickiest dirtiest php app I ever wrote. Still incomplete with loads of things to fix, add, etc. Nevertheless - the intro :)&lt;div style=&quot;width:495px&quot; id=&quot;__ss_3862973&quot;&gt;&lt;strong style=&quot;display:block;margin:12px 0 4px&quot;&gt;&lt;a href=&quot;http://www.slideshare.net/ideamonk/introducing-bugbase-10&quot; title=&quot;Introducing BugBase 1.0&quot;&gt;Introducing BugBase 1.0&lt;/a&gt;&lt;/strong&gt;&lt;object width=&quot;495&quot; height=&quot;375&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bugbase1-100426172406-phpapp01&amp;amp;stripped_title=introducing-bugbase-10&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=bugbase1-100426172406-phpapp01&amp;amp;stripped_title=introducing-bugbase-10&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;495&quot; height=&quot;375&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style=&quot;padding:5px 0 12px&quot;&gt;View more &lt;a href=&quot;http://www.slideshare.net/&quot;&gt;presentations&lt;/a&gt; from &lt;a href=&quot;http://www.slideshare.net/ideamonk&quot;&gt;Abhishek Mishra&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/8521636133812399494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/04/introducing-bugbase-10.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/8521636133812399494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/8521636133812399494'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/04/introducing-bugbase-10.html' title='Introducing BugBase 1.0'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-7012720263843411918</id><published>2010-04-25T23:58:00.005+05:30</published><updated>2018-06-10T14:58:27.087+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="foo"/><category scheme="http://www.blogger.com/atom/ns#" term="meaningless"/><category scheme="http://www.blogger.com/atom/ns#" term="odd observations"/><category scheme="http://www.blogger.com/atom/ns#" term="old times"/><title type='text'>VRML, Direc!Tax, book, shops, kapoorthala...</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVu1A084-A5JjM5QwtyVI4e_rsjOevzKBJvFVjFlHIlooGYJwji7W51QJsUR051uFlAiFAeM-fx0rnhQ7TQAgCwbJlLc_PKSeuL3YzBriK7nYHnLJWpTFA7qpkIReOqaQxuNehFK5jzDhG/s1600/snapshot49.png&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 228px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVu1A084-A5JjM5QwtyVI4e_rsjOevzKBJvFVjFlHIlooGYJwji7W51QJsUR051uFlAiFAeM-fx0rnhQ7TQAgCwbJlLc_PKSeuL3YzBriK7nYHnLJWpTFA7qpkIReOqaQxuNehFK5jzDhG/s400/snapshot49.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5464143933389316866&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;Looks like they just picked books from the end of an alphabetical list - VRML, Visual J++. Just reminds me of the time in that Universal bookshop in Kapoorthala, Lucknow when me and @ixpu used to drool at a wall of Computer programming books.&lt;/div&gt;&lt;div&gt;If you asked for a book on DirectX the shop owner usually used to get confuse it for Direct Tax. Wooh boy that was like 8-9 years ago down the line. There was a couple which was correcting each other on right pronunciation of C# telling &quot;Its not See-Hash its See Sharp&quot; and Dipanjan sir or someone said &#39;This is M$&#39;s answer to Java&#39;, etc.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/7012720263843411918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/04/vrml-directax-book-shops-kapoorthala.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/7012720263843411918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/7012720263843411918'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/04/vrml-directax-book-shops-kapoorthala.html' title='VRML, Direc!Tax, book, shops, kapoorthala...'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVu1A084-A5JjM5QwtyVI4e_rsjOevzKBJvFVjFlHIlooGYJwji7W51QJsUR051uFlAiFAeM-fx0rnhQ7TQAgCwbJlLc_PKSeuL3YzBriK7nYHnLJWpTFA7qpkIReOqaQxuNehFK5jzDhG/s72-c/snapshot49.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-4780593540743987649</id><published>2010-04-24T19:00:00.000+05:30</published><updated>2018-06-10T14:58:26.307+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="old times"/><title type='text'>For each ...</title><content type='html'>Weird ways I learnt a few things down the line -&lt;div&gt;&lt;ul&gt;&lt;li&gt;&#39;for each&#39; construct from the source code of love worm&lt;/li&gt;&lt;li&gt;PHP because writing perl cgi scripts was a pain on the free tripod account, and PHP for all wrong reasons ;)&lt;/li&gt;&lt;li&gt;VB - 1st to make pacman, then again for all wrong reasons.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;more to come as I recall.&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/4780593540743987649/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/04/for-each.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4780593540743987649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/4780593540743987649'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/04/for-each.html' title='For each ...'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-3238809542043950513</id><published>2010-04-09T21:14:00.003+05:30</published><updated>2018-06-10T14:58:25.830+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="gsoc2010"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="sahanapy"/><title type='text'>My GSOC proposal for SahanaPy - HTML/JS based reusable frontend for S3XRC</title><content type='html'>&lt;h2&gt;&lt;a&gt;1. Personal Details&lt;/a&gt;&lt;/h2&gt; &lt;ul&gt;&lt;li&gt; Name- Abhishek Mishra&lt;/li&gt;&lt;li&gt; Communication details -&lt;br /&gt;Email - ideamonk@gmail.com&lt;br /&gt;Freenode  IRC Nickname - ideamonk&lt;br /&gt;Google talk - ideamonk&lt;br /&gt;Skype - ideamonk&lt;br /&gt;Twitter  - ideamonk&lt;br /&gt;Blog - &lt;a href=&quot;http://blog.ideamonk.in/&quot; mce_href=&quot;http://blog.ideamonk.in&quot;&gt;http://blog.ideamonk.in&lt;/a&gt;&lt;/li&gt;&lt;li&gt; I am from a city called Patna in Bihar, India (+5:30 GMT).  Currently I am pursuing a B.Tech (a 4 year course) in Amrita School of  Engineering, Bangalore. I spend most of my day working on my side  projects and cooking new ideas in mind when free from college. In free  time and holidays I also work as a freelance web developer with my  friends - http://madetokill.com&lt;/li&gt;&lt;li&gt; Resume - http://ideamonk.in/abhishek_mishra_resume.txt &lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Exposure to similar technologies and/or FOSS in general.&lt;/h3&gt; &lt;p&gt;I started relying heavily on open source projects to learn from and  use them ever since I switched to Linux about 1.5 years ago. I started  learning Python about 1 year ago and it has in a way become my primary  language to implement anything that comes to my mind. I have worked on  SahanaPy in the past (the current steel theme, custom error pages, a bit  of ExtJS work) and am quite familiar as to how it works. Interestingly  SahanaPy is the first Open Source project I&#39;ve contributed to.&lt;/p&gt; &lt;p&gt;Some thoughts over Free/Open Source Software -&lt;br /&gt;Subtle - as they  may look, ignore - as many people may do, but at the end of the day,  there&#39;s no denying that &quot;Open Source is the best infrastructure you can  rely on&quot; to - solve complex problems of the world, help people around  the world (the way SahanaPy does!), or even to start your business.&lt;br /&gt;I  believe FOSS has saved humanity a lot of time by showing them that  &quot;Re-inventing the wheel&quot; is not always the right approach to get things  right.&lt;br /&gt;Some of my side projects - http://github.com/ideamonk&lt;/p&gt;  &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h3&gt;“Why  would you like to help the Sahana project?”&lt;/h3&gt; &lt;p&gt;I was initially introduced to SahanaPy on IRC by a few friends. Later  in Dec 2009, I got a chance to participate in SahanaPy workout at  FOSS.in. I believe that I could put in my experience in developing Web  Applications very well into S3XRC frontend and help developers deal with  compound results in an easier, uniform, organized way.&lt;br /&gt;Besides, to  the common question that people ask &quot;How would a software help in  disaster?&quot;, Sahana stands as the best example you could give them, given  that it has actually been used at many incidents. The recent support  shown to Haiti crisis by Sahana foundation is something that would  inspire us to do good at all times. I believe I could too make  significant contribution to such a great endeavour.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2&gt;&lt;a&gt;2.  Personal Availability&lt;/a&gt;&lt;/h2&gt; &lt;ul&gt;&lt;li&gt; Yes I have reviewed the important dates and timeline of GSOC 2010&lt;/li&gt;&lt;li&gt; Apart from my institute&#39;s end-semester exams that fall from April  30th to May 13th, I have no other conflicts with the schedule.&lt;/li&gt;&lt;li&gt; Will you need to finish your project  prior to the end of the GSOC?&lt;br /&gt;Yes, I would take utmost care to finish it before GSOC ends so that  developers could start utilizing it fruitfully by then. Though S3XRC  frontend would always have my support post-gsoc too in case any  issues/bugs come up.&lt;/li&gt;&lt;li&gt; I would be available for entire duration of GSOC 2010 starting from  May 14th when my exams end.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2&gt;&lt;a&gt;3. Project Abstract&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Currently Sahanapy uses two backends for REST - S3XRC (XML+JSON  interface of the restful API) and CRUD (Web2Py crud for html  interfaces). Web2Py crud is good at a few things e.g. client side  validation, ease of use, but it also has limitations, i.e. It can access  only single table at a time.&lt;/p&gt; &lt;p&gt;On current version of SahanaPy this is evident when you take a look  at http://127.0.0.1:8000/sahana/hms/hospital/1.xml [1] and compare it to  http://127.0.0.1:8000/sahana/hms/hospital/1 [2]&lt;/p&gt; &lt;p&gt;While [1] is generated by S3XRC, it contains nested resources, not  only do you get hospital details, but also current status of beds.&lt;br /&gt;On  the other hand [2] generated by web2py is not able to do anything  worthwhile to this information.&lt;/p&gt; &lt;p&gt;Unfortunately S3XRC has no HTML front-end yet. The backend is able to  handle XML and JSON but web2py front-end (SQLTABLE and SQLFORM) are not  able to handle the complex resources.&lt;br /&gt;&lt;br /&gt;A good way out would be to  replace them with new handlers - XRCTABLE and XRCFORM&lt;/p&gt; &lt;p&gt;Which would understand and represent or interpret S3XRC&#39;s XML/JSON  output appropriately. After that jQuery/ExtJS based web interface would  be made which would be more responsive and would be able to take  advantage of JSON outputs of S3XRC.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2&gt;&lt;a&gt;4. Project Plan&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;This section is to provide the detail of your project proposal. Take  as  much space as is necessary.&lt;/p&gt; &lt;ul&gt;&lt;li&gt; &lt;b&gt;Project Deliverable - &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The ability to present the complex resources returned by S3XRC to  the user.&lt;/li&gt;&lt;li&gt;A more responsive jQuery/ExtJS based UI that would change less, and  actively load data through AJAX&lt;/li&gt;&lt;li&gt;We would be able to save good about of bandwidth, would be able to  work in low bandwidth conditions when data gets passed in JSON format. &lt;/li&gt;&lt;li&gt;Since aimed to be written in a generic and reusable way, this would  be reused in other parts of code too.&lt;/li&gt;&lt;li&gt;Besides this work would also reduce the number of requests, which  implies quick data entry at times of disaster management work.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; &lt;b&gt;Project Justification - &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The number of useful inter-related data we wish to retrieve and  represent would definitely increase in time. This calls for a way to  represent then to the user in a RAD fashion.&lt;/li&gt;&lt;li&gt;One can never be sure about availability of bandwidth at sites of  disaster. At times one might have to work in very low bandwidth  conditions. The reduced size and frequency of requests that the S3XRC  frontend would bring, will help rescue workers easily operate SahanaPy  in such conditions.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; &lt;b&gt;Implementation Plan - &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;A sample compound resource -&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;s3xrc success=&quot;True&quot; results=&quot;1&quot; domain=&quot;&amp;lt;span style=&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;rocksolid&amp;lt;/span&amp;gt;&quot;  &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;url&amp;lt;/span&amp;gt;=&quot;http://127.0.0.1:8000/&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;sahana&amp;lt;/span&amp;gt;&quot; &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;latmin&amp;lt;/span&amp;gt;=&quot;-90.0&quot;  &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;latmax&amp;lt;/span&amp;gt;=&quot;90.0&quot;  &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;lonmin&amp;lt;/span&amp;gt;=&quot;-180.0&quot; &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;lonmax&amp;lt;/span&amp;gt;=&quot;180.0&quot;&amp;gt;&lt;br /&gt;  &amp;lt;resource name=&quot;&amp;lt;span style=&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;hms&amp;lt;/span&amp;gt;_hospital&quot;  &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;uuid&amp;lt;/span&amp;gt;=&quot;eb903352-0a6c-4d3c-bb8c-f18f6b7a3179&quot;  created_on=&quot;2010-04-02  15:14:07&quot; modified_by=&quot;&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;Abhishek&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;Mishra&amp;lt;/span&amp;gt;&quot; created_by=&quot;&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;Abhishek&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;Mishra&amp;lt;/span&amp;gt;&quot;  modified_on=&quot;2010-04-02 15:14:07&quot;  &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;url&amp;lt;/span&amp;gt;=&quot;http://127.0.0.1:8000/&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;sahana&amp;lt;/span&amp;gt;/&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;hms&amp;lt;/span&amp;gt;/hospital/1&quot;&amp;gt;&lt;br /&gt;    &amp;lt;data field=&quot;website&quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;   [[ snip snip ]]&lt;br /&gt;   &amp;lt;data field=&quot;info_source&quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;   &amp;lt;data field=&quot;phone_exchange&quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;   &amp;lt;resource name=&quot;&amp;lt;span style=&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;hms&amp;lt;/span&amp;gt;_&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;hrequest&amp;lt;/span&amp;gt;&quot; &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;uuid&amp;lt;/span&amp;gt;=&quot;c9aa43df-11fc-4b63-977f-d56abaefd1cf&quot;   modified_by=&quot;&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;Abhishek&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;Mishra&amp;lt;/span&amp;gt;&quot;  created_by=&quot;&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;Abhishek&amp;lt;/span&amp;gt; &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;Mishra&amp;lt;/span&amp;gt;&quot;  created_on=&quot;2010-04-02 15:14:58&quot; modified_on=&quot;2010-04-02 15:14:58&quot;  &amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;url&amp;lt;/span&amp;gt;=&quot;http://127.0.0.1:8000/&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;sahana&amp;lt;/span&amp;gt;/&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;hms&amp;lt;/span&amp;gt;/hospital/1/&amp;lt;span style=&quot;background: none repeat scroll 0% 0% yellow;&quot; class=&quot;J-JK9eJ-PJVNOc&quot;&amp;gt;hrequest&amp;lt;/span&amp;gt;/1&quot;&amp;gt;&lt;br /&gt;      &amp;lt;data field=&quot;city&quot;&amp;gt;&amp;lt;/data&amp;gt;&lt;br /&gt;       [[ snip snip ]]&lt;br /&gt;     &amp;lt;/resource&amp;gt;&lt;br /&gt; &amp;lt;/resource&amp;gt;&lt;br /&gt;&amp;lt;/s3xrc&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;^^  Notice the nested &lt;resource tags=&quot;&quot; and=&quot;&quot; information=&quot;&quot; about=&quot;&quot; namely=&quot;&quot; hms_hrequest=&quot;&quot; which=&quot;&quot; represents=&quot;&quot; a=&quot;&quot; related=&quot;&quot; table=&quot;&quot; embedded=&quot;&quot; into=&quot;&quot; while=&quot;&quot; 8000=&quot;&quot; sahana=&quot;&quot; hms=&quot;&quot; hospital=&quot;&quot; 1=&quot;&quot; based=&quot;&quot; on=&quot;&quot; crud=&quot;&quot; is=&quot;&quot; not=&quot;&quot; able=&quot;&quot; include=&quot;&quot; this=&quot;&quot; extra=&quot;&quot; currently=&quot;&quot; there=&quot;&quot; are=&quot;&quot; two=&quot;&quot; approaches=&quot;&quot; to=&quot;&quot; the=&quot;&quot; lack=&quot;&quot; of=&quot;&quot; html=&quot;&quot; frontend=&quot;&quot; for=&quot;&quot; s3xrc=&quot;&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Approach 1 -&lt;/b&gt;&lt;br /&gt;Addition of new view generators for complex  resources as shown above, namely XRCTABLE and XRCFORM to SahanaPy. Using  these to generate ExtJS code that would do the interface. We already  use ExtJS a lot, so this new front-end would be more generic and fast.&lt;br /&gt;So,  this would be an ExtJS based front-end with S3XRC as backend.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Approach 2 -&lt;/b&gt;&lt;br /&gt;Exploiting S3REST pre and post hooks. When  one calls a REST controller, the following happens --&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;REST parses the original server request into an XRequest object (jr)&lt;/li&gt;&lt;li&gt;XRequest contains hooks to export / import directly in XML or JSON  Eg. jr.export_xml()&lt;/li&gt;&lt;li&gt;After parsing a pre-processor is called - which is dynamic, i.e. a  controller can set the pre-processor as response.s3.prep&lt;/li&gt;&lt;li&gt;This means we can pre-process the data before REST action is  executed, and even change the REST action itself. Eg. s3rest.set_handler  (&quot;foo&quot;, my_foo_handler)&lt;/li&gt;&lt;li&gt;If the Pre-processor returns False, then the REST action is not  taken at all. This means we can manipulate the flow as we wish to.&lt;/li&gt;&lt;li&gt;At last step, a post-processor is called, which receives both the  output of the method handler and the XRequest object. This can be set  using response.s3.postp&lt;/li&gt;&lt;li&gt;At this stage we can generate the HTML and ExtJS code required by  the views.&lt;/li&gt;&lt;li&gt;The view then builds the generated HTML and ExtJS code into the HTML  template.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;An optimal approach is to have the ExtJS objects pre-loaded,  and retrieve data to them as needed. XRequest supports server-side  validation and responds in Ext-compliant JSON. This could be very ideal  for a full-fledged Ext-Based interface.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Another point to be taken care of while developing this would be to  make it re-usable, generic and easy to customize. For eg. An update-data  popup for entries listed in a table could be used where-ever update  kind of operation needs to be done, and so on.&lt;/resource&gt;&lt;/li&gt;&lt;li&gt; &lt;b&gt;Future Options - &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Adding usability support for browsers that don&#39;t have javascript  support enabled. This could be either done by making the interface fall  back to web2py crud or having an alternate non-js interface rendered by  s3xrc&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; &lt;b&gt;Relevant Experience - &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I have contributed earlier to SahanaPy - &lt;a href=&quot;https://launchpad.net/sahana/+topcontributors&quot; mce_href=&quot;https://launchpad.net/sahana/+topcontributors&quot;&gt;https://launchpad.net/sahana/+topcontributors&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Some of the SahanaPy related work I did -&lt;br /&gt;&lt;ul&gt;&lt;li&gt;creating the current steel theme, - gives me a good understanding of  js, css and views used in sahanapy.&lt;/li&gt;&lt;li&gt;improving the main and  sub menu (created css based crossbrowser  compatible menus), &lt;/li&gt;&lt;li&gt;javascript based popup for coordinate conversion and, - I&#39;ve used  ExtJS here for coordinate conversion popup.&lt;/li&gt;&lt;li&gt;adding custom error pages - involved tweaking routes.py of web2py  framework&lt;/li&gt;&lt;li&gt;( &lt;a href=&quot;http://is.gd/bj82z&quot; mce_href=&quot;http://is.gd/bj82z&quot;&gt;  http://is.gd/bj82z&lt;/a&gt; &lt;a href=&quot;http://is.gd/bj86d&quot; mce_href=&quot;http://is.gd/bj86d&quot;&gt;http://is.gd/bj86d&lt;/a&gt;  &lt;a href=&quot;http://is.gd/bj87m&quot; mce_href=&quot;http://is.gd/bj87m&quot;&gt;http://is.gd/bj87m&lt;/a&gt;  )&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;I have worked with MVC architecture in the past ( CodeIgniter,  ASP.NET MVC) and even while working for SahanaPy. Recently started  learning Web2Py - &lt;a href=&quot;http://hello-poll.appspot.com/polls&quot; mce_href=&quot;http://hello-poll.appspot.com/polls&quot;&gt;http://hello-poll.appspot.com/polls&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I am quite comfortable with Python, jQuery, writing good HTML &amp;amp;  CSS and have basic idea of ExtJS.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Other references - &lt;a href=&quot;http://trac.sahanapy.org/wiki/S3XRC&quot; mce_href=&quot;http://trac.sahanapy.org/wiki/S3XRC&quot;&gt;http://trac.sahanapy.org/wiki/S3XRC&lt;/a&gt;  &lt;a href=&quot;http://is.gd/bj8Tn&quot; mce_href=&quot;http://is.gd/bj8Tn&quot;&gt;http://is.gd/bj8Tn&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2&gt;&lt;a&gt;5.  Project Goals and Timeline&lt;/a&gt;&lt;/h2&gt; &lt;ol&gt;&lt;li&gt; &lt;b&gt;Work already undertaken &lt;/b&gt;-&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Reading more about S3XRC, S3REST and drafts of S3XRC_2&lt;/li&gt;&lt;li&gt;Familiarize with web2py&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; &lt;b&gt;First trimester (26 April - 23 May) -  Community bonding&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Low activity till 13th May due to college exams.&lt;/li&gt;&lt;li&gt;As S3XRC work is also related to ucore, I would spend good time  before I start coding in learning it more indepth.&lt;/li&gt;&lt;li&gt;Creating a list of all things that could be made generic with S3XRC  frontend. Right now I&#39;m aware of tables and forms, yet inside forms we  could provide a generic way to make them interactive as seen in a work  by Michael - http://58.137.55.83/adpcdemo/drrpp/project/create&lt;/li&gt;&lt;li&gt;Researching some more possible generic widgets that could be  implemented in S3XRC frontend and reused later.&lt;/li&gt;&lt;li&gt;Collecting feedbacks from developors as to what kind of tasks are  restricted due to current web2py crud.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; &lt;b&gt;Second trimester (24 May - 12 July) -  Coding starts&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Basic XRCTABLE 24th May to June 13th&lt;/li&gt;&lt;li&gt;ExtJS interface to XRCTABLE to provide on the spot update/add  feature - June 14th to June 27th&lt;/li&gt;&lt;li&gt;XRCFORM as a replacement to existing SQLFORM - June 28th to July  12th&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt; &lt;b&gt;Third trimester (13 July - 9 August)  - &lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ExtJS interface for XRCFORM elements to reduce number of  requests,  and to provide inline edits, assistive popups, etc - July 13th to July  20th&lt;/li&gt;&lt;li&gt;Weekly implementation of widgets and generic elements decided in  First Trimester - July 21st to Aug 7th&lt;/li&gt;&lt;li&gt;Rigorous testing and bug fixes - Aug 7th to Aug 9th&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/3238809542043950513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/04/my-gsoc-proposal-for-sahanapy-htmljs.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/3238809542043950513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/3238809542043950513'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/04/my-gsoc-proposal-for-sahanapy-htmljs.html' title='My GSOC proposal for SahanaPy - HTML/JS based reusable frontend for S3XRC'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-89479609688649081</id><published>2010-04-04T15:58:00.000+05:30</published><updated>2018-06-10T14:58:27.590+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="django"/><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="pykata"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>PyKata - Bulkuploader Patch</title><content type='html'>&lt;object style=&quot;background-image:url(http://i2.ytimg.com/vi/AX7oNnA7Y00/hqdefault.jpg)&quot;  width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/AX7oNnA7Y00&amp;amp;hl=en_US&amp;amp;fs=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/AX7oNnA7Y00&amp;amp;hl=en_US&amp;amp;fs=1&quot; width=&quot;425&quot; height=&quot;344&quot; allowScriptAccess=&quot;never&quot; allowFullScreen=&quot;true&quot; wmode=&quot;transparent&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;&lt;/object&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/89479609688649081/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/07/pykata-bulkuploader-patch.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/89479609688649081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/89479609688649081'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/07/pykata-bulkuploader-patch.html' title='PyKata - Bulkuploader Patch'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-8528503659300592324</id><published>2010-04-01T05:30:00.020+05:30</published><updated>2018-06-10T14:58:27.422+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="gsoc2010"/><category scheme="http://www.blogger.com/atom/ns#" term="PSF"/><category scheme="http://www.blogger.com/atom/ns#" term="pykata"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>GSoC 2010 - PyKata - Proposal</title><content type='html'>&lt;h1&gt;Taking PyKata to another Level&lt;/h1&gt; &lt;p&gt;developing a useful supplement to Python in education&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;&lt;b&gt;Contact Information&lt;/b&gt;&lt;/h1&gt; &lt;ul&gt;&lt;li&gt;Name - Abhishek Mishra&lt;/li&gt;&lt;li&gt;Email Address - ideamonk@gmail.com&lt;/li&gt;&lt;li&gt;Phone Number - +91-9535009187&lt;/li&gt;&lt;li&gt;IRC nickname - ideamonk (irc.freenode.net)&lt;/li&gt;&lt;li&gt;Twitter - http://twitter.com/ideamonk&lt;/li&gt;&lt;li&gt;Skype username - ideamonk&lt;/li&gt;&lt;li&gt;Webpage/Blog - &lt;a href=&quot;http://blog.ideamonk.in/&quot; mce_href=&quot;http://blog.ideamonk.in&quot;&gt;http://blog.ideamonk.in&lt;/a&gt;&lt;/li&gt;&lt;li&gt;College/University - Amrita School of Engineering, Bangalore&lt;/li&gt;&lt;li&gt;Major - B.Tech in Computer Science&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;&lt;b&gt;Project Details&lt;/b&gt;&lt;/h1&gt; &lt;ul&gt;&lt;li&gt;Project Description - Help develop &lt;a href=&quot;http://wiki.python.org/moin/PyKata&quot; mce_href=&quot;http://wiki.python.org/moin/PyKata&quot;&gt;PyKata&lt;/a&gt; - the website  for  Python practice (&lt;a href=&quot;http://pykata.appspot.com/vision&quot; mce_href=&quot;http://pykata.appspot.com/vision&quot;&gt;http://pykata.appspot.com/vision&lt;/a&gt;)    We want this to be the prime site serving students, teachers, and   professionals wanting to learn Python via self-study.&lt;/li&gt;&lt;li&gt;Mentor - &lt;a&gt;Andy Harrington and &lt;/a&gt;David MacQuigg&lt;/li&gt;&lt;li&gt;Key Technologies - Python, AppEngine, Web2Py/Django&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;&lt;b&gt;What is PyKata?&lt;/b&gt;&lt;/h1&gt; &lt;p&gt;PyKata is a community-authored website with contributions from  teachers and students in math and science, as well as technical  professionals. It provides you a way to quickly write programs on the  web, get immediate feedback on errors, and work through a set of  exercises designed by the best math and science teachers all over the  world.  For teachers, who may not be programmers themselves, PyKata&lt;a href=&quot;http://code.google.com/p/pykata/w/edit/PyKata&quot; mce_href=&quot;http://code.google.com/p/pykata/w/edit/PyKata&quot;&gt;?&lt;/a&gt; offers a  way to integrate simple programminmg into their lesson plans, without  distracting from the subject being taught.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kata&quot; mce_href=&quot;http://en.wikipedia.org/wiki/Kata&quot;&gt;http://en.wikipedia.org/wiki/Kata&lt;/a&gt;&lt;br /&gt;Website - &lt;a href=&quot;http://pykata.appspot.com/&quot; mce_href=&quot;http://pykata.appspot.com/&quot;&gt;http://pykata.appspot.com/&lt;/a&gt;&lt;br /&gt;Vision - &lt;a href=&quot;http://pykata.appspot.com/vision/&quot; mce_href=&quot;http://pykata.appspot.com/vision/&quot;&gt;http://pykata.appspot.com/vision/&lt;/a&gt;&lt;br /&gt;Code - &lt;a href=&quot;http://code.google.com/p/pykata/&quot; mce_href=&quot;http://code.google.com/p/pykata/&quot;&gt;http://code.google.com/p/pykata/&lt;/a&gt;  , currently based on webapp+django&lt;br /&gt;PyKata uses similar &lt;a href=&quot;http://www.google.com/codesearch?q=doctest+package%3Ahttp%3A%2F%2Fcrunchy%5C.googlecode%5C.com&amp;amp;origq=doctest&amp;amp;btnG=Search+Trunk&quot; mce_href=&quot;http://www.google.com/codesearch?q=doctest+package%3Ahttp%3A%2F%2Fcrunchy\.googlecode\.com&amp;amp;origq=doctest&amp;amp;btnG=Search+Trunk&quot;&gt;doctest  environment&lt;/a&gt; as seen in Crunchy.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;&lt;b&gt;What features are provided currently?&lt;/b&gt;&lt;/h1&gt; &lt;p&gt;1. It lets you write, execute and automatically evaluate your code   online.&lt;br /&gt;2. Saves your work-in-progress.&lt;br /&gt;3. Shows your overall  progress as to problems solved.&lt;br /&gt;4. Lets community contribute  problems.&lt;br /&gt;5. Static help&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;&lt;b&gt;Why should PyKata be developed further under GSoC &#39;10?&lt;/b&gt;&lt;br /&gt;&lt;/h1&gt; &lt;p&gt;Python has been a liberating force for both programmers and for  scientists and engineers who don&#39;t have time for traditional  programming.  It has a also&lt;a&gt; added some fun and playfullness to  programming. &lt;/a&gt;&lt;br /&gt;I believe Python is the best when it comes to  teaching programming at school and college levels. &lt;a href=&quot;http://is.gd/aYO08&quot; mce_href=&quot;http://is.gd/aYO08&quot;&gt;http://is.gd/aYO08&lt;/a&gt;  and personally while discussing python with some friends, I&#39;ve noticed a  fair amount of excitement they&#39;ve shown towards Python.&lt;br /&gt;PyKata has  great potential of making these ideas popular and assisting in quick  learning for say, college students who wish to do quick simulations, or  say, new engineers on the team who do not wish to spend excessive  amounts of time on learning to write programs.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;What features am I planning to implement in PyKata?&lt;/h1&gt; &lt;p&gt;I am very excited to see a Python+AppEngine task on PSF&#39;s Summer of  Code Page. Here are some of the ideas that I&#39;ve come up with after &lt;a href=&quot;http://groups.google.com/group/pywhip/browse_thread/thread/d078fc71db7252f6&quot; mce_href=&quot;http://groups.google.com/group/pywhip/browse_thread/thread/d078fc71db7252f6&quot;&gt;discussions&lt;/a&gt;  on the PyWhip mailing list.&lt;/p&gt; &lt;ol&gt;&lt;li&gt; &lt;h2&gt;Porting to Web2Py&lt;/h2&gt; After some experiments and &lt;a href=&quot;http://groups.google.com/group/pywhip/browse_thread/thread/1cfbaced734501be&quot; mce_href=&quot;http://groups.google.com/group/pywhip/browse_thread/thread/1cfbaced734501be&quot;&gt;discussions&lt;/a&gt;  over choice of framework, it seems that web2py is a suitable framework  for PyKata development. Django happens to have steep learning curve for  new comers who would contribute to PyKata in future. To keep the  friction in entry of new developers low, Web2Py seems like an  appropriate framework for quick contribution and RAD development.&lt;br /&gt;Though  it is said that web2py follows some anti-patterns, but then  &quot;Practicality beats Purity&quot; at times. Also deploying a web2py app on  AppEngine is almost effortless.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;h2&gt;Porting Python 3&lt;/h2&gt; Right now, Google App Engine uses Python 2.5.2. But there are two  interesting things related here -&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;opposed to the propaganda on #python about not using Python 3 yet  (http://python-commandments.org/python3.html), the Python community is  more interested in porting existing packages to Python 3&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;http://markmail.org/message/fc6s5yxjgeavfh6o#query:web2py%20python%203+page:1+mid:fc6s5yxjgeavfh6o+state:results&quot; mce_href=&quot;http://markmail.org/message/fc6s5yxjgeavfh6o#query:web2py%20python%203+page:1+mid:fc6s5yxjgeavfh6o+state:results&quot;&gt;This  discussion&lt;/a&gt; on web2py and Python 3 compatibility is a relief as the  core developer believes that it won&#39;t take too much to port web2py to  Python3.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; Instead of waiting for App Engine to shift to Python 3, I would create a  Python 3 compatible branch of PyKata in parallel. Once App Engine  shifts to Python 3, PyKata too would get updated in no time. This would  also help us give web2py developers useful feedbacks on porting to  Python 3.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;h2&gt;UI/UX improvements&lt;br /&gt;&lt;/h2&gt; &lt;p&gt;PyKata could benefit from an improved design (more web2.0-ish). This  would not only make it attractive but also help us present the progress  data, user profiles, live statistics, tutorials, news, etc in a better  way as it would encourage more social interaction upon growing. A rough  mock-up - &lt;a href=&quot;http://twitpic.com/1aux8n/full&quot; mce_href=&quot;http://twitpic.com/1aux8n/full&quot;&gt;http://twitpic.com/1aux8n/full&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://ideamonk.in/code/soc/snapshot252.png&quot; mce_src=&quot;http://ideamonk.in/code/soc/snapshot252.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;I aim to  create an addictive and interactive user experience. Using game style  interaction to drive participation, possibly include points, badges,  rewards a great example for that would be &lt;a href=&quot;http://stackoverflow.com/&quot; mce_href=&quot;http://stackoverflow.com/&quot;&gt;http://stackoverflow.com&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;Creating a flow&lt;/b&gt; - once a student gets a problem right, PyKata  would show her which way to proceed from there.&lt;/p&gt; &lt;p&gt;If a student goes wrong repetitevely, PyKata could also show him/her  possible tutorials related to it. &lt;a href=&quot;http://twitpic.com/1auytp/full&quot; mce_href=&quot;http://twitpic.com/1auytp/full&quot;&gt;http://twitpic.com/1auytp/full&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src=&quot;http://ideamonk.in/code/soc/snapshot253.png&quot; mce_src=&quot;http://ideamonk.in/code/soc/snapshot253.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Some  examples - http://codingbat.com http://spoj.pl http://codegolf.com/&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;h2&gt;User Profiles&lt;/h2&gt; PyKata can provide each user his/her own personal profile to track  progress. I also plan to add two levels of views to these profiles - a  personal view, a public view. Someone whome the student designates as a  teacher will have full access to the student&#39;s data. Currently the only  way to track progress is to either look at ticks on &#39;All problems page&#39;  or to do the same on category pages. A mockup for this feature - &lt;a href=&quot;http://twitpic.com/1av0x0/full&quot; mce_href=&quot;http://twitpic.com/1av0x0/full&quot;&gt;http://twitpic.com/1av0x0/full&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://ideamonk.in/code/soc/snapshot254.png&quot; mce_src=&quot;http://ideamonk.in/code/soc/snapshot254.png&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Another  important detail that a user profile should expose, when a teacher views  a student&#39;s profile would be the areas where one is weak at. This could  be found out by monitoring number of times a student fails in a problem  or a class of problems. While the public view would not show any such  details.&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;h2&gt;Live execution results&lt;/h2&gt; Currently PyKata takes you to another page to show results of current  code execution. Then the user hits back button to modify the code, or  copy-pastes the traceback for reference and hits back to debug the code.  This user experience could be simplified by placing a live result box  on right side of the editor. As shown here - &lt;a href=&quot;http://twitpic.com/1auytp/full&quot; mce_href=&quot;http://twitpic.com/1auytp/full&quot;&gt;http://twitpic.com/1auytp/full&lt;/a&gt;  &lt;/li&gt;&lt;li&gt; &lt;h2&gt;Content Management&lt;br /&gt;&lt;/h2&gt; &lt;p&gt;PyKata relies heavily on user submitted content. As for content  submissions, all new submissions would get reviewed by PyKata editors  and then moved to appropriate categories. If that doesn&#39;t happen, then a  problem remains in &#39;new&#39; category for the time it accumulates  favourable votes.&lt;br /&gt;As per current plan, only a PyKata contributor  would be able to modify the problem/content they submitted. Another  group of users - PyKata editors would have the rights to modify problems  and content for the purpose of moderation.&lt;br /&gt;When a user proposes  improvements to a problem, the author of the problem would have the  right to decide whether to accept it or not.&lt;br /&gt;As per modifications to  problems, the system would preserve previous version and show the  history of the problem. This would be useful for Task 9 - Course  planning feature.&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;h2&gt;Batch upload problems/ solution-uploads&lt;/h2&gt; A contributor of problems/tutorials might have many contents already  written in say, a python script itself. Copy pasting from them and  uploading one by one might not be a great user experience. I would  simplify this task by allowing flash/javascript based bulk uploads (to  select multiple files). A server-side validation and processing would be  provided to such uploads which would process them according to rules  specified on PyKata Project Wiki -  &lt;a href=&quot;http://code.google.com/p/pykata/wiki/UploadFormat&quot; mce_href=&quot;http://code.google.com/p/pykata/wiki/UploadFormat&quot;&gt;http://code.google.com/p/pykata/wiki/UploadFormat&lt;/a&gt;&lt;br /&gt;Good news is that I&#39;ve already written an experimental bulk  uploader for PyKata ( http://code.google.com/p/pykata/source/detail?r=36  ), extending that to above mentioned feature should be easy :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;h2&gt;Export/Import of Data&lt;/h2&gt; This involves creating a way for people to run a local copy of PyKata on  their infrastructure. As such it would be nice for them to be able to  export and import problems/content from main PyKata website to their  local copies.&lt;br /&gt;Here the batch upload code can be easily reused as  PyKata already specifies an &lt;a href=&quot;http://code.google.com/p/pykata/wiki/UploadFormat&quot; mce_href=&quot;http://code.google.com/p/pykata/wiki/UploadFormat  &quot;&gt;upload  format&lt;/a&gt;. This task would involve generating uploadable file in PyKata  specified format. The user then can take it to any other instance of  PyKata and merge the updates.&lt;/li&gt;&lt;li&gt; &lt;h2&gt;* Course planning feature&lt;/h2&gt; It is expected that PyKata once launched  and contributed to, would  become a large repository of Python learning  problems. It could also  include support for classes in Maths, Science and Engineering.&lt;br /&gt;We  could do something interesting here by allowing teachers to  create  lessons by handpicking existing problems and tutorials and  making a  definite learning track or a roadmap out of them. This would  also  reduce the efforts that go on a teachers behalf in creating  tutorials.&lt;br /&gt;A  problem editor would mark an edit with &quot;major change&quot; for the purpose  of maintaining a history of a problem. This is useful in maintaining  consistency in already created learning traks prior to modification.&lt;/li&gt;&lt;li&gt; &lt;h2&gt;* PyLint / Pyflakes integration&lt;/h2&gt; Though not sure if it would be possible to run them over AppEngine, I  would experiment with it and try to integrate it as well to PyKata. If  this feature gets added, PyKata would be able to pinpoint indentation  and other minor errors immediately. Crunchy&#39;s main developer Andre  Roberge suggests that this could be done in a similar way as &lt;a href=&quot;http://code.google.com/p/crunchy/source/browse/trunk/crunchy/src/plugins/analyzer_pylint.py&quot; mce_href=&quot;http://code.google.com/p/crunchy/source/browse/trunk/crunchy/src/plugins/analyzer_pylint.py&quot;&gt;seen&lt;/a&gt;  in Crunchy.&lt;/li&gt;&lt;li&gt; &lt;h2&gt;* Community Ratings&lt;br /&gt;&lt;/h2&gt; &lt;p&gt;This involves creating a way for the community to rate contents -  including users, problems, tutorials. This would help us gather good  statistical data for further analysis. (this is a non priority task)&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;h2&gt;* Making PyKata more Social&lt;br /&gt;&lt;/h2&gt; Though not at all a priority task, and not even a tough thing to do. At a  later finishing stage, it would be nice to have integration to social  networks like Facebook, twitter, etc to gain more popularity. Though not  at all a concern right now.&lt;br /&gt;A good way to encourage participation,  as suggested by Andrew, would be   to expose different  users. Different  user types - learners, one-by-one  contributors,  experts, content  contributors, admins, developers.&lt;br /&gt;I  believe a &#39;karma ranking&#39; (as  seen on Launchpad, Hacker News, Reddit,   etc) or community rating  approach to classify users would be great. This   would encourage  already contributing members to contribute more.&lt;br /&gt;Problems can also be  rated in this manner - &quot;XX out of YYY people found this tutorial  useful&quot;&lt;/li&gt;&lt;li&gt; &lt;h2&gt;Documentation&lt;/h2&gt; Though not a separate task at all, documentation will be written in  parallel with code development.  This will be sufficient that a student  not familiar with web development will be able to take over as  maintainer of PyKata.  One of our mentors, Dr. MacQuigg, is experienced  in documentation of commercial software, and he will assist with this  effort, so that our &quot;lead developer&quot; will not be slowed by documentation  problems in future.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Future ideas - a canvas based whiteboard tool for teachers to create  better tutorials,&lt;/p&gt; &lt;p&gt;Having mentioned everything that came to my mind for PyKata&#39;s  improvement, I would like to point out that not every feature might be  possible to be implemented within the time frame. Hence I&#39;ve kept  feature &lt;i&gt;&lt;b&gt; 9, 10, 11, 12 marked with a (*) as tentative or post-gsoc  plans for PyKata if they don&#39;t fit in.&lt;br /&gt;** Feature 9 &lt;/b&gt;&lt;/i&gt;would  possible to implement once all other feaures get completed as it would  require all other features to be functional.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;Personal Availability&lt;/h1&gt; &lt;ul&gt;&lt;li&gt;I have reviewed the major dates of GSoC&lt;/li&gt;&lt;li&gt;Apart from my Institutes end-semester exams that fall from &lt;b&gt;April  30th to May 13th&lt;/b&gt;, I have no other conflicts with the schedule.&lt;/li&gt;&lt;li&gt;I would be available for the entire duration of GSoC 2010&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;Major Milestones (weekly plans)&lt;/h1&gt; &lt;ol&gt;&lt;li&gt; &lt;h2&gt;Community Bonding Period ( April 26 - May 23 )&lt;br /&gt;&lt;/h2&gt; &lt;p&gt;April 30th - May 13th - Low action due to exams&lt;br /&gt;&lt;br /&gt;May 13th - May  23rd - Start studying existing codebase, old discussions for getting as  familiar as possible with the project. Getting familiar with different  aspects of web2py and AppEngine with possible experiments.&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;h2&gt;First Semester ( May 24th - July 11th )&lt;br /&gt;&lt;/h2&gt; &lt;p&gt;May 24th - May 30th - Task1 - Porting existing codebase to web2py.&lt;br /&gt;May  31st - June 6 - Task4 - User Profiles&lt;br /&gt;June 7 - June 13th - Task5 -  Live execution results (AJAX based)&lt;br /&gt;June 14th - June 27th - Task6 -  Content Management&lt;br /&gt;June 28st - July 4th - Task 7 - Batch Uploads&lt;br /&gt;July  5th - July 11th - Task3 - UI/UX Improvements (partial) and  testing+review for mid term submission&lt;/p&gt; &lt;/li&gt;&lt;li&gt; &lt;h2&gt;Second Semester ( July 16th - August 16th )&lt;br /&gt;&lt;/h2&gt; &lt;p&gt;July 16th - July25th - Task 8 - Export Import of data&lt;br /&gt;July 26th -  Aug 8th - Task9 - Course Planning feature&lt;br /&gt;August 9 - August 16th -  Task3 (completion), Code Review, documentation wherever necessary,  testing.&lt;/p&gt; &lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;* Each week is a 40 hour work week.&lt;br /&gt;* Since my GSoC work would  bring in a lot of changes to PyKata, I will continue as a committer and  will support and evangelize PyKata.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;Source Code Repository and Communication Plan&lt;/h1&gt; &lt;p&gt;I would be working on SVN repository of PyKata on Google Code - &lt;a href=&quot;http://code.google.com/p/pykata/source/browse/&quot; mce_href=&quot;http://code.google.com/p/pykata/source/browse/&quot;&gt;http://code.google.com/p/pykata/source/browse/&lt;/a&gt;  and I already have a committor access there. Most probably I would push  my changes to test branch which could be merged to trunk after a simple  review/test.&lt;/p&gt; &lt;p&gt;I plant to communicate quickly as for any doubts and discussions  coming in between the week. In the end of every week, I plan to submit a  report to my mentor. As per my schedule, I&#39;m mostly implementing 1  feature per week, with an exception of two weeks to Content Management  feature and Course planning feature. So a weekly report would be well  suited.&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;h1&gt;Why me?&lt;br /&gt;&lt;/h1&gt; &lt;ul&gt;&lt;li&gt;I have been programming since my school days QuickBASIC, mostly  writing games &lt;a href=&quot;http://blog.ideamonk.in/search/label/QBASIC&quot; mce_href=&quot;http://blog.ideamonk.in/search/label/QBASIC&quot;&gt;http://blog.ideamonk.in/search/label/QBASIC&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I do programming puzzles on SPOJ sometimes. Initially in C/C++ now  in Python - http://www.spoj.pl/status/ideamonk/signedlist/&lt;/li&gt;&lt;li&gt;I believe in giving back to the community and wrote &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/12336/&quot; mce_href=&quot;https://addons.mozilla.org/en-US/firefox/addon/12336/&quot;&gt;SPOJ  Rank Tracker&lt;/a&gt; addon for Firefox and &lt;a href=&quot;http://github.com/ideamonk/spojbackup&quot; mce_href=&quot;http://github.com/ideamonk/spojbackup&quot;&gt;SpojBackup&lt;/a&gt; tool in  Python.&lt;/li&gt;&lt;li&gt;During my first year at college I wrote a web based programming  contest platform along with a friend - &lt;a href=&quot;http://github.com/ideamonk/CodeFire&quot; mce_href=&quot;http://github.com/ideamonk/CodeFire&quot;&gt;CodeFire&lt;/a&gt; (PHP/DevC++)&lt;/li&gt;&lt;li&gt;Some Python related work I&#39;ve done so far -&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PyPaste&lt;a href=&quot;http://blog.ideamonk.in/2009/08/pypaste-pastebins-at-your-terminal.html&quot; mce_href=&quot;http://blog.ideamonk.in/2009/08/pypaste-pastebins-at-your-terminal.html&quot;&gt;  http://blog.ideamonk.in/2009/08/pypaste-pastebins-at-your-terminal.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I felt the need of a twitter panel applet for gnome and learnt some  PyGTK to create it - &lt;a href=&quot;http://blog.ideamonk.in/2009/11/introducing-gtweetbar-alpha.html&quot; mce_href=&quot;http://blog.ideamonk.in/2009/11/introducing-gtweetbar-alpha.html&quot;&gt;http://blog.ideamonk.in/2009/11/introducing-gtweetbar-alpha.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Interested into making webapps, I also tried Google AppEngine and  created a small app called Web2Hunter -&lt;br /&gt;&lt;a href=&quot;http://blog.ideamonk.in/2009/09/web2hunter-find-that-awesome-domain.html&quot; mce_href=&quot;http://blog.ideamonk.in/2009/09/web2hunter-find-that-awesome-domain.html&quot;&gt;http://blog.ideamonk.in/2009/09/web2hunter-find-that-awesome-domain.html&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=XyURw35v2u8&quot; mce_href=&quot;http://www.youtube.com/watch?v=XyURw35v2u8&quot;&gt;http://www.youtube.com/watch?v=XyURw35v2u8&lt;/a&gt;  (a short intro to it at PyCon India 09)&lt;/li&gt;&lt;li&gt;I wanted to create photo-mosaics one day, I wrote pymos for it along  with a friend who helped me modularize and package it -&lt;a href=&quot;http://blog.ideamonk.in/2009/11/pymos-creating-mosaics-of-your-photos.html&quot; mce_href=&quot;http://blog.ideamonk.in/2009/11/pymos-creating-mosaics-of-your-photos.html&quot;&gt;   http://blog.ideamonk.in/2009/11/pymos-creating-mosaics-of-your-photos.html&lt;/a&gt;  I used it to create a poster for FOSS.in 2009 &lt;a href=&quot;http://foss.in/promote/posters&quot; mce_href=&quot;http://foss.in/promote/posters&quot;&gt;http://foss.in/promote/posters&lt;/a&gt;  , that really made me happy as I wrote something useful.&lt;/li&gt;&lt;li&gt;I felt the need to receive sms alerts for new incoming mails as I do  not own a gprs phone. I came up with an OAuth based solution - &lt;a href=&quot;http://lenny.in/&quot; mce_href=&quot;http://lenny.in/&quot;&gt;http://lenny.in&lt;/a&gt;  which runs on AppEngine and uses twitter to send alerts.&lt;/li&gt;&lt;li&gt;Another AppEngine project I did and am yet to add finishing touches  is Poorman&#39;s datastore - &lt;a href=&quot;http://github.com/ideamonk/poorman&quot; mce_href=&quot;http://github.com/ideamonk/poorman&quot;&gt;http://github.com/ideamonk/poorman&lt;/a&gt;  It lets one use multiple free appengine instances as a unified,  distributed datastore.&lt;/li&gt;&lt;li&gt;A fun project exploring WebSockets with mod_pywebsocket, pyAIML,  CSS3, redis - &lt;a href=&quot;http://ideamonk.in/bakabot/&quot; mce_href=&quot;http://ideamonk.in/bakabot/&quot;&gt;http://ideamonk.in/bakabot/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;Some relevant OpenSource Experience -&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Participated in Sahanapy workout at FOSS.in &lt;a href=&quot;http://trac.sahanapy.org/wiki/WorkOutFossIn2009&quot; mce_href=&quot;http://trac.sahanapy.org/wiki/WorkOutFossIn2009&quot;&gt;http://trac.sahanapy.org/wiki/WorkOutFossIn2009&lt;/a&gt;  (ref: ideamonk) and contributed more to it &lt;a href=&quot;https://launchpad.net/sahana/+topcontributors&quot; mce_href=&quot;https://launchpad.net/sahana/+topcontributors&quot;&gt;https://launchpad.net/sahana/+&lt;/a&gt;&lt;a href=&quot;https://launchpad.net/sahana/+topcontributors&quot; mce_href=&quot;https://launchpad.net/sahana/+topcontributors&quot;&gt;topcontributors&lt;/a&gt;  , which mostly involved font-end work, the current theme, nice error  pages, etc.&lt;/li&gt;&lt;li&gt;I am writing a PyQt based gui for apt-offline - an offline APT based  package manager for debian based distros - as a hobby project &lt;a href=&quot;http://github.com/ideamonk/apt-offline&quot; mce_href=&quot;http://github.com/ideamonk/apt-offline&quot;&gt;http://github.com/ideamonk/apt-offline&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://packages.debian.org/unstable/apt-offline&quot; mce_href=&quot;http://packages.debian.org/unstable/apt-offline&quot;&gt;http://packages.debian.org/unstable/apt-offline&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;My github page - http://github.com/ideamonk&lt;/li&gt;&lt;li&gt;My Blog - http://blog.ideamonk.in&lt;/li&gt;&lt;li&gt;I started &lt;a href=&quot;http://madetokill.com/&quot; mce_href=&quot;http://madetokill.com/&quot;&gt;http://madetokill.com/&lt;/a&gt; with  friends to fetch us some work in holidays. I learnt a good deal of PHP,  HTML, CSS, jQuery and a bit of Photoshop from this experience.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Recently I also got committer access to PyKata, and have started  exploring it more.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;As you can clearly observe I&#39;ve been doing odd small things here and  there, Google Summer of Code and PyKata really brings me an opportunity  where I can create, give support to, be responsible for something that a  lot of people would use and be proud about it.&lt;/p&gt; &lt;p&gt;Python is bound to play a big role in education, rapid prototyping  and what not. At PyCon India 09, I was really happy at the announcement  of &lt;a href=&quot;http://fossee.in/&quot; mce_href=&quot;http://fossee.in/&quot;&gt;FOSSEE&lt;/a&gt;  (Free Open source Software for Science and Engineering Education) group  about introducing Python to engineering colleges in India. And now I&#39;m  delighted at the fact that I too might get a chance to contribute to  Python Education in a big way!&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Thanks!&lt;/p&gt; &lt;p&gt;Abhishek&lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/8528503659300592324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/04/pykata-taking-python-education-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/8528503659300592324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/8528503659300592324'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/04/pykata-taking-python-education-to.html' title='GSoC 2010 - PyKata - Proposal'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-2451634527488374454</id><published>2010-03-20T21:26:00.000+05:30</published><updated>2018-06-10T14:58:25.493+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="madetokill.com"/><title type='text'>We &amp;lt;3 MadeToKill</title><content type='html'>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;a href=&quot;http://oldblog.ideamonk.com/wp-content/uploads/2010/09/24389_372100288014_505963014_3797731_5530412_n.jpg&quot;&gt;&lt;br /&gt; &lt;img class=&quot;aligncenter size-medium wp-image-176&quot; title=&quot;24389_372100288014_505963014_3797731_5530412_n&quot; src=&quot;http://oldblog.ideamonk.com/wp-content/uploads/2010/09/24389_372100288014_505963014_3797731_5530412_n-300x225.jpg&quot; alt=&quot;&quot; height=&quot;225&quot; width=&quot;300&quot; /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style=&quot;text-align: center;&quot;&gt;2+ years and still counting . . .&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/2451634527488374454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/03/we-madetokill.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/2451634527488374454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/2451634527488374454'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/03/we-madetokill.html' title='We &amp;lt;3 MadeToKill'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-2760779431894456548</id><published>2010-03-20T19:17:00.002+05:30</published><updated>2018-06-10T14:58:25.549+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="quine"/><title type='text'>Quine attempt :)</title><content type='html'>Just tried writing a quine in python, I&#39;m ashamed that it took me too much time to find a solution, so the hide the shame I covered my quine in an ascii art -&lt;br /&gt;&lt;pre style=&quot;color: rgb(0, 0, 0); background: none repeat scroll 0% 0% rgb(255, 255, 255);&quot;&gt;&lt;br /&gt;&lt;span style=&#39;color:#696969; &#39;&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(128, 0, 0); font-weight: bold;&quot;&gt;if&lt;/span&gt; &lt;span style=&quot;color: rgb(227, 74, 220);&quot;&gt;__name__&lt;/span&gt; &lt;span style=&quot;color: rgb(128, 128, 48);&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: rgb(128, 128, 48);&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: rgb(0, 0, 230);&quot;&gt;&#39;__main__&#39;&lt;/span&gt;&lt;span style=&quot;color: rgb(128, 128, 48);&quot;&gt;:&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;&quot;&quot;&quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;  &#39;adppppba,                 pp&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt; dp&quot;      `&quot;pb                &quot;&quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;dp`        `pb&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;pp          pp  pp       pp  pp  pb,dPPYba,    ,adPPYba,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;pp          pp  pp       pp  pp  ppP`   `&quot;pa  apP_____pp&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;Yp,    &quot;pp,,pP  pp       pp  pp  pp       pp  pPP&#39;&quot;&quot;&#39;&quot;&quot;&quot;&lt;/span&gt;&lt;br /&gt; &lt;span style=&quot;color: rgb(128, 0, 0); font-weight: bold;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color: rgb(227, 74, 220);&quot;&gt;open&lt;/span&gt;&lt;span style=&quot;color: rgb(128, 128, 48);&quot;&gt;(&lt;/span&gt;__file__&lt;span style=&quot;color: rgb(128, 128, 48);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(128, 128, 48);&quot;&gt;.&lt;/span&gt;read&lt;span style=&quot;color: rgb(128, 128, 48);&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: rgb(128, 128, 48);&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: rgb(128, 128, 48);&quot;&gt;;&lt;/span&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;&quot;&quot;&quot;pp       pp  &quot;pb,   ,aa&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;  `&quot;YppppY&quot;Ypa   `&quot;YbbdP&#39;Yp  pp  pp       pp   &#39;&quot;Ybbdp&#39;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(105, 105, 105);&quot;&gt;  &quot;&quot;&quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Another approach with sys.exit() -&lt;br /&gt;&lt;pre style=&#39;color:#000000;background:#ffffff;&#39;&gt;&lt;span style=&#39;color:#696969; &#39;&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;span style=&#39;color:#696969; &#39;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br /&gt;&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;import&lt;/span&gt; sys&lt;br /&gt;&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;__name__&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;__main__&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;open&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;__file__&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;read&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;br /&gt;    sys&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;&lt;span style=&#39;color:#e34adc; &#39;&gt;exit&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#008c00; &#39;&gt;0&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;for&lt;/span&gt; x &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;xrange&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#008c00; &#39;&gt;1&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;&lt;span style=&#39;color:#008c00; &#39;&gt;10&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;        &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;for&lt;/span&gt; y &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;xrange&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;x&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;            &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;chr&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;y&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;&lt;br /&gt;        &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;    &lt;span style=&#39;color:#696969; &#39;&gt;# ^^ this one is just a cover up, actual quine ends at exit&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;and yet another approach with muting the stdout :P -&lt;br /&gt;&lt;pre style=&#39;color:#000000;background:#ffffff;&#39;&gt;&lt;span style=&#39;color:#696969; &#39;&gt;#!/usr/bin/env python&lt;/span&gt;&lt;br /&gt;&lt;span style=&#39;color:#696969; &#39;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br /&gt;&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;import&lt;/span&gt; sys&lt;br /&gt;&lt;br /&gt;&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;class&lt;/span&gt; Mute&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;def&lt;/span&gt; write&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;self&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;msg&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style=&#39;color:#696969; &#39;&gt;&#39;&#39;&#39; I am a quine alright &#39;&#39;&#39;&lt;/span&gt;&lt;br /&gt;  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;def&lt;/span&gt; flush&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;self&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style=&#39;color:#696969; &#39;&gt;&#39;&#39;&#39; so am i :P &#39;&#39;&#39;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;__name__&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#0000e6; &#39;&gt;&#39;__main__&#39;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;open&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;__file__&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;read&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;br /&gt;  sys&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;stdout&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt; sys&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;stderr &lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt; Mute&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;Mute&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;for&lt;/span&gt; x &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;xrange&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#008c00; &#39;&gt;1&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;&lt;span style=&#39;color:#008c00; &#39;&gt;10&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;for&lt;/span&gt; y &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;in&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;xrange&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;x&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt; &lt;span style=&#39;color:#e34adc; &#39;&gt;chr&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;y&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;&lt;br /&gt;    &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;print&lt;/span&gt;&lt;br /&gt;    &lt;br /&gt;  foozooooo &lt;span style=&#39;color:#808030; &#39;&gt;&amp;lt;&lt;/span&gt; iz_this_an_error&lt;br /&gt;&lt;br /&gt;  &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; now_this_too&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;    &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; you_too&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;      &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; santa&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;        &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; you&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;          &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; me&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;            &lt;span style=&#39;color:#800000; font-weight:bold; &#39;&gt;if&lt;/span&gt; no_one_at_all&lt;span style=&#39;color:#808030; &#39;&gt;:&lt;/span&gt;&lt;br /&gt;             &#39;  &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;       &lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;\&lt;br /&gt;                \ \__   &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt; &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt;\&lt;br /&gt;                &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt; _ `&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt;  &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt; \&lt;br /&gt;               &lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt;\&lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt; \ \    \&lt;br /&gt;               &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt; &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt;   &lt;span style=&#39;color:#808030; &#39;&gt;|&lt;/span&gt; `    \&lt;br /&gt;               O O   &lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;      &lt;span style=&#39;color:#808030; &#39;&gt;|&lt;/span&gt;\&lt;br /&gt;               &lt;span style=&#39;color:#e34adc; &#39;&gt;`-^--``&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;&amp;lt;&lt;/span&gt;    &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt;\&lt;br /&gt;              &lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;_&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;  _ &lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;   &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt; \&lt;br /&gt;               &lt;span style=&#39;color:#e34adc; &#39;&gt;`.___/`&lt;/span&gt;   &lt;span style=&#39;color:#808030; &#39;&gt;|&lt;/span&gt;\&lt;br /&gt;                 &lt;span style=&#39;color:#e34adc; &#39;&gt;`-----`&lt;/span&gt; \&lt;br /&gt;    &lt;span style=&#39;color:#808030; &#39;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;.&lt;/span&gt;     __ &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt; __   \&lt;br /&gt;    &lt;span style=&#39;color:#808030; &#39;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;|&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;O&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;=&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt; \&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt; \&lt;br /&gt;    &lt;span style=&#39;color:#808030; &#39;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#e34adc; &#39;&gt;`    `--` `.__,`&lt;/span&gt; \&lt;br /&gt;                 &lt;span style=&#39;color:#808030; &#39;&gt;|&lt;/span&gt;         &lt;span style=&#39;color:#808030; &#39;&gt;|&lt;/span&gt;\&lt;br /&gt;                  \       &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt;\&lt;br /&gt;              ____&lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt; &lt;span style=&#39;color:#808030; &#39;&gt;(&lt;/span&gt;_   &lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt; \_____\&lt;br /&gt;            &lt;span style=&#39;color:#808030; &#39;&gt;,&lt;/span&gt;&lt;span style=&#39;color:#e34adc; &#39;&gt;`  ,----`&lt;/span&gt;   &lt;span style=&#39;color:#808030; &#39;&gt;|&lt;/span&gt;        \&lt;br /&gt;            `&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#808030; &#39;&gt;-&lt;/span&gt;&lt;span style=&#39;color:#800080; &#39;&gt;{&lt;/span&gt;__________&lt;span style=&#39;color:#808030; &#39;&gt;)&lt;/span&gt;       \&lt;span style=&#39;color:#808030; &#39;&gt;/&lt;/span&gt;&#39;&lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/2760779431894456548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/03/quine-attempt.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/2760779431894456548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/2760779431894456548'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/03/quine-attempt.html' title='Quine attempt :)'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-6583092826537813976</id><published>2010-03-16T13:00:00.006+05:30</published><updated>2018-06-10T14:58:26.808+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="augumented reality"/><category scheme="http://www.blogger.com/atom/ns#" term="experiments"/><category scheme="http://www.blogger.com/atom/ns#" term="pygame"/><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Fun with PyGame&#39;s camera module</title><content type='html'>OMG T2 starts tomorrow, I&#39;m probably gonna fail in Random Processes this time.&lt;br /&gt;But before I start preparing, I had to try out the tempting &lt;a href=&quot;http://www.pygame.org/docs/tut/camera/CameraIntro.html&quot;&gt;Camera Module of PyGame&lt;/a&gt;.&lt;br /&gt;PyGame has pretty cool stuff under pygame.transform and pygame.mask, which makes the task of thresholding very easy.&lt;br /&gt;I came up with an interactive Tux based on the &quot;Capturing a Live Stream&quot; code in the Camera Module Introduction.&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCSqnBy2OmumFqN43rbQb_eLdKrKiJVygM9_V-p_WVIqLgYWzAfXzUVnQIto07Hn9CzKzLjU9FALiOZtep0Zp3P1fmcgp958X96r2aOUeD73jGQ7TWcm48Ss611zyDYst3LIIKMfk3gvRO/s1600-h/snapshot213.png&quot;&gt;&lt;img style=&quot;display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 325px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCSqnBy2OmumFqN43rbQb_eLdKrKiJVygM9_V-p_WVIqLgYWzAfXzUVnQIto07Hn9CzKzLjU9FALiOZtep0Zp3P1fmcgp958X96r2aOUeD73jGQ7TWcm48Ss611zyDYst3LIIKMfk3gvRO/s400/snapshot213.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5449132211966469282&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;My program tries to detect red colored objects, finds the centroid of such points and draws a ghost (find in your /usr/share/icons/oxygen/32x32/apps/) and makes Tux (/usr/share/icons/oxygen/128x128/apps/tux.png) run away from it.&lt;br /&gt;&lt;br /&gt;Here&#39;s how the code looks like -&lt;br /&gt;&lt;pre style=&quot;font-weight: bold; color: rgb(20, 19, 18); background-color: rgb(255, 255, 255);&quot;&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# An interactive Tux, interact with it using any red colored object&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;#&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# based on PyGame camera module intro by Nirav Patel&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;#   http://www.pygame.org/docs/tut/camera/CameraIntro.html&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;#                         -- Abhishek Mishra (ideamonk # gmail.com)&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 128, 224);&quot;&gt;import&lt;/span&gt; os&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 128, 224);&quot;&gt;import&lt;/span&gt; pygame&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 128, 224);&quot;&gt;import&lt;/span&gt; pygame.camera&lt;br /&gt;&lt;span style=&quot;color: rgb(255, 128, 224);&quot;&gt;from&lt;/span&gt; pygame.&lt;span style=&quot;color: rgb(0, 87, 174);&quot;&gt;locals&lt;/span&gt; &lt;span style=&quot;color: rgb(255, 128, 224);&quot;&gt;import&lt;/span&gt; &lt;b&gt;*&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;class&lt;/span&gt;&lt;/b&gt; Capture(&lt;span style=&quot;color: rgb(0, 87, 174);&quot;&gt;object&lt;/span&gt;):&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;    &#39;&#39;&#39; A Capture class to get location of a desired blob &#39;&#39;&#39;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;  &lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;def&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: rgb(0, 14, 82);&quot;&gt;__init__&lt;/span&gt;&lt;/b&gt;(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;, ccolor&lt;b&gt;=&lt;/b&gt;(&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;248&lt;/span&gt;, &lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;111&lt;/span&gt;, &lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;115&lt;/span&gt;), threshold&lt;b&gt;=&lt;/b&gt;(&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;60&lt;/span&gt;, &lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;10&lt;/span&gt;, &lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;10&lt;/span&gt;)):&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.size &lt;b&gt;=&lt;/b&gt; (&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;640&lt;/span&gt;,&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;480&lt;/span&gt;)&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# create a display surface. standard pygame stuff&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.display &lt;b&gt;=&lt;/b&gt; pygame.display.set_mode(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.size, &lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;)&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# initialize camera module&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      pygame.camera.init()&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# this is the same as what we saw before&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.clist &lt;b&gt;=&lt;/b&gt; pygame.camera.list_cameras()&lt;br /&gt;      &lt;b&gt;if&lt;/b&gt; &lt;b&gt;not&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.clist:&lt;br /&gt;          &lt;b&gt;raise&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: rgb(5, 77, 0);&quot;&gt;ValueError&lt;/span&gt;&lt;/b&gt;(&lt;span style=&quot;color: rgb(191, 3, 3);&quot;&gt;&quot;Sorry, no cameras detected.&quot;&lt;/span&gt;)&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.cam &lt;b&gt;=&lt;/b&gt; pygame.camera.Camera(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.clist[&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;], &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.size)&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.cam.start()&lt;br /&gt;&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# create a surface to capture to.  for performance purposes&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# bit depth is the same as that of the display surface.&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.snapshot &lt;b&gt;=&lt;/b&gt; pygame.surface.Surface(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.size, &lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.display)&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# target color to detect -- default is red&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ccolor &lt;b&gt;=&lt;/b&gt; ccolor&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# by default we give more priority to shades of red&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.threshold &lt;b&gt;=&lt;/b&gt; threshold&lt;br /&gt;&lt;br /&gt;  &lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;def&lt;/span&gt;&lt;/b&gt; get_blob_location(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;):&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.snapshot &lt;b&gt;=&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.cam.get_image(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.snapshot)&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# threshold against the color we got before&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      mask &lt;b&gt;=&lt;/b&gt; pygame.mask.from_threshold(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.snapshot, &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ccolor, &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.threshold)&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# keep only the largest blob of that color&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      connected &lt;b&gt;=&lt;/b&gt; mask.connected_component()&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# these numbers are purely experimental and specific to your room and object&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# print mask.count() # use this to estimate&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# make sure the blob is big enough that it isn&#39;t just noise&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;      &lt;b&gt;if&lt;/b&gt; mask.count() &lt;b&gt;&amp;gt;&lt;/b&gt; &lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;7&lt;/span&gt;:&lt;br /&gt;          &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# find the center of the blob&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;          &lt;b&gt;return&lt;/b&gt; mask.centroid()&lt;br /&gt;      &lt;b&gt;return&lt;/b&gt; (&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;None&lt;/span&gt;,&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;None&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;class&lt;/span&gt;&lt;/b&gt; Ghost():&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;    &#39;&#39;&#39; Ghost class, to have a rect for collision detection &#39;&#39;&#39;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;  &lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;def&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: rgb(0, 14, 82);&quot;&gt;__init__&lt;/span&gt;&lt;/b&gt;(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;):&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.image &lt;b&gt;=&lt;/b&gt; pygame.image.load (os.path.join (&lt;span style=&quot;color: rgb(191, 3, 3);&quot;&gt;&quot;./&quot;&lt;/span&gt;,&lt;span style=&quot;color: rgb(191, 3, 3);&quot;&gt;&quot;gv.png&quot;&lt;/span&gt;))&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.rect &lt;b&gt;=&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.image.get_rect()&lt;br /&gt;&lt;br /&gt;  &lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;def&lt;/span&gt;&lt;/b&gt; set_rect(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;,position):&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.left,&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.top&lt;b&gt;=&lt;/b&gt;position&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.rect &lt;b&gt;=&lt;/b&gt; pygame.Rect(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.left,&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.top,&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;32&lt;/span&gt;,&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;32&lt;/span&gt;)&lt;br /&gt;    &lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;class&lt;/span&gt;&lt;/b&gt; Tux(Capture):&lt;br /&gt;&lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;    &#39;&#39;&#39; Tux class extends Capture and does stuff using get_blob_location &#39;&#39;&#39;&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;  &lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;def&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: rgb(0, 14, 82);&quot;&gt;__init__&lt;/span&gt;&lt;/b&gt;(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;):&lt;br /&gt;      Capture.&lt;b&gt;&lt;span style=&quot;color: rgb(0, 14, 82);&quot;&gt;__init__&lt;/span&gt;&lt;/b&gt;(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;)&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location &lt;b&gt;=&lt;/b&gt; [ x&lt;b&gt;/&lt;/b&gt;&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;2&lt;/span&gt; &lt;b&gt;for&lt;/b&gt; x &lt;b&gt;in&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.size ]&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.set_rect (&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location)&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.image &lt;b&gt;=&lt;/b&gt; pygame.image.load (os.path.join (&lt;span style=&quot;color: rgb(191, 3, 3);&quot;&gt;&quot;./&quot;&lt;/span&gt;,&lt;span style=&quot;color: rgb(191, 3, 3);&quot;&gt;&quot;tux.png&quot;&lt;/span&gt;))&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ghost &lt;b&gt;=&lt;/b&gt; Ghost()&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.backbuffer &lt;b&gt;=&lt;/b&gt; pygame.Surface (&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.size)&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.force &lt;b&gt;=&lt;/b&gt; &lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;def&lt;/span&gt;&lt;/b&gt; set_rect(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;,position):&lt;br /&gt;      left,top&lt;b&gt;=&lt;/b&gt;position&lt;br /&gt;      &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.rect &lt;b&gt;=&lt;/b&gt; pygame.Rect(left,top,&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;128&lt;/span&gt;,&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;128&lt;/span&gt;)&lt;br /&gt;    &lt;br /&gt;  &lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;def&lt;/span&gt;&lt;/b&gt; interact_tux(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;):&lt;br /&gt;      &lt;b&gt;if&lt;/b&gt; (pygame.sprite.collide_rect(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;,&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ghost)):&lt;br /&gt;          &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# ghost collides with tux&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;          &lt;b&gt;if&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ghost.left&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location[&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;]&lt;b&gt;+&lt;/b&gt;&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;64&lt;/span&gt;:&lt;br /&gt;              &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location[&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;] &lt;b&gt;+=&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.force&lt;br /&gt;          &lt;b&gt;if&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ghost.left&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location[&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;]&lt;b&gt;+&lt;/b&gt;&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;64&lt;/span&gt;:&lt;br /&gt;              &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location[&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;] &lt;b&gt;-=&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.force&lt;br /&gt;          &lt;b&gt;if&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ghost.top&lt;b&gt;&amp;lt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location[&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;1&lt;/span&gt;]&lt;b&gt;+&lt;/b&gt;&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;64&lt;/span&gt;:&lt;br /&gt;              &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location[&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;1&lt;/span&gt;] &lt;b&gt;+=&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.force&lt;br /&gt;          &lt;b&gt;if&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ghost.top&lt;b&gt;&amp;gt;&lt;/b&gt;&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location[&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;1&lt;/span&gt;]&lt;b&gt;+&lt;/b&gt;&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;64&lt;/span&gt;:&lt;br /&gt;              &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location[&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;1&lt;/span&gt;] &lt;b&gt;-=&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.force&lt;br /&gt;            &lt;br /&gt;        &lt;br /&gt;  &lt;b&gt;&lt;span style=&quot;color: rgb(128, 0, 0);&quot;&gt;def&lt;/span&gt;&lt;/b&gt; main(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;):&lt;br /&gt;      going &lt;b&gt;=&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;True&lt;/span&gt;&lt;br /&gt;      old_coord &lt;b&gt;=&lt;/b&gt; (&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;)&lt;br /&gt;    &lt;br /&gt;      &lt;b&gt;while&lt;/b&gt; going:&lt;br /&gt;          events &lt;b&gt;=&lt;/b&gt; pygame.event.get()&lt;br /&gt;          &lt;b&gt;for&lt;/b&gt; e &lt;b&gt;in&lt;/b&gt; events:&lt;br /&gt;              &lt;b&gt;if&lt;/b&gt; e.&lt;span style=&quot;color: rgb(0, 87, 174);&quot;&gt;type&lt;/span&gt; &lt;b&gt;==&lt;/b&gt; QUIT &lt;b&gt;or&lt;/b&gt; (e.&lt;span style=&quot;color: rgb(0, 87, 174);&quot;&gt;type&lt;/span&gt; &lt;b&gt;==&lt;/b&gt; KEYDOWN &lt;b&gt;and&lt;/b&gt; e.key &lt;b&gt;==&lt;/b&gt; K_ESCAPE):&lt;br /&gt;                  &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# close the camera safely&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;                  &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.cam.stop()&lt;br /&gt;                  going &lt;b&gt;=&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;False&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;          new_coord &lt;b&gt;=&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.get_blob_location()&lt;br /&gt;          &lt;b&gt;if&lt;/b&gt; new_coord &lt;b&gt;!=&lt;/b&gt; (&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;None&lt;/span&gt;,&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;None&lt;/span&gt;):&lt;br /&gt;              &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# delta = sum( [(x-y)**2 for (x,y) in zip(new_coord,old_coord)])    # for less fuzziness&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;              &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# if delta&amp;gt;200:&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;              old_coord &lt;b&gt;=&lt;/b&gt; new_coord&lt;br /&gt;              &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ghost.set_rect(old_coord)&lt;br /&gt;            &lt;br /&gt;          &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.set_rect (&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location)&lt;br /&gt;          &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.interact_tux()&lt;br /&gt;          &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.backbuffer.blit(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.snapshot,(&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;))&lt;br /&gt;          &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.backbuffer.blit(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.image,&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.location)&lt;br /&gt;          &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.backbuffer.blit(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.ghost.image, old_coord)&lt;br /&gt;          &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.backbuffer &lt;b&gt;=&lt;/b&gt; pygame.transform.flip(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.backbuffer,&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;True&lt;/span&gt;,&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;False&lt;/span&gt;)&lt;br /&gt;          &lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.display.blit(&lt;span style=&quot;color: rgb(0, 110, 40);&quot;&gt;self&lt;/span&gt;.backbuffer,(&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;,&lt;span style=&quot;color: rgb(176, 128, 0);&quot;&gt;0&lt;/span&gt;))&lt;br /&gt;          pygame.display.flip()&lt;br /&gt;        &lt;br /&gt;&lt;b&gt;if&lt;/b&gt; &lt;span style=&quot;color: rgb(0, 87, 174);&quot;&gt;__name__&lt;/span&gt;&lt;b&gt;==&lt;/b&gt;&lt;span style=&quot;color: rgb(191, 3, 3);&quot;&gt;&#39;__main__&#39;&lt;/span&gt;:&lt;br /&gt;  t &lt;b&gt;=&lt;/b&gt; Tux()   &lt;i&gt;&lt;span style=&quot;color: rgb(136, 135, 134);&quot;&gt;# all default params&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;  t.main()&lt;br /&gt;  &lt;/pre&gt;And that&#39;s me doing weird things with tux :D -&lt;br /&gt;&lt;br /&gt;&lt;object height=&quot;385&quot; width=&quot;640&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/qCKkpMnmn_E&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/qCKkpMnmn_E&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; height=&quot;385&quot; width=&quot;640&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Kalman_filter &quot;&gt;&lt;br /&gt;&lt;br /&gt;Kalman Filter&lt;/a&gt; would be more interesting.</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/6583092826537813976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/03/fun-with-pygames-camera-module.html#comment-form' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/6583092826537813976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/6583092826537813976'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/03/fun-with-pygames-camera-module.html' title='Fun with PyGame&#39;s camera module'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCSqnBy2OmumFqN43rbQb_eLdKrKiJVygM9_V-p_WVIqLgYWzAfXzUVnQIto07Hn9CzKzLjU9FALiOZtep0Zp3P1fmcgp958X96r2aOUeD73jGQ7TWcm48Ss611zyDYst3LIIKMfk3gvRO/s72-c/snapshot213.png" height="72" width="72"/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5777290109635933739.post-6868728139948784307</id><published>2010-02-21T01:17:00.006+05:30</published><updated>2018-06-10T14:58:26.919+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="artrage"/><category scheme="http://www.blogger.com/atom/ns#" term="artwork"/><category scheme="http://www.blogger.com/atom/ns#" term="lenny.in"/><category scheme="http://www.blogger.com/atom/ns#" term="mypaint"/><title type='text'>Better than stealing...</title><content type='html'>Remember way back when your were that kid whose only tools of trade in teh bag o&#39; tricks were pencil and crayons and stuff like that, ah the small bricks of water colors, the cheap blue color box or color bricks where you&#39;d brush the watery brush and ... blah ends here.&lt;br /&gt;So, yes, better than even copy pasting, not caring about copyrights, etc why not trace the stuff you like as in the old school days :). After all there&#39;s no harm/copyright violation in getting inspired from an artform. So for lenny.in (crap this is 3rd day in making and its not yet out)...  I needed some logos, some cool graphics for gmail, twitter and Lenny itself. Here&#39;s how I got it done -&lt;br /&gt;&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOG9xoFrV-AuwkG5d2sXNZWK9tKSreDlA9-ETQoZhN_DL9kIkTvIjFA1Aoh3FiZTLXP_rwOxXfKFRo2GS9J1m7Bx_p7kzAwu9ijtgMyUgRgHvvmbbYhRRG_JW7NJsSvr_I1csX0drGBI3Y/s1600-h/lennylove.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 249px; height: 139px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOG9xoFrV-AuwkG5d2sXNZWK9tKSreDlA9-ETQoZhN_DL9kIkTvIjFA1Aoh3FiZTLXP_rwOxXfKFRo2GS9J1m7Bx_p7kzAwu9ijtgMyUgRgHvvmbbYhRRG_JW7NJsSvr_I1csX0drGBI3Y/s200/lennylove.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5440420779243200754&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;1. Load original image/photo into ArtRage or MyPaint (on linux)&lt;br /&gt;2. Start drawing... draw ... draw... draw some more&lt;br /&gt;3. Resize into iconic/useful proportion, and smile.&lt;br /&gt;&lt;br /&gt;Lol I might just have mislead you... but hey this obviously sounds like a safer practice than outright copy pasting media content from here and there.&lt;br /&gt;&lt;br /&gt;Anyways so this is what I could get out of it (zoom to see brush strokes) -&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKkPB1Pppa7eiPS7H89xAZoPuK3ll7Sih33i3wPAk9-K3cJ7lE7qTwAb0qKyoWZLI2jU8E1oQI57h8hD3LWfF33TFQQv_tDbyonXGKL1nySgR5huSoDisDGGriCjGgkPUNo369OerD_ZsB/s1600-h/Untitled-1.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 92px; height: 74px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKkPB1Pppa7eiPS7H89xAZoPuK3ll7Sih33i3wPAk9-K3cJ7lE7qTwAb0qKyoWZLI2jU8E1oQI57h8hD3LWfF33TFQQv_tDbyonXGKL1nySgR5huSoDisDGGriCjGgkPUNo369OerD_ZsB/s200/Untitled-1.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5440417309386326978&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUQSi-k2UagEpmYm0NRveoDQA2zw59vY5zpvQdzADwi17jFQazz1rH3NejnlLv8H6gdnmfu9yWSsonX0lye-DtlIxu-l8ANcnROT1SeSMrnVE8Zvh1pIhrJydab8AhrqrNvaxPLOh2r2xf/s1600-h/Untitled-2.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 124px; height: 69px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUQSi-k2UagEpmYm0NRveoDQA2zw59vY5zpvQdzADwi17jFQazz1rH3NejnlLv8H6gdnmfu9yWSsonX0lye-DtlIxu-l8ANcnROT1SeSMrnVE8Zvh1pIhrJydab8AhrqrNvaxPLOh2r2xf/s200/Untitled-2.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5440417318067414546&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCjd2MT0ZBqodInKrniDuQTLBZ76IOoctR4b06V5d0JUz3RutEDSkh2s2IOnZ7V-fERuSyPkMwdH2bEupjpQwyuku-cbBLA2pT7tRi2Hws0A_zOomnoo3DbSRwaB4lmkylMwigvBO5sCQM/s1600-h/Untitled-3.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 115px; height: 70px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCjd2MT0ZBqodInKrniDuQTLBZ76IOoctR4b06V5d0JUz3RutEDSkh2s2IOnZ7V-fERuSyPkMwdH2bEupjpQwyuku-cbBLA2pT7tRi2Hws0A_zOomnoo3DbSRwaB4lmkylMwigvBO5sCQM/s200/Untitled-3.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5440418388179038242&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and finally -&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();}  catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyocC4PtxQQi1IX0heaun8MFczW9MT-DD1xK9PqvsUqtg53b1t7KUlkoBahbpCGuIxoVX2uRDd0K3Jmr_n9QdqvBDRiiXFL8A5y0B7r307ptrSBS_DFO5upzz94C2Pr28nYK6BvdDWqFpR/s1600-h/lenny.png&quot;&gt;&lt;img style=&quot;cursor: pointer; width: 200px; height: 154px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyocC4PtxQQi1IX0heaun8MFczW9MT-DD1xK9PqvsUqtg53b1t7KUlkoBahbpCGuIxoVX2uRDd0K3Jmr_n9QdqvBDRiiXFL8A5y0B7r307ptrSBS_DFO5upzz94C2Pr28nYK6BvdDWqFpR/s200/lenny.png&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5440418399498004018&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://ideamonk.blogspot.com/feeds/6868728139948784307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://ideamonk.blogspot.com/2010/02/better-than-stealing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/6868728139948784307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5777290109635933739/posts/default/6868728139948784307'/><link rel='alternate' type='text/html' href='http://ideamonk.blogspot.com/2010/02/better-than-stealing.html' title='Better than stealing...'/><author><name>Abhishek Mishra</name><uri>http://www.blogger.com/profile/12093818682511281896</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjw8Pjm5I2SObdLn9AjAUoHhnFAPMaWUDrshO-wwJQo0HLf4Hy9VE16-B3KK0bvcShSJunT3WekarzoIW1Km4-1DA04StUf1JXJxpY0_MZ3tYOrWCyXZGtqx5PfM5n5vuw/s220/ideamonk_big.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOG9xoFrV-AuwkG5d2sXNZWK9tKSreDlA9-ETQoZhN_DL9kIkTvIjFA1Aoh3FiZTLXP_rwOxXfKFRo2GS9J1m7Bx_p7kzAwu9ijtgMyUgRgHvvmbbYhRRG_JW7NJsSvr_I1csX0drGBI3Y/s72-c/lennylove.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>