<?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>SlashCode &#187; Generale</title>
	<atom:link href="http://davideaversa.it/slashcode/category/guide/generale/feed/" rel="self" type="application/rss+xml" />
	<link>http://davideaversa.it/slashcode</link>
	<description></description>
	<lastBuildDate>Thu, 03 May 2012 14:28:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Quick Fix: error while loading shared libraries</title>
		<link>http://davideaversa.it/slashcode/2011/09/quick-fix-error-while-loading-shared-libraries/</link>
		<comments>http://davideaversa.it/slashcode/2011/09/quick-fix-error-while-loading-shared-libraries/#comments</comments>
		<pubDate>Thu, 01 Sep 2011 17:46:17 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Generale]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[librerie]]></category>
		<category><![CDATA[sistema operativo]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=790</guid>
		<description><![CDATA[Salve a tutti e ben tornati dalle vacanze!Per riprendere un po&#8217; il ritmo con il blog vi propongo dei mini-post che rispondono velocemente ai più comuni problemi di compilazione ed esecuzione di programmi. Il primo problema che risolveremo è il seguente error while loading shared libraries: libXXX.so: cannot open shared object file: No such file <a href='http://davideaversa.it/slashcode/2011/09/quick-fix-error-while-loading-shared-libraries/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F09%2Fquick-fix-error-while-loading-shared-libraries%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2011/09/quick-fix-error-while-loading-shared-libraries/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Quick Fix: error while loading shared libraries" data-url="http://davideaversa.it/slashcode/2011/09/quick-fix-error-while-loading-shared-libraries/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Salve a tutti e ben tornati dalle vacanze!Per riprendere un po&#8217; il ritmo con il blog vi propongo dei mini-post che rispondono velocemente ai più comuni problemi di compilazione ed esecuzione di programmi.</p>
<p>Il primo problema che risolveremo è il seguente</p>
<div class="codecolorer-container bash dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">error <span style="color: #000000; font-weight: bold;">while</span> loading shared libraries: libXXX.so: cannot open shared object file: No such <span style="color: #c20cb9; font-weight: bold;">file</span> or directory</div></div>
<p>A chi non è capitato almeno una volta nella vita?</p>
<p><span id="more-790"></span></p>
<p><strong>PREMESSA:</strong></p>
<p>Ogni applicazione sul vostro sistema usa delle <strong>librerie</strong>. Una libreria non è altro che un insieme di codice già pronto e compilato che esegue delle funzioni specifiche. Questo permette ad ogni sviluppatore di <em>non reinventare la ruota ogni volta</em> ma di utilizzare il codice già scritto da altri.</p>
<p>Una libreria può essere <strong>statica</strong> (.a) o <strong>dinamica</strong> (.so o .dll su Windows). Nel primo caso la libreria viene inglobata nell&#8217;eseguibile in fase di compilazione, nel secondo invece la libreria è un file separato che viene agganciato all&#8217;eseguibile durante il caricamento del programma da un componente del sistema operativo chiamato <strong>linker dinamico</strong>.</p>
<p>Ovviamente le librerie dinamiche ottimizzano meglio le risorse evitando che del codice uguale venga replicato inutilmente in ogni eseguibile.</p>
<p><strong>CAUSA:</strong></p>
<p>Il messaggio di errore non lascia alcun dubbio: la libreria dinamica non è presente nel sistema o il linker dinamico non riesce a trovarla.</p>
<p><strong>SOLUZIONE:</strong></p>
<p>Se la causa è semplice la soluzione è altrettanto semplice.</p>
<p>Per prima cosa accertiamoci che la libreria sia installata e presente nel nostro sistema. Possiamo verificarlo agilmente con</p>
<p><code class="codecolorer text dawn"><span class="text">locate libXXX.so</span></code></p>
<p>Che restituirà il percorso della libreria.</p>
<p>Se la libreria è stata installata durante la sessione corrente allora dobbiamo forzare l&#8217;aggiornamento del database con</p>
<p><code class="codecolorer text dawn"><span class="text">sudo updatedb</span></code></p>
<p>A questo punto probabilmente la libreria si troverà in un percorso non standard. Non ci resta che aggiungere questo percorso nella lista dei percorsi scandagliati dal linker.</p>
<p>Per fare questo apriamo il file <code class="codecolorer text dawn"><span class="text">/etc/ld.so.conf</span></code> (o creiamo un file nella cartella <code class="codecolorer text dawn"><span class="text">/etc/ld.so.conf.d/</span></code>) e inseriamoci dentro il percorso della libreria, ad esempio:</p>
<p><code class="codecolorer text dawn"><span class="text">/usr/local/lib</span></code>.</p>
<p>A questo punto chiamiamo</p>
<p><code class="codecolorer text dawn"><span class="text">sudo ldconfig</span></code></p>
<p>per aggiornare la cache del linker. </p>
<p>E il gioco è fatto.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=790&amp;md5=73d45dff39a2dba303463570623e8199" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2011/09/quick-fix-error-while-loading-shared-libraries/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F09%2Fquick-fix-error-while-loading-shared-libraries%2F&amp;language=it_IT&amp;category=text&amp;title=Quick+Fix%3A+error+while+loading+shared+libraries&amp;description=Salve+a+tutti+e+ben+tornati+dalle+vacanze%21Per+riprendere+un+po%26%238217%3B+il+ritmo+con+il+blog+vi+propongo+dei+mini-post+che+rispondono+velocemente+ai+pi%C3%B9+comuni+problemi+di+compilazione+ed...&amp;tags=librerie%2Csistema+operativo%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Difendersi dai Programmattori</title>
		<link>http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/</link>
		<comments>http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/#comments</comments>
		<pubDate>Thu, 07 Jul 2011 08:03:21 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[flame]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=766</guid>
		<description><![CDATA[Fra le parole più abusate su internet un posto d&#8217;onore va a programmatore (o developer e varianti). Forse secondo solo a &#8220;H4ck3r&#8221;. In ogni caso, programmatore fa fico, creare programmi e dire alla gente &#8220;questo l&#8217;ho fatto io&#8221; non ha prezzo. Ma la realtà è ben diversa. Spesso molti di questi individui sono programmAttori e <a href='http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fdifendersi-dai-programmattori%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Difendersi dai Programmattori" data-url="http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Fra le parole più abusate su internet un posto d&#8217;onore va a <strong>programmatore</strong> (o developer e varianti). Forse secondo solo a &#8220;H4ck3r&#8221;. In ogni caso, programmatore fa fico, creare programmi e dire alla gente &#8220;questo l&#8217;ho fatto io&#8221; non ha prezzo. </p>
<p>Ma la realtà è ben diversa. Spesso molti di questi individui sono <em>programmAttori</em> e nulla più. Molti conoscono la <em>programmazione sciamanica</em>, l&#8217;arte di scrivere mantra tantrici su dei file .c o .py e passarli ad un compilatore per ottenere qualcosa in cambio. Questa non è programmazione, almeno non al suo livello più nobile. Il web è pieno di questi arroganti developer. Vediamo come disinnescarli.</p>
<p><span id="more-766"></span></p>
<p><strong>1 &#8211; Programmare non significa assemblare</strong></p>
<p>Se trovate persone che vi propinano programmi scritti da loro il primo modo per verificare la potenza della loro capacità. Verificate il numero di librerie e cosa fanno. Molto spesso troverete programmi assemblati. I programmi assemblati sono i software semplici costruiti a partire da un numero enorme di librerie (che fanno tutto il lavoro sporco) che vengono <em>assemblate</em> dal programmatore. Un esempio di questi programmi sono player musicali o programmi di pulizia del sistema. In realtà tali programmi usano librerie grafiche, librerie audio e collegano il tutto in modo piuttosto lineare.</p>
<p>Questo è essere programmatori allo stesso modo di come cucinare un piatto leggendo una ricetta da un libro di cucina usando prodotti surgelati fa di noi degli Chef.</p>
<p>È una programmazione hobbistica, che ha il suo rispetto, la sua dignità e spesso sforna programmi utilissimi. Ma i programmAttori te lo spacceranno come una meraviglia dell&#8217;informatica e pretenderanno, alla luce di ciò, di parlare alla pari con un developer del kernel.</p>
<p><strong>2 &#8211; Programmare non significa sapere un linguaggio</strong></p>
<p>Un programmatore non conosce il C, non conosce il Java, non conosce il Python: li conosce tutti. Un programmatore esperto non ha paura di imparare un linguaggio nuovo perché con venti minuti di letta al manuale del linguaggio entra già nel meccanismo. Questo perché sa che cos&#8217;è la programmazione al di là del singolo linguaggio, ha appreso i concetti informatici che stanno dietro ai linguaggi di programmazione e sa riconoscerli in tutti i linguaggi del mondo. </p>
<p>Ovviamente sto esagerando, ma un programmatore esperto può semplicemente imparare un linguaggio nuovo in due ore (se rientra nei paradigmi che conosce, altrimenti un paio di giorni).</p>
<p>Il programmatore farlocco invece no. Se gli dici &#8220;facciamo un progetto XYZ&#8221; non ti dirà di farlo nel linguaggio più adatto allo scopo bensì nel linguaggio che conosce.</p>
<p>Si può essere più programmatori scrivendo in pseudocodice su carta che scrivendo uno script di pulizia in bash.</p>
<p><strong>3 &#8211; Programmare non significa fare finestre</strong></p>
<p>Altro comportamento classico del programmatore wannabe è il classificare come più dignitose le applicazioni grafiche rispetto alle applicazioni a riga di comando. Se sentite frasi del tipo &#8220;io faccio programmi con le finestre, mica quelle schifezze a riga di comando&#8221; accendete l&#8217;allarme: è molto probabile che vi troviate di fronte ad un programmAttore montato dei più classici.</p>
<p>Le finestre sono un aspetto (minimale) dell&#8217;intera programmazione. Nonostante nell&#8217;uso desktop utilizziamo quasi tutte applicazioni a finestra queste rappresentano solo una minima parte del lavoro che <strong>milioni</strong> di programmatori fanno ogni giorno (ad esempio scrivendo librerie come quelle che loro usano per fare le amate finestre). Quindi scusate se mi innervosisco ma uno che si vanta di fare programmi a finestra invece di altro non solo non è programmatore: è un mentecatto.</p>
<p>Un programma come Gazebo, tanto per dirne uno che sto usando ora, è un programma estremamente sofisticato e complesso dato che serve a simulare insiemi di Robot in ambienti 3d. Eppure è un programma a riga di comando. Il tanto amato dpkg di Debian è a riga di comando eppure svolge tutto il lavoro pesante dell&#8217;installazione dei pacchetti.</p>
<p>Inoltre, se vogliamo dirla tutta, la programmazione una finestra grafica non è complessa (in generale), si va dalla quasi banalità del Visual Basic e del Gambas alla media complessità di Gtk e Qt. Saper fare finestre grafiche significa studiare e conoscere bene una libreria fra le infinite disponibili, non conoscere la programmazione nel suo complesso. </p>
<p><strong>4 &#8211; Programmare non significa conoscere HTML e CSS</strong></p>
<p>Fra i programmAttori web spesso giara questa balla. Io conosco HTML e CSS quindi sono un programmatore. Sbagliato. Al massimo sei un Web Designer ma non un programmatore.</p>
<p>La ragione è semplice: HTML e CSS non sono linguaggi di programmazione e, se non il presunto developer non sa questo allora è garantito che non è un developer. Essere esperti di HTML equivale ad essere esperti di CSV, LaTex e altre metodologie di formattazione dei dati. Potete fare un ciclo in HTML? No. E quindi non è chiaramente un linguaggio di programmazione.</p>
<p><strong>5 &#8211; Programmare non significa scrivere codice</strong></p>
<p>O almeno non significa solo quello. La programmazione è una cosa più vasta di cui lo scrivere codice è probabilmente la cosa più noiosa. L&#8217;atto di sviluppare un&#8217;applicazione parte da prima, da quando si analizzano gli aspetti di ciò che si vuole fare e si progetta l&#8217;applicazione, e arriva fino alla fase di test. È la progettazione soprattutto, la sensazione di analizzare un problema, smontarlo e risolverlo che fa di noi un programmatore. Non ha ancora scritto una riga di codice ma nella sua mente il programma è già scritto e questo, vi assicuro, da una bellissima sensazione.</p>
<p>Il programmAttore invece scrive codice su codice spesso in mega malloppi di file per nulla modulari e invece di lamentarsi di come sta gestendo il suo progetto probabilmente si lamenterà del linguaggio (che secondo lui non permette di fare la cosa X o la cosa Y).</p>
<p><strong>6 &#8211; Programmare significa progettare strutture dati</strong></p>
<p>Probabilmente, se non vi siete mai trovati a progettare una struttura dati o almeno a pensare a quale struttura dati sia migliore per la vostra applicazione, non siete veri programmatori. L&#8217;unica cosa che fanno i programmi è manipolare l&#8217;informazione e l&#8217;informazione è manipolata e memorizzata nelle strutture dati. Quindi programmare È fare strutture dati.</p>
<p>Molti linguaggi coprono molte funzioni base. In Python per fare una lista dinamica non ci vuole certo un tecnico esperto, ma per programmi complessi anche il Python necessita di un po&#8217; di progettazione nelle strutture dati (anche solamente organizzare gli oggetti che popoleranno la nostra applicazione).</p>
<p>Tutti i programmatori che conosco e che stimo almeno una volta hanno avuto la necessità di scrivere manualmente una lista, un array, un heap e così via. Anche io ne ho avuto bisogno. Credo che tutti ne abbiano bisogno prima o poi.</p>
<p>Se il vostro interlocutore tentenna sulla struttura firstchild-nextsibling di un albero probabilmente siete davanti ad un programmAttore.</p>
<p><strong>Per concludere.</strong> Forse ci sarebbe molto altro da dire e molte altre cose che al momento mi sfuggono ma il punto credo sia chiaro: per chi, come me, ama questa disciplina è fastidioso veder impazzare per il web tanti tromboni che vantano una conoscenza di programmazione accademica e danno la colpa dei loro fallimenti sempre a qualcos&#8217;altro. È irritante sentire cose stupide come quelle al punto 3.</p>
<p>C&#8217;è chi studia anni, legge libri su libri per apprendere una tecnica, che scrive tonnellate di righe di codice praticamente inutile solo per implementare e mettere a punto una particolare struttura dati o un particolare algoritmo che ha studiato. Poi arriva il ragazzino di turno che ti sbatte in faccia l&#8217;ennesimo programma con GUI per pulire il tuo sistema e pretende di parlarti alla pari.</p>
<p>Vorrei che tutti questi individui imparassero l&#8217;umiltà e capissero, come me, che abbiamo ancora molto da imparare. Molto.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=766&amp;md5=cbfacbc7d7eed783ef8d2da93f4bb2c1" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2011/07/difendersi-dai-programmattori/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2011%2F07%2Fdifendersi-dai-programmattori%2F&amp;language=it_IT&amp;category=text&amp;title=Difendersi+dai+Programmattori&amp;description=Fra+le+parole+pi%C3%B9+abusate+su+internet+un+posto+d%26%238217%3Bonore+va+a+programmatore+%28o+developer+e+varianti%29.+Forse+secondo+solo+a+%26%238220%3BH4ck3r%26%238221%3B.+In+ogni+caso%2C+programmatore+fa+fico%2C+creare+programmi...&amp;tags=flame%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Come NON si scrive del codice</title>
		<link>http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/</link>
		<comments>http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/#comments</comments>
		<pubDate>Thu, 24 Jun 2010 11:44:38 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=617</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/"><img title="Come NON si scrive del codice" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/hangman-150x150.jpg" alt="Come NON si scrive del codice"  width="200" height="200" /></a></div><br/>Leggere del codice scritto da altri (o scritto da noi mesi o anni fa) può essere un esperienza spiacevole condita da molti tentativi di suicidio. Per non finire impiccati e per non far impiccare migliaia di colleghi nel mondo ci sono solo 8 punti da tenere a mente... e da non fare.]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F06%2Fcome-non-si-scrive-del-codice%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Come NON si scrive del codice" data-url="http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><a href="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/hangman.jpg"><img class="alignleft size-thumbnail wp-image-618" title="hangman" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/hangman-150x150.jpg" alt="" width="150" height="150" /></a>Ultimamente, lo ammetto, sto scrivendo parecchio meno del solito. Sono oscillazioni naturali, non si possono avere sempre cose intelligenti da dire e in questo caso è meglio tacere piuttosto che scrivere diecimila post uguali sull&#8217;ultima emissione gassosa di Google o di chissà quale altro software. Ho passato le ultime settimane per lo più a studiare (anche se non al ritmo che mi aspettavo causa mancanza di fonti e concentrazione) e ad approfondire alcuni miei interessi. Siatene giulivi poiché dispenserò a breve tale conoscenza a fiotti sulle vostre menti assetate.</p>
<p>Ma torniamo a noi. Nell&#8217;ultima settimana mi sono trovato a mettere le mani sul sorgente di <strong>KPackageKit</strong>. Questo sorgente è un vero lavoro machiavellico di ingarbugliamento di idee, completamente privo di documentazione e saltuariamente infarcito di commenti di poco aiuto come granella di nocciola sul gelato. Allorché, in preda al deliro causato dall&#8217;essermi letto migliaia di righe di codice senza averci capito quasi nulla, se non a grandi righe, mi è venuta l&#8217;idea di buttare due righe su come <strong>NON</strong> si programma.</p>
<p>Ci sono infatti <strong>una manciata di cose che un programmatore non deve mai fare</strong>. Una lista di <strong><em>COSE DA </em></strong><strong><em>NON FARE</em><span style="font-weight: normal;"> che troppo spesso vengono fatte al grido di &#8220;tanto funziona&#8221; e &#8220;tanto si capisce&#8221;. Risulta quindi più facile spiegarvi cosa </span><span style="font-weight: normal;">non fare</span><span style="font-weight: normal;"> piuttosto che insegnarvi il contrario.</span></strong></p>
<p><strong>1) NON DOCUMENTARE IL CODICE</strong></p>
<p>La risposta del tizio di KPK alla richiesta di documentazione è stata:</p>
<blockquote><p>I don&#8217;t create documentation for KPackageKit because I think libs needs to be docummented, and if you read the lib&#8217;s docs you will understand KPackageKit</p></blockquote>
<p>Permettetemi di dissentire. E&#8217; normale che un programmatore debba conoscere la documentazione delle librerie Y alla base di un progetto X, ma ciò non toglie che anche il progetto X debba essere documentato! La documentazione di X infatti serve, come minimo, a spiegare <strong>come viene utilizzata la libreria Y all&#8217;interno di X</strong>. La documentazione serve per aiutare chi mette le mani sul codice per la prima volta, fornisce un filo rosso da seguire per muovere i primi passi all&#8217;interno del codice senza perdersi e in modo efficiente, spiega quali sono i moduli, il loro funzionamento e come sono relazionati fra di loro. Tutte cose che si possono apprendere dal codice ma che necessita di un enormità di tempo.</p>
<p>Questo fa quindi perdere tempo al <em>novello programmatore</em> e spesso perdere tempo significa far perdere la voglia.</p>
<p><strong>2) DESCRIVERE IL CODICE</strong></p>
<p>Altro errore frequente è quello di descrivere il codice nei commenti. I commenti devono descrivere le intenzioni di un passaggio non tutti i dettagli. Dovete infatti assumere che chi legge il codice conosca il linguaggio e gran parte delle librerie sottostanti.</p>
<pre>
<div class="codecolorer-container cpp dawn" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="cpp codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ff0000; font-style: italic;">/* COMMENTO ERRATO:<br />
&nbsp;* Se a è maggiore di b restituisce a, altrimenti b.<br />
&nbsp;*/</span><br />
<br />
<span style="color: #ff0000; font-style: italic;">/* COMMENTO GIUSTO:<br />
&nbsp;* Restituisce il più grande fra a e b.<br />
&nbsp;*/</span><br />
<span style="color: #0000ff;">if</span> <span style="color: #008000;">&#40;</span>a <span style="color: #000040;">&amp;</span>gt<span style="color: #008080;">;</span> b<span style="color: #008000;">&#41;</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> a<br />
<span style="color: #0000ff;">else</span><br />
&nbsp; &nbsp; <span style="color: #0000ff;">return</span> b</div></div>
</pre>
<p>Ora, quello sopra era un esempio piuttosto idiota ma spero sia chiaro il concetto. In sintesi i commenti dovrebbero descrivere tutto ciò che non è chiaramente intuibile leggendo il codice nei dintorni.</p>
<p><strong>3) USARE CONVENZIONI AD-PERSONAM</strong></p>
<p>Questo si traduce in un semplice <strong>usate le convenzioni del linguaggio</strong>. Questo va fatto sempre. Anche se una cosa è sintatticamente corretta non vuol dire che lo sia. Se nel linguaggio le classi cominciano per maiuscola <strong>NON</strong> fate classi che non cominciano per maiuscola. Questo serve a far subito capire ad altri programmatori il significato di una parola all&#8217;interno del codice. Se io leggo in un codice C++ la parola <code class="codecolorer text dawn"><span class="text">supereroe</span></code> io penso che sia una variabile e non una classe. Se invece scrivete <code class="codecolorer text dawn"><span class="text">SuperEroe</span></code> allora è chiaro che tale parola si riferisce ad una classe. Semplificando di molto il mio lavoro.</p>
<p>Oltre a questo le convenzioni di un linguaggio indicano la via corretta per molti altri aspetti. Se avete intenzione di infrangere delle convenzioni <strong>documentatelo</strong>. Come, ad esempio, fa Google con le <a href="http://google-styleguide.googlecode.com/svn/trunk/pyguide.html">linee guida per python</a>.</p>
<p><strong>4) NON MANTENERE UNA COERENZA INTERNA</strong></p>
<p>Cosa più semplice a farsi che a dirsi ma che spesso viene del tutto ignorata. Un esempio di coerenza interna è la posizione dei parametri di un metodo o di una funzione oppure il nome delle funzioni. Se decidiamo che tutte le funzioni che accettano in ingresso un vettore finiscano con la lettera v allora dobbiamo accertarci di seguire questa regola per tutto il progetto. Se decidiamo che il primo parametro delle funzioni che si riferiscono ad una <em>Persona</em> sia il nome allora dobbiamo accertarci che sia sempre così.</p>
<p><strong>5) LASCIARE BOLLE DI CODICE SOTTO COMMENTO</strong></p>
<p>Può capitare che, nel corso della scrittura di un programma si commentino grandi parti di una funzione o interi metodi. Questo può servire ad isolare del codice buggato o a nascondere funzionalità incomplete. Tuttavia, sebbene questo vada bene in rami locali personali non dovrebbe mai essere lasciato in rami pubblici. Se una funzione funziona bene, altrimenti la togliamo. Queste bolle di codice creano gran confusione  e soprattutto un programmatore intento a modificare il codice se le ritrova in mezzo alle scatole senza sapere se le può togliere oppure no.</p>
<p><strong>6) CHIAMARE LE VARIABILI CON UNA LETTERA O CON NOMI A CASO</strong></p>
<p>I nomi delle variabili dovrebbero essere piuttosto esplicativi. Ad esclusione di contatori ed iteratori, una variabile non dovrebbe <strong>mai</strong> avere un nome di una sola lettere. A meno che l&#8217;oggetto a cui si riferisce non sia proprio un qualcosa identificabile da una lettera (ad esempio le coordinate x e y di un punto). Non vedo dove sia il problema a scrivere variabili di una decina di caratteri considerando che tutti gli editor hanno l&#8217;auto-completamento.</p>
<p><strong>7) ORGANIZZARE IL CODICE SENZA CRITERIO</strong></p>
<p>Il codice va diviso e organizzato in macro-moduli (o <em>package, </em>come si chiamano in molti linguaggi) che siano coerenti fra loro. Questo per consentire un rapido accesso all&#8217;insieme dei moduli che gestiscono una data funzionalità. <strong>Questi macro-moduli vanno assolutamente documentati</strong>.</p>
<p><strong>8 ) SCRIVERE CODICE SENZA PROGETTO</strong></p>
<p>Questo è il punto fondamentale. I programmi vanno prima scritti a computer spento. Non fatevi prendere dalla fretta di scrivere e compilare perché al 90% esce un casino. Questo può andare bene per piccoli progetti e roba semplice ma per qualunque cosa di complesso è un suicidio. Programmate tutto su carta. Scrivete le classi di cui avete bisogno, le relazioni fra le stesse, le operazioni salienti, i moduli da fare e i package in cui suddividerli. Dopo <strong>un paio di giorni</strong> di analisi a computer spento vedrete che con mezza giornata scriverete migliaia di righe di codice come se fossero sonetti in rima baciata.</p>
<p>Ovviamente mentre scriverete e proverete il codice sul serio salteranno parecchie cose di cui non avevate tenuto conto o errori di progetto. Ma non fa nulla. Questa è la prassi, è il modo in cui vanno fatte le cose.</p>
<p><strong>CONCLUSIONE</strong></p>
<p>Ora spero che appenderete questi 8 punti sulla vostra parete perché io non ho più voglia di impiccarmi mentre leggo del codice scritto e documentato da un macaco. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Se seguite i miei consigli e <strong>non</strong> fate questi 8 punti (in realtà potrebbero essere di più ma oggi sono buono) vedrete che sarà tutto più facile per voi, sia per chi ha intenzione di aiutarvi.</p>
<p>Buona giornata. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=617&amp;md5=8599e16600e8e12240828285f8b7ac87" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/06/come-non-si-scrive-del-codice/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F06%2Fcome-non-si-scrive-del-codice%2F&amp;language=it_IT&amp;category=text&amp;title=Come+NON+si+scrive+del+codice&amp;description=Ultimamente%2C+lo+ammetto%2C+sto+scrivendo+parecchio+meno+del+solito.+Sono+oscillazioni+naturali%2C+non+si+possono+avere+sempre+cose+intelligenti+da+dire+e+in+questo+caso+%C3%A8+meglio+tacere+piuttosto+che...&amp;tags=programmazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>La posta di Slashcode &#8211; Come iniziare a programmare</title>
		<link>http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/</link>
		<comments>http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 17:47:45 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[lettere]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=599</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/"><img title="La posta di Slashcode &#8211; Come iniziare a programmare" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/scrivere-150x150.jpg" alt="La posta di Slashcode &#8211; Come iniziare a programmare"  width="200" height="200" /></a></div><br/>A parte il titolo stupido di questa &#8220;rubrica&#8221; volevo pubblicare la risposta ad una domanda che mi è arrivata da Facebook. La domanda è la tradizionale &#8220;Come faccio a programmare come un Dio?&#8221;. Domanda la cui risposta basterebbe da sola a riempire corsi e tonnellate di guide. Tuttavia ho scritto un mezzo poema e, unito <a href='http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F06%2Fla-posta-di-slashcode-come-iniziare-a-programmare%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="La posta di Slashcode &#8211; Come iniziare a programmare" data-url="http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft size-thumbnail wp-image-600" title="scrivere" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/06/scrivere-150x150.jpg" alt="" width="150" height="150" /></p>
