<?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>(function() {</title>
	<atom:link href="http://maxb.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://maxb.net/blog</link>
	<description>// MAXB.NET LABS</description>
	<lastBuildDate>Tue, 23 Feb 2010 08:35:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>MarkerClusterer clearMarkers bugfix</title>
		<link>http://maxb.net/blog/2009/12/01/markerclusterer-clearmarkers-bugfix/</link>
		<comments>http://maxb.net/blog/2009/12/01/markerclusterer-clearmarkers-bugfix/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 13:24:44 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[hack]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=521</guid>
		<description><![CDATA[(This should be a crosspost written with Carlo)
It seems that MarkerClusterer has a bug, fixed with this patch (*) written by me while I was hunting with Carlo for it on this application (now working fine): after the ajax submit and zooming out, the library was still displaying old clusters and markers, because, after destroying [...]]]></description>
			<content:encoded><![CDATA[<p>(This should be a crosspost written with <a target="_blank" href="http://perassi.org/2009/12/01/markerclusterer-clearmarkers-bugfix/">Carlo</a>)</p>
<p>It seems that <a target="_blank" href="http://gmaps-utility-library-dev.googlecode.com/svn/tags/markerclusterer/1.0/docs/reference.html">MarkerClusterer</a> has a bug, fixed with <a href="http://perassi.org/quickhacks/mkp/mk.diff" target="_blank">this patch</a> (*) written by me while I was hunting with Carlo for it on <a href="http://www.piemonteitalia.eu/index.php?option=com_mappet" target="_blank" >this application</a> (now working fine): after the ajax submit and zooming out, the library was still displaying old clusters and markers, because, after destroying MarkerClusterer, the event assigned to GEvent wasn&#8217;t correctly removed.</p>
<p>(*) the patch is created against the r1159 version on <a href="http://code.google.com/p/gmaps-utility-library-dev/" target="_blank">gmaps-utility-library-dev</a>.</p>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=521&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/12/01/markerclusterer-clearmarkers-bugfix/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Hanno i soldi, vogliono vivere in una zucca. Lasciali vivere in una zucca.</title>
		<link>http://maxb.net/blog/2009/11/17/hanno-i-soldi-vogliono-vivere-in-una-zucca-lasciali-vivere-in-una-zucca/</link>
		<comments>http://maxb.net/blog/2009/11/17/hanno-i-soldi-vogliono-vivere-in-una-zucca-lasciali-vivere-in-una-zucca/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 10:14:19 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[cinema]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=515</guid>
		<description><![CDATA[


Foley: voglio vedere i disegni della facciata perchè state per commettere uno sbaglio grosso quanto una casa. Cosa aspetta prenda il progetto!
Capo cantiere: chi è lei?
Foley: fermo giù quella tavola!
Foley: Axel Foley ispettore dell&#8217;edilizia di Beverly Hills. Non l&#8217;hanno avvisata?
Capo cantiere: no
Foley : non l&#8217;hanno fatto?
Capo cantiere: no
Foley: vada a prendere il progetto
Capo cantiere: ok
Foley: [...]]]></description>
			<content:encoded><![CDATA[<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/v6ExLL0OXkw&#038;hl=en_US&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/v6ExLL0OXkw&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<div class="sc">
<p>
Foley: voglio vedere i disegni della facciata perchè state per commettere uno sbaglio grosso quanto una casa. Cosa aspetta prenda il progetto!<br />
Capo cantiere: chi è lei?<br />
Foley: fermo giù quella tavola!<br />
Foley: Axel Foley ispettore dell&#8217;edilizia di Beverly Hills. Non l&#8217;hanno avvisata?<br />
Capo cantiere: no<br />
Foley : non l&#8217;hanno fatto?<br />
Capo cantiere: no<br />
Foley: vada a prendere il progetto<br />
Capo cantiere: ok<br />
Foley: ehi voi smettetela di lavorare<br />
Capo cantiere: ora lo prendo<br />
Foley: siete sordi non capite ho detto &#8220;basta lavorare&#8221;<br />
Foley: mi faccia vedere<br />
Capo cantiere: ecco qui<br />
Foley: ehi un momento un momento<br />
Foley: non è questo <br />
Capo cantiere: cosa?<br />
Foley : non è questo.<br />
Capo cantiere: cosa intende?<br />
Foley: questo è un altro progetto<br />
Capo cantiere: un altrooo?<br />
Foley: certo questo è quello vecchio<br />
Capo cantiere: vecchio?<br />
Foley: si il vecchio progetto<br />
Capo cantiere: ma che diavolo sta&#8230;<br />
Foley: non è venuto alla riunione<br />
Capo cantiere: no<br />
Foley: degli Andersson prima che andassero alle Hawaii<br />
Capo cantiere: noo!<br />
Foley: nessuno gliel&#8217;ha fatto sapere<br />
Capo cantiere: noooo!<br />
Foley: beh io c&#8217;ero. Il progetto è cambiato<br />
Capo cantiere: io non ne so niente<br />
Foley: gli Andersson prima di partire per le Hawaii hanno scelto un altro disegno. Uno più bello con il campanile&#8230;<br />
Capo cantiere: oh merda<br />
Foley: dall&#8217;edificio devono sparire tutti quegli angoli retti<br />
Capo cantiere: mi scusi<br />
Foley: lei lei&#8230;<br />
Foley: fermi ragazzi<br />
Capo cantiere: fermi ragazzi!<br />
Foley: lei ha rovinato la casa di quella gente<br />
Foley: adesso dovremo ricominciare i lavori dall&#8217;inizio<br />
Capo cantiere: senza angoli retti diventerà rotonda come una zucca<br />
Foley: ma che fa lei l&#8217;architetto?<br />
Capo cantiere: no<br />
Foley: hanno i soldi vogliono vivere in una zucca. Lasciali vivere in una zucca. La gente fa i soldi e perde la testa. Si svegliano e vogliono una casa rotonda<br />
Capo cantiere: si ha ragione<br />
Foley: e tu fagliela tanto ti pagano!
</p>
</div>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=515&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/11/17/hanno-i-soldi-vogliono-vivere-in-una-zucca-lasciali-vivere-in-una-zucca/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Un&#8217; idea di plugin: jCropMap</title>
		<link>http://maxb.net/blog/2009/11/12/un-idea-di-plugin-jcropmap/</link>
		<comments>http://maxb.net/blog/2009/11/12/un-idea-di-plugin-jcropmap/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 18:12:52 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[jcrop]]></category>
		<category><![CDATA[jcropmap]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=481</guid>
		<description><![CDATA[SOMMARIO
Per chi non avesse la pazienza di leggere, o per chi semplicemente non è italiano, o per gli autori di Jcrop, qui sotto c&#8217;è un elenco di link in cui i linguaggi sono universali:  html, javascript (jQuery) e qualche proprietà di css.

esempio base
inserire le aree
visualizzare le aree inserite
esempio con shapes disegnate
trigger dell&#8217;evento release

DOWNLOAD

DEMOS

IL TAG MAP
Il [...]]]></description>
			<content:encoded><![CDATA[<h3>SOMMARIO</h3>
<p>Per chi non avesse la pazienza di leggere, o per chi semplicemente non è italiano, o per gli autori di <a href="http://deepliquid.com/projects/Jcrop/demos.php" target="_blank">Jcrop</a>, qui sotto c&#8217;è un elenco di link in cui i linguaggi sono universali:  html, javascript (jQuery) e qualche proprietà di css.</p>
<ul>
<li><a href="http://maxb.net/scripts/jcropmap/demo.html" target="_blank">esempio base</a></li>
<li><a href="http://maxb.net/scripts/jcropmap/edit.html" target="_blank">inserire le aree</a></li>
<li><a href="http://maxb.net/scripts/jcropmap/show.html" target="_blank">visualizzare le aree inserite</a></li>
<li><a href="http://maxb.net/scripts/jcropmap/demo2.html" target="_blank">esempio con shapes disegnate</a></li>
<li><a href="http://maxb.net/scripts/jcropmap/release.html" target="_blank">trigger dell&#8217;evento release</a></li>
</ul>
<h3>DOWNLOAD</h3>
<p>
<a href="http://maxb.net/scripts/jcropmap/jcropmap.zip" target="_blank">DEMOS</a>
</p>
<h3>IL TAG MAP</h3>
<p>Il tag <a href="http://www.w3schools.com/TAGS/tag_map.asp" target="_blank">map</a>, e il &#8220;sottotag&#8221; <a href="http://www.w3schools.com/TAGS/tag_area.asp" target="_blank">area</a> permettono di &#8220;disegnare&#8221; link all&#8217;interno di un immagine.</p>
<pre><code class="html">

&lt;img src="planets.gif" width="145" height="126" alt="Planets" usemap="#planetmap" /&gt;

&lt;map name="planetmap"&gt;
  &lt;area shape="rect" coords="0,0,82,126" alt="Sun" href="sun.htm" /&gt;
  &lt;area shape="circle" coords="90,58,3" alt="Mercury" href="mercur.htm" /&gt;
  &lt;area shape="circle" coords="124,58,8" alt="Venus" href="venus.htm" /&gt;
&lt;/map&gt;
</code></pre>
<p><a href="http://www.w3schools.com/TAGS/tryit.asp?filename=tryhtml_areamap" target="_blank">Qui</a> c&#8217;è un esempio di utilizzo.</p>
<h3>LIMITI DEL TAG MAP</h3>
<p>Il limite principale di questo tag è a mio modo di vedere l&#8217;impossibilità di applicare stili ai tag &#8220;AREA&#8221; presenti all&#8217;interno.<br />
In pratica l&#8217;<strong>unico indizio</strong> visivo del link all&#8217;interno di una certa porzione di immagine, che viene dato all&#8217;utente, <strong>è il cursore</strong>.<br />
Non è possibile anche solo applicare bordi.<br />
Tutto questo fondamentalmente perchè il tag map permette di creare aree di tipo &#8220;rect&#8221; (e non sarebbe un problema per un browser disegnarne il bordo), &#8220;circle&#8221;, &#8220;poly&#8221;.<br />
Quindi il browser dovrebbe saper disegnare (canvas).</p>
<p>Altro limite, ma non direttamente del tag, è la difficoltà di scrivere le coordinate.</p>
<h3>ALTERNATIVE AL TAG MAP</h3>
<p><a href="http://www.alistapart.com/articles/cssmaps/" target="_blank">Listapart</a> ci aveva già pensato, e suggerisce di creare qualcosa di completamente diverso. Javascript legge una lista, disegna dei punti in posizione assoluta, e al click (o al mouseover) visulizza un tooltip.</p>
<p>L&#8217;idea è quella.</p>
<p>Siccome il mio problema comunque, era di dare in mano ad un redattore uno strumento per inserire i punti, ho iniziato a fare scouting di plugins che disegnassero aree sopra un&#8217; immagine.</p>
<h3>JQUERY JCROP</h3>
<p>Ecco che arrivo a <a href="http://deepliquid.com/projects/Jcrop/demos.php" target="_blank">Jcrop</a>.</p>
<p>Jcrop è un plugin <a href="http://jquery.com/" target="_blank">jQuery</a> principalmente pensato per tagliare immagini.</p>
<p>Inizialmente non pensavo di usarlo come sostituto dei tag map/area.</p>
<p>Pensavo solo di usare le coordinate che <a href="http://deepliquid.com/projects/Jcrop/demos.php?demo=handler" target="_blank">restuitiva</a>, salvarle nel database e successivamente creare le aree lato &#8220;frontoffice&#8221; leggendo dal database le coordinate salvate dal redattore della mappa.</p>
<p>Quindi l&#8217;avevo scelto come strumento di backoffice.</p>
<p><a href="http://deepliquid.com/projects/Jcrop/demos.php?demo=handler" target="_blank">Qui</a> un semplice utilizzo di Jcrop con le coordinate restituite in campi form.</p>
<h3>JCROP COME SOSTITUTO DEL TAG MAP</h3>
<p>Alla fine anche per la presentazione ho deciso di provare ad utilizzare il plugin.</p>
<p><a href="http://maxb.net/scripts/jcropmap/demo.html" target="_blank">Questo</a> è il risultato.</p>
<p>Una serie di link presi da una lista con le coordinate passate via <a href="http://docs.jquery.com/Plugins/Metadata" target="_blank">metadata</a>.</p>
<p>L&#8217;implementazione è  semplice (anche se le coordinate non sono proprio user-frendly).</p>
<h3>L&#8217;ESEMPIO BASE</h3>
<p><strong>Il container:</strong></p>
<pre><code class="html">
&lt;div class="jcropmap"&gt;&lt;/div&gt;
</code></pre>
<p><strong>L&#8217;immagine:</strong></p>
<pre><code class="html">
&lt;img src="img/italia2006.jpg" alt="italia2006" /&gt;
</code></pre>
<p><strong>La lista di aree: </strong></p>
<pre><code class="html">
&lt;ul&gt;
	&lt;li&gt;&lt;a class="{coords : [33,111,75,176,42,65]}" href="#"&gt;Gattuso&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [93,104,144,180,51,76]}" href="#"&gt;Pirlo&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [171,103,224,183,53,80]}" href="#"&gt;Zambrotta&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [245,102,318,191,73,89]}" href="#"&gt;Camoranesi&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [326,100,397,190,71,90]}" href="#"&gt;Cannavaro&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [402,98,456,174,54,76]}" href="#"&gt;Perrotta&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [410,14,464,90,54,76]}" href="#"&gt;Totti&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [345,7,399,83,54,76]}" href="#"&gt;Grosso&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [274,4,328,80,54,76]}" href="#"&gt;Toni&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [211,4,265,80,54,76]}" href="#"&gt;Barzagli&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class="{coords : [149,2,203,78,54,76]}" href="#"&gt;Buffon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</code></pre>
<p><strong>Il JS NELL&#8217;HEAD:</strong></p>
<pre><code class="javascript">
jQuery(window).load(function(){
	jQuery(".jcropmap").jcropmap();
});
</code></pre>
<p>NB:</p>
<p>non ci sono regole forti per questo plugin per la struttura html. L&#8217; importante è scegliere una classe o un id per il wrapper container e richiamarla nell&#8217;head quando si avvia il costruttore. All&#8217;interno di questo wrapper ricordarsi solo che i link vengono cercati all&#8217;interno di un ul, e l&#8217;immagine DEVE avere come classe jcropbox (sovrascrivibile da opzione).</p>
<h3>CREARE LE AREE</h3>
<p>Visto che non è proprio semplice scrivere le coordinate delle aree, ho creato una <a href="http://maxb.net/scripts/jcropmap/edit.html" target="_blank">demo</a> con una banale gestione della sessione.</p>
<p><strong>Questa demo non è un plugin</strong>.</p>
<p>E&#8217; solo uno <strong>spunto</strong> per crearsi la propria gestione dei link.</p>
<p>Sarà quindi necessario implementare un servizio che ad esempio salvi le informazioni su db.</p>
<h3>VISUALIZZARE IL RISULTATO</h3>
<p>Una volta inserite le coordinate nella <a href="http://maxb.net/scripts/jcropmap/edit.html" target="_blank">demo</a> precedente, potrete vedere il risultato dei vostri &#8220;tag&#8221; <a href="http://maxb.net/scripts/jcropmap/show.html" target="_blank">qui</a>.</p>
<h3>EXTRA : SHAPES, OPTIONS, RELEASE</h3>
<p>Ho aggiunto anche la possibilità di visualizzare le aree all&#8217;interno del &#8220;viewport&#8221; di Jcrop, e di sovrascrivere le opzioni che vengono passate. Un <a href="http://maxb.net/scripts/jcropmap/demo2.html" target="_blank">esempio</a>.</p>
<p><a href="http://maxb.net/scripts/jcropmap/release.html" target="_blank">Qui</a> invece mostro come ho agganciato il metodo release dell&#8217;oggetto costruito all&#8217;interno del plugin (click sul body).</p>
<p>Non è una tecnica pulitissima. Ma nemmeno quella di Jcrop mi sembra elegante.</p>
<h3>FEEDBACK</h3>
<p>Se ci sarà un certo riscontro a questo post, magari versionerò il plugin, esporrò meglio le opzioni, e magari anche un API pubblica di metodi.</p>
<p>Fino ad allora per maggiori informazioni o chiedete qui postando un commento, oppure guardate il <a href="http://maxb.net/scripts/jcropmap/jcropmap.js" target="_blank">codice sorgente</a>.</p>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=481&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/11/12/un-idea-di-plugin-jcropmap/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JCVD &#8211; Un’autentica e folgorante rivelazione</title>
		<link>http://maxb.net/blog/2009/11/09/jcvd-un%e2%80%99autentica-e-folgorante-rivelazione/</link>
		<comments>http://maxb.net/blog/2009/11/09/jcvd-un%e2%80%99autentica-e-folgorante-rivelazione/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 10:53:06 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[cinema]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=469</guid>
		<description><![CDATA[
Ieri mi è capitato di vedere questo piccolo capolavoro.
Non sono un grande appassionato del genere 400 calci ma questa è veramente una chicca.
Piano sequenza iniziale memorabile. Colonna sonora da pelle d&#8217;oca:
&#8220;Hard Times&#8221;
Written by Curtis Mayfield
Performed by Baby Huey &#038; the Babysitters
Bravo Jean Claude e soprattutto bravo Mabrouk El Mechri il regista.
Qui una recensione che vi [...]]]></description>
			<content:encoded><![CDATA[<p><object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/mmunsnKFlsc&#038;hl=it&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/mmunsnKFlsc&#038;hl=it&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
<p>Ieri mi è capitato di vedere questo piccolo capolavoro.</p>
<p>Non sono un grande appassionato del genere <a href="http://www.i400calci.com/" target="_blank">400 calci</a> ma questa è veramente una chicca.</p>
<p>Piano sequenza iniziale memorabile. Colonna sonora da pelle d&#8217;oca:</p>
<blockquote><p>&#8220;Hard Times&#8221;<br />
Written by Curtis Mayfield<br />
Performed by Baby Huey &#038; the Babysitters</p></blockquote>
<p>Bravo Jean Claude e soprattutto bravo Mabrouk El Mechri il regista.</p>
<p>Qui una <a href="http://www.cineblog.it/post/13294/festival-internazionale-del-film-di-roma-jcvd-recensione-in-anteprima" target="_blank">recensione</a> che vi invoglierà a cercarlo.</p>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=469&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/11/09/jcvd-un%e2%80%99autentica-e-folgorante-rivelazione/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Oracle + Lampp + Jaunty</title>
		<link>http://maxb.net/blog/2009/10/05/oracle-lampp-jaunty/</link>
		<comments>http://maxb.net/blog/2009/10/05/oracle-lampp-jaunty/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 07:35:51 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[tutorial]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=463</guid>
		<description><![CDATA[Venerdi ho dovuto installare il client Oracle in locale sulla mia Ubuntu Jaunty.
Premetto che uso il pacchetto Lampp (1.7.2) fornito da ApacheFriends.
Ho tribolato parecchio facendo varie prove e seguendo vari tutorial. Il problema principale, poi ho capito, è che lo script di installazione di oci8 (il driver php per accedere a oracle) presente su lampp [...]]]></description>
			<content:encoded><![CDATA[<p>Venerdi ho dovuto installare il client Oracle in locale sulla mia Ubuntu Jaunty.<br />
Premetto che uso il pacchetto Lampp (1.7.2) fornito da <a href="http://www.apachefriends.org/download.php?xampp-linux-1.7.2.tar.gz" target="_blank">ApacheFriends</a>.<br />
Ho tribolato parecchio facendo varie prove e seguendo vari tutorial. Il problema principale, poi ho capito, è che lo script di installazione di oci8 (il driver php per accedere a oracle) presente su lampp cerca un client oracle della serie 10.2.<br />
Inizialmente scaricando rpm e zip della serie 11.2 (l&#8217;ultima disponibile) ho avuto tutta una serie di problemi.<br />
<br />
Ecco quindi i passaggi che mi hanno portato finalmente ad avere oci_connect funzionante nel mio php.<br />
</p>
<p>Dopo aver scaricato il client oracle da <a href="http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html" target="_blank">qui</a> (occorre registrarsi), ho eseguito questi passi:</p>
<pre><code>
mkdir -p /opt/oracle/instantclient
cd /opt/oracle/instantclient
unzip oracle-instantclient-basic-10.2.0.4-1.i386.zip
unzip oracle-instantclient-devel-10.2.0.4-1.i386.zip
ln -s libclntsh.so.10.1 libclntsh.so
ln -s libocci.so.10.1 libocci.so
echo /opt/oracle/instantclient >> /etc/ld.so.conf
ldconfig
sudo /opt/lampp/lampp oci8
</code></pre>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=463&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/10/05/oracle-lampp-jaunty/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Autocomplete con jQuery</title>
		<link>http://maxb.net/blog/2009/09/14/autocomplete-con-jquery/</link>
		<comments>http://maxb.net/blog/2009/09/14/autocomplete-con-jquery/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 08:30:38 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[autocomplete]]></category>
		<category><![CDATA[suggest]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=436</guid>
		<description><![CDATA[NB: ci sono novità al fondo del post
Pubblico le mie 3 implementazioni del plugin jQuery Autocomplete di Jörn Zaefferer.
Queste implementazioni servono ad attivare campi form con suggest automatico senza scrivere una sola riga di javascript.

La prima implementazione autoattiva il plugin originale (con supporto ai metadata):





La seconda implementazione aggiunge &#8220;magicamente&#8221; un campo &#8220;hidden&#8221; e  in [...]]]></description>
			<content:encoded><![CDATA[<p><strong>NB: <a href="http://maxb.net/blog/2009/09/14/autocomplete-con-jquery/#update_post_autocomplete">ci sono novità al fondo del post</a></strong></p>
<p>Pubblico le mie 3 implementazioni del plugin jQuery <a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/" target="_blank">Autocomplete</a> di Jörn Zaefferer.</p>
<p>Queste implementazioni servono ad attivare campi form con suggest automatico <strong>senza scrivere una sola riga di javascript.</strong></p>
<p>
La prima implementazione autoattiva il plugin originale (con supporto ai metadata):
</p>
<p>
<img src="http://maxb.net/blog/wp-content/uploads/2009/09/suggest1.png" alt="" />
</p>
<p>
La seconda implementazione aggiunge &#8220;magicamente&#8221; un campo &#8220;hidden&#8221; e  in fase di invio del &#8220;form&#8221; spedisce al server anche la chiave associata al valore selezionato nel suggest.
</p>
<p>
<img src="http://maxb.net/blog/wp-content/uploads/2009/09/suggest2.png" alt="" />
</p>
<p>
La terza invece crea un suggest &#8220;tabellare&#8221;. <strong>E&#8217; stato necessario modificare lo script</strong>.
</p>
<p>
<img src="http://maxb.net/blog/wp-content/uploads/2009/09/suggest3.png" alt="" />
</p>
<p>Per le demo ho usato:</p>
<ul>
<li><a href="http://jquery.com/" target="_blank">jQuery 1.3.2</a></li>
<li><a href="http://docs.jquery.com/Plugins/Metadata" target="_blank">jQuery Metadata</a></li>
<li><a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/" target="_blank">jQuery Autocomplete 1.1</a></li>
</ul>
<h3>HEAD HTML</h3>
<p>Includere le librerie e i css necessari.</p>
<pre><code class="html">
	&lt;link href="lib/jquery.autocomplete.css" rel="stylesheet" type="text/css" media="screen" /&gt;
	&lt;script src="lib/jquery-1.3.2.min.js" type="text/javascript"&gt;&lt;/script&gt;
    &lt;script src="lib/jquery.metadata.js" type="text/javascript"&gt;&lt;/script&gt;
    &lt;script src="lib/jquery.autocomplete.js" type="text/javascript"&gt;&lt;/script&gt;
	&lt;script src="autocomplete.custom.js" type="text/javascript"&gt;&lt;/script&gt;
</code></pre>
<p><a href="http://maxb.net/scripts/autocomplete/autocomplete.custom.zip">DOWNLOAD DEMO</a></p>
<h3>SUGGEST BASE</h3>
<p>Per attivare un suggest base è sufficiente</p>
<ul>
<li>assegnare al campo input la classe <strong>suggest</strong>.</li>
<li>valorizzare l&#8217;attributo alt del campo input inserendo un url <strong>relativo</strong> es: &#8220;php/mesi.php&#8221;</li>
</ul>
<p>Lo script php d&#8217;esempio che restituisce alle chiamate ajax l&#8217;elenco dei valori:</p>
<pre><code class="php">
$q = strtolower($_GET["q"]);
if (!$q) return;
$items = array(
	'gennaio',
	'febbraio',
	'marzo',
	'aprile',
	'maggio',
	'giugno',
	'luglio',
	'agosto',
	'settembre',
	'ottobre',
	'novembre',
	'dicembre'
);

foreach ($items as $value) {
    if (strpos(strtolower($value), $q) !== false) {
        echo "$value\n";
    }
}
</code></pre>
<p><strong>Chiaramente nelle applicazioni reali i dati non verranno presi da un array ma da un database</strong></p>
<h4>ESEMPIO 1</h4>
<ul>
<li><a href="http://maxb.net/scripts/autocomplete/1.html" target="_blank">DEMO</a></li>
</ul>
<pre><code class="html">
&lt;input type="text" name="suggest1" id="suggest1" class="suggest" alt="php/mesi.php" /&gt;
</code></pre>
<h4>ESEMPIO 2</h4>
<p>Grazie all&#8217;uso di jQuery metadata le opzioni dell&#8217;autocomplete possono essere settate direttamente nell&#8217;html (quindi senza scrivere codice javascript).<br />
L&#8217;elenco delle opzioni che modificano il comportamento del plugin si trova <a href="http://docs.jquery.com/Plugins/Autocomplete/autocomplete#url_or_dataoptions" target="_blank">qui</a>.</p>
<ul>
<li><a href="http://maxb.net/scripts/autocomplete/2.html" target="_blank">DEMO</a></li>
</ul>
<pre><code class="html">
&lt;input type="text" name="suggest2" id="suggest2" class="suggest {multiple:true}" alt="php/mesi.php" /&gt;
</code></pre>
<h4>ESEMPIO 3</h4>
<ul>
<li><a href="http://maxb.net/scripts/autocomplete/3.html" target="_blank">DEMO</a></li>
</ul>
<pre><code class="html">
&lt;input type="text" name="suggest3" id="suggest3" class="suggest {minChars:3, max:3}" alt="php/search.php" /&gt;
</code></pre>
<h3>SUGGEST CHIAVE VALORE</h3>
<p>La seconda implementazione di jQuery Autocomplete crea un campo hidden per la chiave legata al valore visualizzato in suggest in modo da poter inviare al server sia la chiave sia il valore in fase di submit.</p>
<p>Per attivare un suggest chiave/valore è sufficiente</p>
<ul>
<li>assegnare al campo input la classe <strong>suggest_keys</strong>.</li>
<li>valorizzare l&#8217;attributo alt del campo input inserendo un url <strong>relativo</strong> es: &#8220;php/keys.php&#8221;</li>
</ul>
<p>Lo script php d&#8217;esempio che restituisce alle chiamate ajax l&#8217;elenco di chiavi|valori:</p>
<pre><code class="php">
$q = strtolower($_GET["q"]);
if (!$q) return;
$items = array(
	"10024" =&gt; "Moncalieri",
	"20000" =&gt; "Monza",
	"10100"	=&gt; "Torino"
);

foreach ($items as $key=&gt;$value) {
    if (strpos(strtolower($value), $q) !== false) {
        echo "$key|$value\n";
    }
}
</code></pre>
<h4>ESEMPIO 4</h4>
<ul>
<li><a href="http://maxb.net/scripts/autocomplete/4.html" target="_blank">DEMO</a></li>
</ul>
<pre><code class="html">
&lt;input type="text" name="suggest4" id="suggest4" class="suggest_keys" alt="php/keys.php" /&gt;
</code></pre>
<p>Se utilizzate firebug potrete vedere che viene creato un campo nascosto. Es:</p>
<pre><code class="html">
&lt;input type="hidden" value="" id="suggest4_hidden" name="suggest4_hidden"/&gt;
</code></pre>
<h4>ESEMPIO 5</h4>
<ul>
<li><a href="http://maxb.net/scripts/autocomplete/4.html" target="_blank">DEMO</a></li>
</ul>
<pre><code class="html">
&lt;input type="text" name="entita[campo]" id="entita_campo" class="suggest_keys" alt="php/keys.php" /&gt;
</code></pre>
<p>Se utilizzate firebug potrete vedere che viene creato un campo nascosto. Es:</p>
<pre><code class="html">
&lt;input type="hidden" value="" id="entita_campo_hidden" name="entita[campo_hidden]"/&gt;
</code></pre>
<h3>SUGGEST TABELLARE</h3>
<p>La terza implementazione di jQuery Autocomplete è un po&#8217; più complessa e prevede l&#8217;utilizzo di una versione modificata di jquery autocomplete.</p>
<p>Per attivare un suggest tabellare è sufficiente</p>
<ul>
<li>Includere nell&#8217;head la versione modificata di <a href="http://maxb.net/scripts/autocomplete/lib/jquery.autocomplete.mod.js" target="_blank">jQuery  Autocomplete</a></li>
<li>assegnare al campo input la classe <strong>suggest_table</strong>.</li>
<li>personalizzare le intestazioni di colonna nell&#8217;attributo class (vedi sotto l&#8217;esempio)</li>
<li>valorizzare l&#8217;attributo alt del campo input inserendo un url <strong>relativo</strong> es: &#8220;php/table.php&#8221;</li>
<li>Includere le seguenti istruzioni css personalizzando &#8220;le larghezze&#8221; che nell&#8217;esempio settano le 3 colonne della tabella</li>
</ul>
<pre><code class="css">
.ac_results ul li div.tbl{clear:both;}
.ac_results ul li div.tbl div{float:left;width:30%;overflow-x:hidden;}
.ac_intestazione{position:absolute;left:0px;top:-0px;z-index:1000;background:#000;color:#fff;}

/*PERSONALIZZA*/
.ac_results ul li div.tbl div.fld_1, #int_1{width:150px;}
.ac_results ul li div.tbl div.fld_2, #int_2{width:70px;}
.ac_results ul li div.tbl div.fld_3, #int_3{width:70px;}
</code></pre>
<p>Lo script php d&#8217;esempio che restituisce alle chiamate ajax l&#8217;elenco dei valori della tabella.</p>
<pre><code class="php">
$q = strtolower($_GET["q"]);
if (!$q) return;
$items = array(
	"10024" =&gt; array(
		"Moncalieri",
		"Torino",
		"Piemonte"
	),
	"20000" =&gt; array(
		"Conegliano",
		"Treviso",
		"Veneto"
	),
	"10100"	=&gt; array(
		"Alba",
		"Cuneo",
		"Piemonte"
	)
);

foreach ($items as $key=&gt;$array) {
	$str = join($array,"#");
    if (strpos(strtolower($str), $q) !== false) {
        echo "$key|$str\n";
    }
}
</code></pre>
<h4>ESEMPIO TABELLARE</h4>
<ul>
<li><a href="http://maxb.net/scripts/autocomplete/table.html" target="_blank">DEMO</a></li>
</ul>
<pre><code class="html">
&lt;input type="text" id="suggest1" name="suggest1" class="suggest_table {th : ['città', 'provincia', 'regione']}" alt="php/table.php" style="width:300px;" /&gt;
</code></pre>
<h3 id="update_post_autocomplete">AGGIORNAMENTO 13-11-2009:</h3>
<p>Ho aggiornato lo <a href="http://maxb.net/scripts/autocomplete/autocomplete.custom.zip">ZIP</a> con le demo e gli script di questo post.</p>
<p>Ho aggiornato in particolare</p>
<ul>
<li><a href="http://maxb.net/scripts/autocomplete/lib/jquery.autocomplete.mod.js" target="_blank">jQuery  Autocomplete &#8220;modificato&#8221;</a></li>
<li><a href="http://maxb.net/scripts/autocomplete/autocomplete.custom.js" target="_blank">jQuery  Autocomplete &#8220;custom&#8221;</a></li>
</ul>
<p>Ho aggiunto questa <a href="http://maxb.net/scripts/autocomplete/table_opzioni_autocomplete.html" target="_blank">DEMO</a> per il passaggio delle <strong>opzioni autocomplete</strong> al plugin base (jquery.autocomplete.mod.js).</p>
<p><strong>Le porzioni di jquery.autocomplete.js modificate sono a questo punto due</strong>, entrambe nel metodo/funzione fillList:</p>
<pre><code class="javascript">
var li = $(&quot;&lt;li/&gt;&quot;).html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? &quot;ac_even&quot; : &quot;ac_odd&quot;).appendTo(list)[0];
//PATCH
if(i == 0 &amp;&amp; $(input).is(&quot;.suggest_table&quot;)){
	$(li).addClass(&quot;ac_first&quot;);
	var _ie_sucks = typeof document.body.style.maxHeight === &quot;undefined&quot; || //IE6
					(document.all &amp;&amp; !window.opera &amp;&amp; window.XMLHttpRequest); //IE7
	if (_ie_sucks || max == 1) {
		$(li).attr(&quot;style&quot;, &quot;padding-top:20px&quot;);
	}
}
//PATCH
$.data(li, &quot;ac_data&quot;, data[i]);
</code></pre>
<pre><code class="javascript">
listItems = list.find("li");
if ( options.selectFirst ) {
	//PATCH
	//listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
	listItems.slice(1, 2).addClass(CLASSES.ACTIVE);
	//PATCH
	active = 0;
}
</code></pre>
<p>Per questa seconda modifica, ringrazio <strong>Mansportivo</strong> che nei commenti qui sotto mi ha segnalato l&#8217;anomalia.</p>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=436&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/09/14/autocomplete-con-jquery/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Ahah &amp; unobtrusive javascript</title>
		<link>http://maxb.net/blog/2009/07/27/ahah-unobtrusive-javascript/</link>
		<comments>http://maxb.net/blog/2009/07/27/ahah-unobtrusive-javascript/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 12:59:15 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[ahah]]></category>
		<category><![CDATA[ajaxstop]]></category>
		<category><![CDATA[authoring]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=410</guid>
		<description><![CDATA[DEMO

il problema
soluzione &#8220;manuale&#8221; (responsabilità dello sviluppatore)
soluzione nel plugin (responsabilità affidata al plugin)

IL PROBLEMA

DEMO
SORGENTE

Javascript non intrusivo ha un problema di fondo.
Lavorando sull&#8217;evento window.onload, i componenti javascript non intrusivi, NON si attivano nel momento in cui viene fatta un&#8217; iniezione html nel DOM (AHAH).
Qui ho scritto un banale esempio.
Il plugin aggiunge le funzionalità draggable e resizable (jQuery [...]]]></description>
			<content:encoded><![CDATA[<h1>DEMO</h1>
<ul>
<li><a href="http://maxb.net/scripts/ahah_issue/ahah.html" target="_blank">il problema</a></li>
<li><a href="http://maxb.net/scripts/ahah_issue/solution1.html" target="_blank">soluzione &#8220;manuale&#8221;</a> (responsabilità dello sviluppatore)</li>
<li><a href="http://maxb.net/scripts/ahah_issue/solution2.html" target="_blank">soluzione nel plugin</a> (responsabilità affidata al plugin)</li>
</ul>
<h1>IL PROBLEMA</h1>
<ul>
<li><a href="http://maxb.net/scripts/ahah_issue/ahah.html" target="_blank">DEMO</a></li>
<li><a href="http://maxb.net/scripts/ahah_issue/lib/plugins.js.html" target="_blank">SORGENTE</a></li>
</ul>
<p>Javascript non intrusivo ha un problema di fondo.<br />
Lavorando sull&#8217;evento window.onload, i componenti javascript non intrusivi,<strong> NON si attivano nel momento in cui viene fatta un&#8217; iniezione html nel DOM (<a href="http://en.wikipedia.org/wiki/AHAH" target="_blank">AHAH</a>)</strong>.</p>
<p><a href="http://maxb.net/scripts/ahah_issue/ahah.html" target="_blank">Qui</a> ho scritto un banale esempio.</p>
<p>Il <a href="http://maxb.net/scripts/ahah_issue/lib/plugin.js" target="_blank">plugin</a> aggiunge le funzionalità draggable e resizable (jQuery UI) agli elementi HTML selezionati.</p>
<p>Il plugin come &#8220;comportamento di default&#8221; agisce su tutti gli elementi con classe &#8220;box&#8221; :</p>
<pre><code class="javascript">
$(document).ready(function(){
	$(".box").myplugin();
});
</code></pre>
<p>Quindi nella demo tutti gli elementi con classe &#8220;box&#8221; saranno draggabili e ridimensionabili.</p>
<p>Il link ADD, nella <a href="http://maxb.net/scripts/ahah_issue/ahah.html" target="_blank">DEMO</a>, aggiunge elementi box via ajax (<a href="http://en.wikipedia.org/wiki/AHAH" target="_blank">AHAH</a>):</p>
<pre><code class="javascript">
$("#add").click(function(){
    $.ajax({
        url     : 'box.html',
        success : function(html){
            $("body").append($(html).myplugin());
        }
    });
});
</code></pre>
<p>Questi elementi arrivando da un iniezione HTML non vengono &#8220;arricchiti&#8221; dal plugin (non sono quindi ridimensionabili ne trascinabili) perchè non sono presenti al window.onload (al document.ready per chi usa jquery).</p>
<p>Questo problema non si avvertirebbe se il componente fosse intrusivo (js cablato nell&#8217;html):</p>
<pre><code class="html">
&lt;div id="box1"&gt;&lt;/div&gt;
&lt;script type="text/javascript"&gt;
//&lt;![CDATA[
$("#box1").myplugin();
//]]&gt;
&lt;/script&gt;
</code></pre>
<p>Se io iniettassi il codice qui sopra il box si attiverebbe perchè verrebbe valutato il js (almeno se iniettato via jquery) immediatamente senza eventi onload di mezzo.</p>
<p>Spesso i framework server-side sono intrusivi proprio per essere più flessibili.<br />
Il codice html generato sarà sporco (richfaces ad esempio) ma i componenti saranno sempre &#8220;funzionanti&#8221; sia al primo caricamento sia a seguito di iniezioni html.</p>
<h1>SOLUZIONE MANUALE</h1>
<ul>
<li><a href="http://maxb.net/scripts/ahah_issue/solution1.html" target="_blank">DEMO</a></li>
</ul>
<p>La soluzione &#8220;manuale&#8221; (a carico dello sviluppatore che implementa il comportamento e <strong>USA</strong> il plugin) è attivare le funzionalità js prima di appendere il nuovo pezzo di html. <a href="http://maxb.net/scripts/ahah_issue/solution1.html" target="_blank">DEMO</a></p>
<pre><code class="javascript">
$("#add").click(function(){
    $.ajax({
        url     : 'box.html',
        success : function(html){
            $("body").append($(html).myplugin());
        }
    });
});
</code></pre>
<p>Questa è la soluzione che più di frequente utilizzo. </p>
<p>Se invece avessi scritto il plugin ecco come potrei fare (quindi spostando la responsabilità al plugin stesso).</p>
<h1>SOLUZIONE AUTOMATICA</h1>
<ul>
<li><a href="http://maxb.net/scripts/ahah_issue/ahah.html" target="_blank">DEMO</a></li>
<li><a href="http://maxb.net/scripts/ahah_issue/lib/solution.js.html" target="_blank">SORGENTE</a></li>
</ul>
<p>L&#8217;idea è : quello che attivo al document.ready lo attivo anche all&#8217;evento ajaxStop (quindi inizializzo il plugin sia al window.onload sia alla chiusura di ogni chiamata ajax).</p>
<pre><code class="javascript">
$(document)
.ready(function(){
    $(".box").myplugin();
})
.ajaxStop(function(){
    $(".box").myplugin();
});
</code></pre>
<p>Il problema di questa soluzione è che applicando 2 volte ad un elemento lo stesso plugin si &#8220;rischia&#8221; spesso di ottenere degli effetti indesiderati (doppi eventi al click, interfaccia che si moltiplica a mo&#8217; di matrioska, ecc&#8230;).</p>
<p>La soluzione quindi è realizzare un qualche sistema di singleton all&#8217;elemento che si arrichisce.<br />
Nel <a href="http://maxb.net/scripts/ahah_issue/solution2.html#">plugin</a> finale ho scritto un banale if che aggiunge una certa classe (flag) all&#8217;elemento arricchito.<br />
Se un evento (ajaxStop) invoca il costruttore del plugin più volte il codice non verrà eseguito.</p>
<pre><code class="javascript">
//singleton
if ($(that).is(".myplugin")) {
   return;
} else {
   $(that).addClass(".myplugin");
}
//plugin code...
</code></pre>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=410&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/07/27/ahah-unobtrusive-javascript/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Dokumu &#8211; Dokuwiki multiutente</title>
		<link>http://maxb.net/blog/2009/07/13/dokumu-dokuwiki-multiutente/</link>
		<comments>http://maxb.net/blog/2009/07/13/dokumu-dokuwiki-multiutente/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 15:04:21 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[dokuwiki]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=392</guid>
		<description><![CDATA[Pubblico le istruzioni per ottenere un dokuwiki multiutente.
QUESTA E&#8217; SOLO UNA BOZZA.
PREREQUISITI :
a) capire il post
b) avere un apache su cui provare la patch/estensione*
c) mod_rewrite
*ho provato il tutto velocemente su uno xampp (apache su windows). NON FUNZIONA.
Non c&#8217;è ancora nessun batch/plugin/script che esegua automaticamente la creazione di un istanza wiki.
lo scopo della patch è arrivare [...]]]></description>
			<content:encoded><![CDATA[<p>Pubblico le istruzioni per ottenere un <a href="http://www.dokuwiki.org" target="_blank">dokuwiki</a> multiutente.</p>
<p><strong>QUESTA E&#8217; SOLO UNA BOZZA.</strong></p>
<h1><strong>PREREQUISITI :</strong></h1>
<p>a) capire il post<br />
b) avere un apache su cui provare la patch/estensione*<br />
c) <a href="http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html" target="_blank">mod_rewrite</a></p>
<p>*ho provato il tutto velocemente su uno <a href="http://www.apachefriends.org/it/xampp.html">xampp</a> (apache su windows). NON FUNZIONA.</p>
<p>Non c&#8217;è ancora nessun batch/plugin/script che esegua automaticamente la creazione di un istanza wiki.</p>
<p>lo scopo della patch è arrivare ad avere una serie di wiki con repository dati separate.</p>
<p>http://localhost/wiki/base/</p>
<p>http://localhost/wiki/max/</p>
<p>http://localhost/wiki/carlo/</p>
<p>etc&#8230;.</p>
<h1>Scarico l&#8217;ultima versione stabile di dokuwiki</h1>
<p><a href="http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2009-02-14b.tgz" target="_blank">dokuwiki-2009-02-14b.tgz</a></p>
<h1>Scarico la patch/estensione dokumu</h1>
<p><a href="http://maxb.net/scripts/dokumu/dokumu-2009-02-14b.tar.gz" target="_blank">dokumu-2009-02-14b.tar.gz</a></p>
<h1>Estraggo nella ROOT (htdocs) di apache dokumu</h1>
<p><img class="alignnone size-full wp-image-395" title="step3" src="http://maxb.net/blog/wp-content/uploads/2009/07/step3.png" alt="step3" width="206" height="297" /></p>
<h1>Estraggo in una directory temporanea dokuwiki</h1>
<h2>a) COPIO LE DIRECTORY</h2>
<p>/data<br />
/conf</p>
<p>in /repository/wiki/istances/base/ rispondendo si quando chiede di sovrascrivere/unire le directory.</p>
<h2>b) COPIO LE DIRECTORY e i FILES restanti (bin, inc, lib, doku.php etc)</h2>
<p>in /wiki (sotto htdocs NON in /repository/wiki !)</p>
<p>Ecco l&#8217;albero risultante dal merge di dokuwiki con quest&#8217;estensione &#8220;dokumu&#8221;</p>
<p><img class="alignnone size-full wp-image-398" title="step4b" src="http://maxb.net/blog/wp-content/uploads/2009/07/step4b.png" alt="step4b" width="312" height="492" /></p>
<h1>Setto i permessi di scrittura alla directory</h1>
<p>/repository e figli</p>
<h1>Modifiche DOKUWIKI &#8211; /wiki/inc/init.php</h1>
<p>inserisco questa riga subito dopo l&#8217;apertura del tag php (&lt;?php)</p>
<pre><code class="php">
require_once(dirname(__FILE__).'/../extensions/istances/config.php');
</code></pre>
<h1><strong>Lancio Dokumu</strong></h1>
<p>http://localhost/wiki/base/</p>
<p>dove localhost è l&#8217;indirizzo a cui risponde il vostro web server</p>
<h1>Creazione Istanza</h1>
<p>L&#8217;istanza è automaticamente creata lanciando sul browser l&#8217;url di partenza seguito dal nome dell&#8217;istanza</p>
<p>http://localhost/wiki/NOME_ISTANZA/</p>
<p>Se:</p>
<p>1) ho creato la directory</p>
<p>/repository/wiki/istances/NOME_ISTANZA</p>
<p>2) ho copiato le directory</p>
<p>/data<br />
/conf</p>
<p>presenti nel <a href="http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2009-02-14b.tgz" target="_blank">dokuwiki-2009-02-14b.tgz</a></p>
<p>3) nella directory</p>
<p>/repository/wiki/istances/NOME_ISTANZA/conf/</p>
<p>ho creato local.php (vedi dentro <a href="http://maxb.net/scripts/dokumu/dokumu-2009-02-14b.tar.gz" target="_blank">dokumu-2009-02-14b.tar.gz</a>)</p>
<p>con dentro <strong>ALMENO </strong>questo valore impostato</p>
<p>$conf['savedir'] = DATA_PATH;</p>
<p>4) liberi di settare i files</p>
<p>local.php<br />
acl.auth.php<br />
users.auth.php</p>
<p><strong>NON HO TESTATO LA PATCH CON</strong><br />
$conf['userewrite']  = 1;</p>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=392&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/07/13/dokumu-dokuwiki-multiutente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fichissimi</title>
		<link>http://maxb.net/blog/2009/06/16/fichissimi/</link>
		<comments>http://maxb.net/blog/2009/06/16/fichissimi/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 09:45:32 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[varie]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[motogp]]></category>
		<category><![CDATA[rossi]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=383</guid>
		<description><![CDATA[
min 3:30 &#8211; il sorpasso più spettacolare che io ricordi




]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/lsacwkH35s8&#038;hl=it&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/lsacwkH35s8&#038;hl=it&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<p>min 3:30 &#8211; il sorpasso più spettacolare che io ricordi</p>
<p><a href="http://maxb.net/blog/wp-content/uploads/2009/06/1-il-momento.jpg"><img src="http://maxb.net/blog/wp-content/uploads/2009/06/1-il-momento-300x225.jpg" alt="1-il-momento" title="1-il-momento" width="300" height="225" class="aligncenter size-medium wp-image-384" /></a></p>
<p><a href="http://maxb.net/blog/wp-content/uploads/2009/06/2-in-piega.jpg"><img src="http://maxb.net/blog/wp-content/uploads/2009/06/2-in-piega-300x225.jpg" alt="2-in-piega" title="2-in-piega" width="300" height="225" class="aligncenter size-medium wp-image-385" /></a></p>
<p><a href="http://maxb.net/blog/wp-content/uploads/2009/06/sorpasso.jpg"><img src="http://maxb.net/blog/wp-content/uploads/2009/06/sorpasso-300x225.jpg" alt="sorpasso" title="sorpasso" width="300" height="225" class="aligncenter size-medium wp-image-386" /></a></p>
<p><a href="http://maxb.net/blog/wp-content/uploads/2009/06/tre.jpg"><img src="http://maxb.net/blog/wp-content/uploads/2009/06/tre-300x225.jpg" alt="tre" title="tre" width="300" height="225" class="aligncenter size-medium wp-image-387" /></a></p>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=383&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/06/16/fichissimi/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>comodoclick</title>
		<link>http://maxb.net/blog/2009/05/12/comodoclick/</link>
		<comments>http://maxb.net/blog/2009/05/12/comodoclick/#comments</comments>
		<pubDate>Tue, 12 May 2009 08:48:01 +0000</pubDate>
		<dc:creator>Massimiliano Balestrieri</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[table]]></category>

		<guid isPermaLink="false">http://maxb.net/blog/?p=376</guid>
		<description><![CDATA[LINKS:

Demo
Js

FUNZIONALITA&#8217;:

Aggiunge la classe &#8220;hover&#8221; ai td di una certa riga di tabella (tr > td) sull&#8217;evento hover del tr
Aggiunge la classe &#8220;selected&#8221; ai td di una certa riga di tabella (tr > td) sull&#8217;evento click del td
Aggiunge la classe &#8220;selected&#8221; ai td di una certa riga di tabella al click sui controlli form checkbox e [...]]]></description>
			<content:encoded><![CDATA[<h3>LINKS:</h3>
<ul>
<li><a href="http://maxb.net/scripts/comodoclick/" target="_blank">Demo</a></li>
<li><a href="http://maxb.net/scripts/comodoclick/comodoclick.js" target="_blank">Js</a></li>
</ul>
<h3>FUNZIONALITA&#8217;:</h3>
<ul>
<li>Aggiunge la classe &#8220;hover&#8221; ai td di una certa riga di tabella (tr > td) sull&#8217;evento hover del tr</li>
<li>Aggiunge la classe &#8220;selected&#8221; ai td di una certa riga di tabella (tr > td) sull&#8217;evento click del td</li>
<li>Aggiunge la classe &#8220;selected&#8221; ai td di una certa riga di tabella al click sui controlli form checkbox e radio (di conseguenza anche al click sulle label) presenti sulla riga stessa</li>
<li>Nel caso di input:radio la classe selected viene prima cancellata dalle altre righe e poi applicata alla riga &#8220;selezionata&#8221;</li>
</ul>
<h3>AUTOLOAD</h3>
<p>Per attivarlo basta includere gli scripts (jquery, comodoclick) e aggiungere la classe comodoclick ad una tabella.</p>
<pre><code class="html">
&lt;script src=&quot;jquery-1.3.2.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;comodoclick.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;

&lt;table class=&quot;comodoclick&quot;&gt;
</code></pre>
<h3>CSS</h3>
<p>Personalizzare a piacere queste classi css:</p>
<pre><code class="css">
table.comodoclick tr td.hover {background-color:red;}
table.comodoclick tr td.selected {background-color:green;}
</code></pre>
<h3>CODE</h3>
<p>Il plugin con qualche nota:</p>
<pre><code class="javascript">
/*
 * Copyright (c) 2008 Massimiliano Balestrieri
 *
 * @requires jQuery v1.3.2
 *
 * Copyright (c) 2008 Massimiliano Balestrieri
 * Examples and docs at: http://maxb.net/blog/
 * Licensed GPL licenses:
 * http://www.gnu.org/licenses/gpl.html
 */
;
(function($){

    function ComodoClick(){
        return this.each(function(){
            var that = this;

            jQuery("tr", this).hover(function(){
                jQuery("td", this).addClass("hover");
            }, function(){
                jQuery("td", this).removeClass("hover");
            });

            jQuery("tr", this).click(function(e){
                var _target = e.target || e.srcElement;
                var _tag = _target.tagName.toString().toLowerCase();
                //prendo solo il click sul td
                //se ci fossero tag di tipo blocco dentro il td sarebbe un problema
                //se invece clicco su una input o su una label gestisco tutto con l'evento -> VEDI SOTTO
                if (_tag === 'td') {
                    var _tr = jQuery(this);
                    _highlight_row(_tr, true);
                }
                //return false;
            });

            //vedi sotto A
            jQuery("tr", this).find("input:checkbox, input:radio").bind("click", function(){
                var _tr = jQuery(this).parents("tr");
                _highlight_row(_tr, true);
            });
            //vedi sotto B
            jQuery("tr", this).find("input:checkbox").bind("checked", function(){
                var _tr = jQuery(this).parents("tr");
                _highlight_row(_tr, false);
            });

            var _highlight_row = function(_tr, flag){
                //il flag è per selezionare la checkbox/radio forzatamente
                //checkbox gestisce la "multiselezione"

                var _checkbox = jQuery("input:checkbox", _tr).length > 0;

                //nel caso dei radio cancello le altre colorazioni
                if (!_checkbox) {
                    jQuery("td", that).removeClass("selected");
                    jQuery("tr", that).removeClass("selected");
                    jQuery("td", _tr).addClass("selected");
                    _tr.addClass("selected");

                    if (flag) {
                        jQuery("input:radio", _tr).attr("checked", "checked");
                    }

                }
                else {
                    var _selected = _tr.is(".selected");
                    if (_selected) {
                        jQuery("td", _tr).removeClass("selected");
                        _tr.removeClass("selected");
                        jQuery("input:checkbox", _tr).attr("checked", "");
                    }
                    else {
                        jQuery("td", _tr).addClass("selected");
                        _tr.addClass("selected");
                        jQuery("input:checkbox", _tr).attr("checked", "checked");
                    }
                }

            };

            //A: triggero click per colorare la riga
            jQuery("input:radio:checked", that).trigger("click");
            //B: triggero checked -> se usassi il click la checkbox si deselezionerebbe
            jQuery("input:checkbox:checked", that).trigger("checked");

        });
    }
	$.fn.comodoclick = ComodoClick;

	//AUTOLOAD
	$(document).ready(function(){
		$('table.comodoclick').comodoclick();
	});
})(jQuery);
</code></pre>
<img src="http://maxb.net/blog/?ak_action=api_record_view&id=376&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://maxb.net/blog/2009/05/12/comodoclick/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
