<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0UCQ3s-eCp7ImA9WxNUGUk.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967</id><updated>2009-11-11T07:14:22.550-06:00</updated><title>$ls /home/DaNmarner/blog</title><subtitle type="html">#!/usr/bin/env geekism</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://danmarner.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>DaNmarner</name><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>59</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-nd/3.0/" /><link rel="self" href="http://feeds.feedburner.com/DaNmarner" type="application/atom+xml" /><feedburner:emailServiceId>DaNmarner</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;AkAAQ38ycSp7ImA9WxVQFk4.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-6892076313280072367</id><published>2009-02-02T23:14:00.001-06:00</published><updated>2009-02-02T23:25:42.199-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-02T23:25:42.199-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Gentoo" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Installing Gentoo with Ubuntu</title><content type="html">Ubuntu has been the only OS on my Gateway t-1616 laptop for over a year now, and I'm pretty happy with it except for its occasional slowness. I've done some research and made up my mind to install Gentoo as a secondary os and maybe replace Ubuntu with it someday in the future. I read through the intallation &lt;a href="http://www.gentoo.org/doc/en/handbook/index.xml"&gt;instruction&lt;/a&gt; on the official website and found out that the install CD does no more than providing a pre-existing linux to set up the environment for the new system. Then you chroot into the new environment and let emerge take care of the rest of work (not true, really).

Instead of downloading the install cd, I just fired up a terminal under gnome, Ubuntu and did the job anyway. It was way more enjoyable than doing it on a live cd. I made the new partition with the GUI of gparted, and downloaded stage3 and portage with Firefox 3. And of course I surfed the net while emerging stuff into the new system.

That's kind of fun, isn't it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-6892076313280072367?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/aLqcCPBA9GM_gAbGqfkoXoFeH2g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aLqcCPBA9GM_gAbGqfkoXoFeH2g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/aLqcCPBA9GM_gAbGqfkoXoFeH2g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/aLqcCPBA9GM_gAbGqfkoXoFeH2g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=AUfhs5CO"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=AUfhs5CO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=zsleVXBp"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=5uSKvluw"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=Lw8Ca7xt"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=Lw8Ca7xt" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=T1faNibr"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=T1faNibr" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/6892076313280072367/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=6892076313280072367" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/6892076313280072367?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/6892076313280072367?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/EOtvBr_aVEg/installing-gentoo-with-ubuntu.html" title="Installing Gentoo with Ubuntu" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2009/02/installing-gentoo-with-ubuntu.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUMRHk4eSp7ImA9WxNUEE4.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-7501389122785848582</id><published>2009-01-08T02:45:00.010-06:00</published><updated>2009-10-31T18:54:45.731-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-31T18:54:45.731-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>How to get the reference of a global class by name in Python</title><content type="html">1 Useing Globals().&lt;br /&gt;
&lt;pre name="code" class="python"&gt;Globals()['classname']&lt;/pre&gt;&lt;br /&gt;
2 Using eval.&lt;br /&gt;
&lt;pre name="code" class="python"&gt;eval('classname')&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
3 Using new-style classes,make up a base class that has a classmethod, something like this:&lt;br /&gt;
&lt;pre name="code" class="python"&gt;class Parent(object):
    @classmethod
    def getSubClass(cls,name):
        for c in cls.__subclasses__:
            if c.__name__ == name:
            return c
&lt;/pre&gt;&lt;br /&gt;
Everything classes inherits this one, which will enable it possible to dynamically get the references of the sub-classes.&lt;br /&gt;
&lt;br /&gt;
4 Using getattr(), if the module that the the class lives in is known.&lt;br /&gt;
&lt;pre name="code" class="python"&gt;getattr(module,classname)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-7501389122785848582?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TtgLPlAxDw5LAotQzwEs94s5FS4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TtgLPlAxDw5LAotQzwEs94s5FS4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TtgLPlAxDw5LAotQzwEs94s5FS4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TtgLPlAxDw5LAotQzwEs94s5FS4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=Bcq5yLu1"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=Bcq5yLu1" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=bitREcG2"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=AglXkVm8"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=w29UUGG3"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=w29UUGG3" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=MnnKfQoQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=MnnKfQoQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/7501389122785848582/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=7501389122785848582" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/7501389122785848582?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/7501389122785848582?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/YHYLNyGxV6o/how-to-get-reference-of-global-class-by.html" title="How to get the reference of a global class by name in Python" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2009/01/how-to-get-reference-of-global-class-by.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4NQH8_fSp7ImA9WxVTEE0.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-5613350610972025011</id><published>2008-12-22T21:15:00.003-06:00</published><updated>2008-12-22T21:29:51.145-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-22T21:29:51.145-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><title>Appending new items in JSON arrays with javascript</title><content type="html">I decided to blog about this because it was a question that I struggled to solve and I couldn't find any material that gives the answer via google.

To add a item to the end of a array in a JSON object, we need to take advantage of the &lt;span style="font-style:italic;"&gt;length&lt;/span&gt; attribute of it. It is clearer to demonstrate this with code, like this piece of javascript:

&lt;blockquote&gt;&lt;pre&gt;
json_data = {
    "some_array":[],
};

json_data.some_array[json_data.some_array.length] = new_item;
&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-5613350610972025011?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/mdcUE-pjrnoSv_80rQRHuPBGUy8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mdcUE-pjrnoSv_80rQRHuPBGUy8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/mdcUE-pjrnoSv_80rQRHuPBGUy8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/mdcUE-pjrnoSv_80rQRHuPBGUy8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=mhHdeGMS"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=mhHdeGMS" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=RvExC6nc"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=R0fIGc34"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=6hbFDqdB"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=6hbFDqdB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=0ssN1krE"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=0ssN1krE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/5613350610972025011/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=5613350610972025011" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/5613350610972025011?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/5613350610972025011?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/xldDhgNHOJo/appending-new-items-in-json-arrays-with.html" title="Appending new items in JSON arrays with javascript" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/12/appending-new-items-in-json-arrays-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQDRH89eip7ImA9WxRaFUw.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-2705531755845494330</id><published>2008-12-17T05:20:00.002-06:00</published><updated>2008-12-17T05:29:35.162-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-17T05:29:35.162-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Web" /><category scheme="http://www.blogger.com/atom/ns#" term="GAE" /><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Google App Engine's real indexing limit</title><content type="html">5000, that the number you are looking for. I tried to fill up a db.ListProperty(int) as much as I could. The SDK stopped working and started complaining about me having too much to be indexed at this point, 5000. 

So if you have more than 5000 entities to index in a ListProperty, get around.
I came up with a solution where you use a db.ListProperty(db.Key) to hold the keys of the actual ListProperty(s) you use to store stuff. And then make some special interface for it so that it loop through its parts automatically. Implementing such kind of interface, including a reading method, a saving method and a deleting method took up about 70 lines of code, empty lines included. And then I have no limits on GAE's indexing any more!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-2705531755845494330?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yr8o9RqBeKVR7-EnaqeJpdycFh4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yr8o9RqBeKVR7-EnaqeJpdycFh4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yr8o9RqBeKVR7-EnaqeJpdycFh4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yr8o9RqBeKVR7-EnaqeJpdycFh4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=WsU6qYPp"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=WsU6qYPp" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=vbUvIEfi"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=1r1NmPou"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=74tjinBG"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=74tjinBG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=1HJB0apU"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=1HJB0apU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/2705531755845494330/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=2705531755845494330" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/2705531755845494330?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/2705531755845494330?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/xPSNEu0qjxg/google-app-engines-real-indexing-limit.html" title="Google App Engine's real indexing limit" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/12/google-app-engines-real-indexing-limit.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAFQ3Y4fCp7ImA9WxRRFE0.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-8051223128270729942</id><published>2008-09-26T00:39:00.002-05:00</published><updated>2008-09-26T00:41:52.834-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-26T00:41:52.834-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Gateway T1616" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Gateway T-1616 Users: Get Ready for Ubuntu Intrepid</title><content type="html">No more Linux Mint-for-the-wireless.
Install Intrepid in no time and you will get a fully functioning Gateway T-1616!
I doubt if this is the last time writing about Gateway T-1616 and Ubuntu Linux.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-8051223128270729942?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/r0APIjZ1dTBpad4ex3M0dTJgomk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r0APIjZ1dTBpad4ex3M0dTJgomk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/r0APIjZ1dTBpad4ex3M0dTJgomk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/r0APIjZ1dTBpad4ex3M0dTJgomk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=YHT7tRNd"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=YHT7tRNd" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=mrdzbad9"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=yp9cQSZb"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=fyQWp8P3"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=fyQWp8P3" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=oksvFcjI"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=oksvFcjI" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/8051223128270729942/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=8051223128270729942" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/8051223128270729942?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/8051223128270729942?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/_4TrfxlRb8E/gateway-t-1616-users-get-ready-for.html" title="Gateway T-1616 Users: Get Ready for Ubuntu Intrepid" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/09/gateway-t-1616-users-get-ready-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4FR309cSp7ImA9WxRREUg.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-5678768859966959301</id><published>2008-09-23T01:08:00.004-05:00</published><updated>2008-09-23T01:21:56.369-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-23T01:21:56.369-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rtl8187b" /><category scheme="http://www.blogger.com/atom/ns#" term="wireless" /><category scheme="http://www.blogger.com/atom/ns#" term="Gateway T1616" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>WPA Working Smoothly on Ubuntu Intrepid ( 8.10 )</title><content type="html">It is a nightmare to wait for the new release of Ubuntu 8.10 for me. Plus I accidentally crashed my old Ubuntu 8.10 by mistyping a rm command.

So there's no reason why shouldn't I install alpha 6 version of Intrepid several days earlier than the plan.

What thrilled my is that I found the wireless card of my Gateway T-1616, which is an rtl8187b, is working perfectly for a WPA wireless network. The weird inexplainable behaver before, such as connects to a WPA wireless signal and then works on a strength of 0%, are all gone!