<p>A parte il titolo stupido di questa &#8220;rubrica&#8221; volevo pubblicare la risposta ad una domanda che mi è arrivata da Facebook. La domanda è la tradizionale &#8220;Come faccio a programmare come un Dio?&#8221;. Domanda la cui risposta basterebbe da sola a riempire corsi e tonnellate di guide. Tuttavia ho scritto un mezzo poema e, unito al fatto che la risposta può servire anche ad altri, mi sembra sprecato lasciarla nella mia casella di posta in uscita.</p>
<p>La domanda era la seguente:</p>
<blockquote><p>io avrei bisogno di un consiglio se possibile: vorrei sapere come sei arrivato e dove hai imparato a fare queste cose cosi complesse?io provo provo e provo ma fallisco miserabilmente.</p></blockquote>
<p>Ed ecco la risposta.</p>
<p><em>Mi fanno in molti questa domanda e difficilmente riesco a dare risposte soddisfacenti.</em></p>
<p><em>Per primo credo che sia necessario apprendere una </em>forma mentis<em> che va al di là del linguaggio usato per programmare. Questo permette di passare facilmente da un linguaggio ad un altro e di &#8220;progettare&#8221; un applicazione ancor prima di scrivere una sola riga di codice.</em></p>
<p><em>Tale impostazione è la cosa a mio avviso più importante. Bisogna imparare a trattare le cose che vogliamo fare come entità matematiche perché , fondamentalmente, i computer sanno fare solo calcoli matematici.</em></p>
<p><em>Il problema è, come sempre, trovare il modo per entrare in quest&#8217;ottica. Il primo modo è avere una preparazione matematica basilare: la matematica è di per se un &#8220;linguaggio&#8221; e conoscerlo aiuta molto. Secondo c&#8217;è il lato puramente informatico. Riguardo a questo ci sono un paio di consigli che con l&#8217;esperienza mi sento di dare:</em></p>
<p><em>1) <strong>Scegliersi un linguaggio e concentrarsi su quello</strong>. Non cambiare quindi linguaggio nella speranza che vada meglio: le basi concettuali sono sempre le stesse. </em></p>
<p><em>2) La scelta del linguaggio è molto importante: linguaggi troppo &#8220;severi&#8221; rischiano di farti concentrare troppo sul lato &#8220;macchina&#8221; del linguaggio, linguaggi troppo &#8220;di bocca buona&#8221;, al contrario, astraggono talmente tanto la programmazione che difficilmente si imparano i suoi aspetti fondamentali. <strong>Io quindi solitamente consiglio delle buone vie di mezzo come C# o Java</strong> (tanto per usare i più famosi). Python è molto facile ma lo trovo &#8220;poco istruttivo&#8221;: è molto più facile passare da C# o Java ad un altro linguaggio piuttosto che passarci da Python.</em></p>
<p><em>3) <strong>Perseverare</strong>. Una volta appresa la sintassi di un linguaggio non si sa programmare. A programmare si impara programmando: piazzarsi un obbiettivo non troppo elevato e iniziare a portarlo avanti. Anche abbandonarlo se si rivela troppo alto ma l&#8217;importante è provarci. Il 90% delle cose che ho imparato le ho imparate sbattendoci la testa, cercando soluzioni su Google, chiedendo a gente più esperta. Quindi ti consiglio caldamente di imparare la sintassi di un linguaggio e di usare quello per realizzare piccoli progetti personali. Roba anche inutile ma utile per imparare. Ad esempio scoprirai che è molto istruttivo cercare di implementare una specie di rubrica da terminale.</em></p>
<p><em>4) <strong>Ultimo consiglio: le librerie.</strong> Quando si padroneggia un linguaggio è giunge il momento di imparare qualche libreria: interfacce grafiche (Gtk o QT ad esempio), sistemi audio (gstreamer o Xine), per l&#8217;interazione col web, e così via&#8230; Questa è l&#8217;unica parte veramente difficile <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  E a questo punto non puoi far a meno di chiedere e domandare in giro e dovrai pensarci solo a tempo debito.</em></p>
<p><em>Mi sono dilungato anche troppo. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Ti ringrazio per la domanda che mi ha spinto a una piccola riflessione e spero che tu possa continuare a provarci. Per ogni domanda che ti verrà in mente durante il tuo percorso puoi sempre trovarmi su <strong>Slashcode</strong> o chiedere sul forum di <strong>LinuxQualityHelp</strong>.</em></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=599&amp;md5=5e021cba9c8eccb1f416399539abf26f" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/06/la-posta-di-slashcode-come-iniziare-a-programmare/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F06%2Fla-posta-di-slashcode-come-iniziare-a-programmare%2F&amp;language=it_IT&amp;category=text&amp;title=La+posta+di+Slashcode+%26%238211%3B+Come+iniziare+a+programmare&amp;description=A+parte+il+titolo+stupido+di+questa+%26%238220%3Brubrica%26%238221%3B+volevo+pubblicare+la+risposta+ad+una+domanda+che+mi+%C3%A8+arrivata+da+Facebook.+La+domanda+%C3%A8+la+tradizionale+%26%238220%3BCome+faccio+a+programmare...&amp;tags=lettere%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Come organizzare un progetto</title>
		<link>http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/</link>
		<comments>http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/#comments</comments>
		<pubDate>Mon, 24 May 2010 10:47:51 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=584</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/"><img title="Come organizzare un progetto" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/05/House_of_cards-150x150.jpg" alt="Come organizzare un progetto"  width="200" height="200" /></a></div><br/>Stavo attrezzando un piccolo progettino scemo sulle OpenGL (più didattico che altro) e così ho pensato di condividere quelle regole non scritte che servono ad organizzare e gestire un progetto software. Sono piccole &#8220;tips&#8221;, struttura delle cartelle e file che non devono mai mancare. Presenterò anche altri strumenti, come ho fatto per Python, ma questa <a href='http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F05%2Fcome-organizzare-un-progetto%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Come organizzare un progetto" data-url="http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft size-thumbnail wp-image-585" title="House of cards" src="http://davideaversa.it/slashcode/wp-content/uploads/2010/05/House_of_cards-150x150.jpg" alt="" width="150" height="150" />Stavo attrezzando un piccolo progettino scemo sulle OpenGL (più didattico che altro) e così ho pensato di condividere quelle regole non scritte che servono ad organizzare e gestire un progetto software. Sono piccole &#8220;tips&#8221;, struttura delle cartelle e file che non devono mai mancare. Presenterò anche altri strumenti, come ho fatto per Python, ma questa volta saranno strumenti &#8220;generici&#8221;, ovvero utilizzabili con qualunque linguaggio.</p>
