<?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; documentation</title>
	<atom:link href="http://davideaversa.it/slashcode/tag/documentation/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>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>Epydoc &#8211; Documentazione Autogenerata per Python</title>
		<link>http://davideaversa.it/slashcode/2009/09/epydoc-documentazione-autogenerata-per-python/</link>
		<comments>http://davideaversa.it/slashcode/2009/09/epydoc-documentazione-autogenerata-per-python/#comments</comments>
		<pubDate>Wed, 09 Sep 2009 16:55:43 +0000</pubDate>
		<dc:creator>THeK3nger</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[documentation]]></category>
		<category><![CDATA[epydoc]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://slashcode.wordpress.com/?p=262</guid>
		<description><![CDATA[<div><a href="http://davideaversa.it/slashcode/2009/09/epydoc-documentazione-autogenerata-per-python/"><img title="Epydoc &#8211; Documentazione Autogenerata per Python" src="http://www.blog.sdonk.org/wp-content/python.png" alt="Epydoc &#8211; Documentazione Autogenerata per Python"  width="193" height="200" /></a></div><br/>Epydoc è un tool per python che genera automaticamente una pagina web contenente la documentazione dettagliata dei file sorgente del nostro progetto. Epydoc sfrutta la "docstring" di python estendendola con dei tag e degli elementi di markup che rendono la documentazione elegante e professionale. Andiamo ora a scoprire come installarlo e come commentare il codice per avere i risultati che ci aspettiamo.]]></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%2Fepydoc-documentazione-autogenerata-per-python%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/epydoc-documentazione-autogenerata-per-python/" ></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="Epydoc &#8211; Documentazione Autogenerata per Python" data-url="http://davideaversa.it/slashcode/2009/09/epydoc-documentazione-autogenerata-per-python/" 
						data-via=""  ></a></div></div>
		<div style="clear:both;"></div><p><img class="alignleft" title="Python" src="http://www.blog.sdonk.org/wp-content/python.png" alt="" width="128" height="132" />Java aveva un lato positivo. C&#8217;era una cosa che mi piaceva: <strong>javadoc</strong>. Ovvero un sistema per generare automaticamente una dettagliata e affascinante pagina web con la descrizione e la documentazione di ogni parte di codice scritto basandosi su alcuni speciali commenti del codice.</p>
<p>Ma io non sono un programmatore Java (dio me ne scampi) ma, fra i molti linguaggi, mi diverto con il Python. Così ho cercato in lungo e in largo un sistema che svolgesse le stesse funzioni di Javadoc. <strong>E l&#8217;ho trovato</strong>.</p>
<p>Python dispone di molti tool del genere, quindi ne ho provati un po, fino a far ricadere la mia scelta su <a href="http://epydoc.sourceforge.net/"><strong>Ephydoc</strong></a>. Ephydoc non solo svolge tutte le funzioni di javadoc ma è molto più potente e versatile.</p>
<p>Innanzitutto per istallarlo, come ormai sappiamo, digitiamo dal terminale:</p>
<pre># apt-get install python-epydoc</pre>
<p>A questo punto il programma è pronto per essere utilizzato. L&#8217;importante è commentare il nostro codice seguendo delle piccole cose a mente.</p>
<p>Innanzitutto <em>epydoc</em> sfrutta la <em>docstring</em> standard di Python. Dovete sapere che Python integra nativamente un piccolo sistema di documentazione nel codice. Infatti proviamo a scrivere una funzione in questo modo:</p>
<pre>def codice_esatto(code):
<strong>    """
    Verifica se il codice inserito è corretto.
    """</strong>
    if codice=="4 8 15 16 23 42" :
        return true
    else :
        return false</pre>
<p>Il testo racchiuso fra le <strong>triple virgolette </strong>è una stringa che descrive la funzione <em>codice_esatto</em>. Infatti digitando dall&#8217;interprete:</p>
<pre>&gt;&gt;&gt; print codice_esatto.__doc__</pre>
<p>Ci viene restituito proprio il testo fra virgolette.</p>
<p>Epydoc sfrutta proprio questo testo per comporre la pagina web e inoltre è possibile aggiungere alcuni elementi di <em>markup</em> per rendere la documentazione più elegante.</p>
<p>Per una guida completa alla documentazione vi rimando alla <a href="http://epydoc.sourceforge.net/manual-docstring.html">pagina ufficiale del manuale di epydoc</a> dove ci sono molti esempi di facile interpretazione. Qui di seguito aggiungo una serie di tag di frequente utilizzo:</p>
<ul>
<li>@param p: Descrizione del parametro <em>p</em></li>
<li>@type p: Tipo del parametro <em>p</em></li>
<li>@return: Descrizione del valore restituito.</li>
<li>@rtype: Tipo del valore restituito.</li>
<li>@raise e: Descrizione sulle circostanze in cui viene lanciata l&#8217;eccezione <em>e</em></li>
</ul>
<p>Per il resto rimando sempre al sito ufficiale.</p>
<p>Una volta che abbiamo commentato tutti i nostri file (dovrebbero essere già commentati. Se non lo sono aih aih aih, è la regol aprima del programmatore) non ci resta che lanciare <em>epydoc</em> con:</p>
<pre>epydoc file1.py file2.py ... fileN.py</pre>
<p>Alla fine troveremo tutta la nostra documentazione nella cartella <em>html</em>. Buona lettura <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=262&amp;md5=73287db481170b4f0ab74e00eeecb908" 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/epydoc-documentazione-autogenerata-per-python/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%2F09%2Fepydoc-documentazione-autogenerata-per-python%2F&amp;language=it_IT&amp;category=text&amp;title=Epydoc+%26%238211%3B+Documentazione+Autogenerata+per+Python&amp;description=Java+aveva+un+lato+positivo.+C%26%238217%3Bera+una+cosa+che+mi+piaceva%3A+javadoc.+Ovvero+un+sistema+per+generare+automaticamente+una+dettagliata+e+affascinante+pagina+web+con+la+descrizione+e+la+documentazione...&amp;tags=documentation%2Cepydoc%2Cpython%2Cblog" type="text/html" />
	</item>
	</channel>
</rss>