What's better, I can really use the new-human theme for a while!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-5678768859966959301?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rd0F7veAiW6qgnRUbpl-DdkFNYQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rd0F7veAiW6qgnRUbpl-DdkFNYQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rd0F7veAiW6qgnRUbpl-DdkFNYQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rd0F7veAiW6qgnRUbpl-DdkFNYQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=vXWkESsZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=vXWkESsZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=Xr12OGeg"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=kgPAkhKu"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=AF1S2OuI"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=AF1S2OuI" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=jrqAjIrB"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=jrqAjIrB" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/5678768859966959301/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=5678768859966959301" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/5678768859966959301?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/5678768859966959301?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/4UMv4dFr56o/wpa-working-smoothly-on-ubuntu-intrepid.html" title="WPA Working Smoothly on Ubuntu Intrepid ( 8.10 )" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/09/wpa-working-smoothly-on-ubuntu-intrepid.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEBQ3Yzfyp7ImA9WxRTGEQ.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-9133244048081565500</id><published>2008-09-05T23:17:00.007-05:00</published><updated>2008-09-08T12:24:12.887-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-08T12:24:12.887-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rtl8187b" /><category scheme="http://www.blogger.com/atom/ns#" term="Gateway T1616" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Full Functioning Gateway T-1616 ( rtl8187b ) with Ubuntu 8.04 and Later</title><content type="html">As questions about rtl8187b wireless card (of Gateway T-1616) + Ubuntu 8.04 accumulating &lt;a href="http://danmarner.blogspot.com/2008/01/rtl8187b-linux-native-driver-works-on.html"&gt;here&lt;/a&gt;, I figured that it is time to make a reply.

My answer is: I don't know how to make it work. Despite the fact that Ubuntu 8.04 is the only OS on my Gateway T-1616 and almost everything is working healthily, wireless included.

To get that: Install a Linux Mint, you will find yourself being able to install a working windows driver for rtl8187b with ndiswrapper. Then change your /etc/apt/sources.list into the same as a normal Ubuntu hardy one, update &amp; upgrade everything. The wireless then will still work, so will be other stuff.

And if you don't like the look &amp; feel of Mint, go ahead and read &lt;a href="http://dl.fullcirclemagazine.org/issue16_en.pdf"&gt;Full Circle Issue 16&lt;/a&gt;: GNOME-Look Guide. It does an excellent job telling us how to change the look of everything on ubuntu.

The only blemish of this approach is that the mic of Gateway T-1616 wouldn't work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-9133244048081565500?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IhRN4t2XyCU8V6OeG7MflcDipPM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IhRN4t2XyCU8V6OeG7MflcDipPM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IhRN4t2XyCU8V6OeG7MflcDipPM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IhRN4t2XyCU8V6OeG7MflcDipPM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=JO2tE1jV"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=JO2tE1jV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=H8EoR27V"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=EkY9EZ1O"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=sHiLP3aG"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=sHiLP3aG" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=KwY2SfXs"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=KwY2SfXs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/9133244048081565500/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=9133244048081565500" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/9133244048081565500?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/9133244048081565500?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/kewkxBelqGU/full-functioning-gateway-t-1616-with.html" title="Full Functioning Gateway T-1616 ( rtl8187b ) with Ubuntu 8.04 and Later" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/09/full-functioning-gateway-t-1616-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQNQnk9fSp7ImA9WxdUGUw.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-7045008174840090288</id><published>2008-08-05T00:47:00.005-05:00</published><updated>2008-08-05T01:06:33.765-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-05T01:06:33.765-05:00</app:edited><title>An alternative for urllib.urlopen in Google App Engine</title><content type="html">It took me a little searching to find out that there is a alternative for the disabled urllib.urlopen function (due to its usage of socket) in Google App Engine. It lies in google.appengine.api. The following illustrates the way to use it with the equal code using urllib.urlopen commented.

&lt;blockquote&gt;# import urllib
from google.appengine.api import urlfetch

# result = urllib.urlopen('http://DaNmarner.blogspot.com')
result = urlfetch.fetch('http://DaNmarner.blogspot.com')

# do_something_with(result.read())
do_something_with(result.content)&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-7045008174840090288?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3WBNPWwXUlGGkLInRHIXySAsWas/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3WBNPWwXUlGGkLInRHIXySAsWas/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3WBNPWwXUlGGkLInRHIXySAsWas/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3WBNPWwXUlGGkLInRHIXySAsWas/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=MMXIElvF"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=MMXIElvF" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=euU3ph5c"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=2Q7eGD3G"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=cRLkqJz8"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=cRLkqJz8" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=yMkDhPN3"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=yMkDhPN3" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/7045008174840090288/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=7045008174840090288" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/7045008174840090288?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/7045008174840090288?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/c_Y5nWUXkD0/alternative-for-urlliburlopen-in-google.html" title="An alternative for urllib.urlopen in Google App Engine" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/08/alternative-for-urlliburlopen-in-google.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8MQHk9fCp7ImA9WxdVGU4.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-8451127993703095257</id><published>2008-07-24T16:02:00.002-05:00</published><updated>2008-07-24T16:28:01.764-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-24T16:28:01.764-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><title>Go internationalize your Facebook application now</title><content type="html">If you are a Facebook app developer, having more and more users to install your application is (hopefully) one of the main goal. If this applies to you, then here, take this tip.

Facebook is going international. And, as always, it does not forget its fellow developers! Yes, actually it is going international for (almost) free, and it is now taking all of you to internationalize for (absolutely) free!

The idea to achieve this is sort of slick, it is done via a official application called &lt;span style="font-style:italic;"&gt;Translations&lt;/span&gt;. It has been there for quite a while already. As a normal user, you can install this application and pick a language to translate Facebook into a certain non-English language. So far some excellent work has been done. The Official part of Facebook (including the basic interface and official apps) speaks more than 15 languages today.  But that's of course not the end of the story: &lt;span style="font-weight:bold;"&gt;Translations is now open to all third-party Facebook applications!&lt;/span&gt;

I can't think of any reason not to do this: go install &lt;span style="font-style:italic;"&gt;Translations &lt;/span&gt;and click Admin Panel. There you choose the language whose users you want (tick them all!). And your app will get internationalize in a couple of days!

It is that easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-8451127993703095257?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dJwWEs0xIo9mDMtdCNNmpkdNG8Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dJwWEs0xIo9mDMtdCNNmpkdNG8Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dJwWEs0xIo9mDMtdCNNmpkdNG8Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dJwWEs0xIo9mDMtdCNNmpkdNG8Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=S2QggePj"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=S2QggePj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=t4znlmIp"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=0EI0GLzv"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=ARAfW8cW"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=ARAfW8cW" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=z7MYAXD3"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=z7MYAXD3" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/8451127993703095257/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=8451127993703095257" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/8451127993703095257?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/8451127993703095257?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/KPBaKLjw3Wo/go-internationalize-your-facebook.html" title="Go internationalize your Facebook application now" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/07/go-internationalize-your-facebook.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QEQHk5fCp7ImA9WxdWE08.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-4794593293751142726</id><published>2008-07-06T02:23:00.003-05:00</published><updated>2008-07-06T02:28:21.724-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-06T02:28:21.724-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Launching the default web brower with Python</title><content type="html">I found this in standard modules. So I put it here for a record:

To open a certain web page(google.com, for example) with the system default web browse programmatically, do the following:

&lt;blockquote&gt;import webbrowser
webbrowser.open('http://google.com')&lt;/blockquote&gt;

Python didn't let me down this time.....again!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-4794593293751142726?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oKNWr7x4NtvifxGyuAmmq3SBcKY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oKNWr7x4NtvifxGyuAmmq3SBcKY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oKNWr7x4NtvifxGyuAmmq3SBcKY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oKNWr7x4NtvifxGyuAmmq3SBcKY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=V9KjMgrk"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=V9KjMgrk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=DyQVhg1x"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=VZQGzqBZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=4Ux60GTg"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=4Ux60GTg" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=1WsxYn3U"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=1WsxYn3U" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/4794593293751142726/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=4794593293751142726" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/4794593293751142726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/4794593293751142726?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/ybE6RGT5GWM/launching-default-web-brower-with.html" title="Launching the default web brower with Python" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/07/launching-default-web-brower-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UMRXc4eyp7ImA9WxdWEUk.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-1085680924279492151</id><published>2008-07-03T22:11:00.004-05:00</published><updated>2008-07-03T23:21:24.933-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-03T23:21:24.933-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="GUI" /><category scheme="http://www.blogger.com/atom/ns#" term="wxPython" /><title>Using py2exe and wxPython on Windows XP</title><content type="html">In my opinion, wxPython is practically the most acceptable platform-crossing GUI toolkit. However neither it nor python are shipped with MS Windows. Since we can't expect our users to have python and wxPython installed, py2exe is no doubt a decent deal to make our python applications standalone. I had some trouble on the first trying it out on Windows XP, so I decided to write the solution here in case someone else encounters the same problem.

Let me start at the very beginning.

First of all you need to make sure everything needed is installed, for that matter, at least &lt;a href="http://www.python.org/download/"&gt;python&lt;/a&gt;, &lt;a href="http://wxpython.org/download.php"&gt;wxPython&lt;/a&gt; and &lt;a href="http://sourceforge.net/project/showfiles.php?group_id=15583"&gt;py2exe&lt;/a&gt; must be there in our case.

The versions of my installed packages are as following:

Python: 2.5.2
py2exe: 0.6.6 for win32 python2.5
wxPython: unicode-2.8.7.1 for python 2.5

Just to be safe, you need to install python before the rest of the two packages.

Now, I assume you have already tested &amp; debugged your application into a satisfying status. All you need now is to make it standalone. Another assumption here is you know the path where python is installed.(I will use python25\ and emit the previous part in this essay)

To achieve that, you need to write a setup.py script, which takes advantage of the method &lt;span style="font-weight:bold;"&gt;setup &lt;/span&gt;in standard module &lt;span style="font-weight:bold;"&gt;distutils.core&lt;/span&gt;. You can find &lt;a href="http://www.py2exe.org/"&gt;instructions on py2exe's website&lt;/a&gt; for this step. Another good resource to learn it is the samples that come with py2exe, they are under the path
Python25\Lib\site-packages\py2exe\samples

You may want to refer to the python library reference to learn about &lt;a href="http://docs.python.org/dist/module-distutils.core.html"&gt;distutils.core&lt;/a&gt;, but, before you get confused (which I did), I need to point out that py2exe added some &lt;a href="http://www.py2exe.org/index.cgi/ListOfOptions"&gt;additional options to the setup mothed&lt;/a&gt;, which will probably be all you'll be using.

OK, a simplistic, but generally always working example of the setup.py would be:

&lt;blockquote&gt;from distutils.core import setup
import py2exe

setup(['MainScript.py']) # Replace MainScript.py with your script&lt;/blockquote&gt;

Save the setup.py script in your app dictionary.

Next thing is to make sure that you can run python in a command terminal. Which requires the path of python to be added in the Environment Variable &lt;span style="font-weight:bold;"&gt;PATH&lt;/span&gt;:

1 From the desktop, right-click My Computer and click properties.
2 In the System Properties window, click on the Advanced tab.
3 In the Advanced section, click the Environment Variables button. 
4 Finally, in the Environment Variables window, highlight the path variable in the Systems Variable section and click edit. Add a semicolon to the end if there isn't one, and then your python path.

