<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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/"
	>

<channel>
	<title>Dimitris Glezos » Weblog &#187; Django</title>
	<atom:link href="http://dimitris.glezos.com/weblog/category/django/feed" rel="self" type="application/rss+xml" />
	<link>http://dimitris.glezos.com/weblog</link>
	<description>A greek/geek weblog</description>
	<lastBuildDate>Wed, 22 Sep 2010 08:46:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>django-piston</title>
		<link>http://dimitris.glezos.com/weblog/2009/06/03/jespern-django-piston-wiki-home-%e2%80%94-bitbucketorg</link>
		<comments>http://dimitris.glezos.com/weblog/2009/06/03/jespern-django-piston-wiki-home-%e2%80%94-bitbucketorg#comments</comments>
		<pubDate>Tue, 02 Jun 2009 22:25:40 +0000</pubDate>
		<dc:creator>Δημήτρης Γλέζος</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Mini-post]]></category>
		<category><![CDATA[Transifex]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[piston]]></category>

		<guid isPermaLink="false">http://dimitris.glezos.com/weblog/?p=1350</guid>
		<description><![CDATA[Giving a good look at django-piston. Looks hawt!]]></description>
			<content:encoded><![CDATA[<p>Giving a good look at <a href='http://bitbucket.org/jespern/django-piston/wiki/Home'>django-piston</a>. Looks hawt!</p>]]></content:encoded>
			<wfw:commentRss>http://dimitris.glezos.com/weblog/2009/06/03/jespern-django-piston-wiki-home-%e2%80%94-bitbucketorg/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abstraction layers: One, two, many</title>
		<link>http://dimitris.glezos.com/weblog/2009/04/13/one-two-many</link>
		<comments>http://dimitris.glezos.com/weblog/2009/04/13/one-two-many#comments</comments>
		<pubDate>Mon, 13 Apr 2009 00:06:13 +0000</pubDate>
		<dc:creator>Δημήτρης Γλέζος</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://dimitris.glezos.com/weblog/?p=1167</guid>
		<description><![CDATA[(cc) by piet_musterd It&#8217;s becoming pretty clear to me that when in doubt whether to write an abstraction, the rule is clear: &#8220;one, two, many&#8221;. Write something 3 times and you&#8217;re breaking the DRY principle. The cost of changing a bit in one place and needing to update the other places too is high. Abstract [...]]]></description>
			<content:encoded><![CDATA[<p class="imagelink floatright"><a href="http://www.flickr.com/photos/10508943@N00/153776153/" title="impossible object" target="_blank"><img src="http://farm1.static.flickr.com/46/141828189_e6d389728f_m.jpg" alt="Escher pattern" border="0" /></a><br /><span class="note">(<a href="http://creativecommons.org/licenses/by-nc-nd/2.0/" title="BY-NC-ND license" target="_blank" title="Published under a Creative Commons licence" >cc</a>) by <a href="http://www.flickr.com/photos/piet_musterd/" title="piet_musterd" target="_blank">piet_musterd</a></span></p>

<p>It&#8217;s becoming pretty clear to me that when in doubt whether to write an abstraction, the rule is clear: &#8220;one, two, many&#8221;.</p>

<p>Write something 3 times and you&#8217;re breaking the <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY</a> principle. The cost of changing a bit in one place and needing to update the other places too is high.</p>

<p>Abstract something you only use once (in case you want to re-use in the future), and you forgot the &#8220;two&#8221; in the above rule. The cost for later refactoring is probably not worth the extra load you&#8217;ll carry until that day comes. If it comes.</p>

<p>&#8220;One, two, many&#8221; is usually better than &#8220;one, two, three&#8221; and &#8220;one, many&#8221;.</p>]]></content:encoded>
			<wfw:commentRss>http://dimitris.glezos.com/weblog/2009/04/13/one-two-many/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Unnecessary Knowledge</title>
		<link>http://dimitris.glezos.com/weblog/2009/03/13/unnecessary-knowledge</link>
		<comments>http://dimitris.glezos.com/weblog/2009/03/13/unnecessary-knowledge#comments</comments>
		<pubDate>Thu, 12 Mar 2009 23:21:52 +0000</pubDate>
		<dc:creator>Δημήτρης Γλέζος</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[Mini-post]]></category>
		<category><![CDATA[Quotes]]></category>

		<guid isPermaLink="false">http://dimitris.glezos.com/weblog/2009/03/13/unnecessary-knowledge</guid>
		<description><![CDATA[Polar bears are left-handed. From ptigas&#8216; Unnecessary Knowledge.]]></description>
			<content:encoded><![CDATA[<p>Polar bears are left-handed. From <a href="http://ptigas.com/">ptigas</a>&#8216; <a href="http://www.unkno.com/toplist/">Unnecessary Knowledge</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://dimitris.glezos.com/weblog/2009/03/13/unnecessary-knowledge/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Παρουσιάζοντας το Django στο Patras LUG</title>
		<link>http://dimitris.glezos.com/weblog/2008/11/05/presentingdjango-patras-lug</link>
		<comments>http://dimitris.glezos.com/weblog/2008/11/05/presentingdjango-patras-lug#comments</comments>
		<pubDate>Wed, 05 Nov 2008 15:45:11 +0000</pubDate>
		<dc:creator>Δημήτρης Γλέζος</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[FOSS, linux]]></category>
		<category><![CDATA[Mini-post]]></category>
		<category><![CDATA[greek]]></category>

		<guid isPermaLink="false">http://dimitris.glezos.com/weblog/?p=781</guid>
		<description><![CDATA[Off for Patras LUG. Σήμερα θα παρουσιάσω το Django στους διψασμένους για γνώση θαμώνες του τοπικού μας hack-group. Πλάκα θα &#8216;χει, αν εξαιρέσουμε ένα μικρό πονοκέφαλο, ο οποίος όμως είμαι σίγουρος θα περάσει στα πρώτα 5 λεπτά από τον ενθουσιασμό. =)]]></description>
			<content:encoded><![CDATA[<p>Off for Patras <acronym title="Linux User Group">LUG</acronym>. Σήμερα θα παρουσιάσω το Django στους διψασμένους για γνώση θαμώνες του τοπικού μας hack-group. Πλάκα θα &#8216;χει, αν εξαιρέσουμε ένα μικρό πονοκέφαλο, ο οποίος όμως είμαι σίγουρος θα περάσει στα πρώτα 5 λεπτά από τον ενθουσιασμό. =)</p>]]></content:encoded>
			<wfw:commentRss>http://dimitris.glezos.com/weblog/2008/11/05/presentingdjango-patras-lug/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Django&#8217;s generic relations</title>
		<link>http://dimitris.glezos.com/weblog/2008/10/22/django-generic-relations</link>
		<comments>http://dimitris.glezos.com/weblog/2008/10/22/django-generic-relations#comments</comments>
		<pubDate>Wed, 22 Oct 2008 13:38:19 +0000</pubDate>
		<dc:creator>Δημήτρης Γλέζος</dc:creator>
				<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://dimitris.glezos.com/weblog/?p=770</guid>
		<description><![CDATA[This is really hot stuff. # (Snip model creation) &#62;&#62;&#62; tiger, bear = Animal&#40;common_name=&#34;tiger&#34;&#41;, Animal&#40;common_name=&#34;bear&#34;&#41;, &#62;&#62;&#62; tiger.comparisons.create&#40;other_obj=bear, comparative=&#34;cooler&#34;&#41; &#60;Comparison: tiger is cooler than bear&#62;]]></description>
			<content:encoded><![CDATA[<p>This is <a href="http://www.djangoproject.com/documentation/models/generic_relations/">really hot stuff</a>.</p>


<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># (Snip model creation)</span>
<span style="color: #66cc66;">&gt;&gt;&gt;</span> tiger, bear = Animal<span style="color: black;">&#40;</span>common_name=<span style="color: #483d8b;">&quot;tiger&quot;</span><span style="color: black;">&#41;</span>, Animal<span style="color: black;">&#40;</span>common_name=<span style="color: #483d8b;">&quot;bear&quot;</span><span style="color: black;">&#41;</span>,
<span style="color: #66cc66;">&gt;&gt;&gt;</span> tiger.<span style="color: black;">comparisons</span>.<span style="color: black;">create</span><span style="color: black;">&#40;</span>other_obj=bear, comparative=<span style="color: #483d8b;">&quot;cooler&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #66cc66;">&lt;</span>Comparison: tiger <span style="color: #ff7700;font-weight:bold;">is</span> cooler than bear<span style="color: #66cc66;">&gt;</span></pre></div></div>
]]></content:encoded>
			<wfw:commentRss>http://dimitris.glezos.com/weblog/2008/10/22/django-generic-relations/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RSS, Πλανήτες και Django</title>
		<link>http://dimitris.glezos.com/weblog/2007/09/17/rss-planet-django</link>
		<comments>http://dimitris.glezos.com/weblog/2007/09/17/rss-planet-django#comments</comments>
		<pubDate>Mon, 17 Sep 2007 01:39:34 +0000</pubDate>
		<dc:creator>Δημήτρης Γλέζος</dc:creator>
				<category><![CDATA[Django]]></category>
		<category><![CDATA[FOSS, linux]]></category>
		<category><![CDATA[Tech/web]]></category>

		<guid isPermaLink="false">http://dimitris.glezos.com/weblog/2007/09/17/rss-planet-django/</guid>
		<description><![CDATA[Δυστυχώς είναι συχνό φαινόμενο να εμφανίζονται διπλές μερικές καταχωρήσεις στους Πλανήτες, όπως συμβαίνει για παράδειγμα στο planet.ellak.gr με το feed (ροή) του django.gr weblog. Αυτό από ότι κατάλαβα συμβαίνει με τις ροές RSS που δεν έχουν πεδία pubDate, τις οποίες το λογισμικό planet δε μεταχειρίζεται σωστά. Αν κάτι αλλάξει σε μία καταχώρηση μιας τέτοιας ροής, [...]]]></description>
			<content:encoded><![CDATA[<p>Δυστυχώς είναι συχνό φαινόμενο να εμφανίζονται διπλές μερικές καταχωρήσεις στους Πλανήτες, όπως συμβαίνει για παράδειγμα στο <a href="http://planet.ellak.gr/">planet.ellak.gr</a> με το feed (ροή) του <a href="http://www.django.gr/weblog/">django.gr weblog</a>.</p>

<p>Αυτό από ότι κατάλαβα συμβαίνει με τις ροές <acronym title="Really Simple Syndication">RSS</acronym> που δεν έχουν πεδία <code>pubDate</code>, τις οποίες το λογισμικό planet δε μεταχειρίζεται σωστά. Αν κάτι αλλάξει σε μία καταχώρηση μιας τέτοιας ροής, τότε το planet υποθέτει ότι είναι νέα καταχώρηση, την αναρτά, και δε σβήνει την παλιά γιατί είναι ήδη δημοσιευμένη. Αυτό που θα έπρεπε να κάνει όμως είναι να συγκρίνει κάπως τις δύο καταχωρήσεις αν δεν υπάρχει το pubDate, πχ. ελέγχοντας το <code>&lt;link&gt;</code> tag τους πριν αποφανθεί ότι είναι διαφορετικές καταχωρήσεις. Μια και είναι δημοφιλές λογισμικό, θέλω να πιστεύω ότι η λειτουργικότητα αυτή είναι σχεδιαστική απόφαση κι όχι κάποιο σφάλμα (it&#8217;s a feature, not a bug).</p>

<p>Από την πλευρά μας αυτό που μπορούμε να κάνουμε είναι απλά να προσθέσουμε το πεδίο <code>pubDate</code> στα feed που δεν το έχουν. Στα RSS 2.0 και Atom τουλάχιστον, γιατί αν διαθέτουμε μόνο ένα παλαιολιθικό RSS 0.92, δεν έχουμε τέτοια επιλογή χωρίς να κάνουμε τη σύνταξη της ροής μη-έγκυρη ως προς το πρότυπο.</p>

<p>Το <a href="http://www.django.gr/">django.gr</a> είναι γραμμένο σε Django (προφανώς), και ο κώδικας που παράγει τη ροή RSS είναι ο παρακάτω:</p>


<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> WeblogEntryFeed<span style="color: black;">&#40;</span>Feed<span style="color: black;">&#41;</span>:
    title = <span style="color: #483d8b;">&quot;The Greek Django User Group weblog&quot;</span>
    link = <span style="color: #483d8b;">&quot;http://www.django.gr/weblog/&quot;</span>
    description = <span style="color: #483d8b;">&quot;Latest news about Django, the Python Web framework,&quot;</span> + \
                  <span style="color: #483d8b;">&quot; from the Greek Django User Group.&quot;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">def</span> items<span style="color: black;">&#40;</span><span style="color: #008000;">self</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">return</span> Entry.<span style="color: black;">objects</span>.<span style="color: #008000;">filter</span><span style="color: black;">&#40;</span>pub_date__lte=<span style="color: #dc143c;">datetime</span>.<span style="color: #dc143c;">datetime</span>.<span style="color: black;">now</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span>:<span style="color: #ff4500;">10</span><span style="color: black;">&#93;</span></pre></div></div>


<p>Για να μορφοποιήσουμε τη ροή ώστε να περιέχει για κάθε άρθρο και την ημερομηνία δημοσίευσης, προσθέτουμε τα εξής:</p>


<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">    <span style="color: #ff7700;font-weight:bold;">def</span> item_pubdate<span style="color: black;">&#40;</span><span style="color: #008000;">self</span>, item<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">return</span> item.<span style="color: black;">pub_date</span></pre></div></div>


<p>Αυτά.</p>]]></content:encoded>
			<wfw:commentRss>http://dimitris.glezos.com/weblog/2007/09/17/rss-planet-django/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Django sprint</title>
		<link>http://dimitris.glezos.com/weblog/2007/09/07/django-sprint</link>
		<comments>http://dimitris.glezos.com/weblog/2007/09/07/django-sprint#comments</comments>
		<pubDate>Fri, 07 Sep 2007 04:04:42 +0000</pubDate>
		<dc:creator>Δημήτρης Γλέζος</dc:creator>
				<category><![CDATA[Django]]></category>

		<guid isPermaLink="false">http://dimitris.glezos.com/weblog/2007/09/07/django-sprint/</guid>
		<description><![CDATA[Στις 14 Σεπτεμβρίου το Django διοργανώνει ένα ολοήμερο σπριντ. Ακούω συνεχώς από φίλους και γνωστούς πως ψάχνουν ευκαιρία να ασχοληθούν με κάποιο έργο και να μάθουν περισσότερα πράγματα. Ε, τέτοια events είναι ό,τι πρέπει για να εμπλακεί κανείς! Όλο και κάτι θα βρεθεί για τον καθένα, οπότε μη διαστάσετε να προσθέστε το όνομα σας στη [...]]]></description>
			<content:encoded><![CDATA[<p>Στις 14 Σεπτεμβρίου <a href="http://www.djangoproject.com/weblog/2007/sep/06/sprint">το Django διοργανώνει ένα ολοήμερο σπριντ</a>. Ακούω συνεχώς από φίλους και γνωστούς πως ψάχνουν ευκαιρία να ασχοληθούν με κάποιο έργο και να μάθουν περισσότερα πράγματα. Ε, τέτοια events είναι ό,τι πρέπει για να εμπλακεί κανείς! Όλο και κάτι θα βρεθεί για τον καθένα, οπότε μη διαστάσετε να <a href="http://code.djangoproject.com/wiki/Sprint14Sep">προσθέστε το όνομα σας</a> στη σελίδα wiki.</p>]]></content:encoded>
			<wfw:commentRss>http://dimitris.glezos.com/weblog/2007/09/07/django-sprint/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.432 seconds -->

