<?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>evilsocket.net &#187; Programmazione</title>
	<atom:link href="http://www.evilsocket.net/category/programmazione/feed" rel="self" type="application/rss+xml" />
	<link>http://www.evilsocket.net</link>
	<description>If you can't understand it, it doesn't mean it's wrong ...</description>
	<lastBuildDate>Wed, 21 Jul 2010 00:16:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Script per il calcolo della chiave WPA dei router Alice Gate VoIP 2 Plus Wi-Fi</title>
		<link>http://www.evilsocket.net/1173/script-per-il-calcolo-della-chiave-wpa-dei-router-alice-gate-voip-2-plus-wi-fi.html</link>
		<comments>http://www.evilsocket.net/1173/script-per-il-calcolo-della-chiave-wpa-dei-router-alice-gate-voip-2-plus-wi-fi.html#comments</comments>
		<pubDate>Sun, 06 Jun 2010 17:57:26 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Exploiting]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Sorgenti]]></category>
		<category><![CDATA[Wardriving]]></category>
		<category><![CDATA[AGPF]]></category>
		<category><![CDATA[algoritmo]]></category>
		<category><![CDATA[alice]]></category>
		<category><![CDATA[chiave]]></category>
		<category><![CDATA[cracking]]></category>
		<category><![CDATA[generazione]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[pirelli]]></category>
		<category><![CDATA[warcracking]]></category>
		<category><![CDATA[wifi]]></category>
		<category><![CDATA[win32]]></category>
		<category><![CDATA[wpa]]></category>
		<category><![CDATA[wpa2]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=1173</guid>
		<description><![CDATA[Come preannunciato nell&#8217;artcolo precedente sui router Fastweb, mi sono adoperato a studiare la brillante ricerca della WhiteHatCrew sui router di Alice, denominati AGPF, al fine di implementare uno script per la generazione della chiave WPA di default. A differenza del caso FastWeb, il quale per il calcolo si basava solo sull SSID della rete, in [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/1126/script-per-il-calcolo-della-chiave-wpa-nei-router-fastweb-pirelli.html' rel='bookmark' title='Permanent Link: Script per il calcolo della chiave WPA dei router FastWeb Pirelli.'>Script per il calcolo della chiave WPA dei router FastWeb Pirelli.</a></li>
<li><a href='http://www.evilsocket.net/96/alice-router-unlocker.html' rel='bookmark' title='Permanent Link: Alice Router Unlocker'>Alice Router Unlocker</a></li>
<li><a href='http://www.evilsocket.net/1375/informazione-di-servizio-chiave-pubblica.html' rel='bookmark' title='Permanent Link: Informazione di Servizio, Chiave Pubblica'>Informazione di Servizio, Chiave Pubblica</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Come preannunciato nell&#8217;<a href="http://www.evilsocket.net/1126/script-per-il-calcolo-della-chiave-wpa-nei-router-fastweb-pirelli.html" target="_blank">artcolo precedente</a> sui router Fastweb, mi sono adoperato a studiare la <a href="http://wifiresearchers.wordpress.com/2010/06/02/alice-agpf-lalgoritmo/" target="_blank">brillante ricerca</a> della WhiteHatCrew sui router di Alice, denominati AGPF, al fine di implementare uno script per la generazione della chiave WPA di default.</p>
<p><span id="more-1173"></span></p>
<p>A differenza del caso FastWeb, il quale per il calcolo si basava solo sull SSID della rete, in questo caso ci serve anche il seriale del router che, come dimostrato dalla ricerca precedentemente linkata, è ricavabile tramite un sistema a due incognite dal quale, la WHC, ha tirato fuori una tabella di valori noti, tabella che ho inserito nel mio script.</p>
<p>Di conseguenza, a meno che il lettore non ampli la propria tabella a mano, seguendo le indicazioni della WHC, lo script funzionerà solo con SSID del tipo :</p>
<ul>
<li>Alice-96xxxxxx</li>
<li>Alice-93xxxxxx</li>
<li>Alice-56xxxxxx</li>
<li>Alice-55xxxxxx</li>
<li>Alice-54xxxxxx</li>
<li>Alice-48xxxxxx</li>
<li>Alice-46xxxxxx</li>
</ul>
<p>Sono sicuro cmq che cercando nella rete delle tabelle un po più estese si trovano <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Lo script è commentato (come il precedente), in modo tale il lettore avrà la possibilità non solo di utilizzarlo, ma anche di capirlo, che è la cosa che più mi preme al fine di una condivisione libera dell&#8217;informazione e della cultura informatica in generale.</p>
<p>Enjoy.</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:100%;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #666666; font-style: italic;">/***************************************************************************<br />
&nbsp;* &nbsp; Alice AGPF WPA Discovery &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp;* &nbsp; by evilsocket - evilsocket@gmail.com - http://www.evilsocket.net &nbsp; &nbsp; &nbsp;*<br />
&nbsp;* &nbsp; based on &lt;http://wifiresearchers.wordpress.com/&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; This program is free software; you can redistribute it and/or modify &nbsp;*<br />
&nbsp;* &nbsp; it under the terms of the GNU General Public License as published by &nbsp;*<br />
&nbsp;* &nbsp; the Free Software Foundation; either version 2 of the License, or &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; (at your option) any later version. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; This program is distributed in the hope that it will be useful, &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp;* &nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &nbsp;See the &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; GNU General Public License for more details. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; You should have received a copy of the GNU General Public License &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; along with this program; if not, write to the &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; Free Software Foundation, Inc., &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; 59 Temple Place - Suite 330, Boston, MA &nbsp;02111-1307, USA. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;***************************************************************************/</span><br />
<br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Tabella per il calcolo del seriale.<br />
&nbsp;*<br />
&nbsp;* First SSID digits =&gt; ( SN1, k, Q )<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$SN_TABLE</span> &nbsp; <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'96'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'69102'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">13</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">96017051</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">'93'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'69101'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">13</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">92398366</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">'56'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'67902'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">13</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">54808800</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">'55'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'67904'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> &nbsp;<span style="color: #cc66cc;">55164449</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">'54'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'67903'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> &nbsp;<span style="color: #cc66cc;">52420689</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">'48'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'67903'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">8</span><span style="color: #339933;">,</span> &nbsp;<span style="color: #cc66cc;">47896103</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #0000ff;">'46'</span> <span style="color: #339933;">=&gt;</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'67902'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">13</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">39015145</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Numeri magici da utilizzare per il calcolo dell'SHA256.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$ALIS</span> &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;<span style="color: #660099; font-weight: bold;">\x64</span><span style="color: #660099; font-weight: bold;">\xC6</span><span style="color: #660099; font-weight: bold;">\xDD</span><span style="color: #660099; font-weight: bold;">\xE3</span><span style="color: #660099; font-weight: bold;">\xE5</span><span style="color: #660099; font-weight: bold;">\x79</span><span style="color: #660099; font-weight: bold;">\xB6</span><span style="color: #660099; font-weight: bold;">\xD9</span><span style="color: #660099; font-weight: bold;">\x86</span><span style="color: #660099; font-weight: bold;">\x96</span><span style="color: #660099; font-weight: bold;">\x8D</span><span style="color: #660099; font-weight: bold;">\x34</span><span style="color: #660099; font-weight: bold;">\x45</span><span style="color: #660099; font-weight: bold;">\xD2</span><span style="color: #660099; font-weight: bold;">\x3B</span><span style="color: #660099; font-weight: bold;">\x15</span><span style="color: #660099; font-weight: bold;">\xCA</span><span style="color: #660099; font-weight: bold;">\xAF</span><span style="color: #660099; font-weight: bold;">\x12</span><span style="color: #660099; font-weight: bold;">\x84</span><span style="color: #660099; font-weight: bold;">\x02</span><span style="color: #660099; font-weight: bold;">\xAC</span><span style="color: #660099; font-weight: bold;">\x56</span><span style="color: #660099; font-weight: bold;">\x00</span><span style="color: #660099; font-weight: bold;">\x05</span><span style="color: #660099; font-weight: bold;">\xCE</span><span style="color: #660099; font-weight: bold;">\x20</span><span style="color: #660099; font-weight: bold;">\x75</span><span style="color: #660099; font-weight: bold;">\x91</span><span style="color: #660099; font-weight: bold;">\x3F</span><span style="color: #660099; font-weight: bold;">\xDC</span><span style="color: #660099; font-weight: bold;">\xE8</span>&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Tabella di conversione da hash a wpa.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$CONV_TABLE</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuv&quot;</span><span style="color: #339933;">.</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #0000ff;">&quot;wxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123456789abcdefghijklmnopqrstuvwxyz0123&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/* <br />
&nbsp;* SSID della rete.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$SSID</span> &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Alice-96154825&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* MAC address del router.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$MAC</span> &nbsp;&nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;<span style="color: #660099; font-weight: bold;">\x00</span><span style="color: #660099; font-weight: bold;">\x23</span><span style="color: #660099; font-weight: bold;">\x8E</span><span style="color: #660099; font-weight: bold;">\x01</span><span style="color: #660099; font-weight: bold;">\x02</span><span style="color: #660099; font-weight: bold;">\x03</span>&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Calcolo il seriale in base al SSID e alla tabella dei valori noti.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$SN</span> &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> SSID2SN<span style="color: #009900;">&#40;</span><span style="color: #000088;">$SSID</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Calcolo SHA256( MagicN + SN + MAC )<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$hash</span> &nbsp; &nbsp; &nbsp; <span style="color: #339933;">=</span> SHA256<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$ALIS</span><span style="color: #339933;">.</span><span style="color: #000088;">$SN</span><span style="color: #339933;">.</span><span style="color: #000088;">$MAC</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Converto la stringa dell'hash in un array di byte.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$bytes</span> &nbsp;&nbsp; &nbsp; <span style="color: #339933;">=</span> hash2bytes<span style="color: #009900;">&#40;</span><span style="color: #000088;">$hash</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Trovo la WPA utilizzando i primi 24 byte dell'hash come indici della tabella di covnersione.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$wpa</span> &nbsp; <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">24</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$wpa</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$CONV_TABLE</span><span style="color: #009900;">&#91;</span> <span style="color: #000088;">$bytes</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;WPA : <span style="color: #006699; font-weight: bold;">$wpa</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Funzione per risalire al seriale del router partendo dal suo SSID e utilizzando<br />
&nbsp;* le tabelle dei valori noti.<br />
&nbsp;*/</span><br />
<span style="color: #000000; font-weight: bold;">function</span> SSID2SN<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$ssid</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">global</span> <span style="color: #000088;">$SN_TABLE</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*<br />
&nbsp; &nbsp; &nbsp;* Prelevo il numero intero dall'SSID e ne prendo le prime due cifre<br />
&nbsp; &nbsp; &nbsp;* per verificare che il router sia presente nella tabella.<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span style="color: #990000;">preg_match_all</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;/^Alice\-([0-9]+)/&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ssid</span><span style="color: #339933;">,</span> <span style="color: #000088;">$m</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$ssidn</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$m</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$id</span> &nbsp; &nbsp;<span style="color: #339933;">=</span> <a href="http://www.php.net/substr"><span style="color: #990000;">substr</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$ssidn</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">2</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/isset"><span style="color: #990000;">isset</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$SN_TABLE</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Ok, il router è presente nella tabella, prelevo la prima parte del seriale e<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* le costanti k e Q da utilizzare nell'equazione finale.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$sn1</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$SN_TABLE</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$k</span> &nbsp; <span style="color: #339933;">=</span> <span style="color: #000088;">$SN_TABLE</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$Q</span> &nbsp; <span style="color: #339933;">=</span> <span style="color: #000088;">$SN_TABLE</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$id</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* La seconda parte del seriale equivale a :<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* &nbsp;&nbsp; &nbsp; (SSID - Q) / k<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$sn2</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>int<span style="color: #009900;">&#41;</span><span style="color: #000088;">$ssidn</span> <span style="color: #339933;">-</span> <span style="color: #000088;">$Q</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">/</span> <span style="color: #000088;">$k</span><span style="color: #339933;">;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;* Restituisco il seriale completo.<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$sn1</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'X'</span><span style="color: #339933;">.</span><a href="http://www.php.net/sprintf"><span style="color: #990000;">sprintf</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%07s</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sn2</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;">/*<br />
&nbsp; &nbsp; &nbsp;* Router non presente nella tabella.<br />
&nbsp; &nbsp; &nbsp;*/</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.php.net/die"><span style="color: #990000;">die</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;La serie 'Alice-<span style="color: #006699; font-weight: bold;">$id</span>******' non è presente nella tabella e non è supportata.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Funzione per il calcolo di un hash SHA256.<br />
&nbsp;*/</span><br />
<span style="color: #000000; font-weight: bold;">function</span> SHA256<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$phrase</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <a href="http://www.php.net/bin2hex"><span style="color: #990000;">bin2hex</span></a><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/mhash"><span style="color: #990000;">mhash</span></a><span style="color: #009900;">&#40;</span> MHASH_SHA256<span style="color: #339933;">,</span> <span style="color: #000088;">$phrase</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Funzione per convertire un hash in un array di byte interi.<br />
&nbsp;*/</span><br />
<span style="color: #000000; font-weight: bold;">function</span> hash2bytes<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hash</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <a href="http://www.php.net/preg_match_all"><span style="color: #990000;">preg_match_all</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;/[a-f0-9]{2}/i&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$hash</span><span style="color: #339933;">,</span> <span style="color: #000088;">$hash_bytes</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$bytes</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hash_bytes</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$byte</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000088;">$bytes</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/hexdec"><span style="color: #990000;">hexdec</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$byte</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$bytes</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=1173">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=1173&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/1126/script-per-il-calcolo-della-chiave-wpa-nei-router-fastweb-pirelli.html' rel='bookmark' title='Permanent Link: Script per il calcolo della chiave WPA dei router FastWeb Pirelli.'>Script per il calcolo della chiave WPA dei router FastWeb Pirelli.</a></li>
<li><a href='http://www.evilsocket.net/96/alice-router-unlocker.html' rel='bookmark' title='Permanent Link: Alice Router Unlocker'>Alice Router Unlocker</a></li>
<li><a href='http://www.evilsocket.net/1375/informazione-di-servizio-chiave-pubblica.html' rel='bookmark' title='Permanent Link: Informazione di Servizio, Chiave Pubblica'>Informazione di Servizio, Chiave Pubblica</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/1173/script-per-il-calcolo-della-chiave-wpa-dei-router-alice-gate-voip-2-plus-wi-fi.html/feed</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Script per il calcolo della chiave WPA dei router FastWeb Pirelli.</title>
		<link>http://www.evilsocket.net/1126/script-per-il-calcolo-della-chiave-wpa-nei-router-fastweb-pirelli.html</link>
		<comments>http://www.evilsocket.net/1126/script-per-il-calcolo-della-chiave-wpa-nei-router-fastweb-pirelli.html#comments</comments>
		<pubDate>Sat, 05 Jun 2010 05:18:13 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Exploiting]]></category>
		<category><![CDATA[Hacking]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Sorgenti]]></category>
		<category><![CDATA[Wardriving]]></category>
		<category><![CDATA[chiave]]></category>
		<category><![CDATA[fastweb]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[key]]></category>
		<category><![CDATA[pirelli]]></category>
		<category><![CDATA[ssid]]></category>
		<category><![CDATA[telsey]]></category>
		<category><![CDATA[warcracking]]></category>
		<category><![CDATA[wifi]]></category>
		<category><![CDATA[win32]]></category>
		<category><![CDATA[wpa]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=1126</guid>
		<description><![CDATA[Oggi mi sono inbattuto per caso in questo servizio, ovvero un servizio per &#8220;recuperare&#8221; la chiave WPA di un router Fastweb Pirelli. &#8220;Bene&#8221; mi sono detto, &#8220;Se hanno questo servizio, avranno anche una pagina dove spiegano l&#8217;algoritmo e pubblicano il codice&#8221; . Beh, la pagina c&#8217;era, e non era nemmeno un loro lavoro bensì quello [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/1173/script-per-il-calcolo-della-chiave-wpa-dei-router-alice-gate-voip-2-plus-wi-fi.html' rel='bookmark' title='Permanent Link: Script per il calcolo della chiave WPA dei router Alice Gate VoIP 2 Plus Wi-Fi'>Script per il calcolo della chiave WPA dei router Alice Gate VoIP 2 Plus Wi-Fi</a></li>
<li><a href='http://www.evilsocket.net/96/alice-router-unlocker.html' rel='bookmark' title='Permanent Link: Alice Router Unlocker'>Alice Router Unlocker</a></li>
<li><a href='http://www.evilsocket.net/1375/informazione-di-servizio-chiave-pubblica.html' rel='bookmark' title='Permanent Link: Informazione di Servizio, Chiave Pubblica'>Informazione di Servizio, Chiave Pubblica</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Oggi mi sono inbattuto per caso in <a href="http://www.oversecurity.net/wpa-recovery/" target="_blank">questo servizio</a>, ovvero un servizio per &#8220;recuperare&#8221; la chiave WPA di un router Fastweb Pirelli.</p>
<p>&#8220;Bene&#8221; mi sono detto, &#8220;Se hanno questo servizio, avranno anche una pagina dove spiegano l&#8217;algoritmo e pubblicano il codice&#8221; .</p>
<p>Beh, la <a href="http://www.oversecurity.net/2010/03/29/recupero-chiave-wpa-fastweb-dettagli-tecnici/" target="_blank">pagina</a> c&#8217;era, e non era nemmeno un loro lavoro bensì quello di un altro gruppo (vedere il link &#8220;fonte&#8221; alla fine di quell&#8217;articolo), ma non c&#8217;era il sorgente!</p>
<p>In pratica, queste persone, hanno preso il lavoro che altri hanno pubblicato <strong>liberamente e per tutti</strong>, lo hanno ri-pubblicato (citando la fonte eh, per carità), ne hanno ricavato un servizio (guarda caso un servizio che fa gola a molti su un sito con degli ads pubblicitari) ma non hanno condiviso a loro volta le conoscenze distribuendo il codice del servizio &#8230; un po disonesto non vi pare?</p>
<p>Cioè, se io prendo un informazione libera, sono moralmente tenuto a rendere altrettanto libera qualsiasi opera io ne possa ricavare &#8230; non legalmente, ma moralmente.</p>
<p>Ebbene, ci penso io con un mio script fresco fresco <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><span id="more-1126"></span></p>
<p>Vi posto qui di seguito il codice di uno script PHP che, seguendo quell&#8217;algoritmo, parte dal SSID di un router e stampa la chiave WPA di default.</p>
<p>Ribadisco, come loro, che :</p>
<p>Attualmente è possibile recuperare la chiave Wireless degli Access Point <strong>FastWeb Pirelli</strong>, nello specifico con i seguenti Mac Address:</p>
<blockquote><p><em>00:08:27 Pirelli Broadband Solutions<br />
00:13:C8 </em><em>Pirelli Broadband Solutions</em><br />
<em>00:17:C2 Pirelli Broadband Solutions<br />
00:19:3E P</em><em>irelli Broadband Solutions</em><br />
<em>00:1C:A2 </em><em>Pirelli Broadband Solutions</em><br />
<em>00:1D:8B </em><em>Pirelli Broadband Solutions</em><br />
<em>00:22:33 Pirelli Broadband Solutions<br />
00:23:8E </em><em>Pirelli Broadband Solutions</em><br />
<em>00:25:53 </em><em>Pirelli Broadband Solutions</em><br />
<em>00:03:6F </em><em>Telsey S.p.A.</em><em> </em><em>(in fase di Test)<br />
00:21:96 Telsey S.p.A.</em><em> (in fase di Test)</em></p></blockquote>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:100%;"><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">&lt;?php</span><br />
<span style="color: #666666; font-style: italic;">/***************************************************************************<br />
&nbsp;* &nbsp; FastWeb Pirelli WPA Discovery &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; by evilsocket - evilsocket@gmail.com - http://www.evilsocket.net &nbsp; &nbsp; &nbsp;*<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; This program is free software; you can redistribute it and/or modify &nbsp;*<br />
&nbsp;* &nbsp; it under the terms of the GNU General Public License as published by &nbsp;*<br />
&nbsp;* &nbsp; the Free Software Foundation; either version 2 of the License, or &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; (at your option) any later version. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; This program is distributed in the hope that it will be useful, &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; but WITHOUT ANY WARRANTY; without even the implied warranty of &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp;* &nbsp; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. &nbsp;See the &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; GNU General Public License for more details. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp;* &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; You should have received a copy of the GNU General Public License &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; along with this program; if not, write to the &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; Free Software Foundation, Inc., &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;* &nbsp; 59 Temple Place - Suite 330, Boston, MA &nbsp;02111-1307, USA. &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; *<br />
&nbsp;***************************************************************************/</span><br />
<br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* SSID di partenza.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$ssid</span> &nbsp; <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;FASTWEB-1-00193EA1B2C3&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* 20 byte costanti cablati nel firmware dei Pirelli Fastweb.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$seq_20</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;<span style="color: #660099; font-weight: bold;">\x22</span><span style="color: #660099; font-weight: bold;">\x33</span><span style="color: #660099; font-weight: bold;">\x11</span><span style="color: #660099; font-weight: bold;">\x34</span><span style="color: #660099; font-weight: bold;">\x02</span><span style="color: #660099; font-weight: bold;">\x81</span><span style="color: #660099; font-weight: bold;">\xFA</span><span style="color: #660099; font-weight: bold;">\x22</span><span style="color: #660099; font-weight: bold;">\x11</span><span style="color: #660099; font-weight: bold;">\x41</span><span style="color: #660099; font-weight: bold;">\x68</span><span style="color: #660099; font-weight: bold;">\x11</span><span style="color: #660099; font-weight: bold;">\x12</span><span style="color: #660099; font-weight: bold;">\x01</span><span style="color: #660099; font-weight: bold;">\x05</span><span style="color: #660099; font-weight: bold;">\x22</span><span style="color: #660099; font-weight: bold;">\x71</span><span style="color: #660099; font-weight: bold;">\x42</span><span style="color: #660099; font-weight: bold;">\x10</span><span style="color: #660099; font-weight: bold;">\x66</span>&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Prelevo la parte finale del SSID.<br />
&nbsp;*/</span> <br />
<span style="color: #000088;">$sn</span> &nbsp; &nbsp; <span style="color: #339933;">=</span> <a href="http://www.php.net/split"><span style="color: #990000;">split</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">'-'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$ssid</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$sn</span> &nbsp; &nbsp; <span style="color: #339933;">=</span> <span style="color: #000088;">$sn</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* La divido in gruppi di due caratteri, formando un array<br />
&nbsp;* di 6 rappresentazioni esadecimali di byte.<br />
&nbsp;*/</span><br />
<a href="http://www.php.net/preg_match_all"><span style="color: #990000;">preg_match_all</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;/[a-f0-9]{2}/i&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sn</span><span style="color: #339933;">,</span> <span style="color: #000088;">$sn_bytes</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$sn_bytes</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$sn_bytes</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Inizializzo una stringa con il valore intero di questi byte.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">6</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$str</span> <span style="color: #339933;">.=</span> <a href="http://www.php.net/chr"><span style="color: #990000;">chr</span></a><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/hexdec"><span style="color: #990000;">hexdec</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$sn_bytes</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #666666; font-style: italic;">/* <br />
&nbsp;* Aggiungo alla stringa i 20 byte &quot;magici&quot;.<br />
&nbsp;*/</span> <br />
<span style="color: #000088;">$str</span> <span style="color: #339933;">.=</span> <span style="color: #000088;">$seq_20</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Ricavo i byte dell'hash md5 della stringa<br />
&nbsp;*/</span><br />
<a href="http://www.php.net/preg_match_all"><span style="color: #990000;">preg_match_all</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;/[a-f0-9]{2}/i&quot;</span><span style="color: #339933;">,</span> <a href="http://www.php.net/md5"><span style="color: #990000;">md5</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$md5_bytes</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$md5_bytes</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$md5_bytes</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$long</span> &nbsp; &nbsp; &nbsp;<span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Converto i byte in sequenze binarie di 8 bit.<br />
&nbsp;*/</span><br />
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$md5_bytes</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$byte</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$long</span> <span style="color: #339933;">.=</span> <a href="http://www.php.net/sprintf"><span style="color: #990000;">sprintf</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%08s</span>&quot;</span><span style="color: #339933;">,</span> <a href="http://www.php.net/decbin"><span style="color: #990000;">decbin</span></a><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/hexdec"><span style="color: #990000;">hexdec</span></a><span style="color: #009900;">&#40;</span><span style="color: #000088;">$byte</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Divido in 5 gruppi di 5 bit ognuno e, qual'ora il valore intero <br />
&nbsp;* di un gruppo sia maggiore di 0x0a, aggiungo 0x57.<br />
&nbsp;*/</span><br />
<span style="color: #000088;">$hex_5</span> <span style="color: #339933;">=</span> <a href="http://www.php.net/array"><span style="color: #990000;">array</span></a><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #cc66cc;">25</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">+=</span> <span style="color: #cc66cc;">5</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$n</span> &nbsp;&nbsp; &nbsp; &nbsp;<span style="color: #339933;">=</span> <a href="http://www.php.net/bindec"><span style="color: #990000;">bindec</span></a><span style="color: #009900;">&#40;</span> <a href="http://www.php.net/substr"><span style="color: #990000;">substr</span></a><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$long</span><span style="color: #339933;">,</span> <span style="color: #000088;">$i</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">5</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$hex_5</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$n</span> <span style="color: #339933;">&gt;</span> <span style="color: #208080;">0x0a</span> ? <span style="color: #000088;">$n</span> <span style="color: #339933;">+</span> <span style="color: #208080;">0x57</span> <span style="color: #339933;">:</span> <span style="color: #000088;">$n</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #666666; font-style: italic;">/*<br />
&nbsp;* Compongo la chiave.<br />
&nbsp;*/</span> <br />
<span style="color: #000088;">$wpa</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$hex_5</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$hex</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$wpa</span> <span style="color: #339933;">.=</span> <a href="http://www.php.net/sprintf"><span style="color: #990000;">sprintf</span></a><span style="color: #009900;">&#40;</span> <span style="color: #0000ff;">&quot;<span style="color: #009933; font-weight: bold;">%02x</span>&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$hex</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;WPA : <span style="color: #006699; font-weight: bold;">$wpa</span><span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">?&gt;</span></div></div>
<p>Detto questo, a breve pubblicherò uno script analogo ma per i router Alice, dato che stanno uscendo lavori anche in questo senso <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=1126">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=1126&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/1173/script-per-il-calcolo-della-chiave-wpa-dei-router-alice-gate-voip-2-plus-wi-fi.html' rel='bookmark' title='Permanent Link: Script per il calcolo della chiave WPA dei router Alice Gate VoIP 2 Plus Wi-Fi'>Script per il calcolo della chiave WPA dei router Alice Gate VoIP 2 Plus Wi-Fi</a></li>
<li><a href='http://www.evilsocket.net/96/alice-router-unlocker.html' rel='bookmark' title='Permanent Link: Alice Router Unlocker'>Alice Router Unlocker</a></li>
<li><a href='http://www.evilsocket.net/1375/informazione-di-servizio-chiave-pubblica.html' rel='bookmark' title='Permanent Link: Informazione di Servizio, Chiave Pubblica'>Informazione di Servizio, Chiave Pubblica</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/1126/script-per-il-calcolo-della-chiave-wpa-nei-router-fastweb-pirelli.html/feed</wfw:commentRss>
		<slash:comments>39</slash:comments>
		</item>
		<item>
		<title>Google : 0, Io : 1</title>
		<link>http://www.evilsocket.net/1024/google-0-io-1.html</link>
		<comments>http://www.evilsocket.net/1024/google-0-io-1.html#comments</comments>
		<pubDate>Sun, 09 May 2010 23:43:31 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[ascii tree]]></category>
		<category><![CDATA[garbage collector]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hash table]]></category>
		<category><![CDATA[hybris]]></category>
		<category><![CDATA[mark and sweep]]></category>
		<category><![CDATA[reference]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=1024</guid>
		<description><![CDATA[Chi ha letto questo post, sa che già da un po il sistema di lookup delle variabili, funzioni, metodi, tipi dinamici ecc in memoria di Hybris è implementato sulla base di una libreria rilasciata da Google, più precisamente dal Dr. Craig Silverstein, la quale mette a disposizione alcune funzioni per gestire una hash table, cioè [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/936/hybris-memory-lookup-now-google-powered.html' rel='bookmark' title='Permanent Link: Hybris memory lookup, now Google powered!!!'>Hybris memory lookup, now Google powered!!!</a></li>
<li><a href='http://www.evilsocket.net/1296/come-hackerare-google-e-rimanere-indisturbato-per-un-anno.html' rel='bookmark' title='Permanent Link: Come hackerare Google e rimanere indisturbato per un anno.'>Come hackerare Google e rimanere indisturbato per un anno.</a></li>
<li><a href='http://www.evilsocket.net/946/e-anche-ia64-e-fatta-god-bless-libffi.html' rel='bookmark' title='Permanent Link: E anche ia64 è fatta! (god bless libffi)'>E anche ia64 è fatta! (god bless libffi)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Chi ha letto <a href="http://www.evilsocket.net/936/hybris-memory-lookup-now-google-powered.html" target="_blank">questo</a> post, sa che già da un po il sistema di lookup delle variabili, funzioni, metodi, tipi dinamici ecc in memoria di Hybris è implementato sulla base di una libreria rilasciata da Google, più precisamente dal Dr. <a href="http://www.google.it/search?source=ig&amp;hl=it&amp;rlz=&amp;q=Craig+Silverstein&amp;btnG=Cerca+con+Google&amp;meta=lr%3D" target="_blank">Craig Silverstein</a>, la quale mette a disposizione alcune funzioni per gestire una<a href="http://it.wikipedia.org/wiki/Hash_table" target="_blank"> hash table</a>, cioè una struttura di dati che consente di collegare una chiave (una stringa) ad un valore e di eseguire il lookup in modo molto veloce.</p>
<p>Il tutto si basa su una funzione di hashing che, prendendo in input la stringa della chiave, restituisce in output un numero intero (l&#8217;hash) univoco per ogni chiave o, in caso non sia univoco, gestisce queste &#8220;collisioni&#8221; di hash frammentando la tabella in più &#8220;bucket&#8221; .</p>
<p>Fatta questa introduzione, andiamo al nocciolo del discorso.</p>
<p><span id="more-1024"></span>Era un po di tempo che avevo riscontrato dei bug in Hybris ma che, a differenza di tutti gli altri bug sia segnalati dagli utenti che trovati da me, non riuscivo ne ad isolare ne ad individuare nel codice &#8230; un casino insomma! XD</p>
<p>E cosa vado a scoprire? Che tutti erano dipesi proprio da quella libreria di Google! Le collisioni tra chiavi diverse e hash non univoci a quanto pare non sempre sono gestite, anzi studiandosi un po la questione sono riuscito a capire che questa libreria funziona bene solo quando la tabella contiene poche (qualche decina) chiavi, ma quando le chiavi iniziano a diventare parecchie (ed in Hybris sono usate ovunque, quindi sono veramente tante) le collisioni vengono gestite male e ne consegue che il lookup di una chiave, magari mai definita, invece restituisce il valore di un altra chiave che non c&#8217;entra niente invece di restituire NULL, indicando che la chiave non è definita.</p>
<p>Questo era un problema veramente grande, poichè le implementazioni nella libreria standard di questa struttura di dati (std::map) sono molto poco performanti, le altre che ho provato (boost e librerie di terze parti) son sempre poco performanti, e re implementare tutto da zero avrebbe richiesto settimane di codice e altre di tuning e ottimizzazione del tutto.</p>
<p>Di risolvere il bug nella libreria di Google proprio non se ne parlava, poichè andava riscritta praticamente da capo &#8230; insomma, mi son trovato davanti ad un bel dilemma!</p>
<p>Così mi son inventato un metodo tutto mio, utilizzando un albero n-ario, dove ogni nodo è composto da un valore (un carattere ascii),  un &#8220;end marker&#8221; (un puntatore all&#8217;oggetto mappato da una data chiave), e i nodi figli .</p>
<p>Diciamo di voler definire la variabile di nome &#8220;foo&#8221; .</p>
<p>A questo punto, la catena di nodi che verrà creata sarà :</p>
<p>f -&gt; o -&gt; o</p>
<p>E all&#8217;ultimo nodo (o) verrà impostato l&#8217;end marker con il valore della variabile, mentre gli altri end markers precedenti saranno impostati a NULL .</p>
<p>Ora definiamo &#8220;fag&#8221; :</p>
<p>f -&gt; o -&gt; o (ramificazione già esistente)</p>
<p>\</p>
<p>a -&gt; g (nuova ramificazione)</p>
<p>E così via per ogni variabile, dove si creano nuovi nodi per catene non definite e se ne aggiungono degli altri per catene già esistenti.</p>
<p>Verificare l&#8217;esistenza di una chiave ed ottenerne, se presente, il valore associato a questo punto è facilissimo .</p>
<p>Basta traversare l&#8217;albero in base al nome della variabile, possono succedere a questo punto le seguenti cose :</p>
<p>- Il nome della variabile porta ad una ramificazione non esistente -&gt; La chiave non esiste</p>
<p>- Raggiunta la fine della ramificazione, l&#8217;end marker è NULL -&gt; Esiste una chiave che inizia con la stessa stringa di questa (esempio lolz e lol), ma non esiste questa in particolare.</p>
<p>- Raggiungiamo la fine della ramificazione e troviamo un end marker valido -&gt; La chiave è definita e restituiamo l&#8217;oggetto associato.</p>
<p>In questo modo, si mantengono prestazioni analoghe se non superiori ad una hash table, l&#8217;intera struttura usa meno memoria (una hash table, per ogni elemento ha un istanza della chiave, mentre in questo caso ha solo l&#8217;istanza del suo ultimo carattere e l&#8217;end marker), e soprattutto è impossibile che ci siano collisioni !</p>
<p>Così è nato ASCII Tree, la struttura che ora viene utilizzata al posto della libreria di Google, problema risolto! <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Un altra importante novità è che il garbage collector, da un approccio di reference counting è passato ad un approccio <a href="http://www.brpreiss.com/books/opus5/html/page424.html" target="_blank">mark &amp; sweep</a>, molto più affidabile, veloce e soprattutto risolve alcuni problemi del vecchio garbage collector che mi ero prefissato di risolvere.</p>
<p>That&#8217;s all folks <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=1024">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=1024&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/936/hybris-memory-lookup-now-google-powered.html' rel='bookmark' title='Permanent Link: Hybris memory lookup, now Google powered!!!'>Hybris memory lookup, now Google powered!!!</a></li>
<li><a href='http://www.evilsocket.net/1296/come-hackerare-google-e-rimanere-indisturbato-per-un-anno.html' rel='bookmark' title='Permanent Link: Come hackerare Google e rimanere indisturbato per un anno.'>Come hackerare Google e rimanere indisturbato per un anno.</a></li>
<li><a href='http://www.evilsocket.net/946/e-anche-ia64-e-fatta-god-bless-libffi.html' rel='bookmark' title='Permanent Link: E anche ia64 è fatta! (god bless libffi)'>E anche ia64 è fatta! (god bless libffi)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/1024/google-0-io-1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redis client library for Hybris</title>
		<link>http://www.evilsocket.net/1004/redis-client-library-for-hybris.html</link>
		<comments>http://www.evilsocket.net/1004/redis-client-library-for-hybris.html#comments</comments>
		<pubDate>Thu, 22 Apr 2010 17:18:57 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[Sorgenti]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[client]]></category>
		<category><![CDATA[hybris]]></category>
		<category><![CDATA[key-value]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[store]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=1004</guid>
		<description><![CDATA[E&#8217; disponibile, presso questo repository, una libreria scritta in Hybris per connettersi al database Redis, progetto che sta facendo passi da gigante grazie al supporto della comunità open source e soprattutto del suo creatore Salvatore Sanfilippo. Questa libreria vuole essere sia un omaggio che un contributo alla scena open italiana e soprattutto agli sforzi di [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/122/msp-multi-dimensional-space-processing-library.html' rel='bookmark' title='Permanent Link: MSP &#8211; Multi-Dimensional Space Processing Library'>MSP &#8211; Multi-Dimensional Space Processing Library</a></li>
<li><a href='http://www.evilsocket.net/963/importante-hybris-1-0-roadmap-ho-bisogno-di-consigli-user-side.html' rel='bookmark' title='Permanent Link: [IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side'>[IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side</a></li>
<li><a href='http://www.evilsocket.net/949/hybris-1-0-beta-strutture-e-primo-passo-per-loo.html' rel='bookmark' title='Permanent Link: Hybris 1.0 beta, strutture e primo passo per l&#8217;OO'>Hybris 1.0 beta, strutture e primo passo per l&#8217;OO</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<div>
<p><img src="http://www.h-online.com/imgs/43/4/9/6/1/4/9/redis_logo200-b9d0069a4f4febaf.png" alt="" align="left" />E&#8217; disponibile, presso <a href="http://github.com/evilsocket/hybris-redis" target="_blank">questo</a> repository,  una libreria scritta in Hybris per connettersi al database Redis,  progetto che sta facendo passi da gigante grazie al supporto della  comunità open source e soprattutto del suo creatore <a href="http://github.com/antirez" target="_blank">Salvatore Sanfilippo</a>.</p>
<p>Questa libreria vuole essere sia un omaggio che un contributo alla  scena open italiana e soprattutto agli sforzi di uno sviluppatore  brillante, in un paese che sembra ne incoraggiare ne ricompensare menti  di questo tipo.</p>
</div>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=1004">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=1004&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/122/msp-multi-dimensional-space-processing-library.html' rel='bookmark' title='Permanent Link: MSP &#8211; Multi-Dimensional Space Processing Library'>MSP &#8211; Multi-Dimensional Space Processing Library</a></li>
<li><a href='http://www.evilsocket.net/963/importante-hybris-1-0-roadmap-ho-bisogno-di-consigli-user-side.html' rel='bookmark' title='Permanent Link: [IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side'>[IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side</a></li>
<li><a href='http://www.evilsocket.net/949/hybris-1-0-beta-strutture-e-primo-passo-per-loo.html' rel='bookmark' title='Permanent Link: Hybris 1.0 beta, strutture e primo passo per l&#8217;OO'>Hybris 1.0 beta, strutture e primo passo per l&#8217;OO</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/1004/redis-client-library-for-hybris.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>StackOverflow : Yahoo Answers per i programmatori !</title>
		<link>http://www.evilsocket.net/983/stackoverflow-yahoo-answers-per-i-programmatori.html</link>
		<comments>http://www.evilsocket.net/983/stackoverflow-yahoo-answers-per-i-programmatori.html#comments</comments>
		<pubDate>Wed, 14 Apr 2010 23:10:57 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[overflow]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[servizio]]></category>
		<category><![CDATA[site]]></category>
		<category><![CDATA[sito]]></category>
		<category><![CDATA[stack]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=983</guid>
		<description><![CDATA[Gli articoli in questo blog nei quali pubblicizzo un sito sono davvero pochi, questo non tanto perchè non mi piace farlo, bensì perchè sono pochi i siti che ritengo interessanti e utili per i miei obiettivi. Fa eccezione http://stackoverflow.com/, l&#8217;equivalente di Yahoo Answers per programmatori, sistemisti e tecnici informatici in genere. La logica è semplicissima [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/867/c-stack-inspection.html' rel='bookmark' title='Permanent Link: C Stack Inspection'>C Stack Inspection</a></li>
<li><a href='http://www.evilsocket.net/9/win32-service-class.html' rel='bookmark' title='Permanent Link: Win32 Service Class'>Win32 Service Class</a></li>
<li><a href='http://www.evilsocket.net/76/stackhack.html' rel='bookmark' title='Permanent Link: StackHack'>StackHack</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://sstatic.net/so/img/logo.png" alt="" width="250" height="61" />Gli articoli in questo blog nei quali pubblicizzo un sito sono davvero pochi, questo non tanto perchè non mi piace farlo, bensì perchè sono pochi i siti che ritengo interessanti e utili per i miei obiettivi.</p>
<p>Fa eccezione <a href="http://stackoverflow.com/" target="_blank">http://stackoverflow.com/</a>, l&#8217;equivalente di Yahoo Answers per programmatori, sistemisti e tecnici informatici in genere.</p>
<p>La logica è semplicissima &#8230; ci si iscrive, si fanno delle domande su qualche problema che si ha, si risponde alle domande delle altre persone e si accumulano punti.</p>
<p>Semplice quanto efficace, non ho mai visto tanti guru della programmazione in un unico sito &#8230; c&#8217;è davvero gente molto in gamba da tutte le parti del pianeta (tutte tranne l&#8217;Italia probabilmente, chissà com&#8217;è -.-), persone che oltre ad essere tecnicamente brave sono sempre disponibili a darti una mano.</p>
<p>Alcuni problemi che ho avuto con Hybris li ho risolti proprio grazie a loro, quindi mi sembrava carino omaggiare il servizio con un articolo.</p>
<p>Nient&#8217;altro &#8230; se siete curiosi il mio profilo è <a href="http://stackoverflow.com/users/300881/simone-margaritelli" target="_blank">questo</a>.</p>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=983">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=983&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/867/c-stack-inspection.html' rel='bookmark' title='Permanent Link: C Stack Inspection'>C Stack Inspection</a></li>
<li><a href='http://www.evilsocket.net/9/win32-service-class.html' rel='bookmark' title='Permanent Link: Win32 Service Class'>Win32 Service Class</a></li>
<li><a href='http://www.evilsocket.net/76/stackhack.html' rel='bookmark' title='Permanent Link: StackHack'>StackHack</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/983/stackoverflow-yahoo-answers-per-i-programmatori.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Cogito ergo sum</title>
		<link>http://www.evilsocket.net/975/cogito-ergo-sum.html</link>
		<comments>http://www.evilsocket.net/975/cogito-ergo-sum.html#comments</comments>
		<pubDate>Fri, 09 Apr 2010 21:01:45 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[hashtable]]></category>
		<category><![CDATA[hybris]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[lookup]]></category>
		<category><![CDATA[std]]></category>
		<category><![CDATA[stdlib]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=975</guid>
		<description><![CDATA[Bonci bonci bom-bom-bò &#8230; ehm ce l&#8217;avevo in testa XD Coooomunque &#8230; nell&#8217;ultimo commit, oltre a risolvere alcuni bugghettini del timer e della classe Context, ho trovato un metodo per rendere import std.*; Veloce quanto gli import singoli . Ma prima riassunto delle puntate precedenti Da qualche commit Hybris integra tutta la libreria standard tramite [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/972/hybris-e-cosi-son-tutti-contenti.html' rel='bookmark' title='Permanent Link: Hybris, e così son tutti contenti.'>Hybris, e così son tutti contenti.</a></li>
<li><a href='http://www.evilsocket.net/963/importante-hybris-1-0-roadmap-ho-bisogno-di-consigli-user-side.html' rel='bookmark' title='Permanent Link: [IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side'>[IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side</a></li>
<li><a href='http://www.evilsocket.net/946/e-anche-ia64-e-fatta-god-bless-libffi.html' rel='bookmark' title='Permanent Link: E anche ia64 è fatta! (god bless libffi)'>E anche ia64 è fatta! (god bless libffi)</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Bonci bonci bom-bom-bò &#8230; ehm ce l&#8217;avevo in testa XD</p>
<p>Coooomunque &#8230; nell&#8217;ultimo commit, oltre a risolvere alcuni bugghettini del timer e della classe Context, ho trovato un metodo per rendere</p>
<blockquote><p>import std.*;</p></blockquote>
<p>Veloce quanto gli import singoli .</p>
<p>Ma prima riassunto delle puntate precedenti <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><span id="more-975"></span>Da qualche commit Hybris integra tutta la libreria standard tramite moduli esterni caricabili dall&#8217;utente con la direttiva import seguendo la gerarchia dei namespace .</p>
<p>Ovviamente, più moduli si importavano (quindi più funzioni si importavano), più erano elevati i tempi di risoluzione di una funzione, ovvero quell&#8217;intervallo di tempo in cui l&#8217;interprete trovava il puntatore alla libreria esterna per gestire una chiamata a funzione &#8230; questo perchè + elementi ci sono in una lista, + confronti vanno fatti prima di trovare un dato elemento.</p>
<p>Questo rendeva preferibile una digitura (ad esempio) :</p>
<blockquote><p>import std.io.console;</p></blockquote>
<p>Alla dicitura :</p>
<blockquote><p>import std.*;</p></blockquote>
<p>che caricava tutto indiscriminatamente &#8230;</p>
<p>Tant&#8217;è vero che, a parità di algoritmo e di hardware, lo stesso script impiegava 21 millisecondi con l&#8217;import selettivo, e ben 26 millisecondi (a volte di più) con l&#8217;asterisco.</p>
<p>Problema risolto! <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Il lookup nella lista ora avviene solo la prima volta che viene chiamata una funzione, da quel momento il suo puntatore viene messo in una hash table di cache che verrà usata successivamente per il lookup .</p>
<p>Detto molto in parole povere, Hybris è ora in grado di capire quali funzioni vengono usate (e soprattutto quali più spesso), adattandosi di conseguenza &#8230; risultato ?</p>
<p>Entrambe le diciture ora occupano solo 21 millisecondi di esecuzione <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=975">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=975&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/972/hybris-e-cosi-son-tutti-contenti.html' rel='bookmark' title='Permanent Link: Hybris, e così son tutti contenti.'>Hybris, e così son tutti contenti.</a></li>
<li><a href='http://www.evilsocket.net/963/importante-hybris-1-0-roadmap-ho-bisogno-di-consigli-user-side.html' rel='bookmark' title='Permanent Link: [IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side'>[IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side</a></li>
<li><a href='http://www.evilsocket.net/946/e-anche-ia64-e-fatta-god-bless-libffi.html' rel='bookmark' title='Permanent Link: E anche ia64 è fatta! (god bless libffi)'>E anche ia64 è fatta! (god bless libffi)</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/975/cogito-ergo-sum.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hybris, e così son tutti contenti.</title>
		<link>http://www.evilsocket.net/972/hybris-e-cosi-son-tutti-contenti.html</link>
		<comments>http://www.evilsocket.net/972/hybris-e-cosi-son-tutti-contenti.html#comments</comments>
		<pubDate>Tue, 06 Apr 2010 20:38:37 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[builtins]]></category>
		<category><![CDATA[functions]]></category>
		<category><![CDATA[hybris]]></category>
		<category><![CDATA[namespaces]]></category>
		<category><![CDATA[std]]></category>
		<category><![CDATA[stdlib]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=972</guid>
		<description><![CDATA[Bon &#8230; dopo l&#8217;articolo di ieri, ho pensato molto alla soluzione da adottare ed alla fine ho optato per separare le funzionalità in una libreria standard esterna (sempre compilata e distribuita insieme all&#8217;interprete) così da lasciare il core pulito e veloce. Attualmente, bisogna dichiarare esplicitamente quali moduli importare dal namespace standard (chiamato appunto std), tuttavia [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/975/cogito-ergo-sum.html' rel='bookmark' title='Permanent Link: Cogito ergo sum'>Cogito ergo sum</a></li>
<li><a href='http://www.evilsocket.net/963/importante-hybris-1-0-roadmap-ho-bisogno-di-consigli-user-side.html' rel='bookmark' title='Permanent Link: [IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side'>[IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side</a></li>
<li><a href='http://www.evilsocket.net/941/spostata-la-documentazione-di-hybris-su-wiki.html' rel='bookmark' title='Permanent Link: Spostata la documentazione di Hybris su Wiki'>Spostata la documentazione di Hybris su Wiki</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Bon &#8230; dopo l&#8217;articolo di ieri, ho pensato molto alla soluzione da adottare ed alla fine ho optato per separare le funzionalità in una libreria standard esterna (sempre compilata e distribuita insieme all&#8217;interprete) così da lasciare il core pulito e veloce.</p>
<p>Attualmente, bisogna dichiarare esplicitamente quali moduli importare dal namespace standard (chiamato appunto <strong>std</strong>), tuttavia son venuto incontro alle necessità dei più pigri (me compreso) che, non essendo interessati alla velocità di esecuzione, preferirebbero precaricare tutto il possibile per non dover dichiarare manualmente i moduli necessari.</p>
<p>Ho implementato l&#8217;operatore &#8216;*&#8217; per gli import, ispirato al java, tramite il quale è possibile importare ricorsivamente interi namespace e loro derivati in una sola riga &#8230; ad esempio, se volessimo importare tutte le funzionalità di I/O (su file, console, stream xml, tcp/ip e http), basta un :</p>
<blockquote><p>import std.io.*;</p></blockquote>
<p>All&#8217;inizio dello script, oppure, se proprio vogliamo importare TUTTO, si può scrivere più semplicemente :</p>
<blockquote><p>import std.*;</p></blockquote>
<p>Questo operatore è valido SOLO se viene specificato il namespace principale (in questo caso std), ovvero una dicitura del genere :</p>
<blockquote><p>import *;</p></blockquote>
<p>Genererà l&#8217;errore :</p>
<blockquote><p><em>Could not use &#8216;*&#8217; as main namespace.</em></p></blockquote>
<p>Questo perchè ho voluto pensare al futuro &#8230; ipotiziamo che un domani Hybris abbia 500 moduli implementati da utenti vari (magari! ^^), importare tutto con * significherebbe tempi di calcolo troppo eccessivi e troppe risorse richieste, invece indicando il namespace padre, rimane la comodità ma è più selettiva.</p>
<p><span id="more-972"></span></p>
<p>La libreria standard è composta dai seguenti moduli :</p>
<ul>
<li> <strong>std</strong>
<ul>
<li> math : <em>Funzionalità matematiche </em></li>
<li> pcre :<em> Supporto alle espressioni regolari </em></li>
<li> encoding : <em>Funzionalità di encoding </em></li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li> <strong>io</strong>
<ul>
<li> console :<em> I/O su console </em></li>
<li> file : <em>I/O su file </em></li>
<li> xml : <em>I/O su flussi XML </em></li>
<li> <strong>network</strong>
<ul>
<li> tcp : <em>Primitive per i socket tcp/ip </em></li>
<li> http : <em>Funzionalità HTTP e HTTPS </em></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li> <strong>type</strong>
<ul>
<li> string : <em>Gestione stringhe </em></li>
<li> array : <em>Gestione array</em></li>
<li> matrix : <em>Gestione matrici</em></li>
<li> binary : <em>Gestione flussi binari</em></li>
<li> map : <em>Gestione mappe associative</em></li>
<li> type : <em>Gestione dei tipi</em></li>
<li> reflection : <em>Introspezione dei tipi</em></li>
</ul>
</li>
</ul>
</li>
</ul>
<ul>
<li>
<ul>
<li> <strong>os</strong>
<ul>
<li> dll :<em> Caricamento ed esecuzione di funzioni da dll di sistema </em></li>
<li> threads : <em>Multithreading</em></li>
<li> time : <em>Gestione del tempo e della data</em></li>
<li> process : <em>Gestione multi processo</em></li>
</ul>
</li>
</ul>
</li>
</ul>
<p><em><br />
</em></p>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=972">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=972&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/975/cogito-ergo-sum.html' rel='bookmark' title='Permanent Link: Cogito ergo sum'>Cogito ergo sum</a></li>
<li><a href='http://www.evilsocket.net/963/importante-hybris-1-0-roadmap-ho-bisogno-di-consigli-user-side.html' rel='bookmark' title='Permanent Link: [IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side'>[IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side</a></li>
<li><a href='http://www.evilsocket.net/941/spostata-la-documentazione-di-hybris-su-wiki.html' rel='bookmark' title='Permanent Link: Spostata la documentazione di Hybris su Wiki'>Spostata la documentazione di Hybris su Wiki</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/972/hybris-e-cosi-son-tutti-contenti.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>[IMPORTANTE] Hybris 1.0 Roadmap, ho bisogno di consigli user-side</title>
		<link>http://www.evilsocket.net/963/importante-hybris-1-0-roadmap-ho-bisogno-di-consigli-user-side.html</link>
		<comments>http://www.evilsocket.net/963/importante-hybris-1-0-roadmap-ho-bisogno-di-consigli-user-side.html#comments</comments>
		<pubDate>Mon, 05 Apr 2010 20:32:15 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[1.0]]></category>
		<category><![CDATA[hybris]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[release]]></category>
		<category><![CDATA[stable]]></category>
		<category><![CDATA[standard]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=963</guid>
		<description><![CDATA[A volte staccare la spina (nel mio caso il cervello) porta consiglio, credo che il cosìddetto distrarsi su cose che non impegnino il nostro cervello faccia si che una parte del cervello stessa lavori &#8220;in background&#8221; elaborando a livello subconscio e trovando soluzioni a problemi che normalmente non potevamo affrontare, o più semplicemente offrendoci punti [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/972/hybris-e-cosi-son-tutti-contenti.html' rel='bookmark' title='Permanent Link: Hybris, e così son tutti contenti.'>Hybris, e così son tutti contenti.</a></li>
<li><a href='http://www.evilsocket.net/975/cogito-ergo-sum.html' rel='bookmark' title='Permanent Link: Cogito ergo sum'>Cogito ergo sum</a></li>
<li><a href='http://www.evilsocket.net/980/hybris-rivoluzionato-il-sistema-di-gestione-dei-tipi-ed-il-garbage-collector.html' rel='bookmark' title='Permanent Link: Hybris : Rivoluzionato il sistema di gestione dei tipi ed il garbage collector.'>Hybris : Rivoluzionato il sistema di gestione dei tipi ed il garbage collector.</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>A volte staccare la spina (nel mio caso il cervello) porta consiglio, credo che il cosìddetto distrarsi su cose che non impegnino il nostro cervello faccia si che una parte del cervello stessa lavori &#8220;in background&#8221; elaborando a livello subconscio e trovando soluzioni a problemi che normalmente non potevamo affrontare, o più semplicemente offrendoci punti di vista diversi da quelli che prima ci sembravano giusti.</p>
<p>Questi tre giorni non sono stato a casa, ho passato la Pasqua (ah, a proposito, auguri in ritardo a tutti! <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> ) con la mia fidanzata, la sua famiglia, amici ecc e ho avuto modo proprio di sperimentare su me stesso questo fenomeno &#8230;</p>
<p>Ho pensato a come è nato Hybris, al motivo per il quale è nato, a come si è evoluto nel tempo &#8230;</p>
<p>Inizialmente era un progetto quasi &#8220;intimo&#8221;, nel senso che non avevo intenzione alcuna di pubblicarlo, non tanto perchè sono geloso del mio lavoro (lol figuriamoci XD), ma perchè ero partito con la consapevolezza che non sarebbe mai diventato un qualcosa di completo e funzionale come un vero e proprio linguaggio di programmazione, bensì doveva essere il mio piccolo tool personalizzato/personale per automatizzare determinate cose che normalmente facevo a mano (una specie di linguaggio macro + specializzato insomma) e per questo non adatto ad altre persone che potessero avere esigienze e forme mentis diverse dalle mie.</p>
<p>Il tempo ha dimostrato quanto il mio presupposto iniziale fosse sbagliato, il tempo e la mia costante voglia di migliorare me stesso ed i miei software, e me ne sono reso conto benissimo, peccato che non ho (fino ad un giorno fa) considerato oltre al fatto in se stesso (che di per se in effetti è poco più di una sega mentale) le conseguenze sul mio lavoro che questa cosa possa avere.</p>
<p>Ok, giri di parole e pensieri contorti a parte, faccio il punto della situazione (finalmente) .</p>
<p><span id="more-963"></span>Pensando a <a href="http://www.evilsocket.net/954/una-risposta-che-probabilmente-non-verra-letta.html" target="_blank">questo post</a> ed al <a href="http://it-comp.confusenet.com/showthread.php?t=1215842&amp;amp;s=07f392262f5fd6178d019bdc708db461" target="_blank">topic</a> del quale doveva essere una risposta, ho capito che su alcune cose avevo completamente torto o, se non altro, partivo da una visione ristretta delle cose.</p>
<p>Hybris non è più il &#8220;mio giocattolo&#8221;, non lo è da quando ho eseguito il primo commit su github e da quando ho aperto un sito dedicato &#8230; mi son reso conto di quanto sia stato arrogante e stupido da parte mia voler &#8220;regalare&#8221; un qualcosa alla comunità, e poi, quando qualcuno mi faceva notare (in modo brusco ok, ma non tutti siamo perfetti) lo standard qualitativo che questa comunità impone, ignorare la cosa e voler fare di testa mia continuando a considerare Hybris &#8220;il mio giocattolo&#8221; &#8230; arrogante, stupido ed incoerente &#8230; mea culpa.</p>
<p>Da questa deduzione son seguite delle decisioni.</p>
<p><strong>Prima</strong> di rilasciare la 1.0 stable, saranno implementate le seguenti cose :</p>
<ol>
<li>Supporto completo sia per Linux (come ora), per Windows e possibilmente per *BSD.</li>
<li>Supporto completo alla programmazione object oriented, polimorfismo, ereditarietà, ecc.</li>
<li><strong>Reimplementazione della libreria standard tramite moduli dinamici</strong> .</li>
<li>Implementazione di una seconda libreria standard, tramite classi scritte direttamente in Hybris.</li>
</ol>
<p>Ebbene, mi serve un consiglio da chiunque abbia voglia di aiutarmi &#8230; sono indeciso sul punto 3.</p>
<p>Ho studiato la situazione e ci sono tre approcci possibili, ognuno con i suoi pro ed i suoi contro, che mi accingo ora a spiegare.</p>
<h3>** Libreria standard integrata nel core.</h3>
<p>Questa è la situazione attuale di Hybris, le funzioni standard sono integrate nel core stesso di Hybris, quindi per un ambiente funzionante non servono moduli aggiuntivi se non l&#8217;eseguibile stesso dell&#8217;interprete.</p>
<p><strong>Pro :</strong></p>
<ul>
<li><span style="color: #339966;">Nessun modulo da distribuire insieme all&#8217;interprete.</span></li>
<li><span style="color: #339966;">Non occorre dichiarare quale modulo importare per usare la singola funzione (tipo l&#8217;include del C/C++).</span></li>
<li><span style="color: #339966;">Estrema interoperabilità tra libreria standard e core.</span></li>
</ul>
<p><strong>Contro:</strong></p>
<ul>
<li><span style="color: #ff0000;">Uso maggiore di memoria.</span></li>
<li><span style="color: #ff0000;">Tempi di lookup di una funzione più elevati.</span></li>
<li><span style="color: #ff0000;">Non è possibile implementare una nuova funzione che abbia il nome di una funzione già presente nella libreria.</span></li>
</ul>
<p><strong>Esempio :</strong></p>
<blockquote><p>page <strong>=</strong> http_get<strong>(</strong> <em>&#8220;www.hybris-lang.org&#8221;</em>, <em>&#8220;/&#8221;</em> <strong>)</strong>;<br />
<strong> if</strong><strong>(</strong> page <strong>&amp;&amp;</strong> (page <strong>~=</strong> <em>&#8220;/&lt;body&gt;.+&lt;\/body&gt;/im&#8221;</em>)[0] <strong>)</strong><strong>{</strong><br />
print<strong>(</strong>page<strong>)</strong>;<br />
<strong> }</strong></p></blockquote>
<h3>** Libreria standard implementata in moduli dinamici separati.</h3>
<p>Questo è il metodo nel quale son realizzati molti dei linguaggi esistenti attualmente, il core di per se è piccolo e non gestisce le funzionalità del linguaggio, ma offre un insieme di funzioni ed oggetti per realizzarne, in questo caso tutta la libreria standard è implementata in moduli esterni che vengono caricati a scelta dall&#8217;utente in base a quello che serve, un po come quando in C scriviamo un &#8220;#include &lt;stdio.h&gt;&#8221; e linkiamo la libc .</p>
<p><strong>Pro :</strong></p>
<ul>
<li><span style="color: #339966;">Uso della memoria nettamente inferiore.</span></li>
<li><span style="color: #339966;">Tempi di lookup di una funzione ridotti (naturalmente rispetto a quanto è grande il set completo, per capirci se il set è composto da 20 elementi la differenza nemmeno si nota).</span></li>
<li><span style="color: #339966;">Possibilità di usare nomi di funzioni che sono nella libreria ma che non vengono inclusi.</span></li>
<li><span style="color: #339966;">Possibilità di caricare selettivamente una o più funzioni dal singolo modulo invece di caricare tutto.</span></li>
</ul>
<p><strong>Contro :</strong></p>
<ul>
<li><span style="color: #ff0000;">E&#8217; necessario dichiarare esplicitamente quale moduli importare in base alle funzioni utilizzate.</span></li>
<li><span style="color: #ff0000;">Oltre all&#8217;interprete stesso, vanno distribuiti i moduli dinamici della libreria standard.</span></li>
<li><span style="color: #ff0000;">Meno interoperabilità tra core e moduli.</span></li>
</ul>
<p><strong>Esempio :</strong></p>
<blockquote><p><strong>import</strong> io.network.http;<br />
<strong>import</strong> io.console;<br />
<em>// oppure, per caricare selettivamente alcune funzioni dai moduli</em><br />
<strong>import</strong> io.network.http.[get];<br />
<strong>import</strong> io.console.[print];</p>
<p>page <strong>=</strong> get<strong>(</strong> <em>&#8220;www.hybris-lang.org&#8221;</em>,  <em>&#8220;/&#8221;</em> <strong>)</strong>;<br />
<strong> if</strong><strong>(</strong> page <strong>&amp;&amp;</strong> (page <strong>~=</strong> <em>&#8220;/&lt;body&gt;.+&lt;\/body&gt;/im&#8221;</em>)[0]  <strong>)</strong><strong>{</strong><br />
print<strong>(</strong>page<strong>)</strong>;<br />
<strong> }</strong></p></blockquote>
<h3>** Soluzione ibrida, libreria esterna, preloading e lookup dinamico.</h3>
<p>Questo è un compromesso tra le due soluzioni, la libreria standard risiede in moduli esterni, tuttavia l&#8217;interprete &#8220;è al corrente&#8221; di questi moduli e, quando trova nel codice una funzione che ancora non ha caricato, la carica dinamicamente trovando il modulo relativo.</p>
<p>E&#8217; difficile stabilire esattamente i pro ed i contro di questa soluzione, poichè i tempi di lookup, memoria utilizzata, ecc dipendono completamente dallo script che va eseguito &#8230; più funzioni di moduli diversi si utilizzeranno, più cose verranno precaricate in memoria, più sarà lento il lookup.</p>
<p>Tutta via questo metodo consentirebbe di non dover necessariamente dichiarare gli imports di un dato script come nella seconda soluzione, quindi mantenendo la comodità della prima e, in un caso ottimale (poche funzioni usate o tante funzioni ma da pochi moduli o algoritmi poco complessi), l&#8217;efficienza della seconda.</p>
<h3>** Conclusione</h3>
<p>Bon, detto tutto questo, ho bisogno di consigli &#8230; la domanda è semplice :</p>
<p><strong>Se voi foste degli sviluppatori che usano Hybris, quale dei tre approcci preferireste ?</strong></p>
<p>Esponete qui nei commenti la vostra opinione, possibilmente motivata, in base alla quale mi aiuterete a scegliere quale approccio implementare per la 1.0 stable di Hybris.</p>
<p>Let me know <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=963">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=963&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/972/hybris-e-cosi-son-tutti-contenti.html' rel='bookmark' title='Permanent Link: Hybris, e così son tutti contenti.'>Hybris, e così son tutti contenti.</a></li>
<li><a href='http://www.evilsocket.net/975/cogito-ergo-sum.html' rel='bookmark' title='Permanent Link: Cogito ergo sum'>Cogito ergo sum</a></li>
<li><a href='http://www.evilsocket.net/980/hybris-rivoluzionato-il-sistema-di-gestione-dei-tipi-ed-il-garbage-collector.html' rel='bookmark' title='Permanent Link: Hybris : Rivoluzionato il sistema di gestione dei tipi ed il garbage collector.'>Hybris : Rivoluzionato il sistema di gestione dei tipi ed il garbage collector.</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/963/importante-hybris-1-0-roadmap-ho-bisogno-di-consigli-user-side.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Hybris 1.0 beta, strutture e primo passo per l&#8217;OO</title>
		<link>http://www.evilsocket.net/949/hybris-1-0-beta-strutture-e-primo-passo-per-loo.html</link>
		<comments>http://www.evilsocket.net/949/hybris-1-0-beta-strutture-e-primo-passo-per-loo.html#comments</comments>
		<pubDate>Thu, 01 Apr 2010 20:41:28 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[1.0]]></category>
		<category><![CDATA[1.0b]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[classe]]></category>
		<category><![CDATA[hybris]]></category>
		<category><![CDATA[object oriented]]></category>
		<category><![CDATA[OO]]></category>
		<category><![CDATA[struct]]></category>
		<category><![CDATA[structure]]></category>
		<category><![CDATA[struttura]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=949</guid>
		<description><![CDATA[Non ho resistito, avevo ripromesso a me stesso che avrei iniziato a lavorare sul supporto agli oggetti (le classi per intenderci) di Hybris dopo il rilascio ufficiale della 1.0 pacchettizzata, magari per una 2.0 o quantomeno una 1.n, ma ho dovuto iniziare a buttar giù qualcosa XD . Ho appena effettuato il commit della 1.0 [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/1033/hybris-v1-0-beta-3-tante-le-novita.html' rel='bookmark' title='Permanent Link: Hybris v1.0 beta 3, tante le novità!'>Hybris v1.0 beta 3, tante le novità!</a></li>
<li><a href='http://www.evilsocket.net/1039/hybris-v1-0-beta-3-tante-le-novita-2.html' rel='bookmark' title='Permanent Link: Hybris v1.0 beta 3, tante le novità!'>Hybris v1.0 beta 3, tante le novità!</a></li>
<li><a href='http://www.evilsocket.net/1001/hybris-da-ora-object-oriented.html' rel='bookmark' title='Permanent Link: Hybris, da ora Object Oriented!'>Hybris, da ora Object Oriented!</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Non ho resistito, avevo ripromesso a me stesso che avrei iniziato a lavorare sul supporto agli oggetti (le classi per intenderci) di Hybris dopo il rilascio ufficiale della 1.0 pacchettizzata, magari per una 2.0 o quantomeno una 1.n, ma ho dovuto iniziare a buttar giù qualcosa XD .</p>
<p>Ho appena effettuato il commit della 1.0 beta che, oltre a correggere alcuni bugs che affliggevano il lexer ed il parser di <a href="http://www.hybris-lang.org/" target="_blank">Hybris</a>, presenta una grande novità &#8230; le strutture !</p>
<p>Sostanzialmente, una volta implementate quelle e trovato il modo di gestirle al meglio (non vi immaginate che casino scrivere le regole del parser XD), il passo verso l&#8217;OO è un attimo, basta qualche piccolo ritocco qua e la ed ecco che Hybris diventerà un linguaggio che supporta al 100% la programmazione ad oggetti, ma per questo, stavolta dico davvero, è il caso di aspettare il rilascio della 1.0.</p>
<p>Ma vediamo un po queste strutture ^^</p>
<p><span id="more-949"></span>Nella <a href="http://www.hybris-lang.org/wiki/" target="_blank">documentazione</a> ho scritto che :</p>
<p>Una struttura è un tipo di dato arbitrario, ovvero che può essere definito dall&#8217;utente tramite la direttiva <strong>struct</strong>. Una struttura è identificata da un nome e da uno o più attributi, la forma più semplice per dichiarare una struttura è :</p>
<blockquote>
<pre> 
   <strong>struct</strong> UnNome {
      attributo_1;
      attributo_2;
   }</pre>
</blockquote>
<p>O, nella forma abbreviata :</p>
<blockquote>
<pre> 
   <strong>struct</strong> UnNome {
      attributo_1, attributo_2;
   }</pre>
</blockquote>
<p>Per creare una variabile del tipo che abbiamo dichiarato, useremo il nome della struttura come fosse una funzione (più o meno come i costruttori del C++) :</p>
<blockquote>
<pre> 
   a = UnNome();</pre>
</blockquote>
<pre><span style="font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px; white-space: normal; font-size: 13px;">Oppure sfruttando l'inizializzatore degli attributi :</span></pre>
<blockquote>
<pre> 
   a = UnNome( "ciao", 1234 );</pre>
</blockquote>
<p>Che attribuirà quei valori rispettivamente a <em>attributo_1</em> e <em>attributo_2</em>.</p>
<p>Per accedere ad un attributo, si può usare l&#8217;operatore <strong>-&gt;</strong> :</p>
<blockquote>
<pre> 
   <a href="http://www.hybris-lang.org/documentazione?function=println">println</a>( a-&gt;attributo_1 );</pre>
</blockquote>
<p>Vediamo un esempio più esplicativo .</p>
<blockquote>
<pre> 
   <strong>struct</strong> Carattere {
      simpatico;
      sveglio;
      modesto;
   }

   <strong>struct</strong> Persona {
      genere;
      nome, cognome;
      anni;

      carattere;
   }

   guy            = <strong>Persona</strong>( 'M', "Mario", "Rossi", 24 );
   guy-&gt;carattere = <strong>Carattere</strong>( "Si", "No", "Si" );

   <a href="http://www.hybris-lang.org/documentazione?function=println">println</a>(guy);

   if( guy-&gt;anni &gt;= 18 ){
      <a href="http://www.hybris-lang.org/documentazione?function=println">println</a>( guy-&gt;nome." ".guy-&gt;cognome." è maggiorenne." );
   }
   else{
      <a href="http://www.hybris-lang.org/documentazione?function=println">println</a>( guy-&gt;nome." ".guy-&gt;cognome." è minorenne." );
   }

   if( guy-&gt;carattere-&gt;sveglio == "Si" ){
      if( guy-&gt;carattere-&gt;modesto == "No" ){
         <a href="http://www.hybris-lang.org/documentazione?function=println">println</a>( guy-&gt;nome." ".guy-&gt;cognome." è una persona arrogante." );
      }
      else{
         <a href="http://www.hybris-lang.org/documentazione?function=println">println</a>( guy-&gt;nome." ".guy-&gt;cognome." è un tipo sveglio." );
      }
   }
   else{
      <a href="http://www.hybris-lang.org/documentazione?function=println">println</a>( guy-&gt;nome." ".guy-&gt;cognome." è un po tonto." );
   }</pre>
</blockquote>
<p>La cosa più tosta da gestire è stata l&#8217;eventualità, come nell&#8217;ultimo esempio, di una struttura che a sua volta contenga una struttura &#8230; in pratica ho dovuto reimplementare un mini lookup di symboli per questa tipologia di dato &#8230; fatto quello, dopo un paio di giorni (insonni) di bestemmie, il risultato è venuto fuori quasi da solo ^^</p>
<p><strong>PS</strong> : Non so perchè ma la possibilità di inizializzare gli attributi di una struttura tramite il suo dichiaratore anche se non è stato implementato alcun tipo di costruttore (del resto non è ancora concepita una cosa del genere nella logica di Hybris) mi piace da morire <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=949">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=949&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/1033/hybris-v1-0-beta-3-tante-le-novita.html' rel='bookmark' title='Permanent Link: Hybris v1.0 beta 3, tante le novità!'>Hybris v1.0 beta 3, tante le novità!</a></li>
<li><a href='http://www.evilsocket.net/1039/hybris-v1-0-beta-3-tante-le-novita-2.html' rel='bookmark' title='Permanent Link: Hybris v1.0 beta 3, tante le novità!'>Hybris v1.0 beta 3, tante le novità!</a></li>
<li><a href='http://www.evilsocket.net/1001/hybris-da-ora-object-oriented.html' rel='bookmark' title='Permanent Link: Hybris, da ora Object Oriented!'>Hybris, da ora Object Oriented!</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/949/hybris-1-0-beta-strutture-e-primo-passo-per-loo.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>E anche ia64 è fatta! (god bless libffi)</title>
		<link>http://www.evilsocket.net/946/e-anche-ia64-e-fatta-god-bless-libffi.html</link>
		<comments>http://www.evilsocket.net/946/e-anche-ia64-e-fatta-god-bless-libffi.html#comments</comments>
		<pubDate>Tue, 30 Mar 2010 00:58:13 +0000</pubDate>
		<dc:creator>evilsocket</dc:creator>
				<category><![CDATA[Misc]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[hybris]]></category>
		<category><![CDATA[ia64]]></category>
		<category><![CDATA[libffi]]></category>

		<guid isPermaLink="false">http://www.evilsocket.net/?p=946</guid>
		<description><![CDATA[Mmmm allora allora allora, nonostante siano passati solo alcuni giorni dal mio ultimo intervento, di cambiamenti e soprattutto migliorie Hybris ne ha subiti tantissimi, quasi non so da dove cominciare (ammesso che interessi a qualcuno, lol XD), quindi vediamoli uno alla volta. Errata corrige : A volte son figo senza saperlo. In questo articolo spiegavo [...]


Related posts:<ol><li><a href='http://www.evilsocket.net/975/cogito-ergo-sum.html' rel='bookmark' title='Permanent Link: Cogito ergo sum'>Cogito ergo sum</a></li>
<li><a href='http://www.evilsocket.net/941/spostata-la-documentazione-di-hybris-su-wiki.html' rel='bookmark' title='Permanent Link: Spostata la documentazione di Hybris su Wiki'>Spostata la documentazione di Hybris su Wiki</a></li>
<li><a href='http://www.evilsocket.net/936/hybris-memory-lookup-now-google-powered.html' rel='bookmark' title='Permanent Link: Hybris memory lookup, now Google powered!!!'>Hybris memory lookup, now Google powered!!!</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Mmmm allora allora allora, nonostante siano passati solo alcuni giorni dal mio ultimo intervento, di cambiamenti e soprattutto migliorie Hybris ne ha subiti tantissimi, quasi non so da dove cominciare (ammesso che interessi a qualcuno, lol XD), quindi vediamoli uno alla volta.</p>
<p><span id="more-946"></span></p>
<h2>Errata corrige : A volte son figo senza saperlo.</h2>
<p>In <a href="http://www.evilsocket.net/936/hybris-memory-lookup-now-google-powered.html" target="_blank">questo articolo</a> spiegavo la nuova hash table per il lookup delle variabili in memoria e, nel passaggio :</p>
<blockquote><p>Purtroppo ci sono alcuni limiti che non mi consentono di eliminare del tutto il vecchio comportamento della classe Map, poichè oltre ad un associazione [chiave -&gt; valore] utilizza anche altre associazioni [indice -&gt; chiave], [chiave -&gt; indice] e così via che non sono gestibili dalla hash table, tutta via sono fiducioso che in futuro, magari entro il rilascio (che è vicinissimo) della 1.0, troverò il metodo per risolvere o quanto meno aggirare questo problema.</p></blockquote>
<p>Parlavo degli indici ordinali come un &#8220;limite&#8221;.</p>
<p>Ebbene, va fatta una piccola precisazione.</p>
<p>Ci sono due tipi di mappe/tabelle, disordinate nelle quali gli elementi non si trovano nella stessa sequenza in cui vengono inseriti, ed ordinate dove invece gli elementi si trovano nello stesso ordine di inserimento.</p>
<p>E&#8217; ovvio che, dovendo accedere tramite indice, mi servisse una mappa ordinata e così ho provato varie implementazioni alternative per eliminare la classe che ho implementato io &#8230; ho provato std::map, tr1::*, boost::* e ho visto che, in qualsiasi caso, il mio compromesso di tenere parallelamente una tabella ed un vettore &#8230; <strong>è il più veloce</strong>!!</p>
<p>Quindi problema uno risolto <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>L&#8217;odissea dei 64bit</h2>
<p>Fin da quando ho implementato le funzionalità per il <a href="http://github.com/evilsocket/Hybris/blob/master/src/builtins/dll.cc" target="_blank">loading dinamico delle librerie di sistema</a> mi son trovato davanti una bella gatta da pelare.</p>
<p>La vecchia versione della funzione dllcall era implementata in inline assembly, poichè doveva passare argomenti arbitrari ad un <a href="http://www.evilsocket.net/54/cc-function-pointers.html" target="_blank">puntatore a funzione</a> generico, quindi li pushava uno ad uno in ordine inverso sullo stack e poi chiamava la funzione.</p>
<p>Il problema era che, essendo assmbly scritto per x86, era compatibile solo con architetture a 32 bit, di conseguenza mi son trovato costretto ad inserire un bel blocco #ifdef che escludeva quella funzione nel caso rilevasse la compilazione in un ambiente a 64bit .</p>
<p>Data la calling convention totalmente diversa tra x86 e ia64, reimplementare dell&#8217;altro assembly non era una grande idea, e così mi son scervellato per trovare una soluzione alternativa.</p>
<p>Inizialmente mi hanno suggerito le funzioni <a href="http://www.opengroup.org/onlinepubs/009695399/functions/makecontext.html" target="_blank">makecontext/swapcontext</a> ma non le ho potute usare poichè volevano la lista degli argomenti della funzione per esteso, cosa che non potevo fare avendoli in un vettore di dimensione arbitraria.</p>
<p>Così, gira che ti rigira, ho trovato la spettacolare <a href="http://sourceware.org/libffi/" target="_blank">libffi</a> che è proprio quello che mi serve!</p>
<p>Questa libreria, usata da tanti altri linguaggi tra i quali il Python, è nata appositamente per richiamare funzioni scritte in C da linguaggi di livello più alto, offrendo un substrato di conversione dei tipi a ctypes .</p>
<p>Dopo un po di bestemmie per capirne la documentazione (pressochè nulla, tanto per cambiare), per correggere una prima implementazione che non andava (un grazie enorme a <a href="/fyskij">fyskij</a> che mi ha fatto da tester fin quando non son riuscito ad installarmi una vm ia64), ecc ecc son fiero di annunciare che ora Hybris è pienamente supportato da piattaforme a 64bit e teoricamente da qualsiasi altra piattaforma!!!</p>
<h2>Documentazione parte 2, speravo di non doverlo fare mai più</h2>
<p>Tanto per &#8220;staccare&#8221; un po la spina dal codice, mi son messo a buttare giù uno pseudo standard xml per documentare le funzioni di Hybris, in modo tale da poter elaborare questi file velocemente per crearne documentazioni html, pdf, libri, enciclopedie, carta igienica e quant&#8217;altro .</p>
<p>Così, con tanto olio di gomito, ho riscritto tutto creado il nuovo repository <a href="http://github.com/evilsocket/hybris-doc-it" target="_blank">hybris-doc-it</a> che, oltre a contenere gli xml suddivisi per categoria, contiene anche un paio di script per la conversione in file html che utilizzo in questo sito.</p>
<p>Ci sarebbe tanto altro da dire, ma son stanco e la 1.0 è vicina &#8230; alla prossima! <img src='http://www.evilsocket.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>

                            <div id="aspdf">
                                <a href="http://www.evilsocket.net/wp-content/plugins/as-pdf/generate.php?post=946">
                                    <span> </span>
                                </a>
                            </div>
                        <img src="http://www.evilsocket.net/?ak_action=api_record_view&id=946&type=feed" alt="" />

<p>Related posts:<ol><li><a href='http://www.evilsocket.net/975/cogito-ergo-sum.html' rel='bookmark' title='Permanent Link: Cogito ergo sum'>Cogito ergo sum</a></li>
<li><a href='http://www.evilsocket.net/941/spostata-la-documentazione-di-hybris-su-wiki.html' rel='bookmark' title='Permanent Link: Spostata la documentazione di Hybris su Wiki'>Spostata la documentazione di Hybris su Wiki</a></li>
<li><a href='http://www.evilsocket.net/936/hybris-memory-lookup-now-google-powered.html' rel='bookmark' title='Permanent Link: Hybris memory lookup, now Google powered!!!'>Hybris memory lookup, now Google powered!!!</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.evilsocket.net/946/e-anche-ia64-e-fatta-god-bless-libffi.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