Open a command prompt(by running cmd), go to your app path, run the setup.py with the argument py2exe:
&lt;blockquote&gt;python setup.py py2exe&lt;/blockquote&gt;

A lot of information shows up and then you will find two new dictionary in your app path, here you just need &lt;span style="font-style:italic;"&gt;dist&lt;/span&gt;. If you wonder what's in there, check out &lt;a href="http://www.py2exe.org/index.cgi/FAQ"&gt;the Official FAQ&lt;/a&gt;.

But you won't find your exe working, because msvcp71.dll is missing, and changing the name of MSVRP71.DLL won't work. I think this is probably a bug of py2exe. So you need to copy 'Python\Lib\site-packages\wx-2.8-msw-unicode\msvcp71.dll' manually here.

That's how I made my wxPython application work so far.

Farther information is surely welcomed :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-1085680924279492151?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DnY-NaQmFr1xKdwVBniFQimL-DU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DnY-NaQmFr1xKdwVBniFQimL-DU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DnY-NaQmFr1xKdwVBniFQimL-DU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DnY-NaQmFr1xKdwVBniFQimL-DU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=RuDLcGJA"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=RuDLcGJA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=ZvYbgF6S"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=jdUOvUKD"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=0vs34Kes"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=0vs34Kes" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=SnLB4DCZ"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=SnLB4DCZ" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/1085680924279492151/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=1085680924279492151" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/1085680924279492151?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/1085680924279492151?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/n72We3FbZak/using-py2exe-and-wxpython-on-windows-xp.html" title="Using py2exe and wxPython on Windows XP" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/07/using-py2exe-and-wxpython-on-windows-xp.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQBRnY9cCp7ImA9WxRbGUw.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-6716806890549481812</id><published>2008-06-18T17:05:00.010-05:00</published><updated>2008-12-10T07:05:57.868-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-10T07:05:57.868-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="IT Observation" /><category scheme="http://www.blogger.com/atom/ns#" term="Instant Message" /><category scheme="http://www.blogger.com/atom/ns#" term="internet" /><category scheme="http://www.blogger.com/atom/ns#" term="QQ" /><title>How did QQ make $523 million in a year?</title><content type="html">QQ, the giant Chinese social network, as many of you may have heard, made a profit of $523 million last year. While Facebook encountered a lose of $50 million. How did this happen? What is the magic of this IM tool? Of course Tencent has its marketing tricks, &lt;a href="http://www.culture-buzz.com/blog/QQ-Chinese-ICQ-outdoes-Facebook-1601.html"&gt;this essay&lt;/a&gt; may give you a big picture as a part of the answer.&lt;br /&gt;&lt;br /&gt;As an eight-year QQ user, here I will focus on the second question. To meet the interest of what on earth the IM tool is like, let's take a close look of the money generator.&lt;br /&gt;&lt;br /&gt;The basic services of QQ's, including text messaging, video/audio chatting, file transporting, as well as many extended services like email, online music, games, blog and so on, are all free. Despite the fact that the program consumes a lot of system resources of a computer, users are able to enjoy all this in a easy-going, nice-looking, integrated interface. However, if you zoom in to take a careful look of the UI, it's easy to notice that it is way more complicated than other IM tools, such as MSN, Yahoo! Messenger, let alone Gtalk. And there, as you may expect, is the clue for the money source.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YZGwrGlcsOk/SFmh8boZFMI/AAAAAAAABxg/Ng-C_6ePI3w/s1600-h/qqUI.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_YZGwrGlcsOk/SFmh8boZFMI/AAAAAAAABxg/Ng-C_6ePI3w/s400/qqUI.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5213376103239455938" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To illustrate, here is the main window of QQ and the panel that appears when you move the mouse over to a buddy. I've marked 1-6 on some elements in the picture to make my following writing easier. &lt;br /&gt;1  this part is a series of buttons, which indicates the services this user has activated. Some of which are free while most are not. The extension of every single service could be non-free. Such as more advanced facial expressions in text chatting, larger space in email, fancier decoration in Q-zone, the blog service, etc. &lt;br /&gt;&lt;br /&gt;2 A image which differs from the normal icon in users' profile. A place where you can DIY the looking of the clothes, hairstyle, gesture, attachment of your figure, WITH MONEY. Virtual goods is a main source of the income. Beyond the figure you see, virtual goods could be found every where in all the services. A "flower" that needs to be taken care of in your blog, a virtual pet that need to be fed (buy the food!), or an assistant item in a online game.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_YZGwrGlcsOk/SFmsfoRJE5I/AAAAAAAABxo/zHsFObw6O9s/s1600-h/Screenshot-2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_YZGwrGlcsOk/SFmsfoRJE5I/AAAAAAAABxo/zHsFObw6O9s/s400/Screenshot-2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5213387703043298194" /&gt;&lt;center&gt;"Online clothes shopping"&lt;/center&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3 These icons tell the user's "level", a statistic that indicates the length of the time that the user has logged in. When a user reaches certain level, he/she will be able to have some special privilege for free. A good example would be the power to customize the profile icon with your self uploaded picture. &lt;br /&gt;&lt;br /&gt;4 The tabs on the main windows directs the user to other products provided by Tencent. You can find links to its online B2B websites, uploading service, blog service, stock website, "bank" and its reader.&lt;br /&gt;&lt;br /&gt;5 VIP icon. Well this tells you this user is very important because he spent a certain amount of money to keep this icon. Of course he also get some privilege that's not shared by everybody. Such as changing the profile icon before reaching the required "level", or &lt;span style="font-weight:bold;"&gt;being able to turn off the ads that show up on the start of the program&lt;/span&gt;. The latter may sounds strange but it is a nuisance that every QQ user has to deal with. This icon, though strangely enough, is not the only special membership a user can buy. There's a "diamond" for every certain product which gives you more flexible, more fancier, and probably more enjoyable (at least for me) services. All payments are available in various ways including paying by credit cards, virtual coupon or even the user's tele/mobilephone account.&lt;br /&gt;&lt;br /&gt;Above is a corner look of the Tencent empire. Surrounding its core product, QQ, are the dominating social networking company's fast-growing market in almost all aspects in China. &lt;br /&gt;&lt;br /&gt;As you can tell from my description, QQ is not one of the best IM options to pick for a netizen in China, yet it is the most possible first internet experience for him/her, since E-mailing, web-browsing, and blogging are much less popular among the majority of Chinese netizens. What's more, even if I don't like it, it is still impossible for me to drop it, because historically and presently, all my friends, family and co-workers are using it ,for the same reason as mine.&lt;br /&gt;&lt;br /&gt;So, how did to make $523 million in a year? Trap 300 million active users and ask for money. You can do the same thing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-6716806890549481812?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ik_UEIaiOBeqv-mLITWtc9nCY6I/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ik_UEIaiOBeqv-mLITWtc9nCY6I/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ik_UEIaiOBeqv-mLITWtc9nCY6I/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ik_UEIaiOBeqv-mLITWtc9nCY6I/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=Yqucjoyj"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=Yqucjoyj" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=bIA2c4Vq"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=ODC6b4Gb"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=baVPPWBV"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=baVPPWBV" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=gc3fl5Pt"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=gc3fl5Pt" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/6716806890549481812/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=6716806890549481812" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/6716806890549481812?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/6716806890549481812?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/eq2-asGBHt8/how-did-qq-make-523-million-in-year.html" title="How did QQ make $523 million in a year?" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_YZGwrGlcsOk/SFmh8boZFMI/AAAAAAAABxg/Ng-C_6ePI3w/s72-c/qqUI.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/06/how-did-qq-make-523-million-in-year.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcERno5cCp7ImA9WxdQGEw.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-7842761174326460602</id><published>2008-06-18T14:16:00.002-05:00</published><updated>2008-06-18T14:40:07.428-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-18T14:40:07.428-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Learn Python On Ubuntu Linux FOR FREE</title><content type="html">Dig the repository and you will be able to find some Python caddies. Like this package:

&lt;blockquote&gt;diveintopython&lt;/blockquote&gt;

A Python tutorial written by Mark Pilgrim. There's even a Chinese version in the repository:

&lt;blockquote&gt;diveintopython-zh&lt;/blockquote&gt;

If you are interested in GUI development, check this out:

&lt;blockquote&gt;python-gtk2-tutorial&lt;/blockquote&gt;

Another tutorial on NumPy:

&lt;blockquote&gt;python-numeric-tutorial&lt;/blockquote&gt;

What else? Keep digging!:)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-7842761174326460602?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bLiUvPjhQmNkbRJul2rkzqZiVn0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bLiUvPjhQmNkbRJul2rkzqZiVn0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bLiUvPjhQmNkbRJul2rkzqZiVn0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bLiUvPjhQmNkbRJul2rkzqZiVn0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=EGNNIIUQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=EGNNIIUQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=JYR33hcM"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=YX5aQxSq"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=WsAjRQ0Z"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=WsAjRQ0Z" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=D1VVbo9n"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=D1VVbo9n" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/7842761174326460602/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=7842761174326460602" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/7842761174326460602?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/7842761174326460602?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/uNjxOAABdXs/learn-python-on-ubuntu-linux-for-free.html" title="Learn Python On Ubuntu Linux FOR FREE" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/06/learn-python-on-ubuntu-linux-for-free.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UERHs4eyp7ImA9WxdQFEw.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-7456711375266533716</id><published>2008-06-12T11:31:00.006-05:00</published><updated>2008-06-13T23:53:25.533-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-13T23:53:25.533-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Virtual Machine" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Installing Virtualbox 1.6.2 on Ubuntu 8.04 ( Hardy )</title><content type="html">Apparently Virtualbox has made a good improvement after being taken by Sun. However it is still not mature enough to work out of the box when it is installed on Ubuntu 8.04 in the first place. A little hacking is still required.

First of all, download the full version from the &lt;a href="http://virtualbox.org/wiki/Downloads"&gt;website of Virtualbox&lt;/a&gt; (instead of install the open source version directly from the repository). Install it in a way you like. And hope it works. If it doesn't, carry on reading this.

You need to add your current user to a group named vboxusers, again, in your favorite way. If you don't have one, try this one.
Check if the group exists:
&lt;blockquote&gt;sudo grep vboxusers /etc/group&lt;/blockquote&gt;
If nothing shows up, add it:
&lt;blockquote&gt;sudo addgroup vboxusers&lt;/blockquote&gt;
Now add the user to the group:
&lt;blockquote&gt;usermod -a -G vboxusers $USER&lt;/blockquote&gt;

Now you should at least be able to open Virtualbox properly and install an operating system on it. Let's take Windows XP for an example here, make sure you installed Guest Additions (Devices-Install Guest Additions).

The next step is to authorize the user to use USB.

