<?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>theportraitofageek.com</title>
	
	<link>http://theportraitofageek.com/blog</link>
	<description>Design, Code, Hack, Laugh</description>
	<lastBuildDate>Thu, 08 Mar 2012 11:39:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/theportraitofageek/BxBy" /><feedburner:info uri="theportraitofageek/bxby" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>cssigniter.com goes to Athens</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/jFeovpgKEyA/</link>
		<comments>http://theportraitofageek.com/blog/?p=1084#comments</comments>
		<pubDate>Tue, 06 Mar 2012 19:09:36 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=1084</guid>
		<description><![CDATA[Open Coffee Την Παρασκευή 9 Μαρτίου λοιπόν η ομάδα του cssigniter.com θα δώσει το παρών στο Οpen Coffee και θα μοιραστεί μαζί σας τη μικρή του, σε διάρκεια, ιστορία. WordPress Workshop Κατεβαίνουμε που κατεβαίνουμε είπαμε να το κάνουμε σωστά. Το Σάββατο 10 Μαρτίου στις 12:00 το μεσημέρι, στο CoLab Workspace Athens θα κάνουμε ένα μικρό [...]]]></description>
			<content:encoded><![CDATA[<h3>Open Coffee</h3>
<p>Την Παρασκευή 9 Μαρτίου λοιπόν η ομάδα του <a href="http://www.cssigniter.com">cssigniter.com</a> θα δώσει το παρών στο <a href="http://opencoffee.gr/2012/03/06/open-coffee-athens-xlv-call/">Οpen Coffee και θα μοιραστεί μαζί σας τη μικρή του, σε διάρκεια, ιστορία</a>.</p>
<h3>WordPress Workshop</h3>
<p>Κατεβαίνουμε που κατεβαίνουμε είπαμε να το κάνουμε σωστά. Το Σάββατο 10 Μαρτίου στις 12:00 το μεσημέρι, στο <a href="http://colabworkspace.com/">CoLab Workspace Athens </a>θα κάνουμε ένα μικρό WordPress workshop όπου θα λύσουμε και θα δέσουμε ένα WordPress theme το οποίο προορίζεται για μαζική πώληση. Αν θέλετε να το παρακολουθήσετε <a href="http://www.eventora.com/en/Events/wordpress-theme-development-masses">κάντε εγγραφή στη σχετική σελίδα του event</a>.</p>
<p>Τα λέμε από κοντά!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/_d_96ONC9-7CPR9jyudXZIGoYec/0/da"><img src="http://feedads.g.doubleclick.net/~a/_d_96ONC9-7CPR9jyudXZIGoYec/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/_d_96ONC9-7CPR9jyudXZIGoYec/1/da"><img src="http://feedads.g.doubleclick.net/~a/_d_96ONC9-7CPR9jyudXZIGoYec/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=jFeovpgKEyA:4CC9jFdRzl4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=jFeovpgKEyA:4CC9jFdRzl4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=jFeovpgKEyA:4CC9jFdRzl4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=jFeovpgKEyA:4CC9jFdRzl4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=jFeovpgKEyA:4CC9jFdRzl4:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/jFeovpgKEyA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=1084</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=1084</feedburner:origLink></item>
		<item>
		<title>Magic dates shortcode for WordPress</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/ttOchGX_b30/</link>
		<comments>http://theportraitofageek.com/blog/?p=1073#comments</comments>
		<pubDate>Tue, 01 Nov 2011 20:11:47 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=1073</guid>
		<description><![CDATA[Πόσες φορές έχει τύχει σε κάποιο site σας ή σε κάποιο site πελάτη σας να χρειαστεί να γράψετε προτάσεις σαν τις παρακάτω: Στα 8 χρόνια λειτουργίας μας [...] Φέτος κλείνουμε 12 χρόνια στο τομέα [...] Ο 5ος χρόνος θα είναι ο καλύτερος [...] Αυτές οι προτάσεις έχουν κάτι κοινό. Ένα μπελά. Ναι, ένα μπελά αν [...]]]></description>
			<content:encoded><![CDATA[<p>Πόσες φορές έχει τύχει σε κάποιο site σας ή σε κάποιο site πελάτη σας να χρειαστεί να γράψετε προτάσεις σαν τις παρακάτω:</p>
<ul>
<li>Στα 8 χρόνια λειτουργίας μας [...]</li>
<li>Φέτος κλείνουμε 12 χρόνια στο τομέα [...]</li>
<li>Ο 5ος χρόνος θα είναι ο καλύτερος [...]</li>
</ul>
<p>Αυτές οι προτάσεις έχουν κάτι κοινό. Ένα μπελά. Ναι, ένα μπελά αν πρόκειται για προτάσεις που βρίσκονται σε sites πελατών που θα σε πάρουν τηλέφωνο του χρόνου και θα σου πούνε &#8220;Φιλαράκο, γίνεται το 8 να το κάνουμε 9; Γίνεται το 12 να το κάνουμε 13;&#8221; Και έτσι δημιουργείται ένα ακόμα μικροσκοπικό task στην ήδη τεράστια λίστα με τις &#8220;αγγαρείες&#8221; που πρέπει να κάνετε.</p>
<p>Επειδή σε μένα συμβαίνει συχνά έκατσα και έφτιαξα ένα μικρό plugin το οποίο κάνει αυτή τη δουλειά. &#8220;Ανεβάζει&#8221; τα νούμερα αυτά αυτόματα. Πως;</p>
<p>Για αρχή <a title="Magic Dates WordPress Plugin" href="http://wordpress.org/extend/plugins/magic-dates/">κατεβάστε το plugin</a>, αποσυμπιέστε, ανεβάστε στο φάκελο wp-content/plugins και ενεργοποιήστε.</p>
<p>Για να βάλετε ένα τέτοιο αριθμό μέσα στο κείμενο σας, χρησιμοποιείτε το shortcode ως εξής:</p>
<p><strong>[magicdate]2009[/magicdate]</strong></p>
<p>Το παραπάνω θα εμφανίσει <strong>2</strong>. Γιατί; Γιατί αν αφαιρέσουμε από το τρέχων έτος (2011) το 2009 θα μας εμφανίσει <strong>2</strong>. Του χρόνου, θα μας εμφανίσει 3 κ.ο.κ. Εύκολο ε;</p>
<p>Για όσους γράφουν αγγλικό κείμενο υπάρχει μια παράμετρος η οποία δημιουργεί ordinal numbers (1st, 2nd etc) και απλά προσθέστουμε μια παράμετρο στο shortcode ως εξής:</p>
<p><strong>[magicdate ordinalize='true']2008[/magicdate]</strong></p>
<p>Το οποίο και θα εμφανίσει <strong>3rd</strong>.</p>
<p><del>Έκανα πριν λίγο submit στο official WordPress repo οπότε κάποια στιγμή θα εμφανιστεί και εκεί (μαζί με updates που δε βλέπω να χρειάζονται).</del></p>
<p>&nbsp;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/sY4bjEkKmvz1Tjq3OHup0_L_xg0/0/da"><img src="http://feedads.g.doubleclick.net/~a/sY4bjEkKmvz1Tjq3OHup0_L_xg0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sY4bjEkKmvz1Tjq3OHup0_L_xg0/1/da"><img src="http://feedads.g.doubleclick.net/~a/sY4bjEkKmvz1Tjq3OHup0_L_xg0/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=ttOchGX_b30:4G5ce38GA1I:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=ttOchGX_b30:4G5ce38GA1I:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=ttOchGX_b30:4G5ce38GA1I:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=ttOchGX_b30:4G5ce38GA1I:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=ttOchGX_b30:4G5ce38GA1I:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/ttOchGX_b30" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=1073</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=1073</feedburner:origLink></item>
		<item>
		<title>the Esc Key</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/xJ9hxoIXfx0/</link>
		<comments>http://theportraitofageek.com/blog/?p=1067#comments</comments>
		<pubDate>Sun, 19 Jun 2011 09:35:19 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Απόψεις]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=1067</guid>
		<description><![CDATA[Θα μεταφέρω απλά κάποια πράγματα από το (super) site τους. Το Esc Key είναι ένα μουσικό project από τους DJ ALX, Lexx, Rainman. Ρετρό, ψυχεδέλεια και βρώμικα beats μπλεγμένα με ιστορίες που σε βάζουν να σκεφτείς.[...] Το Esc key είναι στην πραγματικότητα ένα DIY project σε όλα τα επίπεδα. Μουσική, σύλληψη, ηχογράφηση, παραγωγή, φωτογράφιση, πολυμέσα, προώθηση, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theportraitofageek.com/blog/wp-content/uploads/2011/06/esckey.png" alt="the Esc Key" /></p>
<p>Θα μεταφέρω απλά κάποια πράγματα από το (super) site τους.</p>
<blockquote><p>Το Esc Key είναι ένα μουσικό project από τους DJ ALX, <a href="http://lexx.gr/">Lexx</a>, Rainman. Ρετρό, ψυχεδέλεια και βρώμικα beats μπλεγμένα με ιστορίες που σε βάζουν να σκεφτείς.[...]</p>
<p>Το Esc key είναι στην πραγματικότητα ένα DIY project σε όλα τα επίπεδα. Μουσική, σύλληψη, ηχογράφηση, παραγωγή, φωτογράφιση, πολυμέσα, προώθηση, έκδοση, εικαστικά. Με εξαίρεση το γραφίστικο κομμάτι. Σόρυ, δεν ζωγραφίζουμε καλά <img src="http://esc2enter.com/wp-includes/images/smilies/icon_smile.gif" alt=":)" /> . Είναι απόδειξη ότι το μόνο που χρειαζόμαστε είναι όρεξη, όραμα και πείσμα. Οι εταιρείες είναι περιττές, και οι χρηματικοί περιορισμοί σε κάνουν απλά πιο ευφάνταστο στις λύσεις που θα βρεις.</p></blockquote>
<h3>Facts:</h3>
<ol>
<li>Το teaser ακούγεται απλά καταπληκτικό. Θέλω το αντίγραφο μου τώρα.</li>
<li>LP / CD σε 300 αντίγραφα. Έχουν απομείνει 274. Ακόμα εδώ;</li>
<li><a href="http://esc2enter.com/order/">O R D E R</a></li>
</ol>
<p>&nbsp;</p>

<p><a href="http://feedads.g.doubleclick.net/~a/kMNkfUoF_rEV5nVMnIA86GhYcGc/0/da"><img src="http://feedads.g.doubleclick.net/~a/kMNkfUoF_rEV5nVMnIA86GhYcGc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/kMNkfUoF_rEV5nVMnIA86GhYcGc/1/da"><img src="http://feedads.g.doubleclick.net/~a/kMNkfUoF_rEV5nVMnIA86GhYcGc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=xJ9hxoIXfx0:Nn87CQ7gU9w:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=xJ9hxoIXfx0:Nn87CQ7gU9w:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=xJ9hxoIXfx0:Nn87CQ7gU9w:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=xJ9hxoIXfx0:Nn87CQ7gU9w:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=xJ9hxoIXfx0:Nn87CQ7gU9w:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/xJ9hxoIXfx0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=1067</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=1067</feedburner:origLink></item>
		<item>
		<title>WordPress custom widgets</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/tpNOue28Wao/</link>
		<comments>http://theportraitofageek.com/blog/?p=1061#comments</comments>
		<pubDate>Tue, 14 Jun 2011 20:52:16 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=1061</guid>
		<description><![CDATA[Στο cssigniter.com έχουμε αναπτύξει μια σειρά από custom widgets. Flickr, Twitter κ.α. Κάθε νέο widget που φτιάχνουμε μπαίνει σε ένα φάκελο /widgets στο μικρό μας framework και έτσι κάθε φορά που φτιάχνουμε ένα νέο theme απλά κρατάμε τα widgets που είναι απαραίτητα για το συγκεκριμένο theme και τα ενεργοποιούμε στο functions.php Όμως, επειδή κάθε widget [...]]]></description>
			<content:encoded><![CDATA[<p>Στο <a title="Premium WordPress themes" href="http://www.cssigniter.com">cssigniter.com</a> έχουμε αναπτύξει μια σειρά από custom widgets. Flickr, Twitter κ.α. Κάθε νέο widget που φτιάχνουμε μπαίνει σε ένα φάκελο <strong>/widgets</strong> στο μικρό μας framework και έτσι κάθε φορά που φτιάχνουμε ένα νέο theme απλά κρατάμε τα widgets που είναι απαραίτητα για το συγκεκριμένο theme και τα ενεργοποιούμε στο <strong>functions.php</strong></p>
<p>Όμως, επειδή κάθε widget στην ουσία πρόκειται για ένα αρχείο .php για να μην χάνουμε τη μπάλα ενεργοποιούμε όλα τα widgets αυτόματα με ένα μικρό php script. Έχουμε λοιπόν στο <strong>functions.php</strong> την εξής δήλωση:</p>
<pre>

require_once('functions/ci_widgets.php');
</pre>
<p>Αυτό σημαίνει πως μέσα στο theme folder υπάρχει ένας φάκελος που λέγεται <strong>/functions </strong>και εκεί μέσα υπάρχει το script με το όνομα <strong>ci_widgets.php</strong>. Τι κάνουμε εκεί μέσα:</p>
<pre>
$path = dirname(__FILE__).'/widgets';

if ($handle = opendir($path)) {
    while (false !== ($file = readdir($handle))) {
		if ($file != "." &#038;&#038; $file != "..") {
        	$file_info = pathinfo($path.'/'.$file);
        	if($file_info['extension']=='php')
        		require_once($path.'/'.$file);
        }
    }
	closedir($handle);
}
</pre>
<p>Λέμε λοιπόν να πάει να κοιτάξει σε ένα ακόμα φάκελο που υπάρχει μέσα στο theme μας με το όνομα <strong>/widgets</strong> και εκεί να ψάξει να βρεί όλα τα αρχεία με κατάληξη .php και φυσικά να τα κάνει include (require_once). Easy eh? Δείτε τη παρακάτω εικόνα για να δείτε και τη δομή των φακέλων σε ένα cssigniter theme:</p>
<p><img src="http://theportraitofageek.com/blog/wp-content/uploads/2011/06/custom_widgets.png" alt="" /></p>

<p><a href="http://feedads.g.doubleclick.net/~a/4UCSJyAtCem-O6XqAHNKEshWN5w/0/da"><img src="http://feedads.g.doubleclick.net/~a/4UCSJyAtCem-O6XqAHNKEshWN5w/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4UCSJyAtCem-O6XqAHNKEshWN5w/1/da"><img src="http://feedads.g.doubleclick.net/~a/4UCSJyAtCem-O6XqAHNKEshWN5w/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=tpNOue28Wao:5637XUVme_Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=tpNOue28Wao:5637XUVme_Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=tpNOue28Wao:5637XUVme_Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=tpNOue28Wao:5637XUVme_Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=tpNOue28Wao:5637XUVme_Y:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/tpNOue28Wao" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=1061</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=1061</feedburner:origLink></item>
		<item>
		<title>Προσθήκη custom widget στο Dashboard του WordPress</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/5As9VqRVjEY/</link>
		<comments>http://theportraitofageek.com/blog/?p=1052#comments</comments>
		<pubDate>Sun, 12 Jun 2011 11:53:48 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=1052</guid>
		<description><![CDATA[Φαντάζομαι πως όλοι όσοι έχετε ανοίξει το admin panel του WordPress θα έχετε δει το Dashboard το οποίο μοιάζει με τη παραπάνω εικόνα. Όλα αυτά τα boxes είναι widgets τα οποία μπορούμε να εμφανίσουμε / κρύψουμε και να τοποθετήσουμε με drag &#38; drop όπως εμείς θέλουμε. Το WordPress μας δίνει τη δυνατότητα να βάλουμε και [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theportraitofageek.com/blog/wp-content/uploads/2011/06/dashboard.png" alt="WordPress Dashboard" /></p>
<p>Φαντάζομαι πως όλοι όσοι έχετε ανοίξει το admin panel του WordPress θα έχετε δει το Dashboard το οποίο μοιάζει με τη παραπάνω εικόνα. Όλα αυτά τα boxes είναι widgets τα οποία μπορούμε να εμφανίσουμε / κρύψουμε και να τοποθετήσουμε με drag &amp; drop όπως εμείς θέλουμε. Το WordPress μας δίνει τη δυνατότητα να βάλουμε και δικά μας, custom widgets σε αυτή την οθόνη. Ας δούμε λοιπόν πως μπορούμε να προσθέσουμε ένα απλό widget με οδηγίες χρήσης του WordPress για τον πελάτη μας.</p>
<p><span id="more-1052"></span></p>
<h3>Functions.php ή Plugin?</h3>
<p>Aυτή είναι μια ερώτηση που πρέπει να σας απασχολεί κάθε φορά που προσθέτετε λειτουργικότητα στο WordPress. Το functions.php σχετίζεται άμεσα με το theme, που σημαίνει πως αν αλλάξει το theme έχει πάρει μαζί του και τη λειτουργικότητα του functions.php ενώ το plugin παραμένει ως έχει.</p>
<p>Συνήθως σε sites πελατών είναι δύσκολο να αλλάξει το theme, αλλά εμείς για να δούμε πως φτιάχνουμε και ένα πολύ εύκολο και μικρό plugin για το WordPress θα το κάνουμε έτσι.</p>
<p>Φτιάχνουμε λοιπόν ένα νέο φάκελο στο κατάλογο plugins του WordPress όπου και θα αποθηκεύσουμε τα αρχεία του plugin μας. Ας τον πούμε ci-client-instructions. Εκεί δημιουργούμε ένα νέο αρχείο php με το όνομα ci-client-instructions.php. Εκεί μέσα τώρα γράφουμε τον παρακάτω κώδικα:</p>
<pre>
/*
Plugin Name: Client Instructions
Plugin URI: Your plugin instructions website
Description: A good description about your plugin
Version: 1.0
Author: Gerasimos Tsiamalos
Author URI: http://www.theportraitofageek.com/
*/

function ci_client_instructions() {
echo "Εδώ γράφουμε τις οδηγίες για τον πελάτη μας";
}

function ci_do_client_instructions() {
wp_add_dashboard_widget('ci_client_instructions_widget', 'Client Instructions', 'ci_client_instructions');
}

add_action('wp_dashboard_setup', 'ci_do_client_instructions');

?&gt;
</pre>
<p>Αφού συμβουλευτήκαμε το Codex, μάθαμε πως πρέπει να κάνουμε 3 πράγματα για να προσθέσουμε ένα widget στο Dashboard:</p>
<ol>
<li>Χρειαζόμαστε μια function με το περιεχόμενο του widget (<strong>ci_client_instructions()</strong>)</li>
<li>Χρειαζόμαστε άλλη μια function για να &#8220;ενημερώσουμε&#8221; το WordPress ότι έχουμε ένα νέο widget around (<strong>ci_do_client_instructions()</strong>). Εκεί μέσα χρησιμοποιούμε τη function wp_add_dashboard_widget του WordPress για να προσθέσουμε το widget.</li>
<li>Και τέλος πρέπει να πούμε στο WordPress πότε να προσθέσει το widget στο dashboard. Χρησιμοποιούμε το hook <strong>wp_dashboard_setup</strong> και φυσικά όταν έρθει η ώρα του να τρέξει, δημιουργεί και το  δικό μας widget.</li>
</ol>
<p>That&#8217;s all!</p>
<h3>Πιθανές βελτιώσεις</h3>
<p>Βλέπουμε ότι στη 1η function, εκεί δηλαδή που θα γράψουμε τις οδηγίες προς τον πελάτη μας παίζουμε με echo. Αν θέλουμε να προσθέσουμε, κείμενο, λίστες ακόμα και video τότε καλό θα ήταν να γράψουμε τις οδηγίες σε ένα άλλο αρχείο .php και να κρατήσουμε καθαρό το plugin μας. Κάπως έτσι:</p>
<pre>
function ci_client_instructions() {
require_once(WP_PLUGIN_DIR . "/ci-client-instructions/ci-instructions.php");
}
</pre>
<p>Φτιάχνουμε λοιπόν ένα ακόμη αρχείο μέσα στο φάκελο του plugin και το ονομάζουμε ci-instructions.php. Εκεί γράφουμε τις οδηγίες μας. Το δικό μου παράδειγμα εμφανίζεται έτσι:</p>
<p><img src="http://theportraitofageek.com/blog/wp-content/uploads/2011/06/dashboard2.png" alt="" /></p>
<h3>Download</h3>
<p>Αν θέλετε να παίξετε <a href="http://www.theportraitofageek.com/plugins/ci-client-instructions.zip">μπορείτε να κατεβάσετε το μικρό plugin</a> που μόλις φτιάξαμε και να το χρησιμοποιείτε σαν σκελετό για τις οδηγίες χρήσης προς τους πελάτες σας.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/NqRmcX2XIMYm2bbrl1J4lPdPPv4/0/da"><img src="http://feedads.g.doubleclick.net/~a/NqRmcX2XIMYm2bbrl1J4lPdPPv4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/NqRmcX2XIMYm2bbrl1J4lPdPPv4/1/da"><img src="http://feedads.g.doubleclick.net/~a/NqRmcX2XIMYm2bbrl1J4lPdPPv4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=5As9VqRVjEY:O2ssaXMSwx8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=5As9VqRVjEY:O2ssaXMSwx8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=5As9VqRVjEY:O2ssaXMSwx8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=5As9VqRVjEY:O2ssaXMSwx8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=5As9VqRVjEY:O2ssaXMSwx8:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/5As9VqRVjEY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=1052</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=1052</feedburner:origLink></item>
		<item>
		<title>Σύγκριση προϊόντων στο WordPress</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/_7ODbdT24aw/</link>
		<comments>http://theportraitofageek.com/blog/?p=1025#comments</comments>
		<pubDate>Wed, 08 Jun 2011 18:43:40 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=1025</guid>
		<description><![CDATA[Φαντάζομαι όλοι έχετε δει αυτό το feature σε διάφορα sites. Αν όχι, ρίξτε μια ματιά στη σελίδα σύγκρισης προϊόντων του Multirama (τυχαία επιλεγμένη). Επιλέξτε κάποια από τα προϊόντα και απλά πατήστε σύγκριση. Βλέπετε τα προϊόντα σε σειρά ώστε να μπορείτε να συγκρίνετε τιμές, features κλπ. Ας δούμε πως μπορούμε να φτιάξουμε κάτι παρόμοιο στο WordPress. [...]]]></description>
			<content:encoded><![CDATA[<p>Φαντάζομαι όλοι έχετε δει αυτό το feature σε διάφορα sites. Αν όχι, ρίξτε μια ματιά στη <a href="http://www.multirama.gr/products/category?catid=010100">σελίδα σύγκρισης προϊόντων του Multirama</a> (τυχαία επιλεγμένη). Επιλέξτε κάποια από τα προϊόντα και απλά πατήστε σύγκριση. Βλέπετε τα προϊόντα σε σειρά ώστε να μπορείτε να συγκρίνετε τιμές, features κλπ.</p>
<p>Ας δούμε πως μπορούμε να φτιάξουμε κάτι παρόμοιο στο WordPress.<br />
<span id="more-1025"></span><br />
Θα μπορούσαμε να φτιάξουμε ένα custom post type το οποίο θα ονομάζαμε products αλλά για να κρατήσουμε τα πράγματα απλά, θα χρησιμοποιήσουμε το default content type το οποίο ακούει στο όνομα Posts.</p>
<p>Αν θέλετε μπορείτε παράλληλα να ανοίξετε το WordPress που έχετε εγκατεστημένο τοπικά ή σε κάποιο test server και να παίξετε. Για να δούμε.</p>
<p>1. Φτιάχνω μερικά &#8220;προϊόντα&#8221;, στην ουσία posts τα οποία βάζω σε μια κατηγορία που ονομάζω &#8220;Products&#8221;.</p>
<p>2. Φτιάχνω ένα custom page template με όνομα template-products.php, δημιουργώ μια καινούργια σελίδα, κάνω assign το template που μόλις έφτιαξα και εκεί εμφανίζω τα προϊόντα μου κάπως έτσι:</p>
<pre>
&lt;?php
/**
 * Template Name: Products
 */

get_header(); ?&gt;

		&lt;div id=&quot;container&quot; class=&quot;one-column&quot;&gt;
			&lt;div id=&quot;content&quot; role=&quot;main&quot;&gt;
			&lt;form method=&quot;get&quot; action=&quot;http://localhost/wordpress/compare-products/&quot;&gt;
			&lt;?php
				 query_posts(&#039;cat=19&#039;);
				 while (have_posts() ) : the_post(); ?&gt;
					&lt;div class=&quot;product&quot;&gt;
						&lt;input type=&quot;checkbox&quot; name=&quot;productIDs[]&quot; value=&quot;&lt;?php the_ID(); ?&gt;&quot; /&gt;
						&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
						&lt;p&gt;&lt;?php the_content(); ?&gt;&lt;/p&gt;
					&lt;/div&gt;
				&lt;?php endwhile; ?&gt;
			&lt;/div&gt;&lt;!-- #content --&gt;
			&lt;p&gt;&lt;input type=&quot;submit&quot; id=&quot;submit&quot; value=&quot;Compare products&quot; /&gt;&lt;/p&gt;
			&lt;/form&gt;
		&lt;/div&gt;&lt;!-- #container --&gt;

&lt;?php get_footer(); ?&gt;
</pre>
<p>Όπως βλέπουμε πρόκειται για ένα απλό template με κάποιες μικρές διαφορές σε σχέση με κάποιο τυπικό page template. Για αρχή βλέπουμε ότι το loop είναι κλεισμένο μέσα σε ένα form tag. Επίσης, μέσα στο loop όπου εμφανίζουμε τον τίτλο του προϊόντος και το περιεχόμενο έχουμε ένα checkbox. Το checkbox αυτό θα εμφανιστεί δίπλα σε κάθε προϊόν ώστε να μπορεί ο χρήστης να επιλέξει ποιά προϊόντα θέλει να συγκρίνει. Βλέπουμε πως έχουμε δώσει ένα name=productIDs[] στο checkbox και σαν value περνάμε το μοναδικό για κάθε προϊόν, post_ID. Άρα πλέον μπορούμε, αφού επιλέξουμε κάποια προϊόντα, να πατήσουμε το &#8220;Compare products&#8221; και να μεταφερθούμε στη σελίδα σύγκρισης. Την οποία ακόμα δεν έχουμε φτιάξει και πριν την κατασκευή της πρέπει να διευκρινήσουμε κάποια πράγματα.</p>
<p>Πατώντας &#8220;Compare products&#8221; ξέρω πως θα μεταφερθώ στο URL http://localhost/wordpress/complate-products/ γιατί έτσι έχω δηλώσει στο action του form. Πηγαίνοντας όμως εκεί, στο URL πλέον θα υπάρχουν και οι τιμές των checkboxes που έχω επιλέξει με την εξής μορφή (λόγω GET):</p>
<p><code><strong>http://localhost/wordpress/compare-products/?productIDs[0]=506&#038;productIDs[1]=504</strong></code></p>
<p>Στο παραπάνω παράδειγμα έχω επιλέξει 2 προϊόντα προς σύγκριση με post_ID 506 &#038; 504 αντίστοιχα. Φαντάζομαι πως έχετε ήδη καταλάβει τι πάω να κάνω. Θα περάσω αυτές τις 2 τιμές σε ένα καινούργιο template. Περνώντας αυτές τις τιμές σαν array σε ένα νέο query μέσω του WP_Query θα εμφανίσω μόνο τα posts με τα συγκεκριμένα post_ID. Έτσι ακριβώς, αλλά έχουμε ένα  μικρό πρόβλημα. Το πρόβλημα είναι πως το WordPress ότι δεν γνωρίζει στο URL απλά το απωθεί. Δε του δίνει σημασία. Το γράφει ρε παιδί μου, πως το λένε. Κάπως λοιπόν πρέπει να πούμε στο WordPress ότι θέλουμε να μας κάνει τη χάρη και να μας αφήσει να περάσουμε τις συγκεκριμένες τιμές. Πως; <strong>A filter hook</strong> που ακούει στο όνομα <strong>query_vars</strong>. <a href="http://codex.wordpress.org/Custom_Queries">Δείτε περισσότερες πληροφορίες σχετικά στο αντίστοιχο section του Codex</a>.</p>
<p>Ανοίγουμε λοιπόν το functions.php στο theme μας (ή αν θέλετε κάντε το plugin, ώστε σε πιθανή αλλαγή του theme, η λειτουργικότητα να συνεχίσει να υπάρχει):</p>
<pre>
add_filter('query_vars', 'parameter_queryvars' );
function parameter_queryvars( $qvars )
{
	$qvars[] = 'productIDs';
	return $qvars;
}
</pre>
<p>Είμαστε έτοιμοι. Το WordPress γνωρίζει την ύπαρξη της μεταβλητής productIDs και θα μας αφήσει να περάσουμε τις τιμές της στο επόμενο template το οποίο δεν είναι άλλο από το compare-products. Φτιάχνουμε λοιπόν ένα δεύτερο αρχείο με όνομα template-compare.php με τον παρακάτω κώδικα:</p>
<pre>
&lt;?php
/**
 * Template Name: Compare products
 */

get_header(); ?&gt;

		&lt;div id=&quot;container&quot; class=&quot;one-column&quot;&gt;
			&lt;div id=&quot;content&quot; role=&quot;main&quot;&gt;
			&lt;?php
				 $products_to_compare 	= array();
				 $products_to_compare 	= get_query_var(&#039;productIDs&#039;);
				 $products_to_compare 	= array_map(&#039;intval&#039;, $products_to_compare);
				 $products_query 		= new WP_Query(array(&#039;post__in&#039; =&gt; $products_to_compare));
				 while ($products_query-&gt;have_posts() ) : $products_query-&gt;the_post(); ?&gt;
					&lt;div class=&quot;product&quot;&gt;
						&lt;h2&gt;&lt;?php the_title(); ?&gt;&lt;/h2&gt;
						&lt;p&gt;&lt;?php the_content(); ?&gt;&lt;/p&gt;
					&lt;/div&gt;
				&lt;?php endwhile; ?&gt;

			&lt;/div&gt;&lt;!-- #content --&gt;
		&lt;/div&gt;&lt;!-- #container --&gt;

&lt;?php get_footer(); ?&gt;
</pre>
<p>Φτιάχνουμε μια νέα σελίδα (Pages -> Add new) και της ορίζουμε σαν template το &#8220;Compare products&#8221; template που μόλις φτιάξαμε. Για να δούμε όμως τι ακριβώς συμβαίνει σε αυτό το template. Βασικά όλη η δουλειά γίνεται στις 4 πρώτες γραμμές PHP.</p>
<pre>
$products_to_compare 	= array();
$products_to_compare 	= get_query_var('productIDs');
$products_to_compare 	= array_map('intval', $products_to_compare);
$products_query 		= new WP_Query(array('post__in' => $products_to_compare))
</pre>
<p>Τι κάνουμε; </p>
<ol>
<li> Δημιουργούμε ένα νέο array. </li>
<li>Μέσα σε αυτό το array πλέον αποθηκεύουμε τις τιμές που υπάρχουν στη μεταβλητή productIDS που περάσαμε από το URL. </li>
<li> Α bit of security. Οι τιμές που έρχονται από το URL πρέπει να είναι ακέραιοι (intval).</li>
<li>Δημιουργούμε το δικό μας query όπου λέμε να μας εμφανίσει στο loop μόνο όσα posts βρίσκονται μέσα στο array που δημιουργήσαμε.</li>
</ol>
<p>Και έτσι φτιάξαμε το δικό μας σύστημα σύγκρισης προϊόντων στην ουσία με.. 4 γραμμές κώδικα. Easy eh;</p>
<h3>Πιθανές βελτιώσεις</h3>
<ol>
<li>Α bit of JS στο πρώτο template αν θέλουμε να περιορίσουμε τα προϊόντα προς επιλογή.</li>
<li>Σε περίπτωση που η JS είναι off, έναν έλεγχο στο 2ο template για το αν έχουν επιλεχθεί προϊόντα και αν όχι να εμφανίσουμε ένα μήνυμα λάθους.</li>
</ol>
<p>Για περισσότερες πληροφορίες σχετικά με το <a href="http://codex.wordpress.org/Class_Reference/WP_Query">WP_Query, δείτε την αντίστοιχη σελίδα στο Codex.</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/tCFwtlixeQvK4rKTVNV5lnvcdvw/0/da"><img src="http://feedads.g.doubleclick.net/~a/tCFwtlixeQvK4rKTVNV5lnvcdvw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tCFwtlixeQvK4rKTVNV5lnvcdvw/1/da"><img src="http://feedads.g.doubleclick.net/~a/tCFwtlixeQvK4rKTVNV5lnvcdvw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=_7ODbdT24aw:0I7Nl-TYXiI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=_7ODbdT24aw:0I7Nl-TYXiI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=_7ODbdT24aw:0I7Nl-TYXiI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=_7ODbdT24aw:0I7Nl-TYXiI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=_7ODbdT24aw:0I7Nl-TYXiI:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/_7ODbdT24aw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=1025</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=1025</feedburner:origLink></item>
		<item>
		<title>WordCamp 2011</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/V5BYZvgW3Ok/</link>
		<comments>http://theportraitofageek.com/blog/?p=1014#comments</comments>
		<pubDate>Mon, 06 Jun 2011 08:33:11 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Απόψεις]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=1014</guid>
		<description><![CDATA[Το Σάββατο που μας πέρασε λοιπόν, έγινε το 2o WordCamp Greece και περάσαμε super. Δε ξέρω για εσάς αλλά εγώ γέλασα. Πολύ. Συναντήθηκα με τα υπόλοιπα σπασικλόπαιδα της γειτονιάς και τα είπαμε. Γενικά ωραίο πράγμα ρε παιδί μου. Πριν πω λίγα πράγματα για τις παρουσιάσεις, θα ήθελα να πω ένα μεγάλο bravo στον Βασίλη Κανονίδη [...]]]></description>
			<content:encoded><![CDATA[<p>Το Σάββατο που μας πέρασε λοιπόν, έγινε το 2o WordCamp Greece και περάσαμε super. Δε ξέρω για εσάς αλλά εγώ γέλασα. Πολύ. Συναντήθηκα με τα υπόλοιπα σπασικλόπαιδα της γειτονιάς και τα είπαμε. Γενικά ωραίο πράγμα ρε παιδί μου.</p>
<p>Πριν πω λίγα πράγματα για τις παρουσιάσεις, θα ήθελα να πω ένα μεγάλο bravo στον Βασίλη Κανονίδη για τη διοργάνωση. Δε ξέρω, αλλά μου φαίνεται βουνό η οργάνωση ενός τέτοιου event και ενώ ο Βασίλης μου είπε πως ήταν αρκετά αγχωμένος, όλη η ομάδα έδειχνε πως είχε total control και αυτό εμένα με έκανε να νιώθω πως όλα κυλάνε ρολόι. Έτσι έγινε δηλαδή.</p>
<h2>Παρουσιάσεις</h2>
<h3><a title="Δημήτρης Καλογερόπουλος" href="http://www.twitter.com/dkalo">Δημήτρης Καλογερόπουλος</a></h3>
<p>Φάνηκε πως αγαπάει το blogging. Άκουσα πράγματα που δεν πέρασαν ποτέ από το κεφάλι μου και με &#8220;κράτησε&#8221;. Δε νομίζω πως έλειπε κάτι. Πολύ καλή δουλειά.</p>
<h3><a title="Ζαχαρένια Ατζιτζικάκη" href="http://www.twitter.com/sugarenia">Ζαχαρένια Ατζιτζικάκη</a></h3>
<p>Μου έδωσε την αίσθηση ότι ζει κάνοντας παρουσιάσεις. Άνετη, to the point, στήριξε με επιχειρήματα τα slides της και γενικά μια από αυτές τις παρουσιάσεις που αν δεν ήσουν εκεί, έχασες.</p>
<h3><a title="Θάνος Παπαβασιλείου" href="http://www.twitter.com/klou">Θάνος Παπαβασιλείου</a></h3>
<p>Τι να πεις για το Klou μας; Γουστάρει design, είναι άνετος και ενώ ξέρω ότι δεν είχε χρόνο να προετοιμαστεί μας τα είπε με το δικό του μοναδικό τρόπο. Ψηφίζουμε klou για νέο δήμαρχο. Τέτοια φάση.</p>
<h3><a title="Απόστολος Παπαδόπουλος" href="http://www.twitter.com/apas">Απόστολος Παπαδόπουλος</a></h3>
<p>Είναι πιτσιρικάς, γουστάρει WordPress, κάνει τα πρώτα του βήματα και φαίνεται αλλά ο ενθουσιασμός του για το WordPress λέει πολλά. Ίσως τον ήθελα λίγο πιο παθιασμένο. Δε κολλάμε όμως. Συνεχίζουμε.</p>
<h3><a title="Βασίλης Μαστοροστέργιος" href="http://www.twitter.com/vmasto">Βασίλης Μαστοροστέργιος</a></h3>
<p>Τούτος εδώ να δείτε που μια μέρα θα τον ψάχνουμε να μας δώσει αυτόγραφο. Πιστεύω πως έκανε τη πιο συγκροτημένη παρουσίαση για WordCamp. Αν θέλετε να μάθετε τι είναι το WordPress, καλό είναι να δείτε τη παρουσίαση του. Respect.</p>
<h3><a title="Γεράσιμος Τσιάμαλος" href="http://www.twitter.com/tsiger">Εγώ</a></h3>
<p>Δε ξέρω ειλικρινά. Διάλεξα ένα θέμα που ξέρω ότι καίει πολλούς αλλά επειδή αποφάσισα να παίξω το δικηγόρο του διαβόλου και να περιγράψω το γιατί ΔΕΝ χρειαζόμαστε WordPress frameworks, ίσως να μη πέρασα ακριβώς αυτό που ήθελα. Ελπίζω να πήγανε όλα καλά.</p>
<h3><a title="Φώτης Αλεξάνδρου" href="http://www.twitter.com/falexandrou">Φώτης Αλεξάνδρου</a></h3>
<p>Όταν είσαι καλός developer ακόμα και κώδικα να μη μας δείξεις, θα το καταλάβουμε. Ο Φώτης έκανε μια από τις παρουσίασεις που περίμενα πως και πως να δω γιατί ήθελα να δω γιατί κάποιος να μπει στη διαδικασία να γεφυρώσει 2 τόσο διαφορετικά πράγματα όπως το WordPress και το Codeigniter. Το τελευταίο του slide μας εξήγησε γιατί. Αγαπάμε Φώτη.</p>
<h3><a title="Βασίλης Κανονίδης" href="http://www.twitter.com/basilakis">Βασίλης Κανονίδης</a></h3>
<p>Ο Βασίλης μας μίλησε για το BuddyPress και ενώ δεν ασχολούμαι καθόλου με τη συγκεκριμένη τεχνολογία, πήρα μια πολή καλή εικόνα για το τι είναι και πως μπορώ να το χρησιμοποιήσω. Βελτιωμένος αισθητά από τη περσινή του παρουσίαση που πιστεύω πως το άγχος του ήταν ακόμα μεγαλύτερο.</p>
<h3><a title="Γιώργος Κανελλόπουλος" href="http://www.twitter.com/gkanel">Γιώργος Κανελλόπουλος</a></h3>
<p>Δεν έμεινα σε καμία παρουσίαση του. Δε ξέρω τι είπε και δεν με ενδιαφέρει. Πριν αρχίσετε να πετάτε πέτρες, να πω πως τον άνθρωπο δεν τον γνωρίζω και κανένα πρόβλημα δεν έχω μαζί του. Όσοι με γνωρίζετε ξέρετε πως αν είχα, εδώ θα ήταν το μέρος που θα το έγραφα. Έχω πρόβλημα όμως με τη στάση της Microsoft, η οποία προφανώς ήθελε τον κ. Κανελλόπουλο εκτός αίθουσας τουλάχιστον σε όσες παρουσιάσεις ήμουν εγώ μέσα. Δε μπορώ να φανταστώ ότι ήταν δική του αποφάση. Προφανώς είναι μια γραμμή. Την οποία δε δέχομαι σε ένα event για ανοιχτό λογισμικό. Το να είσαι κ. Microsoft χορηγός σε ένα event πρώτον δε σε χρήζει &#8220;Αρχηγό&#8221; και δεύτερο απαιτεί οι αντιπρόσωποι σου να κάνουνε blend in με το υπόλοιπο community.</p>
<p><del>Το γεγονός πως την ίδια μέρα έγινε και το OpenCoffee δε θα το σχολιάσω. Δε μπορώ να φανταστώ και ούτε θα πιστέψω ποτέ πως υπάρχει δόλος πίσω από αυτό. Γιατί αν υπάρχει και το μάθω πάλι θα διαβάσετε άσχημα πράγματα εδώ, με ονόματα και διευθύνσεις. Οπότε ας το κρατήσουμε όλο αυτό με ένα τίτλο &#8220;κακή συννενόηση&#8221;.</del></p>
<p><a href="http://gatos.posterous.com/wordcampgre-opencoffee">Ο Γιώργος</a> απάντησε στο θέμα και προσωπικά με καλύπτει. Δεν υπήρχε περίπτωση να είναι και διαφορετικά τα πράγματα.</p>
<p>Επειδή ήδη έχουν <a href="http://www.gnomon-design.gr/blog/%CE%A4%CE%B9-%CE%AD%CE%BC%CE%B1%CE%B8%CE%B1-%CE%B1%CF%80%CF%8C-%CF%84%CE%BF-2%CE%BF-wordcamp-greece/">γραφτεί</a> <a href="http://kloudesign.gr/2011/06/wordcamp-2-the-next-day/">αρκετά</a> <a href="http://el.porcupine.gr/journal/post/wordcamp-2011-the-aftermath">posts</a> <a href="http://www.jelly.gr/el/2011/06/pame-salonik/">εντυπώσεων</a> σχετικά με το WordCamp, αν νιώθετε άσχημα να κράξετε με έντονο τρόπο σε ένα από τα υπόλοιπα posts, feel free to do that here.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/xHCgW3mIuwdl6Ak0mBSHHtZ6z5Y/0/da"><img src="http://feedads.g.doubleclick.net/~a/xHCgW3mIuwdl6Ak0mBSHHtZ6z5Y/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/xHCgW3mIuwdl6Ak0mBSHHtZ6z5Y/1/da"><img src="http://feedads.g.doubleclick.net/~a/xHCgW3mIuwdl6Ak0mBSHHtZ6z5Y/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=V5BYZvgW3Ok:Lxk_YqoJPPY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=V5BYZvgW3Ok:Lxk_YqoJPPY:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=V5BYZvgW3Ok:Lxk_YqoJPPY:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=V5BYZvgW3Ok:Lxk_YqoJPPY:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=V5BYZvgW3Ok:Lxk_YqoJPPY:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/V5BYZvgW3Ok" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=1014</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=1014</feedburner:origLink></item>
		<item>
		<title>WordCamp Greece 2011</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/x0zl7u407kg/</link>
		<comments>http://theportraitofageek.com/blog/?p=1009#comments</comments>
		<pubDate>Mon, 23 May 2011 09:34:38 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Απόψεις]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=1009</guid>
		<description><![CDATA[Όπως πέρυσι έτσι και φέτος αποφάσισα να στηρίξω το WordCamp Greece. Στο προηγούμενο μόνο με τη παρουσία / παρουσίαση μου, στο φετινό με τη πρωτοβουλία που πήρα να σχεδιάσω το site. Είμαι πολύ ικανοποιημένος με το αποτέλεσμα και δείχνει να λειτουργεί αλλά ας μη μείνουμε άλλο εκεί μιας και δεν είναι εκεί το νόημα. Επίσης [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://theportraitofageek.com/blog/wp-content/uploads/2011/05/wp.png" class="alignleft" alt="WordCamp Greece 2011" /> Όπως πέρυσι έτσι και φέτος αποφάσισα να στηρίξω το <a href="http://2011.wordcamp.gr/">WordCamp Greece</a>. Στο προηγούμενο μόνο με τη παρουσία / παρουσίαση μου, στο φετινό με τη πρωτοβουλία που πήρα να σχεδιάσω το site. Είμαι πολύ ικανοποιημένος με το αποτέλεσμα και δείχνει να λειτουργεί αλλά ας μη μείνουμε άλλο εκεί μιας και δεν είναι εκεί το νόημα. Επίσης θα κάνω μια παρουσίαση με θέμα τα WordPress frameworks. Some interesting points in there.</p>
<p>Για μένα το προηγούμενο WordCamp, εκτός από κάποιες ενστάσεις που είχα, ήταν γενικά μια επιτυχία. Κόσμος, παρουσιάσεις, geeks και γενικά ένας μικρός χαμός. Φέτος μαθαίνω πως ο κόσμος θα είναι περισσότερος, οι παρουσίασεις δείχνουν άκρως ενδιαφέρουσες και γενικά i can&#8217;t wait.</p>
<p>Τα WordCamps στηρίζονται στη καλή πίστη των εθελοντών και φυσικά στην αγάπη μας για το WordPress. Το άμεσο ώφελος που έχουμε όλοι όσοι βρεθούμε εκεί, με όποιο τρόπο δεν έχει σημασία, είναι πως γνωρίζουμε ποιοί και με ποιό τρόπο ασχολούνται με τη πλατφόρμα και φυσικά η ανταλλαγή απόψεων / ιδεών.</p>
<p>Περισσότερες πληροφορίες σχετικά με το event θα βρείτε στο site του <a href="http://2011.wordcamp.gr/">WordCamp Greece</a>.</p>
<h3>Open source is open source</h3>
<p>Μπορεί να μην έχω καλές παρτίδες με το Joomla αλλά αυτό δε σημαίνει τίποτα. Για τους Joomla fans λοιπόν που αμφιβάλλω να μη το πήρανε χαμπάρι, τους ενημέρωνω πως στις 28/29 Μαϊου παίζει το <a href="http://joomladay.gr/">JoomlaDay</a>, και φυσικά τέτοια events δεν είναι να τα χάνετε αν φυσικά σας ενδιαφέρει το Joomla.  I &lt;3 your site btw Joomladay people. Really good job!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/iGsj1V1i2h8DG2bQ8RRj_2CKHfM/0/da"><img src="http://feedads.g.doubleclick.net/~a/iGsj1V1i2h8DG2bQ8RRj_2CKHfM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/iGsj1V1i2h8DG2bQ8RRj_2CKHfM/1/da"><img src="http://feedads.g.doubleclick.net/~a/iGsj1V1i2h8DG2bQ8RRj_2CKHfM/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=x0zl7u407kg:sbiMuvseFDU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=x0zl7u407kg:sbiMuvseFDU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=x0zl7u407kg:sbiMuvseFDU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=x0zl7u407kg:sbiMuvseFDU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=x0zl7u407kg:sbiMuvseFDU:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/x0zl7u407kg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=1009</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=1009</feedburner:origLink></item>
		<item>
		<title>Eίσαι έτοιμος για responsive web design;</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/6NjphJyUOLo/</link>
		<comments>http://theportraitofageek.com/blog/?p=1001#comments</comments>
		<pubDate>Thu, 14 Apr 2011 09:37:16 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Απόψεις]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=1001</guid>
		<description><![CDATA[Εκτός και αν ζείς σε κάποιο σημείο του πλανήτη όπου βομβαρδίζεται ή έχει υποστεί ζημιές από κάποιο τσουνάμι, σίγουρα θα έχει πάρει το μάτι σου κάποιο άρθρο για τις εξελίξεις στο χώρο του web design που ακούνε στο όνομα responsive web design. Όλα ξεκίνησαν (δε ξεκίνησαν τότε αλλά σίγουρα η κατάσταση πήρε τα πάνω της [...]]]></description>
			<content:encoded><![CDATA[<p>Εκτός και αν ζείς σε κάποιο σημείο του πλανήτη όπου βομβαρδίζεται ή έχει υποστεί ζημιές από κάποιο τσουνάμι, σίγουρα θα έχει πάρει το μάτι σου κάποιο άρθρο για τις εξελίξεις στο χώρο του web design που ακούνε στο όνομα responsive web design.</p>
<p>Όλα ξεκίνησαν (δε ξεκίνησαν τότε αλλά σίγουρα η κατάσταση πήρε τα πάνω της μιας και η ιδέα υπάρχει από το 2005) με ένα <a href="http://www.alistapart.com/articles/responsive-web-design/">άρθρο του Ethan Marcotte</a>. Σε λιγότερο από ένα χρόνο οι εξελίξεις είναι ραγδαίες και πολλοί άρχισαν να γράφουν, να βγάζουν frameworks και γενικά να πηγαίνουν το πράγμα ένα βήμα παραπέρα.</p>
<p><span id="more-1001"></span></p>
<p>Έρχεσαι λοιπόν εσύ φίλε μου freelancer ή μικρό μου web design-άδικο και σκέφτεσαι πως πρέπει όλα αυτά να τα υιοθετήσεις και να τα βάλεις στη προσφορά σου για το επόμενο σου project. Σκέφτεσαι πως μόνο καλό θα σου κάνει μιας και προσπαθείς να διαφοροποιηθείς (ξανά) στην αγορά και να προσθέσεις μια ακόμα υπηρεσία που κάθε πελάτης θα λατρέψει. Βάζει και ένα τυχαίο ποσό στο τέλος της προσφορά σου για &#8220;responsive web design&#8221; και μια χαρά.</p>
<p>Η διαδικασία που ακολουθείς μέχρι σήμερα είναι να έρχεται ο πελάτης ζητώντας προσφορά (είτε να τον φέρεις εσύ με τις μαγικές ικανότητες πωλήσεων που έχεις), να του στέλνεις ένα ερωτηματολόγιο ώστε να πάρεις μια εικόνα για το project, λίγα τηλέφωνα, λίγες συναντήσεις και να ανοίξεις το Photoshop ή κατευθείαν τον browser να σχεδιάσεις το site του. Λίγες μέρες μετά έχεις μια πρόταση έτοιμη και τη στέλνεις στο πελάτη για feedback (#epic fail αλλά αυτό είναι άλλο post). To τηλέφωνο χτυπάει και αρχίζουν τα μαγικά:</p>
<ul>
<li>&#8220;Ξέρεις, θέλω λίγο πιο σκούρο το πάνω μέρος του site&#8221;</li>
<li>&#8220;Μεγαλύτερα γράμματα και ίσως κάποια άλλη γραμματοσειρά&#8221;</li>
<li>&#8220;Το κειμενάκι που έχουμε στη κεντρική άλλαξε το με αυτό που σου στέλνω. Δε μου αρέσει&#8221;</li>
</ul>
<p>Και πολλά άλλα τέτοια. Αναρωτιέσαι λοιπόν που έκανες το λάθος και ανακαλύπτεις πως δουλεύεις σε ένα ακόμα project που ενώ ξεκίνησε με τις καλύτερες των προθέσεων σου, θα καταλήξει κάπου καλά κρυμμένο χωρίς να γνωρίζει κανείς ότι το έφτιαξες εσύ μιας και το τελικό αποτέλεσμα δεν είναι αυτό που ήθελες και πλέον ο πελάτης έχει το πάνω χέρι στα πάντα. Ταυτίστηκες ε; Ε ναι, είναι διαδικασία που όλοι έχουμε περάσει.</p>
<p>Μη μπερδεύεσαι, θα επιστρέψω και στο responsive της υπόθεσης. </p>
<p>Χρονικά έχεις πέσει έξω με τις μπάντες και ανακαλύπτεις πως η αρχική σου προσφορά ήταν για τα μπάζα μιας και έχεις μπεί μέσα σχεδόν άλλα τόσα από αυτά που ζήτησες εξ&#8217; αρχής. Έχεις &#8220;παντρευτεί&#8221; τον πελάτη και δε περνάει μέρα όπου δε θα σηκώσει το τηλέφωνο να σου ζητήσει &#8220;πραγματάκια&#8221; να κάνεις στο site του. Όλεθρος.</p>
<p>Κάποια στιγμή ανακαλύπτεις πως οικονομικά έχεις μπεί μέσα, αλλά έχεις να φτιάξεις και mobile έκδοση του site ή όλο το site να είναι device agnostic όπως λένε τώρα τελευταία. Χρόνια πολλά, με τις υγείες σου. </p>
<p>Τελικά δεν ήταν και τόσο καλή ιδέα. Ποιό responsive; Έδω σου έχει σπάσει τα @@ στη desktop έκδοση όπου και επισκέπτεται με Internet Explorer 7.</p>
<p>Όλα αυτά συμβαίνουν γιατί πολύ απλά έχεις ξεχάσει βασικές ενέργειες πριν πέσεις με τα μούτρα στην υλοποίηση του project. Στα λέω περιληπτικά και σε τυχαία σειρά γιατί είναι δική σου δουλειά να πας να μάθεις ποιά είναι η σωστή:</p>
<ul>
<li>Στρατηγική περιεχομένου</li>
<li>Site diagrams</li>
<li>Concept models</li>
<li>Wireframes</li>
<li>Χρονοδιάγραμμα έργου</li>
<li>Personas</li>
<li>Συμφωνία ενεργειών περιόδου συντήρησης</li>
<li>Target audience research</li>
</ul>
<p>Κάποια συνδέονται μεταξύ τους. Κάποια όχι. Μερικά είναι άκρως απαραίτητα, μερικά όχι. Υπάρχουν και άλλα στάδια που δεν έχω συμπεριλάβει στη λίστα μου. Δεν έχει σημασία.</p>
<p>Σημασία έχει πως από τη στιγμή που ακόμα υπάρχουν τέτοια κενά στη διαδικασία παραγωγής ενός site, τότε μάλλον πρέπει για λίγο να βάλεις στην άκρη το responsive της υπόθεσης και να ασχοληθείς λίγο με βασικότερα πράγματα. Μετά μπορείς εύκολα μέσα σε όλη αυτή τη διαδικασία να συμπεριλάβεις και το device agnostic part που έλεγα παραπάνω. </p>
<p>Και έρχεσαι εσύ ως φυσιολογικός επαγγελματίας / φουκαριάρης και με ρωτάς:</p>
<p>Καλά ρε συ Γεράσιμε είσαι με τα καλά σου; Πως είναι δυνατόν να συμπεριλάβω όλα αυτά τα πράγματα σε project των 1500 ευρώ;</p>
<ol>
<li>Τη τιμή την έβγαλες από το κεφάλι σου, οπότε κάτσε φάε κακά τώρα.</li>
<li> Το ότι ένα project είναι μικρό δε σημαίνει ότι πρέπει να αποφύγεις αυτά τα βήματα. Αλλά ούτε να αφιερώσεις 2 μήνες για όλα αυτά. Υπάρχουν τρόποι όλα τα παραπάνω και άλλα τόσα να τα ξεμπερδέψεις σε 1 εβδομάδα max. για ένα μικρό-μεσαίο project.</li>
<li> Αν γουστάρεις απλά να λες πως έχεις πελατολόγιο το οποίο όμως δε σου αφήνει χρόνο για νέα projects και τη βρίσκεις να σε παίρνουν τηλέφωνο κάθε 3 και λίγο ζητώντας (for free) επεμβάσεις στο site τους, μην τα συμπεριλαμβάνεις. Ο καθένας όπως τη βρίσκει.</li>
</ol>
<p>Αν μετά από όλα αυτά συνεχίζεις να πιστεύεις πως πρέπει να επενδύσεις resources και να ασχοληθείς με το responsive web design τότε συγνώμη που σε έβαλα να διαβάσεις όλο αυτό το πράγμα γιατί πολύ απλά δεν απευθύνομαι σε σένα. Sorry!</p>
<p>Αν όμως βρίσκεις πολλά κοινά σημεία σε αυτό το άρθρο με τη καθημερινότητα σου, take a step back and reconsider.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/gliiIWHuUxmPOEqud2MjxQAnhe4/0/da"><img src="http://feedads.g.doubleclick.net/~a/gliiIWHuUxmPOEqud2MjxQAnhe4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/gliiIWHuUxmPOEqud2MjxQAnhe4/1/da"><img src="http://feedads.g.doubleclick.net/~a/gliiIWHuUxmPOEqud2MjxQAnhe4/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=6NjphJyUOLo:zKLcY36kodc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=6NjphJyUOLo:zKLcY36kodc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=6NjphJyUOLo:zKLcY36kodc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=6NjphJyUOLo:zKLcY36kodc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=6NjphJyUOLo:zKLcY36kodc:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/6NjphJyUOLo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=1001</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=1001</feedburner:origLink></item>
		<item>
		<title>True?</title>
		<link>http://feedproxy.google.com/~r/theportraitofageek/BxBy/~3/-wYYnjtS3IM/</link>
		<comments>http://theportraitofageek.com/blog/?p=989#comments</comments>
		<pubDate>Fri, 04 Feb 2011 12:15:59 +0000</pubDate>
		<dc:creator>tsiger</dc:creator>
				<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://theportraitofageek.com/blog/?p=989</guid>
		<description><![CDATA[I always start by talking to the client about what they&#8217;re trying to achive and, if possible, talking to their customers or users. Every project starts out with research and discovery so that i can make informed decisions Jason Santa Maria]]></description>
			<content:encoded><![CDATA[<blockquote><p>I always start by talking to the client about what they&#8217;re trying to achive and, if possible, talking to their customers or users. Every project starts out with research and discovery so that i can make informed decisions</p>
</blockquote>
<p><a href="http://www.jasonsantamaria.com">Jason Santa Maria</a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/Iv0wJcmMNuy16a43we9Ic4FxIXc/0/da"><img src="http://feedads.g.doubleclick.net/~a/Iv0wJcmMNuy16a43we9Ic4FxIXc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Iv0wJcmMNuy16a43we9Ic4FxIXc/1/da"><img src="http://feedads.g.doubleclick.net/~a/Iv0wJcmMNuy16a43we9Ic4FxIXc/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=-wYYnjtS3IM:md2avlFNnjc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=-wYYnjtS3IM:md2avlFNnjc:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=-wYYnjtS3IM:md2avlFNnjc:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?a=-wYYnjtS3IM:md2avlFNnjc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/theportraitofageek/BxBy?i=-wYYnjtS3IM:md2avlFNnjc:V_sGLiPBpWU" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/theportraitofageek/BxBy/~4/-wYYnjtS3IM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://theportraitofageek.com/blog/?feed=rss2&amp;p=989</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://theportraitofageek.com/blog/?p=989</feedburner:origLink></item>
	</channel>
</rss>