<p>Questo perché tenere in piedi un progetto male organizzato è come costruire un castello di carta. Ci vuole una base forte per rendere il più accogliente possibile il progetto per le persone interessate a collaborare, sia per i membri del vostro team (se ne avete uno).</p>
<p><strong>STRUTTURA CARTELLE</strong></p>
<p>Le cartelle vanno organizzate in modo piuttosto coerente. È importante non mischiare tutto in poche cartelle confuse specialmente per progetti destinati a crescere rapidamente. Una struttura minimale è la seguente:</p>
<ul>
<li><strong>src</strong> &#8211; La cartella <em>src</em> contiene il codice sorgente. Il codice al suo interno può essere organizzato come si desidera in accordo con le convenzioni del linguaggio. L&#8217;importante è che contenga solamente il codice del programma/libreria.</li>
<li><strong>test</strong> &#8211; La cartella <em>test</em> contiene il codice sorgente dedicato ai test. Il codice di test serve a provare il corretto funzionamento delle classi sviluppate o di alcuni moduli software oppure possono essere semplicemente test prestazionali.</li>
<li><strong>build</strong> &#8211; La cartella <em>build</em> contiene tutti i file ottenuti come residuo di una compilazione. Possono essere moduli parziali C/C++ (.o), classi Java (.class), file python compilati (.pyc) e così via. La cartella va a sua volta divisa nelle varie configurazioni di compilazione (ad esempio ci potrebbe essere una configurazione <em>Debug</em> con compilati ottimizzati per il debug e una configurazione <em>Release</em> con compilati ottimizzati per le prestazioni).</li>
<li><strong>dist</strong> &#8211; La cartella <em>dist<strong> </strong><span style="font-style: normal;">contiene il prodotto finito. Può essere il programma eseguibile, un file .jar, una libreria .so e così via. Tutto quello che sta in dist deve essere pronto per essere eseguito e distribuito.</span></em></li>
<li><em><span style="font-style: normal;"><strong>doc</strong> &#8211; La cartella <em>doc</em> contiene la documentazione dettagliata. Tale documentazione è per lo più la specifica dettagliata delle API la quale è solitamente auto-generata.</span></em></li>
</ul>
<p><strong>FILE MUST</strong></p>
<p>Nella cartella radice sono necessari alcuni file. Necessari è una parola grossa in quanto solitamente il programma funziona benissimo anche senza, ma sono un tocco di classe e di umanità verso chi vuole accedere ai sorgenti della vostra applicazione.</p>
<ul>
<li><strong>Tool di compilazione -</strong> Sia Makefile, o Cmake o qualunque altro tool utilizzate&#8230; <strong>DEVE</strong> esserci uno strumento per la configurazione e la compilazione. Molti IDE possono anche auto-generare roba simile.</li>
<li><strong>README</strong> &#8211; Il readme deve dire vita morte e miracoli sull&#8217;applicazione. Deve spiegare come può essere compilata  l&#8217;applicazione, quali sono le dipendenze, i bug noti, etc..</li>
<li><strong>README.src</strong> &#8211; Per applicazioni il cui README è eccessivamente complesso è bene separare le informazioni per sviluppatori in un file a parte. Il file README.src deve spiegare come è organizzato il codice, quale IDE si è usato (se si è usato), quale librerie di sviluppo servono, quale strumenti si sono usati per generare la documentazione, per i test e per altro. Insomma&#8230; tutto ciò che può essere utile per chi è interessato alla modifica del codice.</li>
<li><strong>COPYRIGTH </strong>- Il file che contiene le informazioni sulla licenza del progetto.</li>
<li><strong>CHANGELOG</strong> &#8211; Il file che contiene la lista dei cambiamenti apportati al programma nel corso della sua storia. Questo file può essere auto-generato da alcuni sistemi di CVS.</li>
</ul>
<p><strong>DOCUMENTAZIONE</strong></p>
<p>Scrivere a mano la documentazione è sempre l&#8217;ultimo dei problemi. Nonostante ci siano molte cose che debbano necessariamente essere scritte a mano, per le API è possibile usare dei tools automatici. Abbiamo visto Epydoc per python. Bene, per tutto il resto c&#8217;è <strong>Doxygen</strong>. Doxygen è un programma di auto-generazione della documentazione utilizzabile per una miriade di linguaggi.</p>
<p><strong>CVS</strong></p>
<p>Il programma per CVS è essenziale se programmate in gruppo ma è molto utile anche se programmate da soli. Vi permette di manipolare il codice con molta disinvoltura navigando fra branch diversi in modo del tutto trasparente.</p>
<p>Potete usare quello che vi pare come CVS anche se io consiglio sempre <strong>GIT</strong>. Lo trovo molto più veloce ed elastico dei concorrenti. Se volete convincervi potete sempre andare su <a href="http://it.whygitisbetterthanx.com/">http://it.whygitisbetterthanx.com/</a> <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><strong>MESSAGGISTICA</strong></p>
<p>Ebbene si. Se avete un gruppo di persone con cui lavorate insieme non potete prescindere da un sistema rapido e veloce per lo scambio di informazioni, siano esse &#8220;OMG! Non funziona una cippa!&#8221; o messaggi più tecnici.</p>
<p>A questo punto avete le basi. Non vi resta che seguire questi consigli e lanciarvi nel tempestoso mondo del software libero sperando che il vostro progetto non sia un castello di carte spazzato via dal vento.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=584&amp;md5=80f2256c07614aa3f748c61afec9b950" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/05/come-organizzare-un-progetto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F05%2Fcome-organizzare-un-progetto%2F&amp;language=it_IT&amp;category=text&amp;title=Come+organizzare+un+progetto&amp;description=Stavo+attrezzando+un+piccolo+progettino+scemo+sulle+OpenGL+%28pi%C3%B9+didattico+che+altro%29+e+cos%C3%AC+ho+pensato+di+condividere+quelle+regole+non+scritte+che+servono+ad+organizzare+e+gestire+un+progetto...&amp;tags=cvs%2Cdocumentation%2Cgit%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Digital Mind: Nuovo Update!</title>
		<link>http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/</link>
		<comments>http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/#comments</comments>
		<pubDate>Sun, 18 Apr 2010 10:39:29 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[digital mind]]></category>
		<category><![CDATA[guida]]></category>
		<category><![CDATA[update]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=544</guid>
		<description><![CDATA[Segnalo ancora un nuovo aggiornamento. Arrivato in ritardo ma è arrivato. Purtroppo sono stato distratto da interessanti argomenti di Intelligenza Artificiale e mi è passato tutto il resto di mente! Fra le modifiche che ho fatto segnalo che ho completato la parte sui modelli astratti di algoritmi (forse approfondisco un po&#8217; le macchine a registri) <a href='http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F04%2Fdigital-mind-nuovo-update%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Digital Mind: Nuovo Update!" data-url="http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Segnalo ancora un nuovo aggiornamento. Arrivato in ritardo ma è arrivato. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Purtroppo sono stato distratto da interessanti argomenti di Intelligenza Artificiale e mi è passato tutto il resto di mente! <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Fra le modifiche che ho fatto segnalo che ho completato la parte sui modelli astratti di algoritmi (forse approfondisco un po&#8217; le macchine a registri) e ho corretto alcune sviste.</p>
<p>Ecco il solito link:</p>
<p><a href="http://davideaversa.it/digital/main.html">DIGITAL MIND</a></p>
<p>Alla prossima.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=544&amp;md5=f9698839b7d5805a630988754462dae5" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/04/digital-mind-nuovo-update/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F04%2Fdigital-mind-nuovo-update%2F&amp;language=it_IT&amp;category=text&amp;title=Digital+Mind%3A+Nuovo+Update%21&amp;description=Segnalo+ancora+un+nuovo+aggiornamento.+Arrivato+in+ritardo+ma+%C3%A8+arrivato.+Purtroppo+sono+stato+distratto+da+interessanti+argomenti+di+Intelligenza+Artificiale+e+mi+%C3%A8+passato+tutto+il+resto+di+mente%21...&amp;tags=digital+mind%2Cguida%2Cupdate%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Aggiornamento Guida Programmazione</title>
		<link>http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/</link>
		<comments>http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 13:20:39 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[Guide]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=531</guid>
		<description><![CDATA[Avevo promesso aggiornamenti settimanali ed eccomi qui. Il capitolo sulla logica booleana è grossomodo terminato. Mancano degli esercizi che inizierò a mettere presto. Inoltre c&#8217;è anche la prima parte del capitolo sugli algoritmi. Come al solito sono gradite segnalazioni di errori, commenti e richieste di maggiori chiarimenti su parti della guida che ho involontariamente lasciato troppo <a href='http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F04%2Faggiornamento-guida-programmazione%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Aggiornamento Guida Programmazione" data-url="http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p>Avevo promesso aggiornamenti settimanali ed eccomi qui. Il capitolo sulla logica booleana è grossomodo terminato. Mancano degli esercizi che inizierò a mettere presto. Inoltre c&#8217;è anche la prima parte del capitolo sugli algoritmi.</p>
<p>Come al solito sono gradite segnalazioni di errori, commenti e richieste di maggiori chiarimenti su parti della guida che ho involontariamente lasciato troppo fumose.</p>
<p>Trovate tutto al solito link: <a href="http://davideaversa.it/digital/main.html" target="_blank">DIGITAL MIND</a></p>
<p>Ciao</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=531&amp;md5=aaa25a7cfc26e4a4b0a91b81a045262c" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2010/04/aggiornamento-guida-programmazione/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2010%2F04%2Faggiornamento-guida-programmazione%2F&amp;language=it_IT&amp;category=text&amp;title=Aggiornamento+Guida+Programmazione&amp;description=Avevo+promesso+aggiornamenti+settimanali+ed+eccomi+qui.+Il+capitolo+sulla+logica+booleana+%C3%A8+grossomodo+terminato.+Mancano+degli+esercizi+che+inizier%C3%B2+a+mettere+presto.%C2%A0Inoltre+c%26%238217%3B%C3%A8+anche+la+prima+parte+del+capitolo...&amp;tags=Guide%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Ridondanza: I vantaggi del doppio</title>
		<link>http://davideaversa.it/slashcode/2009/11/ridondanza-i-vantaggi-del-doppio/</link>
		<comments>http://davideaversa.it/slashcode/2009/11/ridondanza-i-vantaggi-del-doppio/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 10:10:58 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[Reti]]></category>
		<category><![CDATA[hamming]]></category>
		<category><![CDATA[ridondanza]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=496</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/11/ridondanza-i-vantaggi-del-doppio/"><img title="Ridondanza: I vantaggi del doppio" src="http://davideaversa.it/slashcode/wp-content/uploads/2009/11/double-vision-150x150.jpg" alt="Ridondanza: I vantaggi del doppio"  width="200" height="200" /></a></div><br/>La maggior parte dell&#8217;opera non consiste nel vedere se una cosa smetterà di funzionare bensì nel pensare a cosa fare quando quella cosa smetterà sicuramente di funzionare. Questa cosa è presente anche nell&#8217;informatica e nelle telecomunicazioni: ad esempio non possiamo garantire che le trasmissioni attraverso un canale siano perfettamente prive di errori, anzi, gli errori <a href='http://davideaversa.it/slashcode/2009/11/ridondanza-i-vantaggi-del-doppio/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F11%2Fridondanza-i-vantaggi-del-doppio%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/11/ridondanza-i-vantaggi-del-doppio/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Ridondanza: I vantaggi del doppio" data-url="http://davideaversa.it/slashcode/2009/11/ridondanza-i-vantaggi-del-doppio/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft size-thumbnail wp-image-497" title="Doppio" src="http://davideaversa.it/slashcode/wp-content/uploads/2009/11/double-vision-150x150.jpg" alt="Doppio" width="150" height="150" />La maggior parte dell&#8217;opera non consiste nel vedere <strong>se </strong>una cosa smetterà di funzionare bensì nel <strong>pensare a cosa fare quando quella cosa smetterà sicuramente di funzionare</strong>.</p>
<p>Questa cosa è presente anche nell&#8217;informatica e nelle telecomunicazioni: ad esempio non possiamo garantire che le trasmissioni attraverso un canale siano perfettamente prive di errori, anzi, gli errori sono sempre dannatamente frequenti se paragonati alla quantità di dati che attraversano la rete e alla precisione che ci aspettiamo in uscita.</p>
<p>Scarichiamo solitamente file di un paio di mega, circa 2 milioni di byte che corrispondono a 16 milioni di bit. Anche solo un errore su 100.000 bit inviati (una percentuale di errore dello 0.001%) si ripercuoterebbe nel file per 160 volte e sappiamo che, specialmente in file eseguibili, basta anche un solo bit fuori posto per mandare all&#8217;aria l&#8217;intera applicazione.</p>
<p>Il metodo più utilizzato per ovviare al problema è senza dubbio <strong>la ridondanza</strong> ovvero la ripetizione delle informazioni nella speranza che, anche nel caso in cui un pacchetto di informazioni venga danneggiato da un errore di trasferimento, il ricevente abbia sempre a disposizione una &#8220;copia di riserva&#8221; da cui recuperare l&#8217;informazione.</p>
<p>La ridondanza viene solitamente applicata su più livelli e nella pila protocollare ci sono almeno 2-3 meccanismi di ridondanza più un meccanismo di &#8220;rinvio&#8221;. Quindi possiamo dire che nel traffico di rete l&#8217;informazione utile è meno della metà del totale dei bit in transito.</p>
<p>Al livello più basso il meccanismo di codifica più basso e semplice che possiamo immaginare è quello di duplicare brutalmente l&#8217;informazione: se dobbiamo inviare la sequenza di bit 011010 invieremo, per sicurezza, 000111111000111000. In questo modo anche se abbiamo un errore all&#8217;interno della tripletta di bit sapremo sempre qual&#8217;era il messaggio originale. Infatti se riceviamo la tripletta 010 sappiamo che in realtà la tripletta originale era 000 e non 111 per il semplice fatto che <strong>la probabilità di un errore è molto più alta che la probabilità di due errori nella stessa tripletta! <span style="font-weight: normal; ">Ovviamente non abbiamo la garanzia assoluta ed è per questo che ci sono meccanismi di ridondanza anche ad alto livello. </span></strong></p>
<p><strong><span style="font-weight: normal; ">Ma perché abbiamo messo triplette invece di coppie? Semplicemente perché la tripletta ci permette di eseguire </span>sia la rilevazione che il recupero dell&#8217;errore. </strong>Supponendo infatti di inviare coppie quali 00 o 11 alla presenza di un errore, mettiamo 01, non possiamo distinguere se ci sia stato un errore nel primo bit (e quindi l&#8217;originale era 11) oppure l&#8217;errore fosse del secondo bit (e quindi l&#8217;originale era 00). In questo caso possiamo solamente <strong>rilevare</strong> l&#8217;errore ma non possiamo recuperarlo.</p>
<p>Questo fatto è indicato dalla <strong><a href="http://it.wikipedia.org/wiki/Distanza_di_Hamming">distanza di Hamming</a> </strong>la quale indica il numero di &#8220;errori&#8221; necessari per convertire una stringa di bit in un altra. Il primo codice che abbiamo usato ha una distanza fra i suoi elementi (ovvero fra 000 e 111) di 3. Il sistema quindi sceglierà, in caso di errore, la stringa che dista di meno da quella ricevuta. Nel nostro esempio la stringa 010 dista 1 da 000 e dista 2 da 111. Scegliendo quella a distanza minore scegliamo proprio 000.</p>
<p>Notiamo quindi che scegliere un codice che abbia distanza di Hamming <strong>dispari</strong> fra i propri elementi garantisce <strong>sempre</strong> il <strong>recupero dell&#8217;errore</strong> perché il sistema ha sempre una parola di codice più vicina di un altra. Una distanza di Hamming <strong>pari</strong> fra le parole invece presenta sempre, seppure improbabili, delle stringhe ricevute che distano in egual misura da due parole distinte. In questo caso il sistema è solo in grado di rilevare l&#8217;errore e non di correggerlo.</p>
<p>Ma la ridondanza non viene solamente utilizzata per rilevare e correggere errori. Anche le prestazioni di un programma possono beneficiarne. Supponiamo ad esempio una classe Triangolo che mantiene al suo interno informazioni sui tre angoli interni dello stesso. Notiamo subito che potremmo operare in due modi: creare tre attributi che mantengono i tre angoli, oppure mantenere solo 2 angoli e ricavare il 3° tramite una funzione. Se scegliamo di inserire il terzo angolo <strong>inseriamo una ridondanza.</strong> Se abbiamo un triangolo con due angoli di 45°sappiamo automaticamente che il terzo dovrà essere di 90°. Facendo così risparmieremo sì spazio ma renderemo la classe triangolo più onerosa dal punto di vista della CPU.</p>
<p>Questa cosa è sempre vera, anche nel caso della rilevazione dell&#8217;errore. Quando scegliamo di utilizzare la ridondanza scegliamo di <strong>sacrificare lo spazio per guadagnare tempo</strong>. E&#8217; questa la <em>grande coperta</em> dell&#8217;informatica: dobbiamo sempre saper scegliere se il sacrificio di spazio dia guadagni in tempo significativi o, viceversa, se risparmiare spazio non faccia perdere troppo tempo.</p>
<p>E&#8217; un concetto sottile ma essenziale per progettare sistemi ad alta efficenza e soprattutto adatti all&#8217;ambiente che vogliamo utilizzare.</p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=496&amp;md5=3652d37e771e14d03bf55c9f7298db27" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/11/ridondanza-i-vantaggi-del-doppio/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F11%2Fridondanza-i-vantaggi-del-doppio%2F&amp;language=it_IT&amp;category=text&amp;title=Ridondanza%3A+I+vantaggi+del+doppio&amp;description=La+maggior+parte+dell%26%238217%3Bopera+non+consiste+nel+vedere+se+una+cosa+smetter%C3%A0+di+funzionare+bens%C3%AC+nel+pensare+a+cosa+fare+quando+quella+cosa+smetter%C3%A0+sicuramente+di+funzionare.+Questa+cosa+%C3%A8...&amp;tags=hamming%2CReti%2Cridondanza%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Guida alla Programmazione Generale &#8211; PDF Bozza 2</title>
		<link>http://davideaversa.it/slashcode/2009/11/guida-alla-programmazione-generale-pdf-bozza-2/</link>
		<comments>http://davideaversa.it/slashcode/2009/11/guida-alla-programmazione-generale-pdf-bozza-2/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 14:53:53 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[programmazione]]></category>

		<guid isPermaLink="false">http://davideaversa.it/slashcode/?p=464</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/11/guida-alla-programmazione-generale-pdf-bozza-2/"><img title="Guida alla Programmazione Generale &#8211; PDF Bozza 2" src="http://davideaversa.it/slashcode/wp-content/uploads/2009/11/libro-150x150.jpg" alt="Guida alla Programmazione Generale &#8211; PDF Bozza 2"  width="200" height="200" /></a></div><br/>Dato che alcuni me l&#8217;hanno chiesto e datoche non ho molto tempo ultimamente posto qui di seguito una seconda bozza della versione PDF della guida. Ancora molto incompleta ma spero lo prendiate come un gesto di impegno. Non è un progetto abbandonato. SCARICA IL PDF]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F11%2Fguida-alla-programmazione-generale-pdf-bozza-2%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/11/guida-alla-programmazione-generale-pdf-bozza-2/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Guida alla Programmazione Generale &#8211; PDF Bozza 2" data-url="http://davideaversa.it/slashcode/2009/11/guida-alla-programmazione-generale-pdf-bozza-2/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft size-thumbnail wp-image-465" title="libro" src="http://davideaversa.it/slashcode/wp-content/uploads/2009/11/libro-150x150.jpg" alt="libro" width="150" height="150" />Dato che alcuni me l&#8217;hanno chiesto e datoche non ho molto tempo ultimamente posto qui di seguito una seconda bozza della versione PDF della guida. Ancora molto incompleta ma spero lo prendiate come un gesto di impegno. Non è un progetto abbandonato. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><a href="http://davideaversa.it/downloads/gapg_bozza2.pdf">SCARICA IL PDF</a></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=464&amp;md5=1619c94bad8444ffc0d6e8393871dff8" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/11/guida-alla-programmazione-generale-pdf-bozza-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F11%2Fguida-alla-programmazione-generale-pdf-bozza-2%2F&amp;language=it_IT&amp;category=text&amp;title=Guida+alla+Programmazione+Generale+%26%238211%3B+PDF+Bozza+2&amp;description=Dato+che+alcuni+me+l%26%238217%3Bhanno+chiesto+e+datoche+non+ho+molto+tempo+ultimamente+posto+qui+di+seguito+una+seconda+bozza+della+versione+PDF+della+guida.+Ancora+molto+incompleta+ma+spero...&amp;tags=pdf%2Cprogrammazione%2Cblog" type="text/html" />
	</item>
		<item>
		<title>Creare Man Pages</title>
		<link>http://davideaversa.it/slashcode/2009/09/creare-man-pages/</link>
		<comments>http://davideaversa.it/slashcode/2009/09/creare-man-pages/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 08:22:42 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Generale]]></category>
		<category><![CDATA[gnu]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[man]]></category>
		<category><![CDATA[man page]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=271</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/09/creare-man-pages/"><img title="Creare Man Pages" src="http://spectroscopy.web.psi.ch/focus/focus_manual_pages/manual.jpg" alt="Creare Man Pages"  width="173" height="200" /></a></div><br/>Penso abbiate tutti presente l&#8221;utilissima funzione &#8220;man&#8221;. Man sta per manual anche se io spesso penso derivi da manna in quanto il 90% dei problemi li risolvo grazie a lei. In GNU/Linux la totalità dei programmi ha la sua manpage associata e, grazie ad essa, possiamo sapere vita morte e miracoli di ogni eseguibile o <a href='http://davideaversa.it/slashcode/2009/09/creare-man-pages/' class='excerpt-more'>[...]</a>]]></description>
			<content:encoded><![CDATA[<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;"><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fcreare-man-pages%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe></div><div class="really_simple_share_google1" style="width:90px;"><div class="g-plusone" data-size="medium" data-href="http://davideaversa.it/slashcode/2009/09/creare-man-pages/" ></div></div><div class="really_simple_share_twitter" style="width:110px;"><a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="Creare Man Pages" data-url="http://davideaversa.it/slashcode/2009/09/creare-man-pages/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft" src="http://spectroscopy.web.psi.ch/focus/focus_manual_pages/manual.jpg" alt="" width="137" height="158" />Penso abbiate tutti presente l&#8221;utilissima funzione &#8220;man&#8221;. Man sta per <em>manual</em> anche se io spesso penso derivi da <em>manna</em> in quanto il 90% dei problemi li risolvo grazie a lei. In GNU/Linux la totalità dei programmi ha la sua manpage associata e, grazie ad essa, possiamo sapere vita morte e miracoli di ogni eseguibile o comando sia presente sulla nostra macchina. Ma non solo! Man racchiude anche la sintassi e la semantica completa di praticamente tutte le funzioni e le system call unix. Indispensabile per chi programma in C/C++.</p>
<p>Così noi stiamo preparando il nostro programmino. E perché il nostro dovrebbe essere da meno? Perché il nostro applicativo non deve avere la sua manpage? Perché gettare nella disperazione i nostri utenti?</p>
<p>Infatti non dobbiamo. Impariamo quindi a fare la manpage per il nostro programma!</p>
<p>Creare una manpage è decisamente semplice. Innanzitutto impariamo quelle 7  istruzioni di markup che ci servono:</p>
<ul>
<li>.TH &#8211; Indica il titolo della manpage</li>
<li>.SH &#8211; Indica il titolo della sezione</li>
<li>.SS &#8211; Indica il titolo della sotto-sezione</li>
<li>.pp &#8211; Indica l&#8217;inizio di un nuovo paragrafo</li>
<li>.B &#8211; Mostra il testo in grassetto</li>
<li>.I &#8211; Mostra il testo in corsivo</li>
<li>.&#8221; &#8211; Indica che la riga corrente è un commento (non viene visualizzata nel manuale)</li>
</ul>
<p>Ora siamo praticamente pronti. Sappiamo tutto quello che ci serve. Apriamo il nostro editor di testo e iniziamo a scrivere la nostra manpage come in questo esempio:</p>
<pre>.TH MioSoftware
.SH NAME
MioSoftware Super Calculator
.SH DESCRIPTION
.I MioSoftware
è un programma troppo bello!
.SH URL

http://www.linuxqualityhelp.it</pre>
<p>E così via. Fate attenzione che ogni tag deve capitare come primo comando della riga.</p>
<p>A questo punto salviamo il nostro file come, ad esempio,<em> mioprogramma.txt</em></p>
<p>Adesso dobbiamo copiarlo nella cartella di sistema affinché venga rilevato dal sistema. In debian questa cartella è <strong>/usr/share/man</strong></p>
<p>All&#8217;interno di questa cartella sono presenti diverse sotto cartelle per indicare le varie &#8220;categorie&#8221; di manuali. Queste cartelle sono segnate da <em>man1, man2, man3</em> e così via. Le categorie associate ad ogni numero variano da sistema a sistema ma generalmente sono:</p>
<ul>
<li>0 &#8211; File Header</li>
<li>1 &#8211; Comandi Standard (quindi i normali eseguibili)</li>
<li>2 &#8211; Kernel System Call</li>
<li>3 &#8211; Funzioni Standard della libreria C</li>
<li>4 &#8211; Device speciali</li>
<li>5 &#8211; Formati di file e convenzioni</li>
<li>6 &#8211; Giochi</li>
<li>7 &#8211; Varie, ad esempio informazioni sugli standard (ISO)</li>
<li>8 &#8211; Comandi root</li>
<li>9 &#8211; Dettagli  del Kernel</li>
</ul>
<p>Noi per esempio inseriremo la nostra man page nella categoria 1. Per farlo basta dare da root:</p>
<pre># cp mioprogramma.txt /usr/share/man/man1/mioprogramma.1</pre>
<p>A questo punto abbiamo finito. Per vedere il risultato basta dare:</p>
<pre>$ man mioprogramma</pre>
<p>E crogiolarsi nella senzazione di &#8220;professionalità&#8221; che la manpage da al vostro software. <img src='http://davideaversa.it/slashcode/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.linuxqualityhelp.it/supporto" target="_blank"><img src="http://www.linuxqualityhelp.it/lqh_help.png" alt="Serve aiuto? LQH!" /></a></p>
 <p><a href="http://davideaversa.it/slashcode/?flattrss_redirect&amp;id=271&amp;md5=586079b473ca6c9c7b79553e00d20eb1" title="Flattr" target="_blank"><img src="http://davideaversa.it/slashcode/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://davideaversa.it/slashcode/2009/09/creare-man-pages/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="https://flattr.com/submit/auto?user_id=thek3nger&amp;popout=1&amp;url=http%3A%2F%2Fdavideaversa.it%2Fslashcode%2F2009%2F09%2Fcreare-man-pages%2F&amp;language=it_IT&amp;category=text&amp;title=Creare+Man+Pages&amp;description=Penso+abbiate+tutti+presente+l%26%238221%3Butilissima+funzione+%26%238220%3Bman%26%238221%3B.+Man+sta+per+manual+anche+se+io+spesso+penso+derivi+da+manna+in+quanto+il+90%25+dei+problemi+li+risolvo+grazie+a+lei....&amp;tags=gnu%2Clinux%2Cman%2Cman+page%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