Edit /etc/init.d/mountdevsubfs.sh with your best editor, make sure the following lines are &lt;span style="font-weight:bold;"&gt;uncommented&lt;/span&gt; 
&lt;blockquote&gt;mkdir -p /dev/bus/usb/.usbfs
domount usbfs “” /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount –rbind /dev/bus/usb /proc/bus/usb &lt;/blockquote&gt;

Create a new group and add the current user to it:
&lt;blockquote&gt;sudo addgroup usbfs
sudo usermod -a -G usbfs $USER&lt;/blockquote&gt;

Then edit /etc/udev/rules.d/40-permissions.rules
Find
&lt;blockquote&gt;LABEL=”usb_serial_start”
ATTRS{idVendor}==”0403″, ATTRS{idProduct}==”6001″, \
, MODE=”0660″, GROUP=”dialout”
LABEL=”usb_serial_end”&lt;/blockquote&gt;
Add GROUP="usbfs" to it, like this:
&lt;blockquote&gt;LABEL=”usb_serial_start”
ATTRS{idVendor}==”0403″, ATTRS{idProduct}==”6001″, \
GROUP="usbfs", MODE=”0660″, GROUP=”dialout”
LABEL=”usb_serial_end”&lt;/blockquote&gt;

Save the file. 
Find out the group id:
&lt;blockquote&gt;grep usbfs /etc/group&lt;/blockquote&gt;
Remember the number within it, for example on this machine, I get the result
&lt;blockquote&gt;vboxusers:x:1003:name&lt;/blockquote&gt;
Thus &lt;blockquote&gt;1003&lt;/blockquote&gt; is the id.

Open /etc/fstab, add the following line to the end:
&lt;blockquote&gt;none /proc/bus/usb usbfs devgid=1003,devmode=664 0 0&lt;/blockquote&gt;

Reboot the host system.

And then you should be able to enjoy the VM with available USB support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-7456711375266533716?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/suWbToo50lvLK6_bfS1NXZ60Vtk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/suWbToo50lvLK6_bfS1NXZ60Vtk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/suWbToo50lvLK6_bfS1NXZ60Vtk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/suWbToo50lvLK6_bfS1NXZ60Vtk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=sUVC1Hqk"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=sUVC1Hqk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=gkXViPPa"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=fhvRMy84"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=gOfANNhs"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=gOfANNhs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=omE0epAF"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=omE0epAF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/7456711375266533716/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=7456711375266533716" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/7456711375266533716?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/7456711375266533716?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/T7MMBXTWD_Q/installing-virtualbox-162-on-ubuntu-804.html" title="Installing Virtualbox 1.6.2 on Ubuntu 8.04 ( Hardy )" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/06/installing-virtualbox-162-on-ubuntu-804.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYCRHk8fCp7ImA9WxdQEkg.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-4332869861475808802</id><published>2008-06-02T03:08:00.005-05:00</published><updated>2008-06-12T01:46:05.774-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-12T01:46:05.774-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C" /><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Vim" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Dynamic Indentation Width In Vim</title><content type="html">How to auto-indent differently when coding in different programming languages ?

I started hacking this problem when I found myself prefer to indent 4 spaces in Python yet 8 for C.

As a Vim user, I do this:

Of course I put this in my vimrc:&lt;blockquote&gt;filetype plugin indent on
&lt;/blockquote&gt;Then I copy
&lt;blockquote&gt;$VIMRUNTIME/indent/python.vim&lt;/blockquote&gt;which is the original indentation setting file for python, to
&lt;blockquote&gt;~/.vim/indent/&lt;/blockquote&gt;Finally, customize it by adding the following lines in to the new copy:&lt;blockquote&gt;setlocal shiftwidth=4
setlocal ts=4
&lt;/blockquote&gt;
The default indentation width in vim is 8 spaces, and when vim detects a Python source file, it automatically changes that to 4 spaces. Problem solved!

A hint about $VIMRUNTIME: you can use this variable IN vim, or find the path it stands for by typing&lt;blockquote&gt;:!ls $VIMRUNTIME
&lt;/blockquote&gt;then hit TAB.


I'm curious if someone else has solved the same problem. What's your solution in vim? How about other editors? IDE?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-4332869861475808802?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/b2DSLJggyKn5xk38P7k41WWWH7o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b2DSLJggyKn5xk38P7k41WWWH7o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/b2DSLJggyKn5xk38P7k41WWWH7o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/b2DSLJggyKn5xk38P7k41WWWH7o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=dHZ2nRZB"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=dHZ2nRZB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=cK6qeUjC"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=djl7cpcq"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=EdMnuWQU"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=EdMnuWQU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=dZF8M40g"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=dZF8M40g" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/4332869861475808802/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=4332869861475808802" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/4332869861475808802?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/4332869861475808802?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/rgf3B1Z_AiE/dynamic-indentation-width-in-vim.html" title="Dynamic Indentation Width In Vim" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/06/dynamic-indentation-width-in-vim.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4CSX47eSp7ImA9WxdQEks.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-388745478333336340</id><published>2008-05-31T00:23:00.003-05:00</published><updated>2008-06-12T03:56:08.001-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-12T03:56:08.001-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="Glade" /><category scheme="http://www.blogger.com/atom/ns#" term="PyGTK" /><title>PyGTK and Glade on Windows</title><content type="html">It's been told that the PyGTK &amp;amp; Glade is a cross-platform developing combo. And there's a good reason to believe that most folks started it from Linux as I did. Well, now it is time to deliver the combo's platform-crossing feature: let's march on to MS Windows.

I tested this on Windows XP and so far everything seemed fine.

To set up the developing environment, several packages are needed. I list their names as well as downloading links below.

&lt;ul&gt;&lt;li style="color: rgb(51, 51, 255);"&gt;&lt;a href="http://downloads.sourceforge.net/gladewin32/gtk-dev-2.12.9-win32-2.exe"&gt;Gtk+ 2.12.9 Development Environment Revision 2&lt;/a&gt;&lt;/li&gt;&lt;li style="color: rgb(51, 51, 255);"&gt;&lt;a href="http://downloads.sourceforge.net/gladewin32/glade-2.12.1-rc1.zip?modtime=1139438298&amp;amp;big_mirror=0"&gt;glade-2.12.1-rc1.zip&lt;/a&gt;&lt;/li&gt;&lt;li style="color: rgb(51, 51, 255);"&gt;&lt;a href="http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi"&gt;Python 2.5.2 Windows installer&lt;/a&gt;&lt;/li&gt;&lt;li style="color: rgb(51, 51, 255);"&gt;&lt;a href="http://ftp.gnome.org/pub/GNOME/binaries/win32/pycairo/1.4/"&gt;PyCairo&lt;/a&gt;&lt;/li&gt;&lt;li style="color: rgb(51, 51, 255);"&gt;&lt;a href="http://ftp.gnome.org/pub/GNOME/binaries/win32/pygobject/2.14/"&gt;PyGObject&lt;/a&gt;&lt;/li&gt;&lt;li style="color: rgb(51, 51, 255);"&gt;&lt;a href="http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.12/"&gt;PyGTK&lt;/a&gt;&lt;/li&gt;&lt;li style="color: rgb(51, 51, 255);"&gt;&lt;a href="http://sourceforge.net/project/showfiles.php?group_id=15583" onclick="window.location='/project/downloading.php?group_id=15583&amp;amp;use_mirror=voxel&amp;amp;filename=py2exe-0.6.6.win32-py2.5.exe&amp;amp;'+Math.floor(Math.random()*100000000); return false;"&gt;py2exe-0.6.6.win32-py2.5.exe&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;    
Assuming you haven't installed any of them before, I would suggest that you download them all (don't install yet). Even if you have, the version might not be guaranteed to work with other components.

I also need to mention py2exe here. It is not essential for the application development. What it does is "compiling" your script into a executable and collecting other related files required by the script together, so that it will be able to run independently on those windows systems where the packages don't exist. Since you can't expect your users to have installed every packages, it indeed roles significantly in this game.

The order of the installation does matter here.

First you need to install &lt;a href="http://downloads.sourceforge.net/gladewin32/gtk-dev-2.12.9-win32-2.exe"&gt;Gtk+ 2.12.9 Development Environment&lt;/a&gt;, this includes GTK+ development environment, libglade and Glade3. However the launcher it creates on your desktop has a little problem: it points to glade-2. You can fix that manually by modify its properties.

Since many tutorials about PyGTK &amp;amp; Glade only apply on glade2, you may want to install &lt;a href="http://downloads.sourceforge.net/gladewin32/glade-2.12.1-rc1.zip?modtime=1139438298&amp;amp;big_mirror=0"&gt;glade-2&lt;/a&gt;. You can decompress the package and copy the files into corresponding path (e.g GTK/bin and GTK/share) if you like.

Next, install &lt;a href="http://www.python.org/ftp/python/2.5.2/python-2.5.2.msi"&gt;Python 2.5&lt;/a&gt;. And then the rest. This is where the order matters. Because the rest of the packages wouldn't be able to detect the right location to go if python was absent.

Now the installation is done. You can open IDLE and try import pygtk, gtk and py2exe to see if everything works. You also should also be able to edit you GUI with Glade now.

