<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Thin &amp; Light</title>
	
	<link>http://thinlight.org</link>
	<description>Passion for the web</description>
	<lastBuildDate>Tue, 26 Mar 2013 02:48:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/thinlight" /><feedburner:info uri="thinlight" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>thinlight</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/thinlight" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fthinlight" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:browserFriendly>My blog is mainly about web development and other computer related technologies. Welcome to subscribe!</feedburner:browserFriendly><item>
		<title>Streamline Evernote Experience with Keyboard Shortcuts</title>
		<link>http://thinlight.org/2012/12/28/streamline-evernote-experience-with-keyboard-shortcuts/</link>
		<comments>http://thinlight.org/2012/12/28/streamline-evernote-experience-with-keyboard-shortcuts/#comments</comments>
		<pubDate>Sat, 29 Dec 2012 03:29:24 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=162</guid>
		<description><![CDATA[After upgrading Evernote to version 5 on Mac, I found that they completely revamped the interface with a new sidebar and a new shiny editor. It looks more beautiful but I felt confusing because it&#8217;s too different from last version. The first thing I did was to close the guide and switch to the old [...]]]></description>
				<content:encoded><![CDATA[<p>After upgrading Evernote to version 5 on Mac, I found that they completely revamped the interface with a new sidebar and a new shiny editor. It looks more beautiful but I felt confusing because it&#8217;s too different from last version.</p>
<p><img src="http://thinlight.org/wp-content/uploads/2012/12/Screen-Shot-2012-12-29-at-10.38.05-AM.png" alt="Evernote snippet view" width="226" height="206" class="alignright size-full wp-image-163" /></p>
<p>The first thing I did was to close the guide and switch to the old style snippet view. This way it looks a bit familiar to me. But the new sidebar is nearly useless. I used to switch to different notebooks from the old sidebar because there&#8217;s a list of all notebooks. Now the new sidebar only lets you choose recent notes, and switch among notes, notebooks, tags and other views. If you want to switch to another notebook, you have to click the notebook title above the notes list &#8211; one more click!</p>
<p><span id="more-162"></span></p>
<p>So I thought about using shortcuts to simplify the actions needed. Luckily and unexpectedly, the new Evernote has a complete list of shortcuts.</p>
<p>You don&#8217;t have to google for it. What you need to do to find all these goodies is just to click each menu item (especially View, Note, Format) of Evernote, and all the shortcuts are shown alongside the actions.</p>
<p>So to select a notebook with Evernote 5, you just need to press <strong>⌘-J</strong>, type in a few words and use arrow keys to navigate the list if necessary. You don&#8217;t even need the mouse or trackpad! If you want to further edit a note, just navigate to it using arrow keys and press <strong>⌘-L</strong> and the note title gets the input focus. Press <strong>Enter</strong>, and the note editor gets focused.</p>
<p>Other useful shortcuts I just learned:</p>
<ul>
<li>⇧-⌘-H &#8212; Insert horizontal rule. I use horizontal rules a lot to mark section beginnings in notes.</li>
<li>⇧-⌘-U &#8212; Unordered list</li>
<li>⇧-⌘-O &#8212; Ordered list</li>
<li>⌘-K &#8212; Create link. You can select some text and it will become the anchor text.</li>
</ul>
<p>Now Evernote works more smoothly for geeks, right? You may argue that other apps like Notational Velocity or nvALT are more geeky, but the best part of Evernote is that you never need to think about/take care of synchronization or backup, yet you can access your notes anywhere, from any device.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=H_1U4BCjyMQ:llA1h0QYAFs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=H_1U4BCjyMQ:llA1h0QYAFs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=H_1U4BCjyMQ:llA1h0QYAFs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=H_1U4BCjyMQ:llA1h0QYAFs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=H_1U4BCjyMQ:llA1h0QYAFs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=H_1U4BCjyMQ:llA1h0QYAFs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=H_1U4BCjyMQ:llA1h0QYAFs:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2012/12/28/streamline-evernote-experience-with-keyboard-shortcuts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trello – Great Collaboration and Project Mangement Tool</title>
		<link>http://thinlight.org/2012/08/11/trello-great-collaboration-and-project-mangement-tool/</link>
		<comments>http://thinlight.org/2012/08/11/trello-great-collaboration-and-project-mangement-tool/#comments</comments>
		<pubDate>Sat, 11 Aug 2012 11:27:36 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=157</guid>
		<description><![CDATA[Recently my organization started to use Trello to track our projects. We already had many tools to help manage our ongoing/planned projects and related issues. We even developed several tools ourselves to do various jobs such as time tracking, request queue processing, etc. I was a little resistent when they let me put my projects [...]]]></description>
				<content:encoded><![CDATA[<p>Recently my organization started to use <a href="https://trello.com/" target="_blank">Trello</a> to track our projects. We already had many tools to help manage our ongoing/planned projects and related issues. We even developed several tools ourselves to do various jobs such as time tracking, request queue processing, etc.</p>
<p>I was a little resistent when they let me put my projects into it. With so many tools messing my mind, I don&#8217;t know where to look for information that matters. But Trello is the kind of product that you can&#8217;t help using, as it presents a brand new way of project management, tracking and team collaboration. Like iPhone reinvented smart phones. Like flickr introduced a new approach to online photo albums.</p>
<p><span id="more-157"></span></p>
<p>After visiting the account I was forced to create several times, I started to add items into the lists. The interface was so neat and it&#8217;s natural to add something into the lists. The visual effect of moving an item, which I believe was implemented using HTML 5, was fancy, but not too fancy to be annoying.</p>
<p>At first it only seemed to be some lists with items, and you could move things around. But after checking out the details of an item, I found it included a rich set of features for project tracking. You can set a due date, and the system will label the item with some color indicating the closeness. You can filter the items by a team member and see what he&#8217;s up to. Each item even can have its own checklists and the interface will show the completeness on the card.</p>
<p>Give it a try now if you didn&#8217;t already!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=dCWjwgocpAU:EcN7GO4RChs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=dCWjwgocpAU:EcN7GO4RChs:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=dCWjwgocpAU:EcN7GO4RChs:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=dCWjwgocpAU:EcN7GO4RChs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=dCWjwgocpAU:EcN7GO4RChs:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=dCWjwgocpAU:EcN7GO4RChs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=dCWjwgocpAU:EcN7GO4RChs:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2012/08/11/trello-great-collaboration-and-project-mangement-tool/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Postfix – Only Allow Whitelisted Recipient Domains</title>
		<link>http://thinlight.org/2012/03/10/postfix-only-allow-whitelisted-recipient-domains/</link>
		<comments>http://thinlight.org/2012/03/10/postfix-only-allow-whitelisted-recipient-domains/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 04:34:46 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=155</guid>
		<description><![CDATA[We have a test environment with real user data, and during testing, the servers may send emails to these real users. But we definitely don&#8217;t want our users to receive those test emails, since they&#8217;ll be totally confused and get a bad feeling about our service. Yet we want the emails sent to our company&#8217;s [...]]]></description>
				<content:encoded><![CDATA[<p>We have a test environment with real user data, and during testing, the servers may send emails to these real users. But we definitely don&#8217;t want our users to receive those test emails, since they&#8217;ll be totally confused and get a bad feeling about our service. Yet we want the emails sent to our company&#8217;s domain to be delivered successfully, so we can test with our work email address.</p>
<p>One solution is update the database and change all user emails to dummy ones. However this requires one  more step each time the development database is refreshed with real data.</p>
<p><span id="more-155"></span></p>
<p>The solution I used is to setup a Postfix SMTP server which only allows several whitelisted domains. The configuration is quite simple.</p>
<ol>
<li>Add this into main.cf:
<pre><code>smtpd_recipient_restrictions = check_recipient_access hash:/etc/postfix/recipient_domains, reject</code></pre>
</li>
<li>/etc/postfix/recipient_domains is the whitelist file:
<pre><code>mycompany.com OK
anotherdomain.com OK</code></pre>
</li>
<li>Generate hash file: <code>postmap /etc/postfix/recipient_domains</code></li>
<li>Restart postfix service</li>
</ol>
<p>Now try sending an email to a domain not in the whitelist, like <code>mail -s "Test email" someone@gmail.com</code>. Look into /var/log/maillog and you will find something like that:</p>
<blockquote><p>NOQUEUE: reject: RCPT from &#8230;: 554 5.7.1 &lt;someone@gmail.com&gt;: Recipient address rejected: Access denied;&#8230;</p></blockquote>
<p>Then on all development servers, configure to use this postfix server as SMTP relay server. This is simple even with sendmail &#8211; the &#8220;SMART_HOST&#8221; option.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=MCuHF9K4Nk0:ETV_gnGpaOk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=MCuHF9K4Nk0:ETV_gnGpaOk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=MCuHF9K4Nk0:ETV_gnGpaOk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=MCuHF9K4Nk0:ETV_gnGpaOk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=MCuHF9K4Nk0:ETV_gnGpaOk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=MCuHF9K4Nk0:ETV_gnGpaOk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=MCuHF9K4Nk0:ETV_gnGpaOk:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2012/03/10/postfix-only-allow-whitelisted-recipient-domains/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Evernote Mac Needs Improvements</title>
		<link>http://thinlight.org/2012/02/25/evernote-mac-needs-improvements/</link>
		<comments>http://thinlight.org/2012/02/25/evernote-mac-needs-improvements/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 09:40:27 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=151</guid>
		<description><![CDATA[To the left is a screenshot I took when Evernote Mac client was upgrading itself. Quite stupid isn&#8217;t it? It also bothers me that searching is not so convenient. I don&#8217;t know if developers of this software actually use it or not. When I need to search for something, I need to use mouse to [...]]]></description>
				<content:encoded><![CDATA[<p><img src="http://thinlight.org/wp-content/uploads/2012/02/Screen-shot-2012-02-06-at-2.26.34-PM.png" alt="Evernote Mac upgrading" title="Evernote Mac" width="424" height="169" class="alignleft size-full wp-image-154" /></p>
<p>To the left is a screenshot I took when Evernote Mac client was upgrading itself. Quite stupid isn&#8217;t it?</p>
<p>It also bothers me that searching is not so convenient. I don&#8217;t know if developers of this software actually use it or not. When I need to search for something, I need to use mouse to set focus to the search box, and then enter the phrase I want to search.</p>
<p>When I want to stop searching and clear the search box, I have to move my mouse and click the cross icon to the right of the search box.</p>
<p>I mean, for productivity&#8217;s sake, why not give it a shortcut key? In Adium, I can easily search contacts by directly typing, and stop searching by pressing ESC. That&#8217;s the key feature that allures me even if it&#8217;s less stable than the Messenger made by Microsoft.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=AuKQgD-H3co:wlynVh-H0bk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=AuKQgD-H3co:wlynVh-H0bk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=AuKQgD-H3co:wlynVh-H0bk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=AuKQgD-H3co:wlynVh-H0bk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=AuKQgD-H3co:wlynVh-H0bk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=AuKQgD-H3co:wlynVh-H0bk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=AuKQgD-H3co:wlynVh-H0bk:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2012/02/25/evernote-mac-needs-improvements/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I Don’t Need 3G on Kindle</title>
		<link>http://thinlight.org/2012/01/05/i-dont-need-3g-on-kindle/</link>
		<comments>http://thinlight.org/2012/01/05/i-dont-need-3g-on-kindle/#comments</comments>
		<pubDate>Thu, 05 Jan 2012 14:54:18 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Kindle]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=149</guid>
		<description><![CDATA[Initially I wanted to buy a WiFi-only Kindle, but a friend encouraged me to buy the 3G version &#8211; why not spend $50 for life-time free 3G? It seemed so attractive, that I was convinced by him and chose the 3G version. A year has passed since I got the 3G Kindle. How often did [...]]]></description>
				<content:encoded><![CDATA[<p>Initially I wanted to buy a <a href="thinlight.org/kindle/">WiFi-only Kindle</a>, but a friend encouraged me to buy the 3G version &#8211; why not spend $50 for life-time free 3G? It seemed so attractive, that I was convinced by him and chose the 3G version.</p>
<p>A year has passed since I got the 3G Kindle. How often did I use 3G on it? I think the total time I  had 3G turned on must be less than one hour. Most times I turned the wireless network off so that the battery could last a little longer. When I have to access the network, I was always in a location with Wi-Fi wireless. Maybe that&#8217;s because I don&#8217;t travel a lot.</p>
<p>Many people are fond of the browser built in with Kindle and they think they get an unlimited data plan for free! But the browser has always been marked as &#8220;experimental&#8221; and it seems Amazon has no plan to make it usable in &#8220;production&#8221;. It&#8217;s by nature limited by the E-Ink display. Web pages must be specifically designed to make them readable in Kindle but few web sites are doing this. And free 3G web browsing is only available on Kindle 3. With the latest generation of Kindle (no keyboards), &#8220;<a href="http://www.amazon.com/gp/customer-forum/kindle/?ie=UTF8&#038;cdForum=Fx1D7SY3BVSESG&#038;cdMsgNo=201&#038;cdPage=9&#038;tag=qingbblog-20&#038;linkCode=ur2&#038;camp=1789&#038;cdSort=oldest&#038;cdThread=Tx390HFZ5SRXHJ6&#038;creative=390957&#038;cdMsgID=MxIT1OGTA35WG1#MxIT1OGTA35WG1" target="_blank">Experimental web browsing (outside of Wikipedia) on Kindle Touch 3G is only available over Wi-Fi.</a>&#8221;</p>
<p>If you buy a book from Amazon (even if it costs you $0, free), it can be downloaded via 3G. But if you email a document to Amazon, it won&#8217;t be downloaded via 3G unless you pay the data fee.</p>
<p>Actually Wi-Fi is ubiquitous today. If I&#8217;m going to get another Kindle, I won&#8217;t buy the 3G version. But for people who will stay in a special area where Wi-Fi is not available but there is cellular network coverage, 3G is desirable.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=F9oC5QDnCbc:9Fu7BLv65FU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=F9oC5QDnCbc:9Fu7BLv65FU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=F9oC5QDnCbc:9Fu7BLv65FU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=F9oC5QDnCbc:9Fu7BLv65FU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=F9oC5QDnCbc:9Fu7BLv65FU:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=F9oC5QDnCbc:9Fu7BLv65FU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=F9oC5QDnCbc:9Fu7BLv65FU:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2012/01/05/i-dont-need-3g-on-kindle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django prepopulated_fields not working?</title>
		<link>http://thinlight.org/2011/11/26/django-prepopulated_fields-not-working/</link>
		<comments>http://thinlight.org/2011/11/26/django-prepopulated_fields-not-working/#comments</comments>
		<pubDate>Sun, 27 Nov 2011 02:43:42 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=147</guid>
		<description><![CDATA[Note &#8211; Just skip to the end of this article if you&#8217;re eager to find out the reason. Yesterday I found that Django even had a special field SlugField for post slugs. I&#8217;m just starting with Django so there&#8217;s a lot I don&#8217;t know yet. It&#8217;s cool that they also designed a &#8220;prepopulated_fields&#8221; property in [...]]]></description>
				<content:encoded><![CDATA[<p>Note &#8211; Just skip to the end of this article if you&#8217;re eager to find out the reason.</p>
<p>Yesterday I found that Django even had a special field <a href="https://docs.djangoproject.com/en/dev/ref/models/fields/#slugfield" target="_blank">SlugField</a> for post slugs. I&#8217;m just starting with Django so there&#8217;s a lot I don&#8217;t know yet. It&#8217;s cool that they also designed a &#8220;<a href="https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.prepopulated_fields" target="_blank">prepopulated_fields</a>&#8221; property in the admin module.</p>
<pre><code>class ArticleAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)}</code></pre>
<p><span id="more-147"></span></p>
<p>Its value is a dictionary, with key being the slug field name of your model, and value being a tuple (note the way Python defines a <a href="http://docs.python.org/tutorial/datastructures.html#tuples-and-sequences" target="_blank">single element tuple</a>!) or list of fields where the slug should get its value from.</p>
<p>Slugs are commonly used for user-friendly (and maybe SEO-friendly) URLs. WordPress has built-in functionality to automatically generate post slugs after you name your post title. So I guess SlugField and prepopulated_fields are designed just for this purpose.</p>
<p>But the problem came when I tried to see it in action in an edit page. I got everything correct but the slug field in the form just didn&#8217;t update no matter what I did to its source field. Of course it&#8217;s implemented using JavaScript, but looking at the source code, it only generated an useless stub.</p>
<p>I started to dig into the source code of Django&#8217;s admin module and had a hard time to find how the prepopulated_fields_js tag work, since I&#8217;m new to Django. At first I naively thought it was a bug in contrib/admin/templates/admin/prepopulated_fields_js.html:</p>
<pre><code>{% for field in prepopulated_fields %}</code></pre>
<p>I believed that&#8217;s the whole thing of template tag definition. The context doesn&#8217;t have &#8220;prepopulated_fields&#8221;, so the fix was changing this line to:</p>
<pre><code>{% for field in adminform.prepopulated_fields %}</code></pre>
<p>And it worked! Did I just fixed a bug in Django? Was it so easy? Couldn&#8217;t be. I went to #django channel and described my situation. An experienced user pointed me to contrib/admin/templatetags/admin_modify.py, where the prepopulated_fields_js tag was actually defined:</p>
<pre><code>@register.inclusion_tag('admin/prepopulated_fields_js.html', takes_context=True)
def prepopulated_fields_js(context):
    """
    Creates a list of prepopulated_fields that should render Javascript for
    the prepopulated fields for both the admin form and inlines.
    """
    prepopulated_fields = []
    if context['add'] and 'adminform' in context:
        prepopulated_fields.extend(context['adminform'].prepopulated_fields)
    if 'inline_admin_formsets' in context:
        for inline_admin_formset in context['inline_admin_formsets']:
            for inline_admin_form in inline_admin_formset:
                if inline_admin_form.original is None:
                    prepopulated_fields.extend(inline_admin_form.prepopulated_fields)
    context.update({'prepopulated_fields': prepopulated_fields})
    return context</code></pre>
<p>So here comes</p>
<h2>The fact</h2>
<p>That tag does add prepopulated_fields to the context, but only when current action is &#8216;add&#8217;. I was always testing my code in an editing page, so nothing happened. I used <code>svn log/diff</code> to see the history of changes to this tag, but it was designed this way in the beginning.</p>
<p>Yes it&#8217;s a feature not a bug <img src='http://thinlight.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Think about the URL. For some sites, the URL doesn&#8217;t contain any numerical or hash IDs, and the post slug may be the only identifier. If this slug is changed after editing a title (fixing a typo, for example), people who bookmarked this page won&#8217;t be able to visit it again, and search engine crawlers can&#8217;t follow the old links again. WordPress also designed post slug to work this way.</p>
<p>But Django team should update the documentation to reflect this design so that new users won&#8217;t be confused.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=QH4quXfziMI:h-pXi-_j6Kg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=QH4quXfziMI:h-pXi-_j6Kg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=QH4quXfziMI:h-pXi-_j6Kg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=QH4quXfziMI:h-pXi-_j6Kg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=QH4quXfziMI:h-pXi-_j6Kg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=QH4quXfziMI:h-pXi-_j6Kg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=QH4quXfziMI:h-pXi-_j6Kg:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2011/11/26/django-prepopulated_fields-not-working/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Writing Greasemonkey User Scripts for Firefox and Chrome</title>
		<link>http://thinlight.org/2011/11/21/writing-greasemonkey-user-scripts-for-firefox-and-chrome/</link>
		<comments>http://thinlight.org/2011/11/21/writing-greasemonkey-user-scripts-for-firefox-and-chrome/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 11:27:50 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=145</guid>
		<description><![CDATA[Greasemonkey was initially only a Firefox extention but due to its popularity it&#8217;s quickly adopted by major browsers. Since Opera takes a very small market share, here on the topic of cross browser user scripts, I&#8217;m only going to talk about Chrome and Firefox. As for Internet Explorer, I just don&#8217;t like it. Now Chrome [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.greasespot.net/" target="_blank">Greasemonkey</a> was initially only a Firefox extention but due to its popularity it&#8217;s quickly adopted by major browsers. Since Opera takes a very small market share, here on the topic of <strong>cross browser user scripts</strong>, I&#8217;m only going to talk about Chrome and Firefox. As for Internet Explorer, I just don&#8217;t like it.</p>
<p>Now Chrome doesn&#8217;t need an extension to enable user scripts. It had the functionality built in. But the way it handles the scripts is quite different from Firefox&#8217;s. At first when I wanted to test if my Greasemonkey script worked in Chrome, I tried to figure out where it stored the script. That&#8217;s the way I always do in Firefox &#8211; just right click on a user script and edit, save and refresh to see it in effect right away.</p>
<p><span id="more-145"></span></p>
<p>Actually each time you install a user script in Chrome, it <a href="http://googlesystem.blogspot.com/2009/11/google-chrome-converts-user-scripts.html" target="_blank">converts</a> it into an extension, so it appears in the extension management page along with other &#8220;real&#8221; extensions. There must be a way to simplify the testing process but I don&#8217;t have any Chrome extension development experience yet.</p>
<p>Quote from Chrome&#8217;s <a href="http://www.chromium.org/developers/design-documents/user-scripts" target="_blank">official doc</a>:</p>
<blockquote><ul>
<li>Chromium does not support @require, @resource, unsafeWindow, GM_registerMenuCommand, GM_setValue, or GM_getValue.</li>
<li>GM_xmlhttpRequest is same-origin only.</li>
</ul>
</blockquote>
<p>The doc must be a little outdated. Now GM_xmlhttpRequest is supposedly working cross domain, according to this recently fixed <a href="http://code.google.com/p/chromium/issues/detail?id=18857" target="_blank">issue</a>.</p>
<p>It&#8217;s bad Chrome doesn&#8217;t support @require, but here&#8217;s a cross browser solution <a href="http://erikvold.com/blog/index.cfm/2010/6/14/using-jquery-with-a-user-script" target="_blank">example</a> of injecting JavaScript libraries into the page. Taking it a bit further, and we get the following simple pattern for a cross browser user script that injects multiple third party scripts (extracted from &#8220;<a href="http://thinlight.org/2011/11/19/google-reader-and-readability-kindle/">Google Reader Readability</a>&#8221; script):</p>
<h2>Cross Browser &#8220;@require&#8221;</h2>
<pre><code>// ==UserScript==
// @name           ???
// @namespace      http://your.tld/
// ==/UserScript==

var scripts = [
  '//cdnjs.cloudflare.com/ajax/libs/jquery/1.7/jquery.min.js',
  '//www.readability.com/embed.js'
];

var numScripts = scripts.length, loadedScripts = 0;

GM_addStyle('CSS styles goes here');

function main() {
  jQuery.noConflict(); // if window.$ has been used by other libs
  // ...
}

var i, protocol = document.location.protocol;
for (i = 0; i < numScripts; i++) {
  var script = document.createElement("script");
  script.setAttribute("src", protocol + scripts[i]);
  script.addEventListener('load', function() {
      loadedScripts += 1;
      if (loadedScripts < numScripts) {
        return;
      }
      var script = document.createElement("script");
      script.textContent = "(" + main.toString() + ")();";
      document.body.appendChild(script);
    }, false);
  document.body.appendChild(script);
  console.log(script);
}</code></pre>
<p>With this pattern we put all our logic into the main function. `main` won't be run in the extension scope but it'll actually be run as a piece of inline code in the page. So its code can't make use of any of the "global" variables outside of `main`. Then if making Ajax requests, it can only rely on the ordinary XMLHttpRequest object and won't be able to request cross domain resources. That could be a road blocker sometimes.</p>
<h2>iframes</h2>
<p>With Greasemonkey add-on for Firefox, if you specify an include pattern in the header, this script will be run no matter it is a normal page or only an iframe. But Chrome doesn't run it for the iframes!</p>
<p>But surely there are workarounds. A simple example of getting Gmail's menu bar which resides in an iframe:</p>
<pre><code>window.frames['canvas_frame'].contentDocument.getElementById('gbz')</code></pre>
<p>Note that we use contentDocument. <strong>contentWindow.document won't work in Chrome</strong>.</p>
<h3>Other issues</h3>
<p>Another trivial issue I encountered was that you can't set User-Agent header when using GM_xmlhttpRequest. Chrome would complain:</p>
<blockquote><p>Refused to set unsafe header "User-agent"</p></blockquote>
<hr />
<p>For more information please check out these two scripts:</p>
<ul>
<li><a href="http://userscripts.org/scripts/review/30613" target="_blank">Google Reader Unread Count in Gmail</a> - Uses GM_xmlhttpRequest and the DOM nodes of interest are in an iframe.</li>
<li><a href="http://userscripts.org/scripts/review/118480" target="_blank">Google Reader Readability</a> - @requires two scripts</li>
</ul>
<p>They're short and simple, but work at least in both Firefox and Chrome.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=mAjjn1aIfAk:OG7idyia31E:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=mAjjn1aIfAk:OG7idyia31E:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=mAjjn1aIfAk:OG7idyia31E:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=mAjjn1aIfAk:OG7idyia31E:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=mAjjn1aIfAk:OG7idyia31E:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=mAjjn1aIfAk:OG7idyia31E:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=mAjjn1aIfAk:OG7idyia31E:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2011/11/21/writing-greasemonkey-user-scripts-for-firefox-and-chrome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>“Google Reader Unread Count in Gmail” Script Again</title>
		<link>http://thinlight.org/2011/11/20/google-reader-unread-count-in-gmail-script-again/</link>
		<comments>http://thinlight.org/2011/11/20/google-reader-unread-count-in-gmail-script-again/#comments</comments>
		<pubDate>Sun, 20 Nov 2011 09:43:10 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=142</guid>
		<description><![CDATA[After Google unveiled its &#8220;plus&#8221; social network to combat Facebook, its whole product line got an interface update and my &#8220;Google Reader Unread Count in Gmail&#8221; Greasemonkey script no longer worked. So it&#8217;s time to update it again. Install latest version. Now it seems Google hides Reader link in the &#8220;more&#8221; drop down. Or at [...]]]></description>
				<content:encoded><![CDATA[<p>After Google unveiled its &#8220;plus&#8221; social network to combat Facebook, its whole product line got an interface update and my &#8220;Google Reader Unread Count in Gmail&#8221; Greasemonkey script no longer worked. So it&#8217;s time to update it again.</p>
<p><strong><a href="http://userscripts.org/scripts/source/30613.user.js" target="_blank">Install latest version.</a></strong></p>
<p><img src="http://thinlight.org/wp-content/uploads/2011/11/readercount.png" alt="Google Reader Unread Count in Gmail" title="Google Reader Unread Count in Gmail" width="481" height="125" class="alignnone size-full wp-image-143" /></p>
<p>Now it seems Google hides Reader link in the &#8220;more&#8221; drop down. Or at least it&#8217;s the situation in my account. Anyway, If that&#8217;s the case, my script will swap it with the last one in the menu bar.</p>
<p>What&#8217;s more, It now supports Chrome! Day by day I&#8217;m getting more used to Chrome and discarding Firefox. And looking at the market share data, Chrome is also making great progress.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=pCVcd9bkzNs:4pkHlb9ouNw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=pCVcd9bkzNs:4pkHlb9ouNw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=pCVcd9bkzNs:4pkHlb9ouNw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=pCVcd9bkzNs:4pkHlb9ouNw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=pCVcd9bkzNs:4pkHlb9ouNw:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=pCVcd9bkzNs:4pkHlb9ouNw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=pCVcd9bkzNs:4pkHlb9ouNw:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2011/11/20/google-reader-unread-count-in-gmail-script-again/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Reader and Readability, Kindle</title>
		<link>http://thinlight.org/2011/11/19/google-reader-and-readability-kindle/</link>
		<comments>http://thinlight.org/2011/11/19/google-reader-and-readability-kindle/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 12:55:31 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Kindle]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=139</guid>
		<description><![CDATA[Readability has browser extensions for reading current page or sending current web page to Kindle, but I read a lot in Google Reader where many articles are on the same page. It seems that Readability staff considered this feature and did investigate on that. But until now I didn&#8217;t find a mechanism for Reader&#8217;s native [...]]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.readability.com/" target="_blank">Readability</a> has browser extensions for reading current page or sending current web page to <a href="http://thinlight.org/kindle/">Kindle</a>, but I read a lot in Google Reader where many articles are on the same page. It seems that Readability staff considered this feature and did <a href="http://groups.google.com/group/fougrapi/browse_thread/thread/f5a2774c6aa4c2a2" target="_blank">investigate</a> on that. But until now I didn&#8217;t find a mechanism for Reader&#8217;s native send to feature to work with Readability. So I spent several hours writing this Greasemonkey script, so far very happy with it.</p>
<p><strong><a href="http://userscripts.org/scripts/source/118480.user.js" target="_blank">Click here to install</a></strong>. It supports both Chrome and Firefox. After it&#8217;s installed, open Google Reader and view any entry, you&#8217;ll find Readability&#8217;s button on the right of the actions bar below the entry content. Like this:</p>
<p><img src="http://thinlight.org/wp-content/uploads/2011/11/sendtokindle.png" alt="Google Reader Readability Send To Kindle" title="Google Reader Readability Send To Kindle" width="540" height="114" class="alignnone size-full wp-image-140" /></p>
<p>If you don&#8217;t already know Readability, you should try it. After clicking the button, the article is saved to your reading list in your Readability account, and Readability sends (after some processing to make it &#8220;readable&#8221;) it to [your name]@free.kindle.com. Then when you connect your Kindle to a WIFI spot, the articles are automatically downloaded.</p>
<p>Basically I utilized the JavaScript from <a href="http://www.readability.com/publishers/tools" target="_blank">Readability&#8217;s publisher tool</a>. Luckily they didn&#8217;t obfuscate the code and it indeed has good readability <img src='http://thinlight.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Anyway I think Readability should develop a page which can be used in Google Reader&#8217;s native send to popup. That would be easy and better than my script, since I have to update it every time Google Reader interface changes or Readability updates their JavaScript library.</p>
<p>A minor issue of readability is that it doesn&#8217;t extract the redirected URL so all the articles from blogs using feedburner&#8217;s service will seem to be from feedproxy.google.com and in readability&#8217;s account you&#8217;ll see feedburner&#8217;s favicon displaying before most items.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=DZHH_yWvKfA:RjFz3flijCg:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=DZHH_yWvKfA:RjFz3flijCg:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=DZHH_yWvKfA:RjFz3flijCg:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=DZHH_yWvKfA:RjFz3flijCg:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=DZHH_yWvKfA:RjFz3flijCg:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=DZHH_yWvKfA:RjFz3flijCg:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=DZHH_yWvKfA:RjFz3flijCg:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2011/11/19/google-reader-and-readability-kindle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using ImageMagick for WordPress Thumbnail Generation</title>
		<link>http://thinlight.org/2011/10/14/using-imagemagick-for-wordpress-thumbnail-generation/</link>
		<comments>http://thinlight.org/2011/10/14/using-imagemagick-for-wordpress-thumbnail-generation/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 12:21:40 +0000</pubDate>
		<dc:creator>thinlight</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://thinlight.org/?p=137</guid>
		<description><![CDATA[When you upload an image in WordPress, the blogging software tries to generate several scaled versions of the images uploaded. So after it&#8217;s done, WordPress provides 4 different sizes of the image for you to insert into the post &#8211; thumbnail, small, large, original. I noticed that for my WordPress install, only the original image [...]]]></description>
				<content:encoded><![CDATA[<p>When you upload an image in WordPress, the blogging software tries to generate several scaled versions of the images uploaded. So after it&#8217;s done, WordPress provides 4 different sizes of the image for you to insert into the post &#8211; thumbnail, small, large, original.</p>
<p>I noticed that for my WordPress install, only the original image was available and the other options were disabled. The reason is that the PHP on my server was compiled by me myself and I didn&#8217;t compile many of the extensions. WordPress uses <a href="http://php.net/manual/en/book.image.php" target="_blank">GD</a> extension for thumbnail generation. But this time I didn&#8217;t recompile PHP with GD (I didn&#8217;t know how to compile GD alone as an extension). Instead I used ImageMagick and here&#8217;s the whole process.</p>
<p><span id="more-137"></span></p>
<h3>My server setup</h3>
<p>My server OS is CentOS 5.4 (x86_64). PHP wasn&#8217;t installed via yum but compiled with configure command:</p>
<pre><code>
'./configure' '--prefix=/usr/local/php' '--with-mysql' '--with-mysqli' '--enable-mbstring=all' '--with-libdir=lib64' '--enable-suhosin' '--with-zlib' '--with-mcrypt' '--with-curl'
</code></pre>
<h3>Install ImageMagick</h3>
<p>I used yum to install it.</p>
<pre><code>
yum install ImageMagick.x86_64
yum install ImageMagick-devel.x86_64
</code></pre>
<h3>Compile imagick extension</h3>
<p>Download the imagick extension source <a href="http://pecl.php.net/package/imagick" target="_blank">here</a>.</p>
<pre><code>
cd imagick-x.x.x
/usr/local/php/bin/phpize
./configure --with-imagick=/usr/local --with-php-config=/usr/local/php/bin/php-config
make
make install
</code></pre>
<p>Since my PHP wasn&#8217;t installed in the &#8220;standard&#8221; location (and the bin dir was not in PATH) I had to use full path to `phpize`, and specify the `php-config` location in configure command. The make program uses php-config to decide where to put the compiled extension (php-config &#8211;extension-dir).</p>
<p>Add this line to php.ini:</p>
<pre><code>
extension=imagick.so
</code></pre>
<p>and restart web server. After that I checked phpinfo() output and saw imagick extension&#8217;s information there.</p>
<h3>Let WordPress use imagick extension to generate thumbnails</h3>
<p>Install <a href="http://wordpress.org/extend/plugins/imagemagick-engine/" target="_blank">ImageMagick Engine</a> plugin. Note that you have to configure it after activation or it won&#8217;t work. With this plugin, you can even configure it to generate selected sizes only. I only wanted the thumbnail.</p>
<p>According to the plugin&#8217;s description, ImageMagick improves image quality dramatically over GD.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/thinlight?a=dsJcmpI7eTo:yePMfv-Nkgk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/thinlight?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=dsJcmpI7eTo:yePMfv-Nkgk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/thinlight?i=dsJcmpI7eTo:yePMfv-Nkgk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=dsJcmpI7eTo:yePMfv-Nkgk:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/thinlight?i=dsJcmpI7eTo:yePMfv-Nkgk:D7DqB2pKExk" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/thinlight?a=dsJcmpI7eTo:yePMfv-Nkgk:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/thinlight?i=dsJcmpI7eTo:yePMfv-Nkgk:F7zBnMyn0Lo" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://thinlight.org/2011/10/14/using-imagemagick-for-wordpress-thumbnail-generation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
