<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.3.2" -->
<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/"
	>

<channel>
	<title>DreamVenue</title>
	<link>http://www.dreamvenue.net</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Wed, 02 Dec 2009 18:13:58 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.3.2</generator>
	<language>en</language>
			<item>
		<title>Google Calendar sul desktop con Conky</title>
		<link>http://www.dreamvenue.net/google-calendar-sul-desktop-con-conky/</link>
		<comments>http://www.dreamvenue.net/google-calendar-sul-desktop-con-conky/#comments</comments>
		<pubDate>Wed, 02 Dec 2009 17:57:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Tutorial]]></category>

		<category><![CDATA[Varie]]></category>

		<category><![CDATA[bash]]></category>

		<category><![CDATA[conky]]></category>

		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/google-calendar-sul-desktop-con-conky/</guid>
		<description><![CDATA[ Grazie ad una wave con Ely ho scoperto Conky. Un monitor di sistema per linux il quale, configurato opportunamente, si sovrappone allo sfondo del desktop mostrando informazioni relative CPU, memoria, spazio disco, temperature, traffico di rete e molto altro.
Mi sono appassionato alla configurazione di questo tool e nelle varie peripezie affrontate sono riuscito a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.dreamvenue.net/wp-content/uploads/2009/12/conky.jpg" rel="lightbox" title="Google Calendar in Conky"><img src="http://www.dreamvenue.net/wp-content/uploads/2009/12/conkys.jpg" alt="Desktop con Conky" style="float: left" /></a> Grazie ad una <a href="http://wave.google.com/">wave</a> con <a href="http://www.lovetux.eu/">Ely</a> ho scoperto Conky. Un monitor di sistema per linux il quale, configurato opportunamente, si sovrappone allo sfondo del desktop mostrando informazioni relative CPU, memoria, spazio disco, temperature, traffico di rete e molto altro.<br />
Mi sono appassionato alla configurazione di questo tool e nelle varie peripezie affrontate sono riuscito a portare in conky gli eventi creati con Google Calendar in maniera efficiente. Riportero&#8217; di seguito la procedura che ho effettuato ed uno script creato di getto.<br/><br />
Il primo passo è consistito nel trovare un modo per ottenere i dati di Google Calendar da linea di comando, per questo è stato d&#8217;aiuto il programma <a href="http://code.google.com/p/gcalcli/">gcalcli</a> che pur risentendo di qualche difetto si è comunque prestato all&#8217;impresa. L&#8217;ho quindi scaricato e copiato nel path di sistema:<br />
<code><br />
wget http://gcalcli.googlecode.com/files/gcalcli-1.4.tgz<br />
tar -xvf gcalcli-1.4.tgz<br />
sudo mv gcalcli /bin<br />
</code><br />
Conky può essere configurato per mostare l&#8217;output di alcuni comandi di sistema. Specificando i comandi direttamente nel file di configurazione si otterra che ogni volta che conky aggiorna il suo stato (lasso di tempo dell&#8217;ordine del secondo) tali programmi saranno riavviati. Interrogare la rete ogni secondo non era nelle mie intenzioni ho quindi creato uno script per lanciare conky costruendo il file di configurazione in modo dinamico:<br />
<code><br />
#!/bin/bash<br />
cd; # get home directory<br />
today=`date +"%m/%d/%Y"`	# current date<br />
nextmonth=`date --date "now 30 days" +"%m/%d/%Y"`	# current date + 30 days<br />
# get the conky configuration code for the calendar<br />
echo -e "\${font Purisa}\${color red}Google Calendar \${hr}\$color\$font \n\${font Purisa:size=10}`gcalcli --nc --user $1 --pw $2 agenda $today $nextmonth | sed '/^$/d'` \$font \n\${color red}\${hr}\$color" > caltemp<br />
# build a conky configuration file<br />
cp .conkyrc_base .conkyrc<br />
cat caltemp >> .conkyrc<br />
rm caltemp<br />
# launch conky<br />
sleep 10<br />
conky &#038;<br />
exit<br />
</code><br />
La variabile <em>today</em> conterrà la data corrente mentre <em>nextmonth</em> è la data corrente più trenta giorni, avremo quindi sul desktop gli eventi in agenta dal giorno in corso fino al mese successivo. In base ai valori di tali date viene lanciato gcalcli ed il risultato viene innestato in codice di configurazione conky per il quale si rimanda all&#8217;apposita <a href="http://conky.sourceforge.net/documentation.html">documentazione</a>. Il codice generato viene copiato in coda ad un file con la configurazione di base. Facendo partire conky con questo script Google Calendar sarà interrrogato una sola volta durante il suo ciclo di vita.<br/><br />
Per far partire conky all&#8217;avvio è necessario copiare il file con la configurazione di base, scaricabile da <a href="http://www.dreamvenue.net/wp-content/uploads/2009/12/.conkyrc_base">qui</a>, nella propia home e posizionare lo <a href="http://www.dreamvenue.net/wp-content/uploads/2009/12/conkystartup">script appena visto</a> al path (di norma /bin). Poi bisogna aggiungere lo script alla lista dei programmi di avvio di gnome andando in <em>System -> Preferences -> Startup Applications</em> clickando su Add, compariranno le finestre mostrate in figura, e nel campo Command immettere <em>conky_gcal <username>
<password></em>, naturalmente le credenziali devono essere quelle dell&#8217;account Google dove si ha il calendario da monitorare.<br />
Chi non volesse modificare il proprio file di configurazione conky può semplicemente usarlo come file di configurazione di base posizionandosi nella propria home e rinominandolo come segue:<br />
<code><br />
mv .conkyrc .conkyrc_base<br />
</code><br />
In questo modo gli eventi Google Calendar saranno mostrati sotti i dati solitamente monitorati.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/google-calendar-sul-desktop-con-conky/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ARP (Addres Resolution Protocol) Poisoning</title>
		<link>http://www.dreamvenue.net/arp-addres-resolution-protocol-poisoning/</link>
		<comments>http://www.dreamvenue.net/arp-addres-resolution-protocol-poisoning/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 19:31:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Tutorial]]></category>

		<category><![CDATA[arp]]></category>

		<category><![CDATA[hacking]]></category>

		<category><![CDATA[reti]]></category>

		<category><![CDATA[sniffing]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/arp-addres-resolution-protocol-poisoning/</guid>
		<description><![CDATA[Anche se ogni macchinadi internet ha uno o più indizizzi IP, questi non possono essere usati per inviare pacchetti perchè l&#8217;hardware che opera a livello datalink non è a conoscenza degli indirizzi IP.
Ogni scheda Ethernet ha associato un indirizzo a 48 bit chiamato MAC address. Le schede comunicano tra loro utilizzando tale indirizzo.
L&#8217;associazione tra IP [...]]]></description>
			<content:encoded><![CDATA[<p>Anche se ogni macchinadi internet ha uno o più indizizzi IP, questi non possono essere usati per inviare pacchetti perchè l&#8217;hardware che opera a livello datalink non è a conoscenza degli indirizzi IP.<br />
Ogni scheda Ethernet ha associato un indirizzo a 48 bit chiamato MAC address. Le schede comunicano tra loro utilizzando tale indirizzo.<br />
L&#8217;associazione tra IP e MAC Address avviene al momento della comunicazione tra glio host. Quando l&#8217;host A ha bisogno di inviare un pacchetto all&#8217;host B controlla se l&#8217;IP di B è nella sua stessa sottorete e se è cosi&#8217; invia un messaggio in broadcast a tutta la sottorete per chiedere il MAC di B. A tale richiesta risponderà solo B. Il protocollo per effettuare tale comunicazioni è chiamato ARP.<br />
Per utilizzare ARP in modo efficiente vengono attuate delle ottimizzazioni. Una volta ottenuto l&#8217;indirizzo di un host esso viene salvato in una cache, in questo modo non sarà effettuata nessuna richiesta ARP alla comunicazione con tale host.Ogni macchina invia in Broadcast la propria associazoine una volta collegata alla rete, in questo modo ogni host avrà in cache l&#8217;indirizzo della macchina appena collegata.<br />
Purtroppo le associazioni non sono valide per sempre, ciò comporta che i valori nelle chache scadono e nuove domande ARP dovranno essere effettuate.</p>
<p>Il protocollo ARP non è progettato per ambienti ostili e manca di un meccaniscmo di autenticazione. Tale mancanza consente di effettare un&#8217;attacco chiamato ARP Poisoning, con il quale è possibile intercettare pacchetti destinati ad altri host.<br />
Si immagini una reto con due host, uno in possesso dell&#8217;attaccante ed l&#8217;altro in possosesso della vittima, ed un nodo che funge da gateway. L&#8217;attaccante può inviare alla vittima una ARP reply fabbricata con l&#8217;associazione (IP.Gateway, Mac:Attaccante)  ed un&#8217;altra al gateway con l&#8217;associazione (IP.Vittima, Mac:Attaccante). Dopo aver ricevuto tali pacchetti la vittima ed il gateway aggiorneranno le proprie cache con gli indirizzi forniti dall&#8217;attaccante che riceverà sia i pacchetti inviati che quelli ricevuti dalla vittima. Inoltre per non farsi scoprire potrà reinoltrare i pacchetti senza bloccare la comunicazzione.</p>
<p>Il tipo di attacco descritto è implementato nel software <a href="http://ettercap.sourceforge.net/">ettercap</a>. Vediamo come intercettare il traffico tra l&#8217;host 192.168.1.10 e l&#8217;host 192.168.1.254 con questo programma:</p>
<p><code><br />
# ettercap -T -M ARP /192.168.1.10/ /192.168.1.254/<br />
ettercap NG-0.7.3 copyright 2001-2004 ALoR &#038; NaGA<br />
Listening on eth0... (Ethernet)<br />
  eth0 ->	MALLORY:MAC:ADDR     192.168.1.100     255.255.255.0<br />
...<br />
Scanning for merged targets (2 hosts)...<br />
* |==================================================>| 100.00 %<br />
2 hosts added to the hosts list...<br />
ARP poisoning victims:<br />
 GROUP 1 : 192.168.1.10 VICTIM:MAC:ADDR<br />
 GROUP 2 : 192.168.1.254 GATEWAY:MAC:ADDR<br />
Starting Unified sniffing...<br />
</code></p>
<p>Con l&#8217;opzione -T si dice al programma di usare la console come interfaccia con l&#8217;utente e con -M si indica di reinoltrare i pacchetti intercettati.<br />
Utilizzando <a href="http://www.wireshark.org">Whireshark</a> durante l&#8217;operazione di ARP poisoning possiamo osservare il seguente traffico ARP:</p>
<p><code><br />
Source		Destination	Type	Description<br />
RealtekS	Broadcast	ARP	Who has 192.168.1.10?  Tell 192.168.1.100<br />
RealtekS	Broadcast	ARP	Who has 192.168.1.254?  Tell 192.168.1.100<br />
BillionE	RealtekS	ARP	192.168.1.254 is at GATEWAY:MAC:ADDR<br />
Nokia_80	RealtekS	ARP	192.168.1.10 is at VICTIM:MAC:ADDR<br />
RealtekS	Nokia_80	ARP	192.168.1.254 is at MALLORY:MAC:ADDR<br />
RealtekS	BillionE	ARP	192.168.1.10 is at MALLORY:MAC:ADDR<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/arp-addres-resolution-protocol-poisoning/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Contabilità</title>
		<link>http://www.dreamvenue.net/contabilita/</link>
		<comments>http://www.dreamvenue.net/contabilita/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 14:52:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Varie]]></category>

		<category><![CDATA[contabilita]]></category>

		<category><![CDATA[insiemi]]></category>

		<category><![CDATA[logica]]></category>

		<category><![CDATA[numerabilità]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/contabilita/</guid>
		<description><![CDATA[Si dice che un insieme infinito è contabile, o numerabile, se esiste una corrispondenza biunivoca tra esso e l&#8217;insieme di tutti i numeri naturali.
Lemma di Cantor
Sia f0,f1,f2,&#8230; una successione contabile di funzioni tale che ogni fi applica i numeri naturali in {0,1}. Esiste una funzione f che applica i numeri naturali in {0 1} ma [...]]]></description>
			<content:encoded><![CDATA[<p>Si dice che un insieme infinito è contabile, o numerabile, se esiste una corrispondenza biunivoca tra esso e l&#8217;insieme di tutti i numeri naturali.<br/><br />
<b><i>Lemma di Cantor</i></b><br />
Sia <i>f<sub>0</sub>,f<sub>1</sub>,f<sub>2</sub>,&#8230;</i> una successione contabile di funzioni tale che ogni <i>f<sub>i</sub></i> applica i numeri naturali in {0,1}. Esiste una funzione <i>f</i> che applica i numeri naturali in {0 1} ma non è uguale ad alcuna delle <i>f<sub>i</sub></i>.<br />
<em>Dimostrazione</em>. Definendo <i>f(i)</i> come 1 -<i>f<sub>i</sub></i> allora <i>f</i>(i) sarà sicuramente diverso da <i>f<sub>i</sub></i>(i), dunque <i>f</i> è diversa da <i>f<sub>i</sub></i> per ogni <i>i</i>.</p>
<p>Dal lemma di Cantor segue che l&#8217;insieme di tutte le funzioni dai numeri naturali a {0,1} non è contabile.<br/><br />
Consideriamo adesso l&#8217;insieme <i>S</i> di tutte le successioni finitamente non nulle di 0 ed 1. Tale insieme è contabile e possiamo mostrarlo consideranto <i>s<sub>0</sub>s<sub>1</sub>s<sub>2</sub>&#8230;</i> una successione di 0 ed 1 e definendo una funzione che prende in input quella sccuessione:</p>
<p><img src='http://www.dreamvenue.net/wp-content/uploads/2009/07/contab2.gif' alt='contab2' /></p>
<p>dove <i>N</i> è un numero coì garande che <i>s<sub>n</sub></i>=0 per ogni <i>n>=N</i>. <i>f</i> è una corrspondenza biunivoca tra <i>S</i> e i numeri naturali. Per esserne sicuri basta osservare che per ogni <i>j</i>, <i>s<sub>0</sub></i>=0 solo se  il più grande intero tra le somme di  <i>s<sub>i</sub></i>2<sup>i</sup> diviso per 2<sup>j</sup> è pari.</p>
<p>Ogni sottoinsieme infinito di un insieme contabile è a sua volta contabile. Infatti, sia sia <i>X</i> un sottoinsieme di <i>N</i>={0,1,2,3,&#8230;}. Definiamo una funzione  <i>f</i> che va da <i>N</i> ad <i>X</i> nel seguente modo:</p>
<ul>
<li><i>f</i>(0) = min(<i>X</i>)</li>
<li><i>f</i>(<i>n</i>+1) è il più piccolo elemento di X maggiore di <i>f</i>(n)</li>
</ul>
<p><i>f</i> è invertibile e rappresenta una corrispondenza biunivoca tra <i>N</i> ed <i>X</i>. La sua inversa è una corrispondenza tra <i>X</i> ed <i>N</i> che dimostra la contabilità di <i>X</i>.</p>
<p>Possiamo dire anche che l&#8217;insieme <i>F</i> di tutte le successioni finite di numeri naturali è contabile. Sia <i>n*</i> una successione di <i>n</i>+1 uno. Per ogni successione di numeri naturali <i>n<sub>0</sub>n<sub>1</sub>n<sub>2</sub>&#8230;</i> sia:<br/></p>
<p><img src='http://www.dreamvenue.net/wp-content/uploads/2009/08/cont3.gif' alt='contab3' /></p>
<p>f è quinid una corrispondenza tra <i>F</i> e l&#8217;insieme <i>S</i> visto in precedenza. Ciò mostra che <i>F</i> è contabile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/contabilita/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sensori SunSpot e la programmazione ad agenti</title>
		<link>http://www.dreamvenue.net/sensori-sunspot-e-la-programmazione-ad-agenti/</link>
		<comments>http://www.dreamvenue.net/sensori-sunspot-e-la-programmazione-ad-agenti/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 10:44:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Progetti]]></category>

		<category><![CDATA[Programmazione]]></category>

		<category><![CDATA[jade]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[sensori]]></category>

		<category><![CDATA[sun spot]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/sensori-sunspot-e-la-programmazione-ad-agenti/</guid>
		<description><![CDATA[Un agente è un sistema situato in un certo ambiente, capace di azioni autonome sull&#8217;ambiente per raggiungere determinati obbiettivi [Wooldridge and Jennings 1995]. Gli agenti sono un importante strumento nato nell&#8217;ambito dell&#8217;intelligenza artificiale dai quali è nato un nuovo paradigma di programmazione, naturale evoluzione di altri paradigmi di programmazione, in particolare della programmazione ad oggetti.
L&#8217;idea [...]]]></description>
			<content:encoded><![CDATA[<p>Un <i>agente</i> è un sistema situato in un certo ambiente, capace di azioni autonome sull&#8217;ambiente per raggiungere determinati obbiettivi [Wooldridge and Jennings 1995]. Gli agenti sono un importante strumento nato nell&#8217;ambito dell&#8217;intelligenza artificiale dai quali è nato un nuovo paradigma di programmazione, naturale evoluzione di altri paradigmi di programmazione, in particolare della programmazione ad oggetti.<br />
L&#8217;idea di programmare dei sensori utilizzando il paradigma ad agenti è molto affascinante. I miei recenti esperimenti mi hanno portato alla realizzazione di un <a href="http://it.wikipedia.org/wiki/Sistema_multiagente">sistema multiagente</a> che coinvolge nella proprie decisioni dati rilevati da sensori.</p>
<p>I sensori utilizzati sono i famosi SunSpot, prodotti dalla Sun Microsystem.  La confezione inviata dalla sun contiene due sensori sun spot e una basestation. La basestation è un particolare tipo sunspot privato della SensorBoard attraverso la quale è possibile interfacciare un host, tramite collegamento usb, alla rete di sensori. Punto di forza di questi dispositi è il fatto di essere programmabili in linnguaggio Java.<br />
<img src="http://www.dreamvenue.net/blogstuff/bssp.jpg" alt="SunSpot Network" /><br />
L&#8217; installazione è stata effettuata dal <a href="http://www.sunspotworld.com/">sito ufficiale dei SunSpot</a> attraverso una java web start application la quale tenta di installare una jvm, ant, netbeans 6.1 con dei moduli aggiuntivi, SunSpot sdk e lo SPOT Manager. Sotto windows ci sono stati problemi sull&#8217;emulazione delle comunicazioni radio utilizzando versioni della jvm più recenti a quella suggerita dall&#8217;installer mentre sotto linux le cose sono sembrate più tranquille. Lo SPOT Manager fornisce un&#8217;interfaccia per la gestione degli SPOT collegati e l&#8217;esecuzione dell&#8217;emulatore. Quest&#8217;ultima è risultata particolarmente instabile ed ho preferito interagire con i vari Spot attraverso riga di comando.</p>
<p>L&#8217;ambiente di programmazione ad agenti è stato JADE (Java Agent DEvelopment Framework). Esso è un farmework completamente scritto in Java per l&#8217;implementazione di sistemi multiagente validi rispetto alle specifiche <a href="http://www.fipa.org/">FIPA</a>. JADE è software Open Source ed è stato prodotto da Telecom Italia Lab, branca di Telecom Italia Group responsabile all&#8217;innovazione tecnologica.</p>
<p>L&#8217;Integrazione tra le due piattaforme è avvenuta scrivendo un&#8217;applicazione per la basestation ed una per i sensori. Sulla basestation viene lanciata un&#8217;istanza di Jade e per ogni sensore a distanza di rilevamento viene inizializzato un agente nel framework, oltre ad una serie di agenti d&#8217;ausilio. Gli agenti software comunicano effettuano all&#8217;occorrenza delle richieste di rilevamento dati ai sensori che rispondono in modo opportuno attraverso l&#8217;applicazione scritta.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/sensori-sunspot-e-la-programmazione-ad-agenti/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Il rompicapo di Merkle</title>
		<link>http://www.dreamvenue.net/il-rompicapo-di-merkle/</link>
		<comments>http://www.dreamvenue.net/il-rompicapo-di-merkle/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 10:09:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Varie]]></category>

		<category><![CDATA[crittografia]]></category>

		<category><![CDATA[sicurezza]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/il-rompicapo-di-merkle/</guid>
		<description><![CDATA[Gli algoritmi di cifratura a chiavi simmetriche sono sistemi di cifratura dove due interlocutori (Alice e Bob) concordano preventivamente un algoritmo e una chiave con la quale possono sia cifrare che decifrare dei messaggio. Se gli interlocutori sono più di due e utilizzano lo stesso algoritmo, allora ogni coppia dovrà concordare una chiave diversa. Ciò [...]]]></description>
			<content:encoded><![CDATA[<p>Gli algoritmi di cifratura a chiavi simmetriche sono sistemi di cifratura dove due interlocutori (Alice e Bob) concordano preventivamente un algoritmo e una chiave con la quale possono sia cifrare che decifrare dei messaggio. Se gli interlocutori sono più di due e utilizzano lo stesso algoritmo, allora ogni coppia dovrà concordare una chiave diversa. Ciò comporta il delicato problema della distribuzione delle chiavi.</p>
<p>Ralph Merkle, uno dei pionieri della crittografia, negli anni 70 propose una tecnica basata su rompicapi(puzzle) facili da risolvere per il ricevente ma non per un eventuale ascoltatore malintenzionato (Eve). La soluzione di tali puzzle è data provando tutte le possibili chiavi di un messaggio fino a che si trova quella effettivamente corretta (attacco a forza bruta).</p>
<p>(1) Bob genera 2<sup>20</sup>, circa un milione, di messaggi con scritto: &#8220;<em>This is puzzle number x. This is the secret key number y</em>&#8220;, dove x è un numero a caso ed y una chiave segreta casuale. Sia x che y sono differenti per ogni messaggio. Usando un algoritmo simmetrico Bob cifra ogni messaggio con una chiave di 20 bit e li manda ad Alice.<br />
(2) Alice sceglie a caso uno dei messaggi ed esegue un attacco a forza bruta recuperandono il testo in chiaro.<br />
(3) Alice cifra il suo messaggio segreto con la chiave scoperta e lo invia a Bob insieme ad x.<br />
(4) Bob adesso, basandosi sull&#8217;indice x, conosce la chiave y con la quale Alice ha cifrato il messaggio. Può cosi&#8217; decifrarlo.</p>
<p>Eve per decifrare la conversazione dovrà fare molto più lavoro di Alice o Bob. Per decifrare il messaggio inviato da Alice al passo 3 deve effettuare un attacco a forza bruta su tutti i 2<sup>20</sup> messaggi inviati in 1. Considerando che una chiave a 20 bit ha 2<sup>20</sup> possibili combinazioni, un attacco a forza bruta ha bisogno, al più, di 2<sup>20</sup> operazioni per trovare la chiave di un singolo messaggio, 2<sup>20</sup> * 2<sup>20</sup> = 2<sup>40</sup> per trovare le chiavi di tutti. Con un calcolatore che può effettuare 2<sup>20</sup> in un secondo Alice troverà la propria chiave in un secondo ma Eve, data la mole di messaggi da scandire, impiegherà circa 12 giorni.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/il-rompicapo-di-merkle/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Operatori Aritmetici - (Prolog) Lezione 6</title>
		<link>http://www.dreamvenue.net/operatori-aritmetici-prolog-lezione-6/</link>
		<comments>http://www.dreamvenue.net/operatori-aritmetici-prolog-lezione-6/#comments</comments>
		<pubDate>Fri, 27 Feb 2009 11:40:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Programmazione]]></category>

		<category><![CDATA[Tutorial]]></category>

		<category><![CDATA[aritmetica]]></category>

		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/operatori-aritmetici-prolog-lezione-6/</guid>
		<description><![CDATA[Prolog è un linguaggio per il calcolo simbolico dove la necesita di eseguire calcoli aritmetici è esigua. In questa lezione vedremo come gestire le operazione aritmetiche.
I principali operatori aritmetici di Prolog sono:

+, addizione
-, sottrazione
*, moltiplicazione
/, divisione
mod, resto della divisione

L&#8217;uso di tali operatori non è diretto. Infatti scrivendo 
?- X = 1 + 2.
Prolog risponderà &#8220;X [...]]]></description>
			<content:encoded><![CDATA[<p>Prolog è un linguaggio per il calcolo simbolico dove la necesita di eseguire calcoli aritmetici è esigua. In questa lezione vedremo come gestire le operazione aritmetiche.<br />
I principali operatori aritmetici di Prolog sono:</p>
<ul>
<li>+, addizione</li>
<li>-, sottrazione</li>
<li>*, moltiplicazione</li>
<li>/, divisione</li>
<li>mod, resto della divisione</li>
</ul>
<p>L&#8217;uso di tali operatori non è diretto. Infatti scrivendo </p>
<p>?- X = 1 + 2.</p>
<p>Prolog risponderà &#8220;X = 1 + 2&#8243; e non &#8220;X = 3&#8243; come qualcuno potrebe aspettarsi. Ciò avviene perchè la stringa &#8220;1 + 2&#8243;  in prolog coincide con un termine dove + è il funtore ed 1 e 2 i suoi argomenti. Per eseguire l&#8217;operazione aritmetica c&#8217;è bisogno di usare l&#8217;operatore speciale <b>is</b> come segue:<br />
 <a href="http://www.dreamvenue.net/operatori-aritmetici-prolog-lezione-6/#more-40" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/operatori-aritmetici-prolog-lezione-6/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Liste in Prolog - (Prolog) Lezione 5</title>
		<link>http://www.dreamvenue.net/liste-in-prolog-prolog-lezione-5/</link>
		<comments>http://www.dreamvenue.net/liste-in-prolog-prolog-lezione-5/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 09:46:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Programmazione]]></category>

		<category><![CDATA[Tutorial]]></category>

		<category><![CDATA[liste]]></category>

		<category><![CDATA[prolog]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/liste-in-prolog-prolog-lezione-5/</guid>
		<description><![CDATA[Le liste sono strutture dati tanto semplici quanto usate. In questa lezione vedremo come usarle in Prolog. Una lista è una sequenza di elementi e, come visto anche nella lezione precedente, può essere scritta in Prolog utilizzando il funtore &#8216;.&#8217; oppure usando la notazione con parentesi quadre. Quest&#8217;ultima è la notazione più comoda e sarà [...]]]></description>
			<content:encoded><![CDATA[<p>Le liste sono strutture dati tanto semplici quanto usate. In questa lezione vedremo come usarle in Prolog. Una lista è una sequenza di elementi e, come visto anche nella lezione precedente, può essere scritta in Prolog utilizzando il funtore &#8216;.&#8217; oppure usando la notazione con parentesi quadre. Quest&#8217;ultima è la notazione più comoda e sarà l&#8217;unica ad essere trattata in questa lezione. Una lista può essere scritta nel seguente modo:<br />
<code><br />
[item1, item2, item3, item4]<br />
</code><br />
 <a href="http://www.dreamvenue.net/liste-in-prolog-prolog-lezione-5/#more-39" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/liste-in-prolog-prolog-lezione-5/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Art of Illusion</title>
		<link>http://www.dreamvenue.net/art-of-illusion/</link>
		<comments>http://www.dreamvenue.net/art-of-illusion/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 14:46:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Varie]]></category>

		<category><![CDATA[3D]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[modelling]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/art-of-illusion/</guid>
		<description><![CDATA[Art of Illusion (AoI) è un ambiente di modellazione 3D free ed OpenSource, esso consente di creare scenari ed animazioni tridimensionali di ottimo impatto. Punti di forza di tale software sono la suddivisione delle superfici ed animazioni basate su scheletri, inoltre fornisce un linguaggio grafico per la progettazione di texture procedurali e materiali.
Forse non è [...]]]></description>
			<content:encoded><![CDATA[<p>Art of Illusion (AoI) è un ambiente di modellazione 3D free ed OpenSource, esso consente di creare scenari ed animazioni tridimensionali di ottimo impatto. Punti di forza di tale software sono la suddivisione delle superfici ed animazioni basate su scheletri, inoltre fornisce un linguaggio grafico per la progettazione di texture procedurali e materiali.<br />
Forse non è il migliore software OpenSource della sua categoria ma è l&#8217;unico scritto in Java.<br />
E&#8217; espandibile attraverso plugin e script con i quali è possibile accedere a tutte le classi del programma.<br />
<br/><br />
<a href="http://www.dreamvenue.net/blogstuff/aoies.jpg" rel="lightbox" title="Finestra principale di Art of Illusion"><img src="http://www.dreamvenue.net/blogstuff/aoies.jpg" alt="Finestra principale di Art of Illusion"/></a><br />
<br/></p>
<p>AoI supporta il Ray tracing, il quale è una tecnica basata sulla simulazione del percorso fatto dalla luce. Grazie ad essa è possibile creare delle immagini fotorealistiche proprio come <a href="http://www.flickr.com/photos/dreamvenue/sets/72157609944222585/">queste</a>.<br />
Dal <a href="http://www.artofillusion.org/">sito</a> ufficiale del software sono scaricabili gli installabili per i tre sistemi operativi principali Windows, Linux, Mac OS X ed un pacchetto contenente soltanto il jar per tutte le altre piattaforme su cui gira java.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/art-of-illusion/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Tipi di dato in Prolog - (Prolog) Lezione 4</title>
		<link>http://www.dreamvenue.net/tipi-di-dato-in-prolog-prolog-lezione-4/</link>
		<comments>http://www.dreamvenue.net/tipi-di-dato-in-prolog-prolog-lezione-4/#comments</comments>
		<pubDate>Fri, 12 Dec 2008 21:32:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Programmazione]]></category>

		<category><![CDATA[Tutorial]]></category>

		<category><![CDATA[datatype]]></category>

		<category><![CDATA[liste]]></category>

		<category><![CDATA[prolog]]></category>

		<category><![CDATA[strutture]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/tipi-di-dato-in-prolog-prolog-lezione-4/</guid>
		<description><![CDATA[Nella prima lezione sono stati distinti gli atomi dalle variabili, tale distinzione è stata usata in tutte le lezioni successive. Vediamo adesso in dettaglio i tipi di dato utilizzabili in prolog.

                         [...]]]></description>
			<content:encoded><![CDATA[<p>Nella prima lezione sono stati distinti gli atomi dalle variabili, tale distinzione è stata usata in tutte le lezioni successive. Vediamo adesso in dettaglio i tipi di dato utilizzabili in prolog.</p>
<pre>
                         Dato
                          /\
                         /  \
               OggettoBase  Termini Composti
                     /\
                    /  \
             Costanti  Variabili
                  /\
                 /  \
            Atomi  Numeri
</pre>
<p>I dati in prolog si dividono in termini composti e dati basilari, questi ultimi si dividono in varibili e costanti.<br />
 <a href="http://www.dreamvenue.net/tipi-di-dato-in-prolog-prolog-lezione-4/#more-37" class="more-link">(more&#8230;)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/tipi-di-dato-in-prolog-prolog-lezione-4/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Ancora sulle regole - (Prolog) Lezione 3</title>
		<link>http://www.dreamvenue.net/ancora-sulle-regole-prolog-lezione-3/</link>
		<comments>http://www.dreamvenue.net/ancora-sulle-regole-prolog-lezione-3/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 13:28:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Programmazione]]></category>

		<category><![CDATA[Tutorial]]></category>

		<category><![CDATA[prolog]]></category>

		<category><![CDATA[relazioni]]></category>

		<guid isPermaLink="false">http://www.dreamvenue.net/ancora-sulle-regole-prolog-lezione-3/</guid>
		<description><![CDATA[Estendiamo ancora il famoso programma per la rappresentazione di un&#8217;albero familiare distinguendo gli elementi per sesso in questo modo:

female(pam).
male(tom).
male(bob).
female(liz).
female(ann).
female(pat).
male(jim).

Grazie a tali relazioni possiamo stabilire la regola mother partendo dalla seguente idea
Per ogni X ed Y.
  X è madredi di Y se
  X è parent di Y e
  X è una donna.
Ricordiamo che [...]]]></description>
			<content:encoded><![CDATA[<p>Estendiamo ancora il famoso programma per la rappresentazione di un&#8217;albero familiare distinguendo gli elementi per sesso in questo modo:<br />
<code><br />
female(pam).<br />
male(tom).<br />
male(bob).<br />
female(liz).<br />
female(ann).<br />
female(pat).<br />
male(jim).<br />
</code></p>
<p>Grazie a tali relazioni possiamo stabilire la regola <strong>mother</strong> partendo dalla seguente idea</p>
<p>Per ogni X ed Y.<br />
  X è madredi di Y se<br />
  X è <em>parent</em> di Y e<br />
  X è una donna.</p>
<p>Ricordiamo che una regola prolog è composta da un corpo ed una testa disposti nella forma</p>
<p>Testa :- Corpo</p>
<p> e si legge &#8220;Testa è vero solo se è vero il Corpo&#8221;. Quindi possiamo scrivere la relazione di sopra come<br />
<code><br />
mother(X, Y) :-<br />
&nbsp;&nbsp;&nbsp;&nbsp;parent(X, Y),<br />
&nbsp;&nbsp;&nbsp;&nbsp;female(X).<br />
</code></p>
<p>Possiamo così definire la relazione <strong>sister</strong> tra X ed Y asserendo che X ed Y abbiano lo stesso padre Z, che X sia donna ed X e Y siano diversi tra loro:</p>
<p><code><br />
sister(X, Y)<br />
&nbsp;&nbsp;&nbsp;&nbsp;parent(Z,X),<br />
&nbsp;&nbsp;&nbsp;&nbsp;parent(Z,Y),<br />
&nbsp;&nbsp;&nbsp;&nbsp;female(X),<br />
&nbsp;&nbsp;&nbsp;&nbsp;not X = Y.<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dreamvenue.net/ancora-sulle-regole-prolog-lezione-3/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