Some more words on py2exe. You can find a brief tutorial on its usage &lt;a style="color: rgb(102, 102, 102);" href="http://www.py2exe.org/index.cgi/Tutorial"&gt;[here]&lt;/a&gt;. And how to combine it with PyGTK &lt;a style="color: rgb(102, 102, 102);" href="http://www.py2exe.org/index.cgi/Py2exeAndPyGTK"&gt;[here]&lt;/a&gt;. The second link tells you to copy some stuff from GTK to your executable path, that makes the size of you application way more bigger that it was. Try to remove some of the unrelated files in these folders, like Docs, as long as your executable behaves properly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-388745478333336340?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/bNqLKnGwMLeH4R-xRAXRXZzoscM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bNqLKnGwMLeH4R-xRAXRXZzoscM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/bNqLKnGwMLeH4R-xRAXRXZzoscM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/bNqLKnGwMLeH4R-xRAXRXZzoscM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=lg9W8htw"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=lg9W8htw" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=AQTs5g9K"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=6tgCADu5"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=IbzafzvB"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=IbzafzvB" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=ZfR02IP7"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=ZfR02IP7" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/388745478333336340/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=388745478333336340" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/388745478333336340?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/388745478333336340?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/zL61GGeiRis/pygtk-and-glade-on-windows.html" title="PyGTK and Glade on Windows" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/05/pygtk-and-glade-on-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQBSXwycCp7ImA9WxRbGUw.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-4203278558398253753</id><published>2008-05-29T01:20:00.014-05:00</published><updated>2008-12-10T07:05:58.298-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-10T07:05:58.298-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="Glade" /><category scheme="http://www.blogger.com/atom/ns#" term="PyGTK" /><title>Creating a message box dialog with PyGTK and Glade</title><content type="html">Being a newbie to Python, GTK and Glade, I found it rather enjoyable developing stuff fast and easily with this language/library/tool combination. All you need to do to get a GUI up and running is to "draw" it with Glade and connect it with pygtk.&lt;br /&gt;&lt;br /&gt;What makes it not so perfect is that there's hardly any systematical material online to tell folks how these great things works together. I could only find some separate pieces of information here and there about this, &lt;a style="color: rgb(51, 51, 255);" href="http://danmarner.blogspot.com/2008/05/resources-to-learn-pygtk-python-and.html"&gt;as I wrote before&lt;/a&gt;. Fortunately these pieces information are all great. So I highly recommended those absolute beginners to read &lt;a style="color: rgb(51, 51, 255);" href="http://www.learningpython.com/2006/05/07/creating-a-gui-using-pygtk-and-glade/"&gt;this essay&lt;/a&gt;, to say the least, to get things started.&lt;br /&gt;&lt;br /&gt;Here I'm going to show the way to create a message box, which is probably the most (simple?) commonly used dialog in a GUI. It has a OK button and displays a message you passed. Like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YZGwrGlcsOk/SD5MWRLUPTI/AAAAAAAABxI/55rfrZ5JJ70/s1600-h/Screenshot-dialog1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_YZGwrGlcsOk/SD5MWRLUPTI/AAAAAAAABxI/55rfrZ5JJ70/s320/Screenshot-dialog1.jpg" alt="" id="BLOGGER_PHOTO_ID_5205682164738571570" border="0" /&gt;&lt;/a&gt;When you use it, simply create a instance and pass the message (and the title of the dialog if necessary) to it:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;div style="background-color: rgb(204, 204, 204); color: rgb(0, 0, 0);"&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;1 &lt;/span&gt;&lt;span style="color: rgb(255, 64, 255);"&gt;from&lt;/span&gt; msgBox &lt;span style="color: rgb(255, 64, 255);"&gt;import&lt;/span&gt; messageBox&lt;br /&gt;&lt;span style="color: rgb(255, 255, 0);"&gt;2 &lt;/span&gt;messageBox('&lt;span style="color: rgb(255, 96, 96);"&gt;Guess what? I am a message box!&lt;/span&gt;')&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;How does that look?&lt;br /&gt;&lt;br /&gt;First of all, let's draw the message box out. This is really easy:&lt;br /&gt;&lt;br /&gt;Open Glade2, find "dialog" in the palette and click it. Choose "Standard Button Layout", "OK". After the dialog shows up, click "label" on the pallette and then click on the blank area in the previous dialog window.&lt;br /&gt;&lt;br /&gt;Next, we are going to set up the signals. Thanks to glade, this part becomes so simple in our case that all we need is click the OK button (or, notice that you can always go to View-&gt;Show Widget Tree to focus on the widget you are looking for). In the Properties window, choose "Signals" tab, click on the "..." button after "Signal" entry. Find "clicked" and click "OK". Now don't forget to click "Add" afterwards.&lt;br /&gt;&lt;br /&gt;Notice that here we are using mostly default names: dialog1,okbutton1,label1,etc. And you can always choose your own.&lt;br /&gt;&lt;br /&gt;Now save the project and quit, I name it "msgBox". And you should get a new folder named the same as the project and two files with the name plus suffix .glade and .gladep. If you try to open them with a editor, you will find them just XML files that represent the widget trees and the properties of each widget we created.&lt;br /&gt;&lt;br /&gt;Now type in the following script in a editor and save the file as msgBox.py (line number not included, of course), I'll explain it line by line.&lt;br /&gt;&lt;blockquote&gt;msgBox.py&lt;br /&gt;&lt;div style="background-color: rgb(204, 204, 204); color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;font color="#ffff00"&gt;&amp;nbsp;1 &lt;/font&gt;&lt;font color="#ffff00"&gt;try&lt;/font&gt;:&lt;br /&gt;&lt;font color="#ffff00"&gt;&amp;nbsp;2 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff40ff"&gt;import&lt;/font&gt;&amp;nbsp;pygtk&lt;br /&gt;&lt;font color="#ffff00"&gt;&amp;nbsp;3 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pygtk.require('&lt;font color="#ff6060"&gt;2.0&lt;/font&gt;')&lt;br /&gt;&lt;font color="#ffff00"&gt;&amp;nbsp;4 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff40ff"&gt;import&lt;/font&gt;&amp;nbsp;gtk&lt;br /&gt;&lt;font color="#ffff00"&gt;&amp;nbsp;5 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff40ff"&gt;import&lt;/font&gt;&amp;nbsp;gtk.glade&lt;br /&gt;&lt;font color="#ffff00"&gt;&amp;nbsp;6 &lt;/font&gt;&lt;font color="#ffff00"&gt;except&lt;/font&gt;:&lt;br /&gt;&lt;font color="#ffff00"&gt;&amp;nbsp;7 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;print&lt;/font&gt;&amp;nbsp;'&lt;font color="#ff6060"&gt;Install pygtk,libgtk2.0 and libglade2.0&lt;/font&gt;'&lt;br /&gt;&lt;font color="#ffff00"&gt;&amp;nbsp;8 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ff40ff"&gt;import&lt;/font&gt;&amp;nbsp;os&lt;br /&gt;&lt;font color="#ffff00"&gt;&amp;nbsp;9 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;os.exit(1)&lt;br /&gt;&lt;font color="#ffff00"&gt;10 &lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff00"&gt;11 &lt;/font&gt;&lt;font color="#ffff00"&gt;class&lt;/font&gt;&amp;nbsp;&lt;font color="#00ffff"&gt;messageBox&lt;/font&gt;:&lt;br /&gt;&lt;font color="#ffff00"&gt;12 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;def&lt;/font&gt;&amp;nbsp;&lt;font color="#00ffff"&gt;__init__&lt;/font&gt;(self, lbl_msg = '&lt;font color="#ff6060"&gt;Message here&lt;/font&gt;',&lt;br /&gt;&lt;font color="#ffff00"&gt;13 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dlg_title = ''):&lt;br /&gt;&lt;font color="#ffff00"&gt;14 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.wTree = gtk.glade.XML('&lt;font color="#ff6060"&gt;msgbox.glade&lt;/font&gt;')&lt;br /&gt;&lt;font color="#ffff00"&gt;15 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dlg = self.wTree.get_widget('&lt;font color="#ff6060"&gt;dialog1&lt;/font&gt;')&lt;br /&gt;&lt;font color="#ffff00"&gt;16 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.lbl = self.wTree.get_widget('&lt;font color="#ff6060"&gt;label1&lt;/font&gt;')&lt;br /&gt;&lt;font color="#ffff00"&gt;17 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dlg.set_title(dlg_title) &lt;br /&gt;&lt;font color="#ffff00"&gt;18 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.lbl.set_text(lbl_msg)&lt;br /&gt;&lt;font color="#ffff00"&gt;19 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;handlers = { '&lt;font color="#ff6060"&gt;on_okbutton1_clicked&lt;/font&gt;':self.done }&lt;br /&gt;&lt;font color="#ffff00"&gt;20 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.wTree.signal_autoconnect( handlers )&lt;br /&gt;&lt;font color="#ffff00"&gt;21 &lt;/font&gt;&lt;br /&gt;&lt;font color="#ffff00"&gt;22 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;font color="#ffff00"&gt;def&lt;/font&gt;&amp;nbsp;&lt;font color="#00ffff"&gt;done&lt;/font&gt;(self,w):&lt;br /&gt;&lt;font color="#ffff00"&gt;23 &lt;/font&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;self.dlg.destroy()&lt;br /&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;Line1-9 imports the modules we need. If you've checked the recommended essays in the beginning, you shouldn't have problems with these lines.&lt;br /&gt;&lt;br /&gt;The rest of the code defines a class that calls up our message box dialog.&lt;br /&gt;&lt;br /&gt;Line 12-13: We pass two arguments to the __init__ method: the message you are going to display and the title of the the dialog window.&lt;br /&gt;&lt;br /&gt;Line 14: this is the highlight of the whole point. The method gtk.glade.XML takes the XML file we created with glade, parses it and creats gtk.glade.XML object( which has the widgets tree and some methods ) accordingly.&lt;br /&gt;&lt;br /&gt;Line 15-16 uses the gtk.glade.XML method get_widget to fetch the references of the widgets, whose names are passed as arguments.&lt;br /&gt;&lt;br /&gt;Line 17, as you may guess, sets the title of the dialog window to the name we assigned.&lt;br /&gt;&lt;br /&gt;Line 18 sets the message.&lt;br /&gt;&lt;br /&gt;Line 19-20: remember the signal we set for the OK button? here we bind the signal and its handler in a dictionary and pass it to the method gtk.glade.XML.signal_autoconnect. That means when the GUI releases the signal "on_okbutton1_clicked" (which happens when the OK button is clicked, obviously), the program will call the corresponding method( self.done ).&lt;br /&gt;&lt;br /&gt;Line 22-23: defines the method done, which is our handler of the signal "on_onkbutton_clicked". It does one thing: call the destroy method, which will terminates the dialog.&lt;br /&gt;&lt;br /&gt;A little summary here: we created the GUI object according to the XML files, set up the message we intended to play and make the "OK" button destroys the dialog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now you get msgBox.glade, msgBox.gladep and msgBox.py. Whenever you need a message box in your application, just copy them to your package and take advantage of it as introduced in the beginning. The following is a package of all the files described before as well as a simple example of using the class:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code-of-danmarner.googlecode.com/files/msgBox.zip"&gt;http://code-of-danmarner.googlecode.com/files/msgBox.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-4203278558398253753?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/I0YFOs1yeiEPpwuLwU3297DVZ7E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I0YFOs1yeiEPpwuLwU3297DVZ7E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/I0YFOs1yeiEPpwuLwU3297DVZ7E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/I0YFOs1yeiEPpwuLwU3297DVZ7E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=gVQ65KaD"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=gVQ65KaD" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=DdEm3ZQE"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=aayiqvAr"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=qpYZSA4N"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=qpYZSA4N" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=6OFV8MGF"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=6OFV8MGF" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/4203278558398253753/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=4203278558398253753" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/4203278558398253753?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/4203278558398253753?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/bDU8pFTKVxQ/creating-message-box-with-pygtk-and.html" title="Creating a message box dialog with PyGTK and Glade" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_YZGwrGlcsOk/SD5MWRLUPTI/AAAAAAAABxI/55rfrZ5JJ70/s72-c/Screenshot-dialog1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/05/creating-message-box-with-pygtk-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcFQH45fCp7ImA9WxdREkw.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-8763517164441005146</id><published>2008-05-26T17:58:00.004-05:00</published><updated>2008-05-31T02:13:31.024-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-31T02:13:31.024-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><category scheme="http://www.blogger.com/atom/ns#" term="Glade" /><category scheme="http://www.blogger.com/atom/ns#" term="PyGTK" /><title>Resources to learn PyGTK ( Python ) and Glade</title><content type="html">I've developed a good interest in the combination of Python and Glade. And it did give me some exciting moments creating GUIs so easily and quickly.  I am going to write about it as soon as I feel comfortable playing around this (&lt;span style="font-style: italic;"&gt;update: &lt;a href="http://danmarner.blogspot.com/search/label/Glade"&gt;here they are&lt;/a&gt;!&lt;/span&gt;). Before that, here's a bunch of useful links that I found while digging into it.

