<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="/rss20.xsl" media="screen"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<atom:link href="http://nazarenolatella.myblog.it/index.rss" rel="self" type="application/rss+xml" />
<title>Il blog sull'informatica</title>
<description>L'informatica vista da ogni prospettiva</description>
<link>http://nazarenolatella.myblog.it/</link>
<lastBuildDate>Mon, 21 May 2012 18:02:49 +0200</lastBuildDate>
<generator>myblog.it</generator>
<copyright>All Rights Reserved</copyright>
<item>
<guid isPermaLink="true">http://nazarenolatella.myblog.it/archive/2012/05/21/expect-script-e-troubleshooting.html</guid>
<title>Expect script e troubleshooting</title>
<link>http://nazarenolatella.myblog.it/archive/2012/05/21/expect-script-e-troubleshooting.html</link>
<author>noreply@myblog.it (nazarenolatella)</author>
<category>SO: Linux</category>
<pubDate>Mon, 21 May 2012 11:21:00 +0200</pubDate>
<description>
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Potrebbe succedere che uno shell script che fa pesantemente uso di &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;expect&lt;/span&gt;&lt;/strong&gt; vi si pianti senza alcun motivo apparente. Potrebbe anche succedere che passiate delle ore a cercare di capire dove sta l'inghippo senza ottenere risultati.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://nazarenolatella.myblog.it/media/02/00/1332489331.png&quot; target=&quot;_blank&quot;&gt;&lt;img id=&quot;media-2009468&quot; style=&quot;margin: 0.7em 0;&quot; title=&quot;&quot; src=&quot;http://nazarenolatella.myblog.it/media/02/00/1416039721.png&quot; alt=&quot;expect.png&quot; width=&quot;174&quot; height=&quot;158&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Ecco allora che ci possono tornare utili alcuni piccoli magheggi da applicare al nostro script (causa di n-mila imprecazioni).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Il primo consiste nell'abilitare l'output dei comandi lanciati da &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;expect&lt;/span&gt;&lt;/strong&gt;. Per fare ciò è sufficente aggiungere &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;exp_internal 1&lt;/span&gt;&lt;/strong&gt; allo script . Un esempio di output è il seguente:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;parent: waiting for sync byte&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;parent: telling child to go ahead&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;parent: now unsynchronized from child&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;spawn: returns {22098}&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;expect: does &quot;&quot; (spawn_id exp6) match glob pattern &quot;*?assword:*&quot;? no&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Inoltre (e sto parlando del secondo magheggio), posso garantirvi che nel 90% dei casi lo script fallisce a causa del timeout di &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;expect&lt;/span&gt;&lt;/strong&gt;. Per definire manualmente tale parametro basta inserire la seguente direttiva all'interno dello script:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;set timeout &amp;lt;numero di secondi&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Ciò è necessario soprattutto se i comandi lanciati richiedono parecchio tempo per essere eseguiti (vedi dump di un database e copia dello stesso su una macchina remota).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Fine del post, fatene buon uso.&lt;/span&gt;&lt;/p&gt;
</description>
</item>
<item>
<guid isPermaLink="true">http://nazarenolatella.myblog.it/archive/2012/05/16/siti-web-dal-design-pessimo.html</guid>
<title>Siti Web dal design pessimo</title>
<link>http://nazarenolatella.myblog.it/archive/2012/05/16/siti-web-dal-design-pessimo.html</link>
<author>noreply@myblog.it (nazarenolatella)</author>
<category>Web Editing</category>
<pubDate>Wed, 16 May 2012 15:06:35 +0200</pubDate>
<description>
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Se credete che basti saper utilizzare qualche tool &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;WYSIWYG&lt;/span&gt;&lt;/strong&gt; per creare un buon sito Web, allora date un'occhiata a questo link:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;a href=&quot;http://www.webpagesthatsuck.com/&quot; target=&quot;_blank&quot;&gt;http://www.webpagesthatsuck.com/&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;No comment...&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
</description>
</item>
<item>
<guid isPermaLink="true">http://nazarenolatella.myblog.it/archive/2012/05/15/overview-sui-linguaggi-di-programmazione.html</guid>
<title>Overview sui linguaggi di programmazione</title>
<link>http://nazarenolatella.myblog.it/archive/2012/05/15/overview-sui-linguaggi-di-programmazione.html</link>
<author>noreply@myblog.it (nazarenolatella)</author>
<category>Programmazione</category>
<pubDate>Tue, 15 May 2012 11:07:00 +0200</pubDate>
<description>
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Con il passare del tempo si è assistito ad una massiccia evoluzione dei linguaggi di programmazione, che ha portato ad una loro evidente semplificazione&lt;/span&gt;, &lt;span style=&quot;font-size: medium;&quot;&gt;aumentandone allo stesso tempo le potenzialità.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://nazarenolatella.myblog.it/media/02/01/1688587719.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img id=&quot;media-2003362&quot; style=&quot;margin: 0.7em 0;&quot; title=&quot;&quot; src=&quot;http://nazarenolatella.myblog.it/media/02/01/2387623055.jpg&quot; alt=&quot;linguaggi di programmazione, metodi di programmazione, OOP, procedurale, funzionale, Java, C, C++, LISP, linguaggi di scripting, compilatore&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Esistono diversi criteri per differenziare i vari linguaggi di programmazione, tra cui l'ordine cronologico. Parliamo quindi di:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggi di prima generazione&lt;/span&gt;&lt;/strong&gt;, come il &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggio macchina&lt;/span&gt;&lt;/strong&gt;, piuttosto complesso e strettamente dipendente dall'architettura hardware;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggi di seconda generazione&lt;/span&gt;&lt;/strong&gt;, tra cui &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;assembly&lt;/span&gt;&lt;/strong&gt;. Tale linguaggio, molto simile al &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggio macchina&lt;/span&gt;&lt;/strong&gt;, consente al programmatore di turno di ottenere gli stessi risultati dei &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggi di prima generazione&lt;/span&gt;&lt;/strong&gt; adoperando, però, un minor numero di istruzioni. Inoltre, affinchè tale linguaggio possa essere tradotto in &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggio macchina&lt;/span&gt;&lt;/strong&gt; è necessario uno strumento apposito, detto &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;assembler&lt;/span&gt;&lt;/strong&gt; (per l'operazione inversa viene invece utilizzato il cosiddetto &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;disassembler&lt;/span&gt;&lt;/strong&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;3) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggi di terza generazione&lt;/span&gt;&lt;/strong&gt;: trovano in &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;C&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;C++&lt;/span&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Java&lt;/span&gt;&lt;/strong&gt; gli elementi più rappresentativi. Essi hanno come elemento predominante il fatto che si avvicinano molto al linguaggio naturale (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;english like&lt;/span&gt;&lt;/strong&gt;) e dunque sono molto più semplici da utilizzare rispetto ad &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;assembly&lt;/span&gt;&lt;/strong&gt; o allo stesso &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggio macchina&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;4) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggi di quarta generazione&lt;/span&gt;&lt;/strong&gt;: in questa categoria rientrano i cosiddetti &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggi dichiartativi&lt;/span&gt;&lt;/strong&gt;, come &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;SQL&lt;/span&gt;&lt;/strong&gt;, utilizzato come &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;DDL&lt;/span&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;DML&lt;/span&gt;&lt;/strong&gt; nell'albito dei &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;DBMS&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Un ulteriore elemento distintivo tra i vari linguaggi di programmazione è sicuramente il metodo attraverso il quale vengono tradotti in &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggio macchina&lt;/span&gt;&lt;/strong&gt;. Parliamo quindi di:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggi compilati&lt;/span&gt;&lt;/strong&gt;: ne sono un'esempio &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;C&lt;/span&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;C++&lt;/span&gt;&lt;/strong&gt;, linguaggi che per essere tradotti il &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;codice macchina&lt;/span&gt;&lt;/strong&gt; (e dunque in &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;eseguibili&lt;/span&gt;&lt;/strong&gt;) necessitano di un &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;compilatore&lt;/span&gt;&lt;/strong&gt; (come &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;gcc&lt;/span&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;g++&lt;/span&gt;&lt;/strong&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggi interpretati&lt;/span&gt;&lt;/strong&gt;: essi non vengono compilati, ma interpretati in &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;runtime&lt;/span&gt;&lt;/strong&gt; senza che vi sia la necessità di trasformarli in eseguibili. Un esempio di linguaggi interpretati sono i cosiddetti linguaggi di scripting: da &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;bash&lt;/span&gt;&lt;/strong&gt; a &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;perl&lt;/span&gt;&lt;/strong&gt;, da &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;php&lt;/span&gt;&lt;/strong&gt; ad &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;asp&lt;/span&gt;&lt;/strong&gt;, and so on...&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;3) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;linguaggi a compilazione intermedia&lt;/span&gt;&lt;/strong&gt;: sono un tipo di linguaggio ibrido, ovvero soggetti ad una prima fase, in cui si assiste ad una sorta di &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;compilazione&lt;/span&gt;&lt;/strong&gt;, ed una seconda fase, in cui avviene l'&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;interpretazione&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt; Un esempio tipico di questa tipologia di linguaggi è &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Java&lt;/span&gt;&lt;/strong&gt;: in un primo momento il codice viene compilato, generando il cosiddetto &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;bytecode&lt;/span&gt;&lt;/strong&gt;. Successivamente, tale &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;bytecode&lt;/span&gt;&lt;/strong&gt; verrà interpretato da un software apposito (che funge appunto da &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;interprete&lt;/span&gt;&lt;/strong&gt;), ovvero la &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Java Virtual Machine&lt;/span&gt;&lt;/strong&gt; (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;JVM&lt;/span&gt;&lt;/strong&gt;).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Infine, un altro criterio per distinguere i vari linguaggi è la tipologia di programmazione di cui si avvalgono. Esistono infatti i seguenti tipi di programmazione:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;programmazione procedurale&lt;/span&gt;&lt;/strong&gt;: il programma viene realizzato attraverso l'uso di apposite &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;procedure&lt;/span&gt;&lt;/strong&gt; (le cosiddette &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;funzioni&lt;/span&gt;&lt;/strong&gt;) che hanno il compito di suddividere lo stesso in parti più elementari, consentendo allo sviluppatore di risolvere il problema mediante il classico approccio &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;divide et impera&lt;/span&gt;&lt;/strong&gt;. Essi, inoltre, permettono l'uso dei &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;salti incondizionati&lt;/span&gt;&lt;/strong&gt; (aka &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;goto&lt;/span&gt;&lt;/strong&gt;), anche se adoperarli potrebbe causare diversi problemi.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;programmazione strutturata&lt;/span&gt;&lt;/strong&gt;: simile in tutto e per tutto alla &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;programmazione procedurale&lt;/span&gt;&lt;/strong&gt; a differenza che non consente l'uso dei &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;salti incondizionati&lt;/span&gt;&lt;/strong&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;3) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;programmazione orientata agli ogetti&lt;/span&gt;&lt;/strong&gt; (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;OOP - Object Oriented Programming&lt;/span&gt;&lt;/strong&gt;): i massimi rappresentanti di questa tipologia di programmazione sono certamente &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;C++&lt;/span&gt;&lt;/strong&gt; ed il suo successore, ovvero &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Java&lt;/span&gt;&lt;/strong&gt;. In questo caso parliamo di &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;classe&lt;/span&gt;&lt;/strong&gt;, caratterizzata da &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;dati&lt;/span&gt;&lt;/strong&gt; (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;attributi&lt;/span&gt;&lt;/strong&gt;) e &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;funzioni&lt;/span&gt;&lt;/strong&gt; (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;metodi&lt;/span&gt;&lt;/strong&gt;). Un &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;oggetto&lt;/span&gt;&lt;/strong&gt; non è altro che l'&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;istanza di una classe&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;4) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;programmazione dichiarativa&lt;/span&gt;&lt;/strong&gt;, che a sua volta si suddivide in due tipologie, ovvero:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;4a)&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt; programmazione funzionale&lt;/span&gt;&lt;/strong&gt;, che basa il suo funzionamento su funzioni matematiche (un linguaggio che si avvale di tale tecnica è &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;LISP&lt;/span&gt;&lt;/strong&gt;, utilizzato soprattutto nell'ambito dell'intelligenza artificiale);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt; 4b) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;programmazione logica,&lt;/span&gt;&lt;/strong&gt; fondata su elementi di logica matematica.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Infine, a prescindere dal tipo di linguaggio e di logica di programmazione che si vuole utilizzare durante lo sviluppo software, è necessario porre particolare attenzione sul concetto di &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;astrazione&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;L'astrazione è un'attività svolta quasi automaticamente dalla nostra mente, la quale ci consente di concentrarci solo sui dettagli importanti di un dato problema, tralasciando tutto il resto. Esistono diversi tipi di astrazione:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;astrazione funzionale&lt;/span&gt;&lt;/strong&gt;: ovvero viene fornita solo l'&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;interfaccia&lt;/span&gt;&lt;/strong&gt; di un dato &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;metodo&lt;/span&gt;&lt;/strong&gt; (o il &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;prototipo&lt;/span&gt;&lt;/strong&gt; di una data funzione), tralasciando i dettagli implementativi della stessa;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;astrazione dei dati&lt;/span&gt;&lt;/strong&gt;: ovvero vengono considerate solo le informazioni essenziali relative ad una &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;classe&lt;/span&gt;&lt;/strong&gt; (o &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;struttura&lt;/span&gt;&lt;/strong&gt;), evitando quindi di dichiarare attributi che non verranno mai utilizzati;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;3) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;astrazione di sistema&lt;/span&gt;&lt;/strong&gt;: che riguarda l'intero software e lo rende in qualche modo indipendente dalla sua implementazione. Si può affermare che è una diretta conseguenza dell'&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;astrazione dei dati&lt;/span&gt;&lt;/strong&gt; che a sua volta dipende dall'&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;astrazione funzionale&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Alla prossima.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
</description>
</item>
<item>
<guid isPermaLink="true">http://nazarenolatella.myblog.it/archive/2012/05/14/testing-documentazione-e-manutenzione-del-software.html</guid>
<title>Testing, documentazione e manutenzione del software</title>
<link>http://nazarenolatella.myblog.it/archive/2012/05/14/testing-documentazione-e-manutenzione-del-software.html</link>
<author>noreply@myblog.it (nazarenolatella)</author>
<category>Programmazione</category>
<pubDate>Mon, 14 May 2012 17:44:00 +0200</pubDate>
<description>
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Testing&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Affichè si possa realizzare del software valido, ovvero funzionante ed ottimizzato, occorre effettuare delle campagne di testing rigorose.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;A tal proposito è opportuno precisare che esistono diverse metodologie ed approcci per testare il software creato. Tra gli approcci più gettonati vi è il cosiddetto metodo delle &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;white box&lt;/span&gt;&lt;/strong&gt; e quello delle &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;black box&lt;/span&gt;&lt;/strong&gt;. Nel primo caso i test vengono eseguiti tenendo conto del codice sorgente, oltre che del corretto funzionamento del software lato utente. Nel secondo caso, invece, il software viene visto come una vera e propria scatola nera; per la precisione i test si occupano soltanto di verificarne il corretto funzionamento lato utente, tralasciando completamente l'analisi del codice sorgente.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://nazarenolatella.myblog.it/media/02/01/3573630844.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img id=&quot;media-2002674&quot; style=&quot;margin: 0.7em 0;&quot; title=&quot;&quot; src=&quot;http://nazarenolatella.myblog.it/media/02/01/803775517.jpg&quot; alt=&quot;programming.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Quando si analizza un software, alla ricerca di eventuali errori, è necessario tenere a mente alcuni termini ricorrenti, quali:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;failure&lt;/span&gt;&lt;/strong&gt;: ovvero la discrepenza tra il comportamento effettivo di un dato software e quello previsto;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;fault&lt;/span&gt;&lt;/strong&gt;: malfunzionamento del software causato da uno o più errori;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;3) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;eccezione&lt;/span&gt;&lt;/strong&gt;: ovvero la tecnica attraverso cui il sistema software può segnalare allo sviluppatore (o all'utente) il verificarsi di un dato errore;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;4) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;bug (alias baco)&lt;/span&gt;&lt;/strong&gt;: ovvero un errore di programmazione più o meno grave.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;In base ai componenti del software da analizzare, esistono diverse tipologie di testing, ad esempio:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;unit testing&lt;/span&gt;&lt;/strong&gt;, che esamina il funzionamento di un particolare modulo di cui è dotato il sistema;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;integration testing&lt;/span&gt;&lt;/strong&gt; (conosciuto anche come &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;system testing&lt;/span&gt;&lt;/strong&gt;), ovvero i test immediatamente successivi all'integrazione di uno o più moduli software;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;3) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;acceptance testing&lt;/span&gt;&lt;/strong&gt;, ovvero i test effettuati lato utente che verificano il corretto funzionamento del software e soprattutto la sua conformità con ciò che è stato decretato dall'analisi dei requisiti.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Tornando a bomba sul concetto di integrazione, occorre precisare che esistono diversi approcci per affrontare tale problematica. Il primo approccio consiste essenzialmente nell'integrare dapprima i moduli più importanti, per poi arrivare a quelli più elementari (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;approccio top-down&lt;/span&gt;&lt;/strong&gt;). Il secondo approccio è speculare al primo, ovvero si parte dall'integrazione dei moduli più elementari per poi arrivare a quelli più importanti (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;bottom-up&lt;/span&gt;&lt;/strong&gt;). Infine, vi è il cosiddetto &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;approccio a macchia d'olio&lt;/span&gt;&lt;/strong&gt;: si parte da alcuni moduli e si procede con l'integrazione in base alle necessità.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Per i software di grandi dimensioni spesso viene adoperato un approccio leggermente diverso. In particolare, la fase di testing si articola in due sottofasi, quali:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;alpha testing&lt;/span&gt;&lt;/strong&gt;, in cui gli stessi sviluppatori (o una cerchia ristretta di dipendenti appartenenti alla medesima ditta che ha creato il software), si occupano di verificare il corretto funzionamento del sistema;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;beta testing&lt;/span&gt;&lt;/strong&gt;, in cui una ristretta cerchia di utenti (esterni alla ditta che ha sviluppato il software) si occupa di verificare la qualità del sistema creato.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Inoltre, poichè spesso esistono più versioni di uno stesso software, magari rilasciate in periodi di tempo successivi, spesso viene adottata la tecnica del cosiddetto &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;testing di regressione&lt;/span&gt;&lt;/strong&gt;. Più precisamente, viene verificato che tutte le componenti funzionanti nelle versioni precedenti del software continuino a funzionare anche nella nuova versione.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Un'importante operazione da effettuare in fase di testing è l'&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;analisi del codice sorgente&lt;/span&gt;&lt;/strong&gt;. Tale analisi può essere di due tipi:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;analisi statica&lt;/span&gt;&lt;/strong&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;analisi dinamica&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Nel primo caso viene controllato il codice dal punto di vista &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;sintattico&lt;/span&gt;&lt;/strong&gt; (definizione delle strutture, uso corretto dei segni di punteggiatura, ecc.) e &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;lessicale&lt;/span&gt;&lt;/strong&gt; (individuazione degli identificatori, delle parole chiave, ecc.). Viene inoltre fatta una verifica sui &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;tipi di dato&lt;/span&gt;&lt;/strong&gt; assegnato alle variabili (e sulle operazioni che le coinvolgono), oltre all'&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;analisi dell'evoluzione temporale&lt;/span&gt;&lt;/strong&gt; delle variabili stesse (dalla laro assegnazione fino al loro &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;flush&lt;/span&gt;&lt;/strong&gt;).&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Per ciò che concerne l'&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;analisi dinamica&lt;/span&gt;&lt;/strong&gt;, le operazioni effettuate vengono identificate con il termine di &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;copertura&lt;/span&gt;&lt;/strong&gt;. I tipi di &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;copertura&lt;/span&gt;&lt;/strong&gt; sono molteplici, ovvero:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;copertura dei comandi&lt;/span&gt;&lt;/strong&gt;, in cui vengono eseguiti, uno per uno, tutti i comandi definiti all'interno del codice;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;copertura delle decisioni&lt;/span&gt;&lt;/strong&gt;, in cui, a differenza del caso precedente, si tiene conto anche dei costrutti decisionali (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;if - then - else&lt;/span&gt;&lt;/strong&gt;);&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;3) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;copertura dei cammini&lt;/span&gt;&lt;/strong&gt;, che comprende tutti i possibili cammini del programma (definiti dai costrutti decisionali), considerando anche i cicli e le iterazioni.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;Documentazione&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Alla base di un buon software c'è sempre una buona documentazione. Per documentazione, oltre al &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;manuale dell'utente&lt;/span&gt;&lt;/strong&gt;, si intende:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;documentazione del progetto&lt;/span&gt;&lt;/strong&gt;, in cui vengono definite le varie fasi da seguire durante la realizzazione del sistema;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;documentazione del codice&lt;/span&gt;&lt;/strong&gt;, realizzata principalmente attraverso i cosiddetti commenti, presenti all'interno del codice sorgente, oppure attraverso l'uso di librerie apposite (ad esempio &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;JavaDoc&lt;/span&gt;&lt;/strong&gt;).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Per ciò che concerne l'interazione tra le diverse figure professionali che partecipano allo sviluppo del software (analisti, sviluppatori, ecc.) è di vitale importanza utilizzare alcuni strumenti appositi, quali il &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;documento dei requisiti&lt;/span&gt;&lt;/strong&gt;. Esso ha come scopo anche quello di &quot;regolare&quot; lo scambio di informazioni con i clienti e viene realizzato utilizzando dello &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;pseudocodice&lt;/span&gt;&lt;/strong&gt;, meno soggetto ad errori di interpretazione rispetto al linguaggio naturale.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Altri strumenti molto utili per documentare il comportamento del codice sono gli &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;alberi di decisione&lt;/span&gt;&lt;/strong&gt;, &lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;le&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt; tabelle di decisione &lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;e i&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt; diagrammi di flusso &lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;(&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;flowchart&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style=&quot;font-size: small;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;. Un'alternativa ai diagrammi di flusso è rappresentata dal linguaggio &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;UML&lt;/span&gt;&lt;/strong&gt;, i cui diagrammi principali sono i seguenti:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;diagramma dei casi d'uso&lt;/span&gt;&lt;/strong&gt;, che ha come scopo quello di rappresentare l'interazione dell'utente con il sistema;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;diagramma degli oggetti&lt;/span&gt;&lt;/strong&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;3) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;diagramma delle classi&lt;/span&gt;&lt;/strong&gt;;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;4) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;diagramma di sequenza&lt;/span&gt;&lt;/strong&gt;, che rappresenta le modalità con cui entrano in gioco le diverse componenti del sistema;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;5) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;diagramma di deployment&lt;/span&gt;&lt;/strong&gt;, che indica come i vari oggetti vengono distribuiti sui sistemi hardware;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;6) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;diagramma delle attività&lt;/span&gt;&lt;/strong&gt;, che rappresenta l'ordine di esecuzione delle varie attività dell'applicazione;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;7) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;diagramma di collaborazione&lt;/span&gt;&lt;/strong&gt;, che indica come le varie componenti del sistema software interagiscono tra di loro;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;8) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;diagramma degli stati&lt;/span&gt;&lt;/strong&gt;, che specifica l'evoluzione dello stato dei vari oggetti.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium; color: #ff0000;&quot;&gt;Manutenzione&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;La manutenzione del software è sicuramente una delle operazioni più critiche in assoluto. In particolare essa si occupa delle varie modifiche, evoluzioni ed aggiornamenti a cui il sistema è soggetto durante il corso della sua vita. A tal proposito, per manutenibilità si intende la caratteristica grazie alla quale un dato software può essere modificato senza impattare sulle performance e la funzionalità dello stesso. A ciò si aggiunge un sostanziale risparmio di risorse, sia in termini di denaro e forza lavoro che in termini di tempo.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Altra caratteristica fondamentale di un software è la riusabilità del codice, garantita anche grazie all'uso delle cosiddette &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;API&lt;/span&gt;&lt;/strong&gt; (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Application Programming Interface&lt;/span&gt;&lt;/strong&gt;).&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Infine, da non sottovalutare è certamente la &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;portabilità del codice&lt;/span&gt;&lt;/strong&gt;, che lo rende teoricamente &quot;indipendente&quot; dall'architettura hardware e dal sistema operativo su cui lo stesso è installato.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Nelle operazioni di manutenzione e sviluppo software il &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;versioning&lt;/span&gt;&lt;/strong&gt; ricopre un ruolo fondamentale. Esso viene realizzato attraverso dei software appositi, detti &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Concurrent Versioning System&lt;/span&gt;&lt;/strong&gt; (ad esempio &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Subversion&lt;/span&gt;&lt;/strong&gt;), che consentono a più sviluppatori di lavorare contemporaneamente sullo stesso codice, tenendo traccia delle modifiche apportate da ciascuno di essi.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Le operazioni che vengono eseguite, in soldoni, sono due:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;check out&lt;/span&gt;&lt;/strong&gt;, ovvero lo sviluppatore accede in scrittura al codice per poterlo modificare;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;check in&lt;/span&gt;&lt;/strong&gt;, grazie al quale lo sviluppatore, tramite un &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;commit&lt;/span&gt;&lt;/strong&gt;, salva le modifiche apportate al codice.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Ovviamente i &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;CVS&lt;/span&gt;&lt;/strong&gt; devono gestire la concorrenza, quindi nel caso in cui due svuluppatori tentassero di salvare contemporaneamente le modifiche apportate al codice sorgente, il software di versioning li avviserebbe di quanto sta avvenendo generando un errore opportuno e suggerendo&lt;/span&gt; &lt;span style=&quot;font-size: medium;&quot;&gt;le possibili soluzioni al problema&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Più in generale, una corretta manutenzione del codice prevede le seguenti attività:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;1) ispezione del codice sorgente;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;2) definizione di regole comuni per la scrittura della documentazione;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;3) scrittura di documentazione tecnica allegata al software stesso.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;E' tutto. A presto.&lt;/span&gt;&lt;/p&gt;
</description>
</item>
<item>
<guid isPermaLink="true">http://nazarenolatella.myblog.it/archive/2012/05/09/linux-utilizzare-un-packaging-tool-mediante-proxy-http.html</guid>
<title>Linux: packaging tool e proxy HTTP</title>
<link>http://nazarenolatella.myblog.it/archive/2012/05/09/linux-utilizzare-un-packaging-tool-mediante-proxy-http.html</link>
<author>noreply@myblog.it (nazarenolatella)</author>
<category>Pillole</category>
<pubDate>Wed, 09 May 2012 15:14:12 +0200</pubDate>
<description>
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Usate un packaging tool (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;aptitude&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;emerge&lt;/span&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;yum&lt;/span&gt;&lt;/strong&gt; et similia) per scaricare ed installare i pacchetti sulla vostra macchina Linux? Non avete accesso diretto al Web e quindi necessitate di interfacciarvi con un &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;proxy HTTP&lt;/span&gt;&lt;/strong&gt;? Niente paura, basta seguire questi semplici passi.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://nazarenolatella.myblog.it/media/00/01/641399289.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img id=&quot;media-1997343&quot; style=&quot;margin: 0.7em 0;&quot; title=&quot;&quot; src=&quot;http://nazarenolatella.myblog.it/media/00/01/3100857115.jpg&quot; alt=&quot;variabili di ambiente, aptitude, yum, emerge, export, http proxy&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Per prima cosa occorre definire la variabile di ambiente &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;http_proxy&lt;/span&gt;&lt;/strong&gt;, il cui valore dovrà essere simile al seguente:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;nightfly@nightbox:~$ export http_proxy=http://192.168.1.1:3128/&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;dove &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;192.168.1.1&lt;/span&gt;&lt;/strong&gt; è l'indirizzo IP del &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;proxy&lt;/span&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;3128&lt;/span&gt;&lt;/strong&gt; la porta su cui è in ascolto.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Se il &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;proxy&lt;/span&gt;&lt;/strong&gt; richiede autentica, è necessario definire la variabile precedentemente citata usando la seguente sintassi:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;nightfly@nightbox:~$ export http_proxy=http://username:password@192.168.1.1:3128/&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Attenzione però, le variabili di ambiente valgono esclusivamente per l'utente che le definisce. Per fare in modo che una variabile d'ambiente possa essere utilizzata da tutti gli utenti del sistema, è necessario operare sul file &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;/etc/profile&lt;/span&gt;&lt;/strong&gt;:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;nightfly@nightbox:~$ sudo nano /etc/profile&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;ed aggiungere la direttiva:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;export http_proxy=http://192.168.1.1:3128/&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;oppure:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;export http_proxy=http://username:password@192.168.1.1:3128/&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;in caso di autentica.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Infine, per listare le variabili di ambiente basta lanciare il comando:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;nightfly@nightbox:~$ export -p&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Done.&lt;/span&gt;&lt;/p&gt;
</description>
</item>
<item>
<guid isPermaLink="true">http://nazarenolatella.myblog.it/archive/2012/05/05/le-password-robuste.html</guid>
<title>Le password robuste...</title>
<link>http://nazarenolatella.myblog.it/archive/2012/05/05/le-password-robuste.html</link>
<author>noreply@myblog.it (nazarenolatella)</author>
<category>Pillole</category>
<pubDate>Sat, 05 May 2012 19:09:00 +0200</pubDate>
<description>
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Avere a disposizione grandi budget da investire nella messa in sicurezza della propria infrastruttura informatica non implica l'invulnerabilità della stessa. Con questo voglio dire che nel 90% dei casi, le attività di cracking, anche le più banali, riescono grazie all'incapacità del sistemista, del tecnico di helpdesk o dell'utente vittima.&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://nazarenolatella.myblog.it/media/00/00/3670401273.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img id=&quot;media-1993157&quot; style=&quot;margin: 0.7em 0;&quot; title=&quot;&quot; src=&quot;http://nazarenolatella.myblog.it/media/00/00/2914049679.jpg&quot; alt=&quot;Privacy_2.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Basti pensare che su Internet vi sono migliaia di dispositivi le cui interfacce di configurazione sono accessibili digitando &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;username&lt;/span&gt;&lt;/strong&gt; e &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;password&lt;/span&gt;&lt;/strong&gt; di &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;default&lt;/span&gt;&lt;/strong&gt;. Non ci credete? Incominciate ad usare &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;nmap&lt;/span&gt;&lt;/strong&gt;, magari all'interno di qualche &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;script bash&lt;/span&gt;&lt;/strong&gt; che colleziona determinati &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;OS fingerprint&lt;/span&gt;&lt;/strong&gt; e, una volta analizzati i risultati, provate una di queste&lt;/span&gt; &lt;span style=&quot;font-size: medium;&quot;&gt;credenziali di accesso:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;a href=&quot;http://www.phenoelit-us.org/dpl/dpl.html&quot; target=&quot;_blank&quot;&gt;http://www.phenoelit-us.org/dpl/dpl.html&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&quot;L'essere umano è il vero anello debole della catena&quot;.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Alla prossima.&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
</description>
</item>
<item>
<guid isPermaLink="true">http://nazarenolatella.myblog.it/archive/2012/05/02/user-enumeration-mediante-nmap.html</guid>
<title>User enumeration mediante nmap</title>
<link>http://nazarenolatella.myblog.it/archive/2012/05/02/user-enumeration-mediante-nmap.html</link>
<author>noreply@myblog.it (nazarenolatella)</author>
<category>Pillole</category>
<pubDate>Wed, 02 May 2012 11:02:41 +0200</pubDate>
<description>
&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Scenario: macchina &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Windows&lt;/span&gt;&lt;/strong&gt; in ascolto sulla porta &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;3389 TCP&lt;/span&gt;&lt;/strong&gt; (Il famoso &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Remote Desktop&lt;/span&gt;&lt;/strong&gt; della &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Microsoft&lt;/span&gt;&lt;/strong&gt;).&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://nazarenolatella.myblog.it/media/00/01/80017325.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img id=&quot;media-1989208&quot; style=&quot;margin: 0.7em 0;&quot; title=&quot;&quot; src=&quot;http://nazarenolatella.myblog.it/media/00/01/1969793033.jpg&quot; alt=&quot;scan, nmap, smb, user enumeration, rdp, remote desktpp&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Password nota, nome utente sconosciito. Cosa fare quindi? Semplice, utilizzare un particolare script di &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;nmap&lt;/span&gt;&lt;/strong&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Vediamo, nello specifico, qual è il comando da lanciare:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;nightfly@nightbox:/usr/share/nmap/nselib$ sudo nmap -sT -p445 --script=smb-enum-users &amp;lt;IP macchina Windows&amp;gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Come potete notare ho specificato ad &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;nmap&lt;/span&gt;&lt;/strong&gt; lo script da utilizzare, la porta di destinazione (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;TCP 445&lt;/span&gt;&lt;/strong&gt;, alias &lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;SMB&lt;/span&gt;&lt;/strong&gt;) ed il tipo di scan (&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;-sT&lt;/span&gt;&lt;/strong&gt;). &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;L'outuput sarà simile al seguente:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Starting Nmap 5.00 ( http://nmap.org ) at 2012-05-02 10:38 CEST&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Interesting ports on 192.168.*.*:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;PORT&amp;nbsp;&amp;nbsp;&amp;nbsp; STATE SERVICE&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;445/tcp open&amp;nbsp; microsoft-ds&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;MAC Address: E0:CB:*:*:*:* (Unknown)&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Host script results:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;|&amp;nbsp; smb-enum-users:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;|_ *Administrator, *Guest, *HelpAssistant,*HelpServicesGroup, *Nessuno&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style=&quot;font-size: small;&quot;&gt;Nmap done: 1 IP address (1 host up) scanned in 0.44 seconds&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Enjoy.&lt;/span&gt;&lt;/p&gt;
</description>
</item>
</channel>
</rss>
