<?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>Francesco Corsentino .net &#187; Tutorial</title> <atom:link href="http://corsentino.net/category/tutorial/feed/" rel="self" type="application/rss+xml" /><link>http://corsentino.net</link> <description>blogger // writer // student</description> <lastBuildDate>Sat, 04 Feb 2012 08:44:11 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.2.1</generator> <item><title>Attuare una campagna marketing: quali sono le fasi principali?</title><link>http://corsentino.net/2011/07/campagna-marketing-fasi-principali/</link> <comments>http://corsentino.net/2011/07/campagna-marketing-fasi-principali/#comments</comments> <pubDate>Wed, 27 Jul 2011 06:30:34 +0000</pubDate> <dc:creator>Kiko</dc:creator> <category><![CDATA[Professione blogger]]></category> <category><![CDATA[Tutorial]]></category> <category><![CDATA[Web Marketing]]></category> <category><![CDATA[sem]]></category> <category><![CDATA[seo]]></category> <category><![CDATA[web-marketing]]></category> <guid
isPermaLink="false">http://corsentino.net/?p=1623</guid> <description><![CDATA[Il SEM (Social Engine Marketing) è una disciplina volta a promuovere la presenza online di un sito web (definizione certo sintetica, ma che rende bene l&#8217;idea circa la finalità). Mettere in pratica una campagna di marketing su Internet non è roba semplice, in quanto sono coinvolte tutta una serie di altre discipline e passi che...]]></description> <content:encoded><![CDATA[<p>Il SEM (<em>Social Engine Marketing</em>) è una disciplina volta a promuovere la presenza online di un sito web (definizione certo sintetica, ma che rende bene l&#8217;idea circa la finalità).</p><p>Mettere in pratica una campagna di marketing su Internet non è roba semplice, in quanto sono coinvolte tutta una serie di altre discipline e passi che non basterebbe un solo libro per <em>raccontarla</em>. Ad ogni buon conto, si possono ridurre tutti i compiti di gestione a 4 semplici passi illustrati in figura.</p><div
id="attachment_1624" class="wp-caption aligncenter" style="width: 510px"><a
href="http://corsentino.net/wp-content/uploads/sem.png"><img
class="size-full wp-image-1624" title="Passi di una campagna SEM" src="http://corsentino.net/wp-content/uploads/sem.png" alt="" width="500" height="209" /></a><p
class="wp-caption-text">I passi basilari di una campagna SEM</p></div><ol><li><strong>Pianificazione della campagna</strong>. Qual è il mercato contro cui intendiamo batterci? L&#8217;analisi di mercato può risultare un&#8217;operazione molto complessa e conviene affidarsi a esperti del settore. Occorre individuare chi sono i principali <em>competitor</em> e, di questi, studiarne i trucchi e i fattori chiave che hanno permesso loro di crescere e arrivare al successo;</li><li><strong>Contenuti</strong>. Quando il piano sarà chiaro ecco che bisogna passare alla creazione dei contenuti della nostra campagna. Attenzione: un contenuto può andar bene per un dato veicolo informativo, ma potrebbe risultare poco efficace se cambiamo il mezzo tramite il quale arrivare all&#8217;utente finale. Veicolo, mezzo? Useremo un blog per promuovere la campagna di marketing o dovremo agire sui forum? Contenuti testuali o multimediali? Una semplice landing page o un intero sito? Non necessariamente bisogna operare un <em>aut au</em>t fra questi nuovi mezzi di comunicazione, piuttosto è bene scegliere il giusto mix fra blog, forum, testo, video, sito e landing page al fine di ottenere il miglior risultato possibile;</li><li><strong>Attuazione della campagna</strong>. Stabilito il piano e creati i contenuti si passerà alla pratica vera e propria. Occorre non perdere di vista l&#8217;obiettivo e attuare le strategie messe a punto nei passi precedenti, con rigore e disciplina, con tenacia e perseveranza;</li><li><strong>Monitoring dei risultati</strong>. Una campagna di marketing mira a ridurre i costi di gestione, aumentare il <em>ROI </em>(<em>Return On Investment</em>) e far crescere le conversioni. Nei costi di gestione rientra ogni tipologia di spesa affrontata in relazione, diretta o indiretta, alla campagna in questione. Il <em>ROI</em> è semplicemente il guadagno registrato al netto dell&#8217;investimento sostenuto: è il parametro principe per misurare l&#8217;efficienza, ancorché l&#8217;efficacia, di una campagna. Le conversioni sono invece una misura di un preciso evento inerente la campagna: per esempio una conversione potrebbe essere relativa al numero di prodotti acquistati in rapporto al totale dei visitatori, o il numero di registrazioni al sito in rapporto agli accessi unici, e via così. Un monitoring costante e preciso permette di poter intervenire in tempo reale sulla campagna così da ottimizzarne i risultati.</li></ol><p>Questi sono, a mio <span>avvis</span><span>o, i passi basilari da cui non si può sfuggire per attuare una campagna di marketing che sia completa e di successo.</span></p> ]]></content:encoded> <wfw:commentRss>http://corsentino.net/2011/07/campagna-marketing-fasi-principali/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>LaTeX su piattaforma Microsoft Windows: guida (quasi) completa</title><link>http://corsentino.net/2011/03/latex-su-piattaforma-microsoft-windows-guida-quasi-completa/</link> <comments>http://corsentino.net/2011/03/latex-su-piattaforma-microsoft-windows-guida-quasi-completa/#comments</comments> <pubDate>Mon, 14 Mar 2011 07:30:01 +0000</pubDate> <dc:creator>Kiko</dc:creator> <category><![CDATA[Featured]]></category> <category><![CDATA[Resources]]></category> <category><![CDATA[Tutorial]]></category> <category><![CDATA[Vivere scrivendo]]></category> <category><![CDATA[adobe]]></category> <category><![CDATA[dekstop-publishing]]></category> <category><![CDATA[ghostscript]]></category> <category><![CDATA[ghostview]]></category> <category><![CDATA[latex]]></category> <category><![CDATA[microsoft]]></category> <category><![CDATA[pdf]]></category> <category><![CDATA[postscript]]></category> <category><![CDATA[windows]]></category> <guid
isPermaLink="false">http://corsentino.net/?p=1413</guid> <description><![CDATA[Nel 1978 un professore della Stanford University, Donald Knuth, famoso per il suo libro The Art of Computer Programming, rilasciò un programma per il desktop publishing che chiamò TeX (che è pure il linguaggio di markup col quale creare i documenti). TeX risultò essere molto potente fin dai primi rilasci, ma era pure uno strumento...]]></description> <content:encoded><![CDATA[<p>Nel 1978 un professore della <em>Stanford University</em>, <a
href="http://it.wikipedia.org/wiki/Donald_Knuth" target="_blank">Donald Knuth</a>, famoso per il suo libro <em>The Art of Computer Programming</em>, rilasciò un programma per il <em>desktop publishin</em>g che chiamò <a
href="http://uk.tug.org/" target="_blank">TeX</a> (che è pure il linguaggio di markup col quale creare i documenti).</p><p><a
href="http://uk.tug.org/" target="_blank">TeX</a> risultò essere molto potente fin dai primi rilasci, ma era pure uno strumento piuttosto complesso a fronte di risultati finali eccezionali. Fu apprezzato dagli accademici in generale perché facilitava (nonostante ciò possa sembrare in contraddizione con la dicitura &#8220;strumento complesso&#8221;) la scrittura di documenti scientifici di ogni tipo. Dato il suo livello di complessità <a
href="http://it.wikipedia.org/wiki/Leslie_Lamport" target="_blank">Leslie Lamport</a> decise di derivarne un ulteriore linguaggio di markup operante a più alto livello. Nel 1985 venne così lanciato <a
href="http://www.latex-project.org/" target="_blank">LaTeX</a>, distribuito sotto licenza free. <a
href="http://www.latex-project.org/" target="_blank">LaTeX</a> conobbe sin da subito un grandissimo successo ed è diventato praticamente quasi uno standard in moltissime università e centri accademici di tutto il mondo per la redazione di documentazione tecnica (fra scienziati, matematici, fisici, chimici, ingegneri e, indifferentemente, cultori delle materie letterarie).</p><p>E&#8217; disponibile per tutte le piattaforme, quindi ampiamente utilizzabile su sistemi <a
href="http://corsentino.net/tag/microsoft/">Microsft</a>, <a
href="http://corsentino.net/tag/apple/">Apple</a> o <a
href="http://corsentino.net/tag/linux/">Unix-like</a>.</p><p>In questo articolo mostreremo il suo uso su piattaforma <a
href="http://corsentino.net/tag/windows/">Microsoft Windows</a>, accennando ai vari strumenti che possono essere di aiuto a quanti intendono utilizzarlo per produrre materiale scientifico o di qualsivoglia natura.</p><p>Vi anticipo che potete soddisfare ogni vostro dubbio visitando il <a
href="http://www.latex-project.org/" target="_blank">sito ufficiale della distribuzione</a> o il <a
href="http://www.guit.sssup.it/index.php" target="_blank">Gruppo di Utilizzatori Italiani di TeX</a>.</p><h3><a
name="Passo preliminare"></a>Passo preliminare: installazione di GhostScript</h3><p><a
href="http://corsentino.net/wp-content/uploads/GPL-Ghostscript.jpg"><img
class="alignleft size-full wp-image-1422" title="GPL-Ghostscript" src="http://corsentino.net/wp-content/uploads/GPL-Ghostscript.jpg" alt="" width="120" height="120" /></a>Per prima cosa bisogna installare <em>GhostScript</em>, cioè una sorta di programmi capaci di interpretare il linguaggio <a
href="http://it.wikipedia.org/wiki/PostScript" target="_blank">PostScript</a> (che serve a descrivere pagine, testi e immagini). Il miglior candidato è proprio <em>GhostScript</em> (scaricabile da <a
href="http://pages.cs.wisc.edu/~ghost/doc/GPL/index.htm" target="_blank">questo</a> indirizzo) per il quale esiste una comoda interfaccia grafica e cioè <em>GhostView</em> (il cui sito ufficiale è <a
href="http://pages.cs.wisc.edu/~ghost/gsview/" target="_blank">questo</a>).</p><p>Il processo di installazione è semplicissimo e dovrete solamente rispondere a un paio di domande. Occhio soprattutto a quando vi viene segnalato quali formati di file saranno associati a <em>GhostView</em>: in particolare dovrete decidere se aprire i PDF col suddetto programma o continuare a usare il software che più vi piace (tipo <a
href="http://get.adobe.com/it/reader/" target="_blank">Adobe Reader</a>).</p><h3>Scaricare e installare MiKTeX, questo sconosciuto</h3><p><a
href="http://www.miktex.org/" target="_blank">MiKTeX</a> è una delle più importanti distribuzioni disponibile per Microsoft Windows capace di mettere a punto un completo ambiente <em>TeX/LaTeX</em>. Nell&#8217;ottobre del 2010 è stata rilasciata la versione numero 2.9 (supporta ora pure <em>Windows 7</em>).</p><p><img
class="aligncenter size-full wp-image-1423" title="miktex" src="http://corsentino.net/wp-content/uploads/miktex.gif" alt="" width="316" height="200" /></p><p>Dal sito ufficiale potete scaricare il <a
href="http://www.miktex.org/2.9/setup" target="_blank">file di installazione</a>. Ne esistono di due tipi:</p><ol><li>il <strong>NetInstaller</strong> che consta di appena 6MB e che si occupa di scaricare tutto da Internet e procedere così a una installazione completa e completamente personalizzabile;</li><li>l&#8217;<strong>installer</strong> completo di 140MB.</li></ol><p>Le schermate del wizard di installazione sono semplici da capire. Vi verrà chiesta l&#8217;impostazione predefinita sul formato di carta, linguaggi e pacchetti da includere durante l&#8217;installazione vera e propria che porterà via qualche minuto del vostro prezioso tempo.</p><p>Terminata la fase di installazione ecco che potete cominciare a lavorare sul serio producendo la vostra documentazione.</p><h3>Cosa serve per lavorare con LaTeX?</h3><p>Di norma le vostre necessità riguardano un buon editor di testi, un programma di grafica e un visualizzatore di file <em>PostScript</em> o <em>PDF</em>. Cominciamo da questi ultimi perché qui il lavoro è veramente già fatto. Se non avete già <a
href="http://get.adobe.com/it/reader/" target="_blank">Adobe Reader</a> potete comunque contare su <em>GhostView</em> che abbiamo installato al <a
href="#Passo preliminare">passo 1</a> di questo piccolo tutorial.</p><p>Passando agli <strong>editor di testo</strong> la scelta è veramente molto soggettiva. Si può propendere per un software completo o uno minimale. In generale serve un comunissimo editor <em>ASCII</em> dove editare i sorgenti <em>LaTeX</em>, quindi basterebbe il <a
href="http://www.microsoft.com/windows" target="_blank">Notepad</a> di <em>MS Windows </em>o il leggerissimo <a
href="http://www.pspad.com/" target="_blank">PSPad</a>. Oppure potete affidarvi a un editor per programmatori e di seguito vi propongo una breve lista (sono rilasciati sotto licenza freeware o software libero):</p><ul><li><a
href="http://www.geany.org/" target="_blank">Geany</a>;</li><li><a
href="http://notepad-plus-plus.org/" target="_blank">Notepad++</a>;</li><li><a
href="http://www.scintilla.org/SciTE.html" target="_blank">SciTE</a>.</li></ul><p><img
class="aligncenter size-full wp-image-1424" title="lyx" src="http://corsentino.net/wp-content/uploads/lyx.png" alt="" width="450" height="366" /></p><p>Si passa poi agli editor specifici per <em>LaTeX</em> (anche se quelli più completi e professionali sono disponibili per ambienti Unix-like):</p><ul><li><a
href="http://www.lyx.org/" target="_blank">LyX</a> (assimilabile come un Word Processor a tutti gli effetti);</li><li><a
href="http://www.texniccenter.org/" target="_blank">TeXnicCenter</a> (il mio preferito);</li><li><a
href="http://www.texmacs.org/" target="_blank">GNU TeXmacs</a> (il più completo, a mio parere).</li></ul><p>Altri software interessanti riguardano la <strong>gestione dei formati grafici</strong>. In particolare io prediligo <a
href="http://live.gnome.org/Dia" target="_blank">DIA</a> per la costruzione di grafici, grazie al buon numero di librerie messe a disposizione dell&#8217;utente, praticamente adatte a qualunque tipologia di disegno (schemi elettrici, grafici UML, diagrammi di tutti i tipi). Se dovete lavorare con i <strong>grafici matematici</strong> allora non potete non usare <a
href="http://www.gnuplot.info/" target="_blank">GNUplot</a>, un <em>must</em> in questo settore. Potete pure usare un comodo <a
href="http://corsentino.net/tag/web-application/">tool online</a> quale <a
href="http://corsentino.net/2009/12/creare-grafici-e-diagrammi-con-draw-anywhere/">Draw Anywhere</a>. Io comunque preferisco <em>DIA</em> per la facilità con cui si convertono le immagini nel formato <a
href="http://it.wikipedia.org/wiki/Encapsulated_PostScript" target="_blank">eps</a>.</p><p>Un altro software che vi propongo è <a
href="http://bibdesk.sourceforge.net/" target="_blank">BibDesk</a>, ottimo per <strong>gestire un database bibliografico</strong> dal quale estrarre gli elementi da inserire nel vostro documento, in modo facile, pratico e veloce.</p><p>Infine ecco due riferimenti per ottenere da un sorgente <em>LaTeX</em> un <strong>formato ipertestuale</strong>, quale una pagina web: <a
href="http://www.cse.ohio-state.edu/~gurari/TeX4ht/mn.html" target="_blank">TeX4ht</a> e <a
href="http://saftsack.fs.uni-bayreuth.de/~latex2ht/" target="_blank">Latex2HTML</a>.</p><p>Tu che programmi usi?</p> ]]></content:encoded> <wfw:commentRss>http://corsentino.net/2011/03/latex-su-piattaforma-microsoft-windows-guida-quasi-completa/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>CakePHP su MacOS X con MAMP: la console</title><link>http://corsentino.net/2010/12/cakephp-su-macos-x-con-mamp-la-console/</link> <comments>http://corsentino.net/2010/12/cakephp-su-macos-x-con-mamp-la-console/#comments</comments> <pubDate>Thu, 23 Dec 2010 12:19:15 +0000</pubDate> <dc:creator>Kiko</dc:creator> <category><![CDATA[Tutorial]]></category> <category><![CDATA[cakephp]]></category> <category><![CDATA[mysql]]></category> <category><![CDATA[tricks]]></category> <guid
isPermaLink="false">http://corsentino.net/?p=1173</guid> <description><![CDATA[Dopo aver concluso una prima fase di studio di questo stupendo framework, ho deciso di velocizzare i tempi di scrittura di un&#8217;applicazione facendo ricorso alla console e al tool di automatizzazione del codice. In pratica, parimenti a Symfony e Django, CakePHP dà allo sviluppatore la possibilità di leggere il database e generare le classi relative...]]></description> <content:encoded><![CDATA[<p>Dopo aver concluso una prima fase di studio di questo stupendo <a
href="http://corsentino.net/tag/framework/">framework</a>, ho deciso di velocizzare i tempi di scrittura di un&#8217;applicazione facendo ricorso alla <a
href="http://book.cakephp.org/view/1521/Core-Console-Applications" target="_blank">console</a> e al tool di automatizzazione del codice.</p><p>In pratica, parimenti a <em>Symfony</em> e <em>Django</em>, <a
href="http://corsentino.net/tag/cakephp/">CakePHP</a> dà allo sviluppatore la possibilità di <em>leggere</em> il database e generare le classi relative a controller, modelli e quanto altro. Un comodo aiuto.</p><p>Ora, lavorando su MacBook e adorando <a
href="http://www.mamp.info/" target="_blank">MAMP</a>, al primo comando impartito al mio terminale ho subito registrato una serie di errori. <strong>La console non riesce a lavorare sul database</strong>. Il motivo è semplice se si legge il primo errore stampato a schermo:</p><pre class="brush:bash">
Warning: mysql_connect(): Can't connect to local MySQL server through socket '/var/mysql/mysql.sock' (2) in /Users/kiko/Sites/cakesecurity/cake/libs/model/datasources/dbo/dbo_mysql.php on line 552</pre><p>In pratica non trova il <a
href="http://it.wikipedia.org/wiki/Socket_(reti)" target="_blank">socket</a> di <a
href="http://corsentino.net/tag/mysql/">MySQL</a> e ne ha tutte le ragioni. Usando MAMP infatti tutti gli strumenti di sviluppo web sono riferiti alla directory principale di MAMP. <strong>Come far funzionare la console di CakePHP allora?</strong></p><p>Le soluzioni che mi sono venute in mente sono due. La documentazione relativa alla configurazione del database non suggerisce nulla, quindi o mettiamo mano al codice di CakePHP o aggiriamo il problema in modo meno elegante ma sufficientemente efficace. Ho scelto la seconda via.</p><p>Creiamo un collegamento banale al socket sfruttato da MAMP nella posizione dove il framework pensa di trovare il socket di MySQL e cioè:</p><pre class="brush:bash">sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock</pre><p>Ovviamente la directory <em>/var/mysql</em> va creata prima di lanciare il precedente comando. Fatto ciò tutto lavorerà a meraviglia.</p> ]]></content:encoded> <wfw:commentRss>http://corsentino.net/2010/12/cakephp-su-macos-x-con-mamp-la-console/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Le 5 regole di un buon programmatore</title><link>http://corsentino.net/2010/07/le-5-regole-di-un-buon-programmatore/</link> <comments>http://corsentino.net/2010/07/le-5-regole-di-un-buon-programmatore/#comments</comments> <pubDate>Thu, 15 Jul 2010 15:08:53 +0000</pubDate> <dc:creator>Kiko</dc:creator> <category><![CDATA[Tutorial]]></category> <category><![CDATA[best-practices]]></category> <category><![CDATA[framework]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[software]]></category> <guid
isPermaLink="false">http://corsentino.net/?p=920</guid> <description><![CDATA[Mai come in questo periodo mi sono trovato a scrivere codice e leggere codice (il mio e quello degli altri). Ho dovuto rimettere mano a vecchio codice prodotto, a piccole librerie create in passato (che a distanza di anni non valuto certo con voti altissimi). Mi sono ritrovato a confrontare un vecchio lavoro con quelli...]]></description> <content:encoded><![CDATA[<p>Mai come in questo periodo mi sono trovato a scrivere codice e leggere codice (il mio e quello degli altri). Ho dovuto rimettere mano a vecchio codice prodotto, a piccole librerie create in passato (che a distanza di anni non valuto certo con voti altissimi). Mi sono ritrovato a confrontare un vecchio lavoro con quelli attuali, notando incredibili differenze in fatto di qualità del codice, prima ancora delle qualità delle conosocenze. A quel punto è stato facile derivare un paio di fattori chiave che potrebbero distinguere un buon programmatore da un ottimo programmatore, in attesa di capire la categoria nella quale sistemarmi. Sperando di poter regalare al lettore qualche utile consiglio.</p><h2>1. Documentare il codice</h2><p><a
href="http://corsentino.net/wp-content/uploads/comment.jpg"><img
class="alignleft size-medium wp-image-925" title="Documentare il codice" src="http://corsentino.net/wp-content/uploads/comment-300x75.jpg" alt="" width="300" height="75" /></a>Scrivere chiari e precisi commenti è impagabile. Permettono di <strong>leggere più facilmente il codice</strong> senza impazzire dietro ad algoritmi o funzioni o parametri conditi di mistero e di cui se ne disconosce la funzione, il significato e il motivo della loro esistenza. Gli stessi commenti devono essere scritti con coscienza, senza badare troppo alla forma magari, ma senza rinunciare a una certa formalità e un certo stile. Bisogna cercare di essere sempre chiari nelle spiegazioni e di non dare nulla per scontato. Prolissi e completi quando è rischiesto dal contesto, concisi quando è inutile divagare o spiegare cose ovvie e facilmente deducibili. Quando a distanza di tempo ci toccherà rimettere mano a un codice che abbiamo scritto di nostro pugno e di cui non ricordiamo molto, una veloce lettura dei commenti ci permette in pochi secondi di ritornare nella dimensione di quel progetto. Una buona documentazione del codice permette un alto livello di <em><a
href="http://en.wikipedia.org/wiki/Maintainability" target="_blank">maintainability</a> </em>dello stesso. Nel caso, poi, ci fosse la necessità di collaborare con altri sviluppatori, il non dover chiedere costantemente chiarimenti su una funzione o un parametro permette di velocizzare il lavoro e migliorarlo sotto tutti i punti di vista, in quanto troveremo tutte le risposte dentro i commenti.</p><p>E&#8217; possibile, in ultimo, estrarre dal codice sorgente i commenti formattati in un certo modo e produrre così un manuale per gli sviluppatori o una <em>reference</em>. Tutto in modo automatico ed evitando un doppio e tedioso lavoro. Uno strumento molto apprezzato, in tale contesto, è <a
href="http://www.phpdoc.org/" target="_blank">phpDoc</a> (facile immagine per quale linguaggio).</p><p>Ultima raccomandazione, che a molti potrà suonare <em>strana</em> o esagerata. Se pensate che il vostro codice possa essere degno del panorama internazionale, cioè di un pubblico non solo italiano, allora è bene cominciare a prendere confidenza con l&#8217;inglese-scritto e commentare il codice in questa lingua.</p><h2>2. Scrivere buon codice</h2><p>E&#8217; difficile in poche righe capire cosa significa &#8220;scrivere buon codice&#8221;, ma ci provo. Fra l&#8217;altro è una delle prime cose che uno studente si sente dire da un buon professore. Il pieno significato di un simile avvertimento dal sapore di consiglio lo si coglie solo quando si lavora seriamente a qualche progetto. O quando ci si confronterà con altri sviluppatori. Scrivere buon codice significa <strong>scrivere i nomi delle funzioni scegliendo i migliori termini</strong>, i più espressivi in assoluto. Conviene eliminare inutili abbreviazioni, solo per risparmiare qualche carattere e guadagnare qualche decimo di secondo in più sulla digitazione. Significa scrivere un codice la cui sola lettura è bastevole per capirne l&#8217;implementazione. Generalmente una funzione chilometrica è sintomo di scarsa progettazione del codice, il che non vuol dire che poi le cose non funzionano. La migliore palestra, in tal senso, è la lettura di codice dei migliori programmatori che potete trovare in rete e l&#8217;analisi di progetti dal codice aperto.</p><h2>3. Framework e librerie</h2><p><a
href="http://corsentino.net/wp-content/uploads/framework.jpg"><img
class="alignright size-medium wp-image-926" title="Quale framework?" src="http://corsentino.net/wp-content/uploads/framework-300x199.jpg" alt="" width="300" height="199" /></a><strong>Spesso ci si trova a riscrivere del codice che in realtà esiste già</strong> e probabilmente risulta più completo del nostro, oltre che più efficace. Pertanto prima di buttarsi a capofitto nella scrittura di nuove classi occorre capire cosa offre Internet. Esistono diversi utilissimi siti dove poter trovare del buon codice (citiamo su tutti <a
href="http://sourceforge.net/" target="_blank">Sourceforge</a>). Ed esiste Google per cercare eventuali librerie già pronte per essere usate nei nostri progetti. Se nulla ci soddisfa allora non resta che scrivere quanto abbiamo di bisogno. Se abbiamo intrapreso quest&#8217;ultima strada è buona cosa pensare non al progetto in sé, quanto piuttosto ai problemi generali che intendiamo risolvere. E&#8217; questo infatti il caso migliore per pensare a una libreria riutilizzabile pure in altri progetti. Se poi siamo soliti lavorare su applicazioni che in qualche modo hanno molte somiglianze fra di loro, beh allora conviene pensare a qualche <a
href="http://corsentino.net/tag/framework/">framework</a>. Generalmente una grande società di software ne progetta uno e provvede a usarlo nei vari lavori. Uno sviluppatore indipendente può lanciare a se stesso la stuzzicante sfida di costruirne uno nuovo, o studiare per bene un framework esistente.</p><p>In tal senso <strong>un buon framework</strong> (<a
href="http://rubyonrails.org/" target="_blank">Rails</a> per i programmatori Ruby, <a
href="http://framework.zend.com/" target="_blank">Zend</a> o <a
href="http://www.symfony-project.org/" target="_blank">Symfony</a> per i programmatori <a
href="http://corsentino.net/tag/php/">PHP</a>, <a
href="http://www.djangoproject.com/" target="_blank">Django</a> per gli appassionati di <a
href="http://corsentino.net/tag/python/">Python</a>) <strong>potrebbe essere una ottima base per sviluppare una grande applicazione</strong>. Ma occorre valutare per bene ogni fattore. Spesso un framework rischia di appesantire lo sviluppo e se non riusciamo ad ottimizzarne la configurazione rischiamo pure di ottenere un prodotto dalle scarse performance. E&#8217; opportuno inoltre non focalizzarsi soltanto su un prodotto, ma studiarne più di uno per capire realmente benefici e svantaggi di ognuno di loro. A quel punto, e solo a quel punto, conviene sceglierne uno e provare a padroneggiarlo al meglio. In altre parole: non limitarsi a leggere qualche articolo su Internet (raramente ho scovato delle analisi pienamente oggettive sui software e sui framework), ma sperimentare le soluzioni. Quindi specializzarsi su un prodotto.</p><h2>4. Standard e best practices</h2><p>I design pattern vanno studiati, compresi e quindi usati. Spesso ci si accorge che bravi programmatori li disconoscono ed è un male. Pattern quali <a
href="http://it.wikipedia.org/wiki/Model-View-Controller" target="_blank">MVC</a> offrono una potenza incredibile. E numerosi altri pattern offrono una soluzione ottimale a ricorrenti problemi per quanto riguarda la programmazione (che è poi la definizione di <a
href="http://en.wikipedia.org/wiki/Design_pattern_(computer_science)" target="_blank">Design Pattern</a>).</p><p>Quando parliamo di <em>best practices</em> ci riferiamo a delle esperienze che altri hanno già maturato in qualche settore professionale e nelle quali hanno raggiunto ottimi risultati. Potete pensare a delle regole generali, più o meno formalizzate, o a degli esempi opportunamente descritti e commentati. Per quanto mi riguarda mi sono stati utilissimi i libri di ingegneria del software che ho letto e sui quali ho trovato diversi riferimenti a ulteriori libri e articoli. Potete recuperare su internet diverse interviste a eminenti sviluppatori che raccontano le loro esperienze e le loro idee.</p><h2>5. Pensare. Poi scrivere codice</h2><p><strong><a
href="http://corsentino.net/wp-content/uploads/thinking.jpg"><img
class="alignleft size-medium wp-image-927" title="Pensare pensare pensare" src="http://corsentino.net/wp-content/uploads/thinking-234x300.jpg" alt="" width="234" height="300" /></a>Lontano da una schermo e una tastiera si riesce meglio a programmare</strong>. Sembra un paradosso, invece è la pura realtà. Provate a pensare alla vostra architettura fuori da una finestra di Mac o di Windows o di Linux. Fogli di carta, penna, matita e idee. Non è tempo sprecato, anzi tutto il contrario. Uno schermo con icone e testo, una tastiera e un mouse possono risultare degli elementi destabilizzanti e di distrazione. Si è tentati di scrivere subito del codice funzionante, salvo poi scoprire che una funzione poteva essere scritta meglio, o un insieme di classi poteva essere progettato in modo più intelligente. A quel punto tornare indietro è complicato. <a
href="http://en.wikipedia.org/wiki/Code_refactoring" target="_blank">Rifattorizzare</a> equivale a partire da zero (e a un livello iniziale non si parla certo di <em>refactoring</em>) e, si realizzerà con estremo rammarico, di aver buttato via preziose ore di lavoro.</p><p><strong>Ponderare bene le scelte</strong>: tracciare diagrammi, appuntare note e idee, provare a scrivere un piano di sviluppo. Anche senza badare alla forma, una sorta di <a
href="http://www.kikoweb.org/blog/100/brainstorming-what-is-it" target="_blank">brainstorming</a> solitario. Fate una lista dei problemi da risolvere, delle possibili soluzioni cui avete pensato e, dopo una pausa lontano da tutti e tutto, rileggete con attenzione quanto avete scritto e cercate di capire se è l&#8217;ora di mettersi a scrivere codice o conviene dedicare ancora qualche minuto a questa meditazione pre-sviluppo.</p><p>Non esiste un libro delle soluzioni in informatica. Esiste però una quantità smisurata di <em>handle</em> di soluzioni. Queste <em>maniglie</em> altro non sono che il codice e gli applicativi che altri programmatori hanno già realizzato e rilasciato. <strong>Dare uno sguardo all&#8217;interno del codice scritto da terzi</strong> (e dovete ovviamente scegliere i migliori terzi, perché conviene imparare soltanto dai migliori) si rivelerà presto preziosa lettura e fonte di soluzioni. Il che non vuol dire che dovete copiare, ma certamente ispirarvi. O, più umilmente, imparare.</p> ]]></content:encoded> <wfw:commentRss>http://corsentino.net/2010/07/le-5-regole-di-un-buon-programmatore/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> <item><title>Related posts senza plugin? Si può</title><link>http://corsentino.net/2010/01/related-posts-senza-plugin-si-puo/</link> <comments>http://corsentino.net/2010/01/related-posts-senza-plugin-si-puo/#comments</comments> <pubDate>Mon, 18 Jan 2010 06:30:58 +0000</pubDate> <dc:creator>Kiko</dc:creator> <category><![CDATA[Featured]]></category> <category><![CDATA[Tutorial]]></category> <category><![CDATA[Web Design]]></category> <category><![CDATA[php]]></category> <category><![CDATA[tricks]]></category> <category><![CDATA[wordpress]]></category> <guid
isPermaLink="false">http://corsentino.net/?p=595</guid> <description><![CDATA[Per certi compiti usare un plugin è una forzatura e rende il tutto leggermente più lento. Allora si può ottenere una lista di articoli related senza usare plugin? Nell'articolo la risposta e il codice da utilizzare nei vostri temi.]]></description> <content:encoded><![CDATA[<p>Uno degli strumenti importanti per raccogliere traffico interno al blog è mostrare gli articoli collegati a quello che il visitatore ha appena letto. In WordPress esistono molti plugin che permettono di ottenere un simile risultato. Ne esistono veramente diversi: qualcuno presenta buone caratteristiche, qualcuno ottime funzionalità lato amministrazione. Ma può non essere la soluzione migliore.</p><p>Per certi compiti usare un plugin è una forzatura e rende il tutto leggermente più lento, in quanto il l&#8217;<em>engine</em> di WordPress deve provvedere a caricare ed eseguire tutti i plugin. Meglio eseguire codice scritto apposta. Il file <em>functions.php</em> potrebbe essere il posto ideale per piazzare lì alcune utili funzioni da utilizzare in lungo e in largo nel nostro tema.</p><p>Rispondiamo allora, in questo piccolo articolo, alla domanda del titolo: <strong>si può ottenere una lista di articoli <em>related</em> senza usare plugin?</strong> Certo. Nel mio blog uso il seguente codice.</p><p>L&#8217;idea è di partire dalle categorie in cui è inserito il post. Quindi estrarre da ogni categoria gli articoli collegati. La mia soluzione prevede il recupero a ritroso degli articoli più recenti, questo per evitare di doppiare gli articoli più letti che mostro in un apposito widget (test che ho effettuato!), a meno di casuale coincidenza. Ora gli approcci sono due:</p><ol><li>inserire il codice all&#8217;interno del vostro file <em>functions.php</em> e richiamarlo nel punto esatto del vostro tema;</li><li>inserire il codice all&#8217;interno del file <em>single.php</em>.</li></ol><p>L&#8217;opzione numero 2 mi è sembrata nel mio caso la più logica. Ecco il codice:</p><pre class="brush:php">$_cats = get_the_category($post-&gt;ID);
if ($_cats) {
	$_catid = array();
	foreach($_cats as $_item) $_catid[] = $_item-&gt;term_id;
	$args=array(
		'showposts'=&gt;5,
		'category__in' =&gt; $_catid,
		'post__not_in' =&gt; array($post-&gt;ID),
		'caller_get_posts'=&gt;1
	);
	$_relposts_query = new wp_query($args);
	if( $_relposts_query-&gt;have_posts() ) {
		echo '&lt;h3&gt;Related Posts&lt;/h3&gt;&lt;ul&gt;';
		while ($_relposts_query-&gt;have_posts()) {
			$_relposts_query-&gt;the_post();
		?&gt;
			&lt;li&gt;&lt;?php if(has_post_thumbnail()) echo get_the_post_thumbnail(get_the_id(), array(50,50)); ?&gt;&lt;a href="&lt;?php the_permalink() ?&gt;" rel="bookmark" title="Link to &lt;?php the_title_attribute(); ?&gt;"&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/li&gt;
		&lt;?php
		}
		echo "&lt;/ul&gt;";
	}
}</pre><p>Come potete notare uso la nuova funzione di WordPress relativa ai thumbnails. Per modificare il numero di articoli da mostrare settate il parametro <em>showposts</em> secondo vostre necessità (riferimento <a
href="http://codex.wordpress.org/Function_Reference/WP_Query" target="_blank">wp_query</a>). Per il resto è davvero tutto molto semplice e risulterà chiaro a chi ha un pò d&#8217;esperienza con i temi di WordPress.</p><p><em>P.S.</em></p><p>Simile risultato può essere ottenuto giocando con i tag. Anzicchè prendere a riferimento le categorie, come nel mio caso, è possibile recuperare i tag con cui è stato postato un articolo e da lì recuperare i <em>related posts</em>. In tal caso date un&#8217;occhiata <a
href="http://www.wprecipes.com/how-to-show-related-posts-without-a-plugin" target="_blank">all&#8217;idea</a> di <a
href="http://www.catswhocode.com/" target="_blank">Jean Baptiste Jung</a>.</p> ]]></content:encoded> <wfw:commentRss>http://corsentino.net/2010/01/related-posts-senza-plugin-si-puo/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Far fare la pace tra il nostro feed e FeedBurner</title><link>http://corsentino.net/2009/10/far-fare-la-pace-tra-il-nostro-feed-e-feedburner/</link> <comments>http://corsentino.net/2009/10/far-fare-la-pace-tra-il-nostro-feed-e-feedburner/#comments</comments> <pubDate>Fri, 09 Oct 2009 20:12:46 +0000</pubDate> <dc:creator>Kiko</dc:creator> <category><![CDATA[Tutorial]]></category> <category><![CDATA[feed]]></category> <category><![CDATA[feedburner]]></category> <category><![CDATA[php]]></category> <category><![CDATA[rss]]></category> <category><![CDATA[trick]]></category> <category><![CDATA[wordpress]]></category> <guid
isPermaLink="false">http://corsentino.net/?p=90</guid> <description><![CDATA[Vi è mai capitato di avere problemi con FeedBurner? O avete mai validato il vostro notiziario RSS? Se utilizzate WordPress tale situazione potrebbe improvvisamente materializzarsi e rovinarvi la giornata. Ecco la soluzione.]]></description> <content:encoded><![CDATA[<p>Nemmeno il tempo di gustarsi il lancio di questo nuovo blog che mi ritrovo col primo indisponente problema. Agganciando a FeedBurner il mio flusso RSS noto immediatamente che Google mi rigetta indietro il link. Il sorgente non è ok, ci sono problemi sulla validazione del formato. Molto strano visto che l&#8217;installazione è praticamente nuova e non ho messo mano al codice del <em>core</em> di WordPress. Con molta pazienza leggo i risultati della validazione, meglio gli errori. Problema banale e riassunto in una semplicissima e maledetta frase in inglese:</p><blockquote><p>XML Parsing Error: XML or text declaration not at start of entity</p></blockquote><p>In effetti aprendo il flusso con un programma esterno danno noia a me al validatore le righe bianche, quindi vuote, all&#8217;inizio del notiziario. Cioè è proprio WordPress a creare casino e il motivo è che gli ingegneri della piattaforma hanno leggermente complicato la creazione dell&#8217;RSS. Qual è la soluzione, allora?</p><p>Apriamo con gentilezza il file <strong><em>feed-rss2.php</em></strong> che si trova nella directory <strong><em>wp-includes</em></strong>, partendo dalla root della nostra installazione di WordPress. Nelle primissime righe troviamo le due istruzioni seguenti:</p><pre class="brush:php">header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true);
$more = 1;</pre><p>La loro funzione è importante ai fini della creazione dell&#8217;RSS. Immediatamente dopo questa coppia di istruzioni inseriamo il seguente trick che sistema tutte le cose:</p><pre class="brush:php">$out = ob_get_contents();
$out = str_replace(array("\n", "\r", "\t", " "), "", $input);
ob_end_clean();</pre><p>In particolare prende i caratteri bianchi (sostanzialmente i caratteri di tabulazione che vedete inseriti nell&#8217;array-parametro) iniziali e li pulisce, così come da formato XML. Salviamo tutto quanto e il nostro formato sarà ora valido.</p><p>La stessa identica operazione dovremmo farla sul file <strong><em>feed-rss2-comments.php</em></strong> che si trova sempre nella directory cui prima accennavo. E se utilizzate gli altri formati il consiglio è quello di ripetere la stessa operazione per i file <strong><em>feed-rdf.php</em></strong>, <strong><em>feed-rss.php</em></strong>, f<em><strong>eed-atom.php</strong></em>, f<strong><em>eed-atom-comments.php</em></strong>.</p><p>Fatto ciò <span
style="text-decoration: underline;">FeedBurner</span> non ci distuberà più e noi potremo iniziare a raccogliere statistiche utili per far crescere il nostro blog.</p> ]]></content:encoded> <wfw:commentRss>http://corsentino.net/2009/10/far-fare-la-pace-tra-il-nostro-feed-e-feedburner/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Come mostrare i numeri di WordPress</title><link>http://corsentino.net/2009/10/come-mostrare-i-numeri-di-wordpress/</link> <comments>http://corsentino.net/2009/10/come-mostrare-i-numeri-di-wordpress/#comments</comments> <pubDate>Fri, 09 Oct 2009 17:19:54 +0000</pubDate> <dc:creator>Kiko</dc:creator> <category><![CDATA[Tutorial]]></category> <category><![CDATA[php]]></category> <category><![CDATA[wordpress]]></category> <guid
isPermaLink="false">http://corsentino.net/?p=74</guid> <description><![CDATA[Come si fa a recuperare dal nostro database il numero di post pubblicati? E il numero di categorie, di tag e di commenti? Una semplice soluzione per tutte queste domande.]]></description> <content:encoded><![CDATA[<p>Durante lo sviluppo di un tema per WordPress capita sovente di aver bisogno di alcune piccole utili statistiche. Ad esempio il numero totale di post pubblicati. Oppure quante categorie l&#8217;autore sta usando. E ancora quanti tag, quanti commenti. Molti propongono come soluzione il ricorso a query. Dobbiamo in qualche modo eseguire il collegamento al database e lanciare un&#8217;interrogazione. Esercizio per nulla semplice, ma complicazione del tutto inutile. Perchè non ricorrere a funzioni già preconfezionate?</p><div
class="infobox"><p>Un piccolo esempio d&#8217;uso delle funzioni sotto proposte lo potete vedere qui a fianco, nella sidebar ed esattamente nella sezione di ricerca.</p></div><p>WordPress mette a disposizione dello sviluppatore il set di funzioni che hanno in comune il prefisso <code>wp_count_</code>. Il set che a noi interessa è allora il seguente:</p><ul><li><code>wp_count_posts('posts')</code></li><li><code>wp_count_terms('category')</code></li><li><code>wp_count_terms('post_tag')</code></li><li><code>get_comment_count()</code></li></ul><h2>Trovare il numero totale degli articoli</h2><p>Supponiamo allora di voler mostrare il numero totale degli articoli pubblicati. Per comodità vi consiglio di creare delle piccole funzioni che poi possiamo richiamare liberamente e comodamente in ogni punto dei nostri temi. Il posto migliore dove riunire queste funzioni è il file <code>functions.php</code>. Ricorriamo allora ad un codice simile:</p><pre class="brush:php">	function get_total_posts() {
		$___posts = wp_count_posts('post');            
		return $___posts-&gt;publish;
	}</pre><p>Commentiamo quel poco che c&#8217;è da commentare. Secondo una mia personalissima convenzione amo chiamare tutti gli oggetti che uso in modo indiscriminato anteponendo al loro nome tre caratteri di undescore. Facili da cercare, facili da riconoscere proprio visivamente. La funzione ci restituisce un oggetto dal quale preleviamo il numero di post effettivamente pubblicati, quindi scartando i draft. In realtà il parametro post potrebbe essere anche omesso, in quanto parametro di default, ma per leggibilità io preferisco sempre inserirlo.</p><p>Se vogliamo viceversa fare il conteggio degli articoli in bozza allora modifichiamo leggermente il codice:</p><pre class="brush:php">	function get_total_drafts() {
		$___posts = wp_count_posts('post');            
		return $___posts-&gt;draft;
	}</pre><p>In questo modo è possibile richiamare le due funzioni come segue:</p><pre class="brush:php">        echo get_total_posts();
        echo get_total_drafts();</pre><h2>Trovare il numero di categorie e il numero di tag</h2><p>In modo del tutto analogo presentiamo brevemente il codice per recuperare il numero delle categorie e il numero dei tag:</p><pre class="brush:php">	function get_total_categories() {
		$___cats  = wp_count_terms('category');
		return $___cats;
	}
	function get_total_tags() {
		$___tags  = wp_count_terms('post_tag');
		return $___tags;
	}</pre><p>La chiamata delle due funzioni avviene nel modo canonico. In più vi propongo una semplice funzione che ho scritto per conoscere il numero di articoli pubblicati in una determinata categoria:</p><pre class="brush:php">	function get_posts_in_category($cat) {
		$___catid = get_cat_id($cat);
		$___catobj = get_category($___catid);
		return $___catobj-&gt;category_count;
	}</pre><p>Da notare che il parametro che passate alla funzione è esattamente il nome della categoria di cui volete conoscere il conteggio degli articoli, senza perciò passare dal recupero dell&#8217;ID.</p><h2>Trovare il numero di commenti</h2><p>Ultima funzione. Recuperiamo il numero di commenti registrati nel nostro blog:</p><pre class="brush:php">	function get_total_comments() {
		$___comm  = get_comment_count();                                             
		return $___comm['approved'];
	}</pre><p>Dall&#8217;array possiamo estrarre i seguenti valori:</p><ul><li><code>awaiting_moderation</code> per i commenti in attesa di moderazione;</li><li><code>spam</code> per il totale dei commenti spam;</li><li><code>tot</code> per recuperare il numero totale dei commenti (informazione sulla cui utilità ho qualche dubbio).</li></ul><p>Per consultare la documentazione ufficiale vi rimando al seguente <a
href="http://codex.wordpress.org/Function_Reference/">link</a>. Suggerimenti per migliorare il codice o per velocizzarlo? Alternative alle funzioni proposte?</p> ]]></content:encoded> <wfw:commentRss>http://corsentino.net/2009/10/come-mostrare-i-numeri-di-wordpress/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> </channel> </rss>