&lt;span style="font-weight: bold;"&gt;Great Documentation/Tutorials/Essays on PyGTK's official website:&lt;/span&gt;
&lt;a style="color: rgb(51, 51, 255);" href="http://www.pygtk.org/"&gt;http://www.pygtk.org/&lt;/a&gt;

&lt;span style="font-weight: bold;"&gt;Documentation on Glade's website:&lt;/span&gt;
&lt;a style="color: rgb(51, 51, 255);" href="http://glade.gnome.org/documentation.html"&gt;http://glade.gnome.org/documentation.html&lt;/a&gt;

&lt;span style="font-weight: bold;"&gt;Awesome essays on some awesome blogs:&lt;/span&gt;&lt;span style="font-size:100%;"&gt;
&lt;a style="color: rgb(51, 51, 255);" href="http://www.learningpython.com/2006/05/07/creating-a-gui-using-pygtk-and-glade/" rel="bookmark" title="Permanent Link: Creating a GUI using PyGTK and Glade"&gt;Creating a GUI using PyGTK and Glade&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;
&lt;a style="color: rgb(51, 51, 255);" href="http://www.learningpython.com/2006/05/30/building-an-application-with-pygtk-and-glade/" rel="bookmark" title="Permanent Link: Building an Application with PyGTK and Glade"&gt;Building an Application with PyGTK and Glade&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;
&lt;a style="color: rgb(51, 51, 255);" href="http://www.linuxjournal.com/article/6586"&gt;A Beginner's Guide to Using pyGTK and Glade&lt;/a&gt;&lt;/span&gt;

&lt;span style="font-weight: bold;"&gt;A walkthough on how to get glade work on Win32:&lt;/span&gt;
&lt;a style="color: rgb(51, 51, 255);" href="http://faq.pygtk.org/index.py?req=show&amp;amp;file=faq21.002.htp"&gt;http://faq.pygtk.org/index.py?req=show&amp;amp;file=faq21.002.htp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-8763517164441005146?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RbqkMSHQR-24liiDTTVC4xeBdG0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RbqkMSHQR-24liiDTTVC4xeBdG0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RbqkMSHQR-24liiDTTVC4xeBdG0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RbqkMSHQR-24liiDTTVC4xeBdG0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=xN2vtKZM"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=xN2vtKZM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=dMSTaaK9"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=avJfSQBQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=B9G6f7tl"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=B9G6f7tl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=RIjvImw2"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=RIjvImw2" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/8763517164441005146/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=8763517164441005146" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/8763517164441005146?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/8763517164441005146?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/ctRmmPV9IA0/resources-to-learn-pygtk-python-and.html" title="Resources to learn PyGTK ( Python ) and Glade" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/05/resources-to-learn-pygtk-python-and.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQBSXo-fyp7ImA9WxRbGUw.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-1221010698475700971</id><published>2008-05-19T04:07:00.000-05:00</published><updated>2008-12-10T07:05:58.457-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-10T07:05:58.457-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="OOP" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>A Python illustration of how abstract superclass works</title><content type="html">I made this after reading &lt;span style="font-style: italic;"&gt;Learning Python 3rd Edtion&lt;/span&gt;, Part VI, Page 490.&lt;br /&gt;&lt;br /&gt;The picture shows what happens when a instance's method, which is declared in a superclass and implemented later in a subclass, is called.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YZGwrGlcsOk/SDFB0cDdywI/AAAAAAAABxA/3qcjSgbyxOU/s1600-h/superclass_py_ill.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_YZGwrGlcsOk/SDFB0cDdywI/AAAAAAAABxA/3qcjSgbyxOU/s320/superclass_py_ill.jpg" alt="" id="BLOGGER_PHOTO_ID_5202011413729364738" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-1221010698475700971?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/9C3Ijvukeb4AoAClGFHx0NIn-SQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9C3Ijvukeb4AoAClGFHx0NIn-SQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/9C3Ijvukeb4AoAClGFHx0NIn-SQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/9C3Ijvukeb4AoAClGFHx0NIn-SQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=Jo8BSEXk"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=Jo8BSEXk" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=nqA32YEP"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=oYdCq3YQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=cLH7zLvS"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=cLH7zLvS" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=M6zryKuC"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=M6zryKuC" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/1221010698475700971/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=1221010698475700971" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/1221010698475700971?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/1221010698475700971?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/zWx6sduWnpQ/python-illustration-of-how-abstract.html" title="A Python illustration of how abstract superclass works" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_YZGwrGlcsOk/SDFB0cDdywI/AAAAAAAABxA/3qcjSgbyxOU/s72-c/superclass_py_ill.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/05/python-illustration-of-how-abstract.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQGRns7eCp7ImA9WxdQEkQ.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-1327232815032992637</id><published>2008-05-14T01:19:00.008-05:00</published><updated>2008-06-12T12:38:47.500-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-12T12:38:47.500-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Games" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="wine" /><title>Starcraft Brood War on Ubuntu Hardy Heron ( 8.04 )</title><content type="html">Since the message that Starcraft II is coming out gets around a lot these days, I start to recall all the good time when I was in crazy about Starcraft.

And I did a little more than recalling about it.

I installed it on Ubuntu Linux.

Now I can click on the Starcraft icon and play the newest version of the game anytime I like on my laptop, UNDER LINUX!

My laptop is a Gateway T1616 ( &lt;a href="http://support.gateway.com/s/Mobile/2007/Triton/1014772R/1014772Rsp2.shtml"&gt;Specifications&lt;/a&gt; ). The OS is Ubuntu 8.04 (Hardy Heron).

Here's something you need to do in order to get this:

&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;First of all, get your Starcraft disk &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;font-size:130%;" &gt;image&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-style: italic;"&gt;s&lt;/span&gt; prepared.&lt;/span&gt;&lt;/span&gt;
If you have the CD,put it in your first cdrom and type these in a terminal:
&lt;blockquote&gt;sudo umount /dev/cdrom0
dd if=/dev/cdrom0 of=/your_path/Starcraft_Original.iso
&lt;/blockquote&gt;If you also have the BroodWar CD, go ahead and do the same thing, using a different name for the image file, for instance,Starcraft_Broodwar.iso

Or, you can get the iso images in &lt;a href="http://www.thepiratebay.org/"&gt;other ways&lt;/a&gt;.

You may also need the update patch, which can be found &lt;a href="http://us.blizzard.com/support/article.xml?articleId=21149&amp;amp;rhtml=true"&gt;here&lt;/a&gt;.

Here's what you should get after all, to say the least:
&lt;blockquote&gt;BW-1152.exe
Starcraft_Original.iso
Starcraft_Broodwar.iso
&lt;/blockquote&gt;
&lt;span style="font-weight: bold;font-size:130%;" &gt;Install wine.&lt;/span&gt;
This is easy for Ubuntu users:&lt;blockquote&gt;sudo aptitude update
sudo aptitude upgrade
sudo aptitude install wine
&lt;/blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Install Starcraft.&lt;/span&gt;&lt;/span&gt;
You need to find a place to mount the iso files, I did this:
&lt;blockquote&gt;sudo mkdir /mnt/starcraft
&lt;/blockquote&gt;Mount the original image:
&lt;blockquote&gt;sudo mount -o loop /your_path/Starcraft_Original.iso /mnt/starcraft
&lt;/blockquote&gt;Install the original version:
&lt;blockquote&gt;wine /mnt/starcraft/install.exe
&lt;/blockquote&gt;Of course you need a CD-Key here. I suggest that you install it with the default settings.

Then, mount the Broodwar image, and install it:
&lt;blockquote&gt;sudo mount -o loop /your_path/Starcraft_Broodwar.iso /mnt/starcraft
wine /mnt/starcraft/install.exe
&lt;/blockquote&gt;Update the game to the newest version:
&lt;blockquote&gt;wine /your_path/BW-1152.exe
&lt;/blockquote&gt;The installation of the game is easy enough to be skipped, I think.

You should be able to find the game under &lt;span style="font-style: italic;"&gt;Start-Wine-Programs-Starcraft&lt;/span&gt; now. However, it requires the CD.

&lt;span style="font-weight: bold;font-size:130%;" &gt;Start playing the game.&lt;/span&gt;

Add the path you mount your image files as a device in wine:
&lt;blockquote&gt;cd ~/.wine/dosdevices/
ln -s /mnt/starcraft d:
&lt;/blockquote&gt;Here, I hadn't added any wine devices so I used 'd:'.

Mount the image file (if it is not mounted yet):&lt;blockquote&gt;sudo mount -o loop /your_path/Starcraft_Broodwar.iso /mnt/starcraft
&lt;/blockquote&gt;And then enjoy the game!


Well, this is almost the end of the story. At last here's something for those who don't want to do the mounting work every time they want to play.

Edit &lt;span style="font-style: italic;"&gt;/etc/fstab&lt;/span&gt; , so that the image will be mounted automatically when the OS starts. Add this in a new line:
&lt;blockquote&gt;/your_path/Starcraft_Broodwar.iso /mnt/starcraft iso9660 loop 0 0&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-1327232815032992637?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/xMLU30KYmkpUei9FWcpvQN8Zp4Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xMLU30KYmkpUei9FWcpvQN8Zp4Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/xMLU30KYmkpUei9FWcpvQN8Zp4Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/xMLU30KYmkpUei9FWcpvQN8Zp4Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=LA1AaewR"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=LA1AaewR" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=PBm3R6MB"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=xjw77nnl"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=tPuOcPHc"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=tPuOcPHc" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=H011Gw8b"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=H011Gw8b" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/1327232815032992637/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=1327232815032992637" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/1327232815032992637?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/1327232815032992637?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/uizKeSD4SvE/starcraft-brood-war-on-ubuntu-hardy.html" title="Starcraft Brood War on Ubuntu Hardy Heron ( 8.04 )" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/05/starcraft-brood-war-on-ubuntu-hardy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQBQHszeyp7ImA9WxdTFk4.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-1063894850018059776</id><published>2008-05-12T19:11:00.003-05:00</published><updated>2008-05-12T19:25:51.583-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-12T19:25:51.583-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><title>Downloading all links on a web page in Linux</title><content type="html">In a terminal:

&lt;blockquote&gt;$wget -np -r -P &lt;span style="font-style:italic;"&gt;path&lt;/span&gt; &lt;span style="font-style:italic;"&gt;URL&lt;/span&gt;&lt;/blockquote&gt;

&lt;span style="font-style:italic;"&gt;path&lt;/span&gt; is the path where you want everything to be saved, while &lt;span style="font-style:italic;"&gt;URL&lt;/span&gt; is the web page from which you want to download stuff as well as itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-1063894850018059776?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Vpep-3X9RFiXReXqIaTdzLtvfw0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vpep-3X9RFiXReXqIaTdzLtvfw0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Vpep-3X9RFiXReXqIaTdzLtvfw0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Vpep-3X9RFiXReXqIaTdzLtvfw0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=JsvXwBPX"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=JsvXwBPX" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=j77UWbu4"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=YF754cST"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=qtAdmj0p"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=qtAdmj0p" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=hJwqIArw"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=hJwqIArw" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/1063894850018059776/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=1063894850018059776" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/1063894850018059776?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/1063894850018059776?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/6DxFSA1WN-4/downloading-all-links-on-web-page-in.html" title="Downloading all links on a web page in Linux" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/05/downloading-all-links-on-web-page-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMBSHc-fip7ImA9WxdTEUg.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-170683328601580067</id><published>2008-05-07T04:58:00.001-05:00</published><updated>2008-05-07T05:00:59.956-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-07T05:00:59.956-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Python" /><title>Converting other encodings into Unicode with Python</title><content type="html">Recently I need to convert some files encoded with gb2312 into utf-8, here's the way to achieve this in Python:
&lt;blockquote&gt;
# Suppose gb2312_line is a string encoded in gb2312,utf8_line is the converting result.

utf8_line = gb2312_line.decode('gb2312').encode('utf8')&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-170683328601580067?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RbYQltT-x7O8cvEpDcUdb4B5FAw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RbYQltT-x7O8cvEpDcUdb4B5FAw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RbYQltT-x7O8cvEpDcUdb4B5FAw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RbYQltT-x7O8cvEpDcUdb4B5FAw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=2pIf3ksl"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=2pIf3ksl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=l5IFRELB"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=ioQjtLlQ"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=mEW4NECx"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=mEW4NECx" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=IyBlD5Qu"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=IyBlD5Qu" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/170683328601580067/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=170683328601580067" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/170683328601580067?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/170683328601580067?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/QpVXVRpHXjA/converting-other-encodings-into-unicode.html" title="Converting other encodings into Unicode with Python" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/05/converting-other-encodings-into-unicode.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkICQns8fSp7ImA9WxdSEUU.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-6017455452015883247</id><published>2008-05-05T20:06:00.008-05:00</published><updated>2008-05-19T04:16:03.575-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-19T04:16:03.575-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Hardy Heron" /><category scheme="http://www.blogger.com/atom/ns#" term="Installation" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Installing Ubuntu 8.04 (Hardy Heron) From Hard Disk</title><content type="html">This is a way to install Ubuntu without burning a installation CD.

&lt;a href="http://www.ubuntu.com/getubuntu/download"&gt;Download the alternative desktop CD&lt;/a&gt; you need(x86 or amd64) from the &lt;a href="http://www.ubuntu.com/getubuntu/download"&gt;ubuntu website&lt;/a&gt;.

Prepare a swap partition(if you haven't had one), a/some partition(s) for the new installation. A good tool to do this is &lt;a href="http://gparted.sourceforge.net/"&gt;GParted&lt;/a&gt;.

Next thing to do is to download two special files for ubuntu hard disk installation: initrd.gz and &lt;span style="font-style: italic;"&gt;vmlinuz&lt;/span&gt;. From

x86:
&lt;a href="http://archive.ubuntu.com/ubuntu/dists/hardy/main/installer-i386/current/images/hd-media/"&gt;http://archive.ubuntu.com/ubuntu/dists/hardy/main/installer-i386/current/images/hd-media/&lt;/a&gt;

amd64:
&lt;a href="http://archive.ubuntu.com/ubuntu/dists/hardy/main/installer-amd64/current/images/hd-media/"&gt;http://archive.ubuntu.com/ubuntu/dists/hardy/main/installer-amd64/current/images/hd-media/&lt;/a&gt;

Make sure the file names are &lt;span style="font-style: italic;"&gt;initrd.gz&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;vmlinuz&lt;/span&gt;. Firefox added a .htm extension automatically on vmlinuz when I downloaded it.

Place the two files as well as the iso file in a partition which is &lt;span style="font-weight: bold; color: rgb(255, 102, 102);"&gt;different&lt;/span&gt; from the one you intend to install the new system. &lt;span style="font-weight: bold;"&gt;Attention: this is very import, or the installation will fail because it tries to remove the needed files during the process.&lt;/span&gt;

For example, you want to install ubuntu on sda8, and you store the files mentioned above in &lt;span style="font-style: italic;"&gt;sda7&lt;/span&gt;, under &lt;span style="font-style: italic;"&gt;/path/&lt;/span&gt; .

If you are not familiar with the partition naming convention for linux, you may want to read &lt;a href="http://tldp.org/HOWTO/html_single/Partition/#devices"&gt;this &lt;/a&gt;first.

Make sure you have a working &lt;span style="font-weight: bold;"&gt;GRUB&lt;/span&gt;. It could be the one you are using to boot existing operating systems, or one on a live CD. For windows users, get a &lt;a href="https://gna.org/projects/grub4dos/"&gt;grub4dos&lt;/a&gt;

Reboot the box, when GRUB shows up to let you choose which system to boot, press c. You will find yourself in command line with a leading
&lt;blockquote&gt;grub&gt;
&lt;/blockquote&gt;For those who don't know, grub counts hard disks and partitions from 0, so the third partition on the second hard disk is (hd1,2).

Type in the command as follows (under the previous path assumption):&lt;blockquote&gt;root (hd0,6)
kernel (hd0,6)/path/vmlinuz
initrd (hd0,6)/path/initrd.gz
boot
&lt;/blockquote&gt;Then you will forward into the normal installation process. And that is the end of this story.

Enjoy your Hardy Heron!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-6017455452015883247?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/emUyapwwuGUCHhVV4BeNDC1GfvU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/emUyapwwuGUCHhVV4BeNDC1GfvU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/emUyapwwuGUCHhVV4BeNDC1GfvU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/emUyapwwuGUCHhVV4BeNDC1GfvU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=jPZwADkd"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=jPZwADkd" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=5LVNwwgx"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=qdj1udW6"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=zpTD5ezr"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=zpTD5ezr" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=D7GfbT9D"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=D7GfbT9D" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/6017455452015883247/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=6017455452015883247" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/6017455452015883247?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/6017455452015883247?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/6PfqoF_vOWE/installing-ubuntu-hardy-heron-from-hard.html" title="Installing Ubuntu 8.04 (Hardy Heron) From Hard Disk" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/05/installing-ubuntu-hardy-heron-from-hard.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8HSX0_fCp7ImA9WxZbFEo.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-3917343665860716574</id><published>2008-04-17T19:21:00.002-05:00</published><updated>2008-04-17T19:33:58.344-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-17T19:33:58.344-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Update your Ubuntu from 7.10 to 8.04, NOW!</title><content type="html">It's time.
Back up all your important files.
Make sure you have at least 1GB space on the Ubuntu partition.
Install update-manager in a terminal if you don't have it:
&lt;blockquote&gt;sudo aptitude install update-manager&lt;/blockquote&gt;Stay in the terminal:
&lt;blockquote&gt;update-manager -c -d&lt;/blockquote&gt;There's no need to use sudo here.
Update Manager will tell you that Ubuntu 8.04 is available now!
Don't hesitate to click the button "update"!
Next, you will see a release candidate for "Hardy Heron", feel free to neglect it (or read it, if you can wait), click the button "Upgrade".
There's not much left to do but wait in the next couple of hours. Except that you need to click "Yes" when the manager ask you about changing source.list.
When it almost comes to the end, a window asking if you want to delete the old packages, let's call it "Remove".
Well, you need to restart your machine before start exploring Hardy Heron.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-3917343665860716574?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/C79dGNFLadP0AH8p13A1hHm6tmI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C79dGNFLadP0AH8p13A1hHm6tmI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/C79dGNFLadP0AH8p13A1hHm6tmI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/C79dGNFLadP0AH8p13A1hHm6tmI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=Q8ua22zn"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=Q8ua22zn" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=5B9ZHbFo"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=zTyaVJN4"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=aadC6sIs"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=aadC6sIs" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=oZPuj2Fb"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=oZPuj2Fb" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/3917343665860716574/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=3917343665860716574" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/3917343665860716574?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/3917343665860716574?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/A0vUe5L7Fj0/update-your-ubuntu-from-710-to-804-now.html" title="Update your Ubuntu from 7.10 to 8.04, NOW!" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/04/update-your-ubuntu-from-710-to-804-now.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQBSXg9eyp7ImA9WxRbGUw.&quot;"><id>tag:blogger.com,1999:blog-2854746392031016967.post-912540308020721639</id><published>2008-04-07T21:39:00.010-05:00</published><updated>2008-12-10T07:05:58.663-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-10T07:05:58.663-06:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Linux Mint" /><category scheme="http://www.blogger.com/atom/ns#" term="iTunes" /><category scheme="http://www.blogger.com/atom/ns#" term="Linux" /><category scheme="http://www.blogger.com/atom/ns#" term="iPod" /><category scheme="http://www.blogger.com/atom/ns#" term="Apple" /><category scheme="http://www.blogger.com/atom/ns#" term="Gateway T1616" /><category scheme="http://www.blogger.com/atom/ns#" term="Ubuntu" /><title>Make your evil iPod nano 3rd generation work with Linux</title><content type="html">Well, for those who have a neutral attitude to iPod, and who use just Linux as personal operation system, I'm one of you. I think I don't need to say a lot about the reasons why I name this tiny MP3 player "evil".&lt;br /&gt;&lt;br /&gt;For those who are not in the same situation as us, here's the story.&lt;br /&gt;&lt;br /&gt;I bought this iPod nano 3rd gen from the official website, and happily received it before the tragedy started. I knew that it works with iTunes, but there's not a Linux version of that. I tried installing the newest iTunes with wine, however, the installation progress told me that I can't do this on linux. I download an old version and wine worked in installing it this time. Everything looked fine until I realized that this iTunes could do nothing but play music files. It didn't detect iPod nano 3rd gen at all.&lt;br /&gt;&lt;br /&gt;Then I updated rhythmbox, which is installed by default in Ubuntu. Amazingly it recognized iPod and was able to transfer mp3 files into it. Although there were still some problem on mp3 tag editing, I did enjoyed few days driving iPod with Ubuntu. Later I learned that a newer version of Amarok could the samething.&lt;br /&gt;&lt;br /&gt;But if that had been the ending, I wouldn't call it a tragedy!&lt;br /&gt;&lt;br /&gt;The ending started on the day when I helped one of my friend install the newest iTunes on a Windows laptop.  I plugged my iPod 3rd gen on the machine, iTunes found it, and told me that something is wrong with it, and then iTunes downloaded something sized around 50MB, redetected iPod, and I found all mp3 as well as all the game records disappeared in the player. Later, as you may expected, rhythmbox/Amarok stopped working on it. Every time after I tried to transfer something from Linux, the player just didn't display it. And iTunes on other machine would told me the same story that I needed to download/install that 50MB package.&lt;br /&gt;&lt;br /&gt;Good job, Jobs!&lt;br /&gt;&lt;br /&gt;But, wait.&lt;br /&gt;&lt;br /&gt;VMware come to the rescue!&lt;br /&gt;&lt;br /&gt;I'm not a Linux purist, nor am I a hard-drive-space-grubber. If you mind spending 5 GB on your hard drive to get the job done dirtily, don't waste time reading this post then. For the rest of you, let's start rocking!&lt;br /&gt;&lt;br /&gt;Actually there's not much left to say. Here's all: Install &lt;a href="http://communities.vmware.com/community/beta/workstation6.5"&gt;VMware workstation&lt;/a&gt; -- Windows -- &lt;a href="http://www.apple.com/itunes/download/"&gt;iTunes&lt;/a&gt; .&lt;br /&gt;&lt;br /&gt;After that you'll get a virtual machine running on Linux, and a iTunes running in the virtual machine. Theoretically, it's possible to take advantage of the feature "Unity" in the new VMware workstation. Thus, iTunes would look just as a native application when working. But I haven't succeeded in doing that yet.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YZGwrGlcsOk/R_sR3mctqEI/AAAAAAAABws/c1POjqRNd0M/s1600-h/tee.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_YZGwrGlcsOk/R_sR3mctqEI/AAAAAAAABws/c1POjqRNd0M/s320/tee.jpg" alt="" id="BLOGGER_PHOTO_ID_5186759042758715458" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here's a pic I found: Windows XP in VMware with Unity, on Linux Desktop.&lt;br /&gt;&lt;br /&gt;My test is taken under:&lt;br /&gt;&lt;br /&gt;OS: &lt;span style="font-weight: bold;"&gt;Linux Mint 4.0&lt;/span&gt; (&lt;span style="font-weight: bold;"&gt;Ubuntu&lt;/span&gt; Based)&lt;br /&gt;&lt;br /&gt;Laptop: &lt;span style="font-weight: bold;"&gt;Gateway T1616&lt;/span&gt; (See &lt;a href="http://danmarner.blogspot.com/2008/03/linux-ming-working-on-gateway-t1616.html"&gt;how to drive everything out of box&lt;/a&gt;)&lt;br /&gt;Desktop PC: Dell Dimension E510&lt;br /&gt;&lt;br /&gt;It's really easy stuff.&lt;br /&gt;&lt;br /&gt;1 &lt;a style="font-weight: bold;" href="http://communities.vmware.com/community/beta/workstation6.5"&gt;Download VMware workstation&lt;/a&gt;, whose 6.5 Beta version is under testing. And don't forget the &lt;span style="font-weight: bold; font-style: italic;"&gt;Serial Number&lt;/span&gt; given on the &lt;a href="http://communities.vmware.com/community/beta/workstation6.5"&gt;webpage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;2 &lt;span style="font-weight: bold;"&gt;Install VMware&lt;/span&gt;:&lt;br /&gt;&lt;blockquote&gt;cd the_path_where_VMware_lies (e.g /home/home)&lt;br /&gt;tar xzvf VMware-workstation-e.x.p-84113.i386.tar.gz&lt;br /&gt;cd vmware-distrib&lt;br /&gt;sudo ./vmware-install.pl&lt;br /&gt;&lt;/blockquote&gt;3 &lt;span style="font-weight: bold;"&gt;Imput the &lt;span style="font-style: italic;"&gt;Serial Number&lt;/span&gt;&lt;/span&gt;. You will find the option in &lt;span style="font-style: italic;"&gt;Help&lt;/span&gt; menu.&lt;br /&gt;&lt;br /&gt;4 &lt;span style="font-weight: bold;"&gt;Build a new virtual machine&lt;/span&gt;. Once VMware starts, press the button "&lt;span style="font-style: italic;"&gt;Creat a new virtual machine&lt;/span&gt;" under the &lt;span style="font-style: italic;"&gt;Home&lt;/span&gt; tab. Leave everything as &lt;span style="font-style: italic;"&gt;default&lt;/span&gt; on the first page, go &lt;span style="font-style: italic;"&gt;next&lt;/span&gt; until the third page, where you choose the edition of windows which you are going to install. Name the system and choose its path on the next page. The next thing is to set the space for it. Let's give it 5GB (4 might be work ,too, but no guarantee here). Then you will be end up getting a virtual machine with 256MB memory, NAT network interface with the host system, and a share to all the DVD Rom,USB Controller,etc.  It is actually just a (or more) file(s) on your linux machine. It won't have any infuence to the host system besides consuming some space on the hard drive.&lt;br /&gt;&lt;br /&gt;5 &lt;span style="font-weight: bold;"&gt;Install Windows on the virtual machine&lt;/span&gt;. Put your installation disc into the DVD/CD ROM, press "&lt;span style="font-style: italic;"&gt;Power on this virtual machine&lt;/span&gt;" on the tab of your newly built "PC". Then you will find yourself in regular Windows installation process. I didn't meet any difficulty during this step. VMware tells me that the Webcam/Sound/Wireless on &lt;span style="font-weight: bold;"&gt;Gateway T1616&lt;/span&gt; all work for the virtual PC when Windows first starts.&lt;br /&gt;&lt;br /&gt;6 &lt;span style="font-weight: bold;"&gt;Install VMware Tools&lt;/span&gt;. Make sure the virtual PC is &lt;span style="font-style: italic;"&gt;on&lt;/span&gt;. Choose from menu &lt;span style="font-style: italic;"&gt;VM-Install VMware Tools&lt;/span&gt;. The virtual machine will start a process installing a series of things. Just press &lt;span style="font-style: italic;"&gt;next&lt;/span&gt; or &lt;span style="font-style: italic;"&gt;OK&lt;/span&gt; if it stops anyhow. After this is done. You will find the virtual machine working faster. And you may also want to reset the resolution of the virtual screen.&lt;br /&gt;&lt;br /&gt;7 &lt;a style="font-weight: bold;" href="http://www.apple.com/itunes/download/"&gt;Download iTunes&lt;/a&gt;, save the installation file in a certain place in the host system (linux), say, &lt;span style="font-style: italic; font-weight: bold;"&gt;PATH_A&lt;/span&gt;&lt;span&gt;.&lt;br /&gt;&lt;br /&gt;8 &lt;span style="font-weight: bold;"&gt;Set the shared folder for the host PC and virtual PC&lt;/span&gt;. &lt;span style="font-style: italic;"&gt;Poweroff&lt;/span&gt; the virtual PC first (Ctrl + Alt to get the mouse out of the virtual PC, for those who hasn't figured out).  Press "&lt;span style="font-style: italic;"&gt;Edit Virtual machine settings&lt;/span&gt;". Click the &lt;span style="font-style: italic;"&gt;option&lt;/span&gt; tab, choose "&lt;span style="font-style: italic;"&gt;Shared folders&lt;/span&gt;". Put "&lt;span style="font-style: italic;"&gt;Always enabled&lt;/span&gt;" on the right. Press &lt;span style="font-style: italic;"&gt;Add&lt;/span&gt;, put a name in Name, say, &lt;span style="font-style: italic; font-weight: bold;"&gt;PATH_B&lt;/span&gt;. And put &lt;span style="font-weight: bold; font-style: italic;"&gt;PATH_A&lt;/span&gt; in "&lt;span style="font-style: italic;"&gt;Host Path&lt;/span&gt;". Press OK.&lt;br /&gt;&lt;br /&gt;9 &lt;span style="font-weight: bold;"&gt;Install iTunes&lt;/span&gt;. Start the virtual machine. The Installation file for iTunes will be in the path "&lt;span style="font-style: italic;"&gt;\\.host\Shared Folders\PATH_B&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;10 &lt;span style="font-weight: bold;"&gt;Plug in iPod nano 3rd generation, the virtual machine should be able to detect it automatically, just as it happens in a real machine&lt;/span&gt;. Actually if you use the "&lt;span style="font-style: italic;"&gt;Exlusive Mode&lt;/span&gt;", it feels exactly the same as if the system is on your host machine.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Since then, iPod nano 3rd generation, though still evil, is again available for me!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2854746392031016967-912540308020721639?l=danmarner.blogspot.com'/&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vQj0GH5fF0iEINQSEBJaQbuj_hM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vQj0GH5fF0iEINQSEBJaQbuj_hM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vQj0GH5fF0iEINQSEBJaQbuj_hM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vQj0GH5fF0iEINQSEBJaQbuj_hM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=M4nQpLeC"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=M4nQpLeC" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=gITkR9E0"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=52" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=DBbXmZjf"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?d=42" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=0lEmdiNO"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=0lEmdiNO" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/DaNmarner?a=n1EebnYb"&gt;&lt;img src="http://feeds.feedburner.com/~f/DaNmarner?i=n1EebnYb" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://danmarner.blogspot.com/feeds/912540308020721639/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=2854746392031016967&amp;postID=912540308020721639" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/912540308020721639?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/2854746392031016967/posts/default/912540308020721639?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DaNmarner/~3/MjMXLFHz_bo/make-your-evil-ipod-nano-3rd-generation.html" title="Make your evil iPod nano 3rd generation work with Linux" /><author><name>DaNmarner</name><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="01517398000848668185" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_YZGwrGlcsOk/R_sR3mctqEI/AAAAAAAABws/c1POjqRNd0M/s72-c/tee.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://danmarner.blogspot.com/2008/04/make-your-evil-ipod-nano-3rd-generation.html</feedburner:origLink></entry></feed>
