<?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>RedSend &#187; Appunti</title>
	<atom:link href="http://www.redsend.org/category/appunti/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.redsend.org</link>
	<description>Poche parole che descrivono questo blog.... (ci sto pensando)</description>
	<lastBuildDate>Sat, 13 Mar 2010 17:44:50 +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>Il processo creativo delle meraviglie apple</title>
		<link>http://www.redsend.org/2010/03/07/il-processo-creativo-delle-meraviglie-apple/</link>
		<comments>http://www.redsend.org/2010/03/07/il-processo-creativo-delle-meraviglie-apple/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 17:04:09 +0000</pubDate>
		<dc:creator>redsend</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Appunti]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=1105</guid>
		<description><![CDATA[Non so&#8217; se sarà un articolo vecchio e quindi già noto a tutti, ma proprio oggi mi è capitato di leggerlo e lo trovo molto interessante.
Perché i programmi Apple sono meglio disegnati della media e spesso offrono una soluzione originale ai problemi? Un esperto programmatore di Cupertino svela alcuni segreti su sviluppo e progettazione secondo [...]]]></description>
			<content:encoded><![CDATA[<p>Non so&#8217; se sarà un articolo vecchio e quindi già noto a tutti, ma proprio oggi mi è capitato di leggerlo e lo trovo molto interessante.</p>
<p>Perché i programmi Apple sono meglio disegnati della media e spesso offrono una soluzione originale ai problemi? Un esperto programmatore di Cupertino svela alcuni segreti su sviluppo e progettazione secondo Steve.</p>
<p style="text-align: center;"><a href="http://www.redsend.org/wp-content/uploads/2010/03/apple.jpg" rel="lightbox[1105]" rel="shadowbox[post-1105];player=img;"><img class="alignnone size-full wp-image-1106" title="apple" src="http://www.redsend.org/wp-content/uploads/2010/03/apple.jpg" alt="" width="264" height="264" /></a></p>
<p><span id="more-1105"></span></p>
<div id="_mcePaste">Michael Lopp, Senior Engineering Manager di Apple svela alcune procedure interne al team di sviluppo che gettano un po&#8217; di luce sui segreti di Cupertino. Le interessanti dichiarazioni di Lopp sono state raccolte da Business Week durante la conferenza SXSW dove partecipanti e relatori discutono di sviluppo software senza formalità e in tono amichevole Il primo dettaglio curioso che emerge è la spiegazione tecnica dell&#8217;effetto Apple che si genera ogni qual volta un cliente ha per le mani un nuovo prodotto di Cupertino.</div>
<div id="_mcePaste">Inizialmente Lopp descrive la procedura come una sequenza di regali o sorprese offerte al consumatore finale, dopo di che il manager di Apple spiega il procedimento come: &#8220;Ottime idee impacchettate all&#8217;interno di altre ottime idee&#8221; che tradotto in termini pratici significa grandi programmi che funzionano in un hardware favoloso consegnato in una confezione bellissima. Questa spiegazione illustra in termini via a via più precisi l&#8217;effetto dell&#8217;unboxing che ormai è diventato una consuetudine tra gli utenti Apple che per primi riescono a mattere le mani sui nuovi prodotti.</div>
<div id="_mcePaste">Il rito dello spacchettamento, dell&#8217;apertura della confezione e del centellinare uno a uno tutto il contenuto della scatola. Non è finita. Michael Lopp è un esperto di sviluppo software e durante il suo intervento alla conferenza si è concentrato sulle procedure e i metodi di lavoro seguiti da Apple. Prima 10, poi 3 e alla fine una sola valida Il primo aspetto che emerge è la creazione di mockup perfetti in ogni minimo dettaglio: si tratta di modellini che rappresentano l&#8217;aspetto dell&#8217;interfaccia e le sue meccaniche di funzionamento.</div>
<div>A differenza della maggior parte delle altre aziende in cui vengono creati numerosi modellini diversi ma tutti elementari, Apple ne crea soltanto 10 ma perfetti in ogni loro parte. Lopp afferma che si tratta di una procedura che inizialmente richiede una quantità enorme di tempo ma in grado di eliminare qualsiasi ambiguità successivamente. Nelle fasi seguenti infatti non occorre correggere errori.</div>
<div>I designer di Apple costruiscono così 10 soluzioni diverse in modelli perfetti e completi per ogni nuova caratteristica, diversamente dalle altre società in cui solitamente si parte da 7 mockup per selezionarne poi 3. A Cupertino si parte da 10 modelli senza nessun limite per lo sviluppo e la progettazione, dopo di che ne vengono selezionati 3 su cui vengono investiti altri mesi di sviluppo. Alla fine emerge una unica forte decisione Le riunioni agli antipodi Ogni settimana i gruppi di sviluppo fanno due riunioni diverse. Durante la prima tutti dimenticano i limiti delle tecnologie e progettazione, pensano in assoluta libertà ai progetti che potrebbero funzionare, non importa se all&#8217;inizio possano sembrare impratici o infattibili. Nella seconda riunione invece gli stessi gruppi di lavoro devono determinare come un progetto preciso possa essere trasformato in prodotto: a tutti è richiesto di concentrarsi sullo sviluppo concreto. Questa procedura di riunioni antitetiche continua attraverso tutte le fasi dello sviluppo per qualsiasi applicazione, anche se le parti &#8220;serie e pratiche&#8221; prendono il sopravvento man mano che il progetto avanza. Le pony-riunioni In questi altri incontri la dirigenza evidenzia i desideri e gli obiettivi per un determinato prodotto, non importa quanto siano realizzabili da parte degli sviluppatori. Lopp descrive con toni affabili la procedura: in queste riunioni i dirigenti sembrano richiedere l&#8217;impossibile agli sviluppatori così l&#8217;esperto programmatore di Apple ci scherza su: &#8220;Voglio WYSIWYG&#8230; voglio il supporto dei principali browser&#8230;. voglio che rifletta lo spirito della compagnia&#8230;o&#8230;io voglio un pony! Perché no? Un pony è bellissimo! &#8221; Si tratta dei responsabili che alla fine firmano gli assegni quindi, se non fosse per altre ragioni, Lopp ritiene che meritano di essere ascoltati o per lo meno non ignorati. Nonostante i toni scherzosi e informali di Lopp, la procedura e le pony riunioni sembrano avere un certa utilità. Durante gli incontri i responsabili di alto livello possono apprendere cosa è possibile realizzare in ogni fase dello sviluppo. In questo modo i dirigenti evitano qualsiasi disastro di lungo termine inoltre riescono a ottenere le funzioni o le caratteristiche che tanto desideravano, i pony appunto. Il concetto delle sorprese e dei regali confezionati uno dentro all&#8217;altro, la modalità di sviluppo dei modelli, infine le riunioni antitetiche e gli incontri pony. Questa procedura di lavoro sembra riuscire nell&#8217;intento di Apple: includere sempre il fattore fantasia, l&#8217;aspetto creativo da cui in molti casi nascono i prodotti innovativi di Cupertino.</div>
<div></div>
<div></div>
<div><strong>Fonte</strong>: <a href="http://www.macitynet.it/macity/aA31476/processo_creativo_delle_meraviglie_apple_come_lavora_cupertino.shtml" target="_blank">Macity</a></div>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2010/03/07/il-processo-creativo-delle-meraviglie-apple/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Come fare caching di immagini con jquery</title>
		<link>http://www.redsend.org/2010/01/13/come-fare-caching-di-immagini-con-jquery/</link>
		<comments>http://www.redsend.org/2010/01/13/come-fare-caching-di-immagini-con-jquery/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 08:49:38 +0000</pubDate>
		<dc:creator>raphe</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[immagini]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[load]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=1092</guid>
		<description><![CDATA[In giro per la rete è pieno di tutorial su come si possano cachare le immagini utilizzando javascript. Nessuno dei tutorial che ho letto in questi giorni però prende in considerazione il fatto che nel frattempo javascript e il web si siano evoluti e che quindi, con l&#8217;utilizzo di ajax, spesso si visualizzano porzioni di [...]]]></description>
			<content:encoded><![CDATA[<p>In giro per la rete è pieno di tutorial su come si possano cachare le immagini utilizzando javascript. Nessuno dei tutorial che ho letto in questi giorni però prende in considerazione il fatto che nel frattempo javascript e il web si siano evoluti e che quindi, con l&#8217;utilizzo di ajax, spesso si visualizzano porzioni di pagina, precedentemente visualizzate, senza effettuare il reload della pagina.</p>
<p>Perché questa introduzione? Perché proprio il caso sopra citato manda a farsi friggere tutti i metodi di caching classici.</p>
<p>Vediamo quindi come sfruttare jquery e il metodo load per generare un evento <strong>ogni</strong> volta che una immagine viene visualizzata.</p>
<p style="padding-left: 30px;">(function($) {<br />
var cache = [];<br />
$.preLoadImages = function() {<br />
var args_len = arguments.length;<br />
for (var i = args_len; i&#8211;;) {<br />
var cacheImage = document.createElement(&#8216;img&#8217;);<br />
cacheImage.src = arguments[i];<br />
cache.push(cacheImage);<br />
}<br />
}<br />
})(jQuery)</p>
<p>Con questa prima funzione iniziamo la procedura di cache delle immagini. E&#8217; importante notare che la variabile cache sia globale, questo permette che il garbage collection di alcuni browser non cancellino le variabili non utilizzate.</p>
<p style="padding-left: 30px;">$(&#8220;#loader&#8221;).fadeIn();</p>
<p style="padding-left: 30px;">var imgsNumber = 0;</p>
<p style="padding-left: 30px;">$(&#8220;#container img&#8221;).each(function(){<br />
jQuery.preLoadImages(this.src);<br />
var img = new Image();<br />
$(img).load(function(){<br />
imgsNumber++;<br />
if(imgsNumber == $(&#8220;#container img&#8221;).length){<br />
imgsNumber = 0;<br />
$(&#8220;#loader&#8221;).fadeOut(&#8220;slow&#8221;, function(){<br />
$(&#8220;#container&#8221;).css(&#8220;visibility&#8221;, &#8220;visible&#8221;).fadeIn();<br />
});<br />
}<br />
}).attr(&#8220;src&#8221;,this.src);<br />
});</p>
<p>Questa funzione è un po&#8217; più complessa e funziona in questo modo:</p>
<ul>
<li>mostra un loader (ovviamente il div #loader va sostituito con il vostro div);</li>
<li>imgsNumber conta il numero di immagini caricate (è essenziale per sapere quando sono tutte caricate);</li>
<li>il pezzo di codice successivo invece scorre tutte le immagini nel blocco #container e per ognuna di esse creiamo un oggeto img al quale assegniamo l&#8217;immagine. Questo è il <strong>passo essenziale</strong> per risolvere il problema di cui sopra visto che, in questo modo l&#8217;evento load verrà generato anche se l&#8217;immagine è già in cache. In questo modo si riesce a contare il numero di immagini caricate e mostrarle quando sono tutte pronte;</li>
<li>la parte finale (fadeOut e css) si occupano proprio di nascondere il loader e mostrare il div in questione;</li>
<li>la chiamata alla funzione attr si occupa infine di assegnare il path dell&#8217;immagine all&#8217;oggetto img temporaneamente creato.</li>
</ul>
<p>Questo è quanto. Se avete dubbi chiedete nei commenti.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2010/01/13/come-fare-caching-di-immagini-con-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unire file video su linux</title>
		<link>http://www.redsend.org/2009/12/14/unire-file-video-su-linux/</link>
		<comments>http://www.redsend.org/2009/12/14/unire-file-video-su-linux/#comments</comments>
		<pubDate>Mon, 14 Dec 2009 12:20:38 +0000</pubDate>
		<dc:creator>raphe</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[avi]]></category>
		<category><![CDATA[cat]]></category>
		<category><![CDATA[concatenare]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[tips]]></category>
		<category><![CDATA[unire]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=1077</guid>
		<description><![CDATA[Se vi è capitato di ritrovarvi con il classico video lungo spezzettato in più file del tipo NOMEFILE.avi.001, NOMEFILE.avi.002 e così via, allora questo piccolo trucchetto potrà risultarvi utile.
Per concatenare i file video non necessitiamo di utilizzare software di elaborazione video ma basta la vecchia, cara e potente shell. Il seguente comando è quello che [...]]]></description>
			<content:encoded><![CDATA[<p>Se vi è capitato di ritrovarvi con il classico video lungo spezzettato in più file del tipo NOMEFILE.avi.001, NOMEFILE.avi.002 e così via, allora questo piccolo trucchetto potrà risultarvi utile.</p>
<p>Per concatenare i file video non necessitiamo di utilizzare software di elaborazione video ma basta la vecchia, cara e potente shell. Il seguente comando è quello che fa per voi:</p>
<blockquote><p>cat NOMEFILE.avi* &gt; FILEUNICO.avi</p></blockquote>
<p>Il potente comando cat non farà altro che leggere a basso livello i diversi file e redirigere l&#8217;output in un altro file da noi scelto. Ovviamente al posto di NOMEFILE.avi dovrete mettere l&#8217;inizio del nome dei vostri file. Alcune cose da ricordarvi:</p>
<ul>
<li>i file dovranno avere un prefisso in comune (per poter utilizzare &#8216;*&#8217; correttamente) e poi un numero incrementale che li ordini;</li>
<li>i file devono appartenere allo stesso file originale ed avere, ovviamente, stesso framerate, risoluzione, codec, ecc.</li>
</ul>
<p>In generale, ricordatevi, che potete unire file di ogni tipo con cat in questo modo:</p>
<blockquote><p>cat NOMEFILE_1, NOMEFILE_2, NOMEFILE_N &gt; FILEUNICO</p></blockquote>
<p>Il risultato dipende da quello che state cercando di unire <img src='http://www.redsend.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/12/14/unire-file-video-su-linux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creare una pendrive avviabile con sistema DOS</title>
		<link>http://www.redsend.org/2009/12/09/creare-una-pendrive-con-sistema-dos/</link>
		<comments>http://www.redsend.org/2009/12/09/creare-una-pendrive-con-sistema-dos/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 15:30:33 +0000</pubDate>
		<dc:creator>redsend</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[Programmi]]></category>
		<category><![CDATA[boot]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[usb]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=1069</guid>
		<description><![CDATA[A cosa potrebbe servirvi creare una pendrive avviabile con un sistema DOS all&#8217;interno? Per intenderci come i floppy che servivano per avviare l&#8217;installazione di Windows 95.
Un utilizzo potrebbe essere quello di eseguire l&#8217;aggiornamento del bios, come nel mio caso. Molti produttori forniscono tool di aggiornamento che devono essere eseguiti in ambienti &#8220;puliti&#8221;, con un semplice [...]]]></description>
			<content:encoded><![CDATA[<p>A cosa potrebbe servirvi creare una pendrive avviabile con un sistema DOS all&#8217;interno? Per intenderci come i floppy che servivano per avviare l&#8217;installazione di Windows 95.</p>
<p>Un utilizzo potrebbe essere quello di eseguire l&#8217;aggiornamento del bios, come nel mio caso. Molti produttori forniscono tool di aggiornamento che devono essere eseguiti in ambienti &#8220;puliti&#8221;, con un semplice prompt dei comandi DOS (per intenderci direttamente da Windows XP non funziona).</p>
<p>Sul sito <a href="http://www.bootdisk.com/" target="_blank">bootdisk.com</a> trovate un sacco di tool e guide per tutti i tipi di dischi, in particolare a questa pagina trovate le <a href="http://www.bootdisk.com/pendrive.htm" target="_blank">guide per i dischi USB</a>, ma ne ho provati di diversi metodi e o erano troppo macchinosi che mi ci perdevo tra i tanti passaggi oppure non funzionavano, sicuramente sarà stata la mia inesperienza in questo genere di cose che non ha fatto funzionare i diversi metodi, ma alla fine sono risucito ad ottenere quello che volevo con un due semplici programmini e senza comandi strani, un paio di click ed è fatta&#8230;</p>
<p><span id="more-1069"></span></p>
<p>I pragrammi di cui avete bisogno sono due:</p>
<ul>
<li>HP USB Disk Storage Format Tool 2.x</li>
<li>Windows Enabler (<a href="http://www.angelfire.com/falcon/speedload/Enabler.htm">Homepage</a>)</li>
</ul>
<p>Il primo lo potete recuperare facilmente usando google e il secondo lo scaricate dalla homepage.</p>
<p>Ecco cosa dobbiamo fare per ottenere la nostra pendrive avviabile e con DOS all&#8217;interno.</p>
<p>Aprimo Windows Enabler, clickiamo sull&#8217;inconcina nella tray icon e dovrà comparire una cosa del genere&#8230;</p>
<p style="text-align: center;"><a href="http://www.redsend.org/wp-content/uploads/2009/12/Schermata-2009-12-09-a-16.15.32.png" rel="lightbox[1069]" rel="shadowbox[post-1069];player=img;"><img class="alignnone size-full wp-image-1071" title="Windows Enabler" src="http://www.redsend.org/wp-content/uploads/2009/12/Schermata-2009-12-09-a-16.15.32.png" alt="Windows Enabler" width="371" height="142" /></a></p>
<p style="text-align: left;">Inseriamo la pendrive e avviamo il programma &#8220;HP USB Disk Storage Format Tool&#8221;</p>
<p style="text-align: center;"><a href="http://www.redsend.org/wp-content/uploads/2009/12/Schermata-2009-12-09-a-16.19.56.png" rel="lightbox[1069]" rel="shadowbox[post-1069];player=img;"><img class="alignnone size-full wp-image-1072" title="Schermata 2009-12-09 a 16.19.56" src="http://www.redsend.org/wp-content/uploads/2009/12/Schermata-2009-12-09-a-16.19.56.png" alt="Schermata 2009-12-09 a 16.19.56" width="394" height="488" /></a></p>
<p style="text-align: left;">selezioniamo il dispositivo USB che vogliamo utilizzare, scegliamo FAT come filesystem e selezioniamo &#8220;Create a DOS startup disk&#8221;, anche se è non selezionabile (ora ci viene in aiuto Windows Enabler), selezioniamo la voce &#8220;using internal MS-DOS system files&#8221;&#8230;</p>
<p style="text-align: center;"><a href="http://www.redsend.org/wp-content/uploads/2009/12/Schermata-2009-12-09-a-16.24.22.png" rel="lightbox[1069]" rel="shadowbox[post-1069];player=img;"><img class="alignnone size-full wp-image-1073" title="Schermata 2009-12-09 a 16.24.22" src="http://www.redsend.org/wp-content/uploads/2009/12/Schermata-2009-12-09-a-16.24.22.png" alt="Schermata 2009-12-09 a 16.24.22" width="385" height="487" /></a></p>
<p style="text-align: left;">Premiamo START e il gioco è fatto. Ora possiamo copiarci all&#8217;interno qualsiasi programma avviabile con DOS e di qualsiasi dimensione. Ho specificato di qualsiasi dimensione perché c&#8217;è un altro metodo in cui utilizziamo Windows Enabler e il programma di formattazione di windows (quello con tasto destro sul dispositivo, formatta) ma in questo caso viene creata una partizione grande quanto un floppy e quindi ci potete metter ben poco all&#8217;interno&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/12/09/creare-una-pendrive-con-sistema-dos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Safari: aprire automaticamente file non sicuri</title>
		<link>http://www.redsend.org/2009/11/22/safari-aprire-automaticamente-file-non-sicuri/</link>
		<comments>http://www.redsend.org/2009/11/22/safari-aprire-automaticamente-file-non-sicuri/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 11:19:44 +0000</pubDate>
		<dc:creator>redsend</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Appunti]]></category>
		<category><![CDATA[macOS]]></category>
		<category><![CDATA[safari]]></category>
		<category><![CDATA[torrent]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=1038</guid>
		<description><![CDATA[Un piccolo appunto per ricordarmi come fare per dire a Safari di aprire automaticamente alcuni tipi di file. Prima di tutto dobbiamo ricordarci di spuntare l&#8217;opzione &#8220;Apri doc. sicuri dopo il download&#8221;.

in questo modo safari aprirà automaticamente i file che lui considera sicuri, a questo punto dobbiamo vedere come dire a safari di considerare sicuri [...]]]></description>
			<content:encoded><![CDATA[<p>Un piccolo appunto per ricordarmi come fare per dire a <strong>Safari</strong> di aprire automaticamente alcuni tipi di file. Prima di tutto dobbiamo ricordarci di spuntare l&#8217;opzione <strong>&#8220;Apri doc. sicuri dopo il download&#8221;</strong>.</p>
<p style="text-align: center;"><a href="http://www.redsend.org/wp-content/uploads/2009/11/preferenze-safari.png" rel="lightbox[1038]" rel="shadowbox[post-1038];player=img;"><img class="size-thumbnail wp-image-1039 aligncenter" title="preferenze safari" src="http://www.redsend.org/wp-content/uploads/2009/11/preferenze-safari-300x287.png" alt="preferenze safari" width="300" height="287" /></a></p>
<p>in questo modo safari aprirà automaticamente i file che lui considera sicuri, a questo punto dobbiamo vedere come dire a safari di considerare sicuri anche altri tipi di file, oltre a quelli preimpostati come pdf, doc, zip, etc&#8230;</p>
<p>Ad esempio vogliamo aprire automaticamente <strong>file .torrent</strong></p>
<p>Apriamo l&#8217;editor delle prefereze di mac <strong>&#8220;Property List Editor&#8221;</strong> e creiamo un nuovo file come in figura</p>
<p><a href="http://www.redsend.org/wp-content/uploads/2009/11/Property-List-Editor.png" rel="lightbox[1038]" rel="shadowbox[post-1038];player=img;"><img class="aligncenter size-medium wp-image-1045" title="Property List Editor" src="http://www.redsend.org/wp-content/uploads/2009/11/Property-List-Editor-580x339.png" alt="Property List Editor" width="580" height="339" /></a></p>
<p style="text-align: center;">
<p>Ora salviamolo con il nome <strong>&#8220;com.apple.DownloadAssessment&#8221;</strong> e copiamolo in <strong>~/Libreria/Preferences/com.apple.DownloadAssessment.plist</strong></p>
<p>Riavviamo Safari e il gioco è fatto&#8230;</p>
<p>Un ringraziamento a  <a href="http://www.manuelstuder.ch/2008/03/14/how-to-automatically-open-torrent-and-other-files-in-safari/" target="_blank">Manuel Struder</a> per l&#8217;articolo sul suo blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/11/22/safari-aprire-automaticamente-file-non-sicuri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Caratteri speciali &amp; codifiche su php, mysql e javascript: la soluzione definitiva</title>
		<link>http://www.redsend.org/2009/10/29/caratteri-speciali-codifiche-su-php-mysql-e-javascript-la-soluzione-definitiva/</link>
		<comments>http://www.redsend.org/2009/10/29/caratteri-speciali-codifiche-su-php-mysql-e-javascript-la-soluzione-definitiva/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 13:45:15 +0000</pubDate>
		<dc:creator>raphe</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[caratteri speciali]]></category>
		<category><![CDATA[codifica]]></category>
		<category><![CDATA[entità]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[utf-8]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=1006</guid>
		<description><![CDATA[Il titolo del post è un po&#8217; caotico  ma non avevo idea di come scrivere qualcosa di più esplicativo.
Come per i post relativi alle sessioni, anche questo post ha l&#8217;obiettivo di essere un appunto per me per il futuro e un riepilogo di cose conoscenze acquisite nel tempo.
Dimentichiamoci delle funzioni htmlspecialchars, htmlentities, html_entity_decode, addslashes, [...]]]></description>
			<content:encoded><![CDATA[<p>Il titolo del post è un po&#8217; caotico  ma non avevo idea di come scrivere qualcosa di più esplicativo.<br />
Come per i post relativi alle <a href="http://www.redsend.org/2009/10/15/gestione-sessioni-in-php/" target="_blank">sessioni</a>, anche questo post ha l&#8217;obiettivo di essere un appunto per me per il futuro e un riepilogo di cose conoscenze acquisite nel tempo.</p>
<p>Dimentichiamoci delle funzioni htmlspecialchars, htmlentities, html_entity_decode, addslashes, escape, encodeURI, ecc&#8230;con una buona configurazione dei vari componenti potremo lavorare in modo trasparente!</p>
<p><strong>Un po&#8217; di teoria</strong></p>
<p>La questione &#8220;caratteri speciali&#8221; è ben nota a chi si trova a sviluppare per il web, in giro per la rete ci sono centinaia di blog, forum e siti che suggeriscono modi per mostrare al meglio i caratteri accentati e ogni tipo di entità html. La difficoltà sta quasi sempre nell&#8217;uso di diverse codifiche nei vari componenti coinvolti (linguaggi di programmazione, database, browser, ecc.). Come prima cosa è bene, quindi, decidere all&#8217;inizio quale codifica utilizzare e portare avanti questa scelta in tutti i settaggi che verranno fatti in futuro.</p>
<p>UTF-8 è la codifica che andremo ad utilizzare (dato l&#8217;elevato numero di caratteri rappresentabili) ma il discorso vale per qualsiasi codifica vogliate usare.</p>
<p>Innanzitutto è bene sapere che anche i linguaggi di programmazione hanno diversi modi di rappresentare e gestire i caratteri speciali. Ne consegue che ad ogni passaggio da db a linguaggio e da linguaggio a browser si debbano fare delle conversioni. A questo proposito esistono numerose funzione di encoding e decoding in php, js, ecc.</p>
<p>Questa operazione è macchinosa e non scalabile (ci si deve ricordare ogni volta di convertire tutti i dati in transito). L&#8217;approccio che presenterò in questo post è diverso: utilizziamo i caratteri speciali per come sono senza convertirli in nessun modo utilizzando solo qualche settaggio e molta attenzione.</p>
<p><strong>Passiamo alla pratica</strong></p>
<p>Innanzitutto è bene iniziare con il <strong>database</strong>. Nel nostro caso stiamo lavorando su mysql quindi ricordiamoci di creare il database sul quale lavoreremo con collation <em>utf8_general_ci</em> (o altri tipi di utf8), di settare lo stesso valore anche per:</p>
<ul>
<li>connessione mysql;</li>
<li>ogni tabella creata;</li>
<li>ogni campo testuale di ogni tabella.</li>
</ul>
<p>Dopo questo passo sappiamo per certo che il database è pronto a gestire dati UTF-8.</p>
<p>Ovviamente dovremo ora <strong>comunicare con il database</strong>. Per questo esempio utilizzerò la libreria <a href="http://pear.php.net/package/MDB2/" target="_blank">PEAR::MDB2</a> (consiglio a tutti di lavorare con qualche libreria e non a mano, per avere alcuni automatismi e funzionalità aggiuntive). Nel caso di MDB2 dovremo solo ricordarci di settare il charset sulla connessione al db al primo utilizzo, con il seguente metodo:</p>
<p style="padding-left: 30px;"><em>$mdb2-&gt;setCharset(&#8216;utf8&#8242;);</em></p>
<p>Ora sappiamo che ogni comunicazione (lettura e scrittura) con il database avverrà utilizzando utf8.</p>
<p>Fase seguente è <strong>l&#8217;inserimento dei dati</strong> da parte dell&#8217;utente. Ovviamente, come detto sopra, se codifichiamo i dati che l&#8217;utente inserisce dovremo poi decodificarli ad ogni utilizzo. Noi non lo faremo. Lasciamo inserire all&#8217;utente ogni tipo di carattere (àé!&#8217;^$%&#8230;) e mettiamolo in database &#8220;senza toccarlo&#8221;, possiamo farlo perché le tabelle e la connessione in utf-8 ce lo permettono.</p>
<p>Fatto questo nel database avremo i caratteri veri e propri e sarà più facile gestire la fase di visualizzazione. Proprio quest&#8217;ultima di solito crea problemi di conversione, soprattutto quando si lavora con javascript che codifica i caratteri speciali in modo diverso dalle entità html.</p>
<p>In fase di <strong>visualizzazione </strong>dovremo assicurarci che le pagine html generate abbiano anche esse la codifica settata ad utf-8 con l&#8217;utilizzo del tag <em>meta</em>, in questo modo:</p>
<p style="padding-left: 30px;"><em>&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text/html; charset=UTF-8&#8243; /&gt;</em></p>
<p>Il testo estratto dal database sarà quindi mostrato direttamente nella pagina che, usando charset utf-8, mostrerà i caratteri speciali senza problemi.</p>
<p>Lo stesso vale se questi dati vengono passati a funzioni javascript per elaborarli o mostrarli: non sarà necessario nessuna chiamata a funzioni di decodifica perché javascript è in grado di visualizzare i caratteri speciali se passati esplicitamente.</p>
<p>Prima di concludere è  importante dire qualcosa relativa al fatto di lasciare inserire all&#8217;utente tutti i caratteri che vuole. Questo potrebbe essere un baco di <strong>sicurezza</strong> per la possibilità di inserire codice malevolo o tentare <strong>sql injection</strong>. Dal punto di vista delle injection saremo protetti dalla libreria in uso (perciò dovreste usarne una) che si occuperà di gestire le query in ingresso al meglio con opportuni escape &#8211; quando necessari &#8211; e uso di altre protezioni. Ciò significa che non dovremo fare l&#8217;escape di caratteri potenzialmente pericolosi come apice singolo (&#8216;) o doppio apice (&#8220;), né lasciarlo fare ad apache. Un escape di questo tipo richiederebbe, infatti,  l&#8217;unescape al momento della lettura di tutti dati e non avremmo risolto niente.</p>
<p>Per evitare che <strong>apache</strong> faccia l&#8217;escape automatico settiamo nel file <strong>php.ini</strong> tutte le direttive relative a magic_quotes a Off. In particolare:</p>
<p style="padding-left: 30px;"><em>magic_quotes_gpc = Off</em></p>
<p>A questo punto l&#8217;ultima cosa che ci resta da fare è evitare che l&#8217;utente inserisca <strong>codice malevolo</strong> nel database. Questo possiamo realizzarlo tranquillamente con l&#8217;utilizzo della funzione <a href="http://www.php.net/manual/en/function.strip-tags.php" target="_blank"><em>strip_tags</em></a> di php. Ad ogni query di inserimento chiamiamo questa funzione che pulirà il testo dai tag inseriti. In visualizzazione non dovremo fare nulla&#8230;che era proprio il nostro obiettivo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/10/29/caratteri-speciali-codifiche-su-php-mysql-e-javascript-la-soluzione-definitiva/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Per ricordarmi di &#8220;lui&#8221;</title>
		<link>http://www.redsend.org/2009/10/17/per-ricordarmi-di-lui/</link>
		<comments>http://www.redsend.org/2009/10/17/per-ricordarmi-di-lui/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 23:05:14 +0000</pubDate>
		<dc:creator>redsend</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[compleanno]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[macOS]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=977</guid>
		<description><![CDATA[E&#8217; stato molto emozionante, come la prima volta che mi comprai il portatile. Ora le idee sono un po&#8217; cambiate, non so&#8217; se in bene o in male, ma sono cambiate, non è come l&#8217;altra volta, ma l&#8217;emozione è la stessa&#8230; che bello&#8230; poche parole, vuole essere solo un &#8220;appunto&#8221; per la prima volta che&#8230;

]]></description>
			<content:encoded><![CDATA[<p>E&#8217; stato molto emozionante, come la prima volta che mi comprai il portatile. Ora le idee sono un po&#8217; cambiate, non so&#8217; se in bene o in male, ma sono cambiate, non è come l&#8217;altra volta, ma l&#8217;emozione è la stessa&#8230; che bello&#8230; poche parole, vuole essere solo un &#8220;appunto&#8221; per la prima volta che&#8230;</p>
<p style="text-align: center;"><img class="size-medium wp-image-978  aligncenter" title="Schermata 2009-10-17 a 01.01.43" src="http://www.redsend.org/wp-content/uploads/2009/10/Schermata-2009-10-17-a-01.01.43-580x362.png" alt="Schermata 2009-10-17 a 01.01.43" width="580" height="362" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/10/17/per-ricordarmi-di-lui/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Distruggere sessioni in php</title>
		<link>http://www.redsend.org/2009/10/16/distruggere-sessioni-in-php/</link>
		<comments>http://www.redsend.org/2009/10/16/distruggere-sessioni-in-php/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 12:42:50 +0000</pubDate>
		<dc:creator>raphe</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[Programmi]]></category>
		<category><![CDATA[logout]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[sessioni]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=974</guid>
		<description><![CDATA[Come promesso ecco la seconda parte del mio articolo/appunto riguardante le sessioni in php.
Dopo aver inizializzato una sessione e averla usato durante la visita di un utente nel sito è importante permettere il classico logout.
Il metodo che uso di solito è realizzare un file logout.php dove inserisco una serie di istruzioni riguardanti la sessione poi [...]]]></description>
			<content:encoded><![CDATA[<p>Come promesso ecco la seconda parte del mio articolo/appunto riguardante <a href="http://www.redsend.org/2009/10/15/gestione-sessioni-in-php/" target="_blank">le sessioni in php</a>.</p>
<p>Dopo aver inizializzato una sessione e averla usato durante la visita di un utente nel sito è importante permettere il classico logout.</p>
<p>Il metodo che uso di solito è realizzare un file logout.php dove inserisco una serie di istruzioni riguardanti la sessione poi alla fine un redirect alla index del sito.</p>
<p>Ecco un esempio di file logout.php:</p>
<p style="padding-left: 30px;">require(&#8220;session.php&#8221;);<br />
session_destroy();<br />
session_unset();<br />
unset($_SESSION);<br />
$_SESSION = null;<br />
header(&#8220;Location: index.php&#8221;);</p>
<p>Nella prima riga importo il file costruito nel <a href="http://www.redsend.org/2009/10/15/gestione-sessioni-in-php/" target="_blank">precedente articolo</a>, se non l&#8217;avete fatto e state usando le sessioni in modo classico basta sostituire quella riga con un classico <em>session_start()</em>.</p>
<p>Dopodiché la chiamata a <em>session_destroy()</em> permette di cancellare i dati associati alla sessione. Però è importante ricordare che questa funzione non cancella le variabili e i cookie! Ecco perché non basta usarla da sola.</p>
<p>Le successive chiamate di <em>session_unset</em> e <em>unset($_SESSION)</em> permettono appunto di cancellare le variabili di sessione. In realtà non è necessario effettuare entrambe (perché fanno la stessa cosa) ma io sono paranoico e mi piace così, anche il <em>$_SESSION=null</em> serve, ancora una volta a ribadire che la sessione deve essere svuotata.</p>
<p>Come abbiamo detto, oltre a cancellare le variabili si dovrebbero cancellare anche i cookie manualmente. Se è stato utilizzato il procedimento descritto nel precedente articolo nella creazione della sessione, la chiamata a <em>session_regenerate_id(true)</em> si occuperà appunto di cancellare anche il cookie (grazie al parametro true), altrimenti basta aggiungere in questo file una chiamata a <em>set_cookie(&#8216;nome_cookie&#8217;)</em> senza altri parametri e il cookie verrà cancellato!</p>
<p>Alla fine facciamo un redirect alla pagina iniziale del sito o a qualsiasi altra pagina si voglia far visualizzare dopo il logout.</p>
<p>N.B.: è importante ricordarsi di non utilizzare <em>session_register</em> e <em>session_unregister</em> per settare le variabili in sessioni. Queste due funzioni sono deprecate e funzionano solo se <em>register_globals</em> è attivo (grave falla di sicurezza). Verranno addirittura eliminate in php 6.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/10/16/distruggere-sessioni-in-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gestione sessioni in php</title>
		<link>http://www.redsend.org/2009/10/15/gestione-sessioni-in-php/</link>
		<comments>http://www.redsend.org/2009/10/15/gestione-sessioni-in-php/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 22:55:27 +0000</pubDate>
		<dc:creator>raphe</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sessioni]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=970</guid>
		<description><![CDATA[Ci sono decine e decine di articoli in giro per il web che parlano di sessioni in php ma ho deciso di scriverne uno per appuntare un po&#8217; di informazioni raccolte negli anni e riassumere i passaggi che ormai, bene o male, effettuo quando programmo in php.
Innanzitutto è impensabile di chiamare a mano in ogni [...]]]></description>
			<content:encoded><![CDATA[<p>Ci sono decine e decine di articoli in giro per il web che parlano di sessioni in php ma ho deciso di scriverne uno per appuntare un po&#8217; di informazioni raccolte negli anni e riassumere i passaggi che ormai, bene o male, effettuo quando programmo in php.</p>
<p>Innanzitutto è impensabile di chiamare a mano in ogni pagina<em> session_start()</em> quindi innanzitutto è utile realizzare un file php dedicato dove raggrupperemo varie impostazioni relative alla sessione.</p>
<p>Ecco un esempio del file:</p>
<p style="padding-left: 30px;">//durata della sessione<br />
$minuti=30;<br />
//cambio la directory di default del salvataggio sessioni<br />
ini_set(&#8220;session.save_path&#8221;,dirname($_SERVER['SCRIPT_FILENAME']).&#8221;/CARTELLA PERSONALIZZATA&#8221;);<br />
//setto la durata lato server<br />
ini_set(&#8220;session.gc_maxlifetime&#8221;,60*$minuti);<br />
//setto la durata lato client<br />
<span style="text-decoration: line-through;">ini_set(&#8220;session.cookie_lifetime&#8221;,60*$minuti);</span><br />
ini_set(&#8220;session.cookie_lifetime&#8221;,0);<br />
// Inizializza la sessione se non e&#8217; stata gia&#8217; avviata<br />
if(session_id() == &#8220;&#8221;)<br />
session_start();<br />
//Rigenero l&#8217;id di sessione ad ogni nuovo accesso<br />
if(!isset($_SESSION['is_valid'])){<br />
session_regenerate_id(true);<br />
$_SESSION['is_valid'] = true;<br />
}</p>
<p>Descriviamo dall&#8217;inizio le varie funzioni utilizzate.<br />
Per prima cosa settando un path personalizzato per la sessione evitiamo che vengano memorizzate in /tmp e inoltre possiamo personalizzare la durata bypassando le impostazioni di default del garbage collector di php.<br />
La chiamata a <em>dirname($_SERVER['SCRIPT_FILENAME'])</em> serve ad avere il path assoluto della cartella delle sessioni, visto che save_path vuole un path di questo tipo.</p>
<p>Le due impostazioni <em>gc_maxlifetime</em> e <em>cookie_lifetime</em> settano rispettivamente il numero di secondi dopo il quale verranno cancellati i dati dal server e il numero di secondi dopo il quale scadrà il cookie. <span style="text-decoration: line-through;">I due numeri devono corrispondere.</span> Ho fatto una piccola modifica al codice dell&#8217;esempio: al posto di settare la durata del cookie a 60*minuti lo setto a 0. Questo cosa significa? Che il cookie non verrà mai cancellato dal browser e la durata della sessione sarà determinata dal valore di session.gc_maxlifetime.<br />
Questo approccio è utile quando si vuole che la sessione si rinnovi ad ogni pagina visitata dall&#8217;utente. Ciò è coerente con il concetto che l&#8217;utente sta comunque utilizzando il sistema e non è corretto che venga conteggiata la durata della sessione dal suo primo login.</p>
<p>Poi c&#8217;è la chiamata a <em>session_start</em> che effettivamente avvia la sessione ma solo nel caso in cui non ne sia già avviata una. Questo controllo è molto utile nel caso in cui si includa il file più volte in diversi punti del sito, evitando chiamate inutili a <em>session_start</em>.</p>
<p>L&#8217;ultima parte, molto utile per la sicurezza, serve per rigenerare l&#8217;id di sessione ad ogni nuova inizializzazione. Questo fa si che se c&#8217;è un vecchio identificativo non verrà riutilizzato per un eventuale nuovo utente. Il parametro <em>true</em> della funzione <em>session_regenerate_id</em> serve per cancellare anche fisicamente il file dal disco. Utile per tenere sempre pulita la cartella delle sessioni.<br />
Il controllo sul parametro <em>is_valid</em> serve per non rigenerare l&#8217;id di sessione quando è stato già fatto. Questo permette di tenere lo stesso id per lo stesso utente finché non fa logout.</p>
<p>Oltre al lato php ci sono un paio di impostazioni da tenere in conto a livello web server. Infatti è importantissimo ai fini della sicurezza dare due impostazioni ad apache: non permettere l&#8217;accesso alla cartella delle sessioni, forzare ad usare i cookie per le sessioni. Queste impostazioni si possono settare nel file .htaccess o nel file di configurazione di apache/php.</p>
<p>Il primo  è necessario, altrimenti si possono leggere i file delle sessioni come semplici file di testo aprendoli nel browser. La direttiva apache da usare è la seguente:
</p>
<p style="padding-left: 30px;">order allow,deny<br />
deny from all</p>
<p>Il secondo invece è necessario per far si che php non propaghi l&#8217;id di sessione tramite parametro get che apre le porte a numerosi attacchi. Forzando l&#8217;uso dei cookie l&#8217;id di sessione sarà sempre memorizzato nel browser. L&#8217;impostazione da settare in php.ini è la seguente:
</p>
<p style="padding-left: 30px;">session.use_only_cookies = 1</p>
<p>Questo è quanto. Domani scriverò un appunto sul logout e come cancellare una sessione.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/10/15/gestione-sessioni-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Abilitare/disabiilitare &#8220;backspace action&#8221; in firefox</title>
		<link>http://www.redsend.org/2009/10/11/abilitaredisabiilitare-backspace-action-in-firefox/</link>
		<comments>http://www.redsend.org/2009/10/11/abilitaredisabiilitare-backspace-action-in-firefox/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 09:09:37 +0000</pubDate>
		<dc:creator>redsend</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[shortcut]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=968</guid>
		<description><![CDATA[Un piccolo appunto su come abilitare/disabilitare l&#8217;utilizzo del tasto backspace in firefox perché su Ubuntu Netbook remix e Shiretoco (aka Firefox) è disabilitato.
Per modificare l&#8217;azione del tasto backspace bisogna aprire il config con about:config, cercare l&#8217;opzione browser.backspace_action e impostarla a seconda delle preferenze:

0 : in questo modo premendo backspace il browser tornerà indietro di una [...]]]></description>
			<content:encoded><![CDATA[<p>Un piccolo appunto su come abilitare/disabilitare l&#8217;utilizzo del tasto backspace in firefox perché su Ubuntu Netbook remix e Shiretoco (aka Firefox) è disabilitato.</p>
<p>Per modificare l&#8217;azione del tasto backspace bisogna aprire il config con <strong>about:config</strong>, cercare l&#8217;opzione browser.backspace_action e impostarla a seconda delle preferenze:</p>
<ul>
<li>0 : in questo modo premendo backspace il browser tornerà indietro di una pagina e con shift+backspace andrà in avanti nell&#8217;history</li>
<li>1 : impostandolo su questo valore quando si preme backspace verrà scrollata la pagina corrente verso il basso e viceversa con shift+backspace</li>
<li>2 : impostandolo a due o qualsiasi altro valore diverso da 1 e 0 l&#8217;azione verrà disabilitata</li>
</ul>
<p>Un piccolo appunto, spero utili anche per gli altri&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/10/11/abilitaredisabiilitare-backspace-action-in-firefox/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aggiornamento di Xorg-server in gentoo</title>
		<link>http://www.redsend.org/2009/04/06/aggiornamento-di-xorg-server-in-gentoo/</link>
		<comments>http://www.redsend.org/2009/04/06/aggiornamento-di-xorg-server-in-gentoo/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 20:27:03 +0000</pubDate>
		<dc:creator>deepred</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[hal]]></category>
		<category><![CDATA[xorg]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=890</guid>
		<description><![CDATA[Scrivo questo post per gli amici gentooisti che si troveranno ad eseguire l&#8217;aggiornamento nei prossimi giorni: molto probabilmente vi verrà chiesto di aggiornare, come detto nel titolo, Xorg-server alla versione 1.5.3.
Si tratta di un aggiornamento importante, visto che porta con se una modifica importante nella gestione degli input device del vostro sistema: infatti la gestione [...]]]></description>
			<content:encoded><![CDATA[<p>Scrivo questo post per gli amici gentooisti che si troveranno ad eseguire l&#8217;aggiornamento nei prossimi giorni: molto probabilmente vi verrà chiesto di aggiornare, come detto nel titolo, Xorg-server alla versione 1.5.3.</p>
<p>Si tratta di un aggiornamento importante, visto che porta con se una modifica importante nella gestione degli input device del vostro sistema: infatti la gestione di quest&#8217;ultimi è stata trasferita da Xorg ad HAL.</p>
<p>L&#8217;aggiornamento richiede l&#8217;installazione di numerosi pacchetti (da la nuova struttura modulare del server Xorg) e una attenta configurazione post-installazione:<span id="more-890"></span> innanzitutto, non dimenticatevi di dare il comando</p>
<blockquote><p><code>qlist -I -C x11-drivers/</code></p></blockquote>
<p>e di reinstallare tutti i pacchetti indicati dal comando (anche se molti sono stati appena installati o quantomeno ricompilati). Dopodiché si può passare alla vera e propria configurazione. È consigliabile (anche se non necessario) commentare nel file <code>Xorg.conf</code> le informazioni relative agli input devices. Dopodiché potete creare un file in <span class="path" dir="ltr"><code>/etc/hal/fdi/policy</code> </span>per ciascun input devices presente nel vostro <code>Xorg.conf</code> in cui aggiungere tutte le opzioni che avevate precedentemente settato nel nel file di configurazione di Xorg. Di seguito mostro esempi relativi alla tastiera e al touchpad.</p>
<blockquote><p><code>&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
&lt;deviceinfo version="0.2"&gt;<br />
&lt;match key="info.capabilities" contains="input.keyboard"&gt;<br />
&lt;merge key="input.x11_options.XkbLayout" type="string"&gt;it&lt;/merge&gt;<br />
&lt;merge key="input.x11_options.XkbModel" type="string"&gt;pc105&lt;/merge&gt;<br />
&lt;merge key="input.x11_options.XkbRules" type="string"&gt;xorg&lt;/merge&gt;<br />
&lt;merge key="input.x11_options.XkbOptions" type="string"&gt;CoreKeyboard&lt;/merge&gt;<br />
&lt;/match&gt;<br />
&lt;/deviceinfo&gt;</code></p></blockquote>
<blockquote><p><code>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />
&lt;deviceinfo version="0.2"&gt;<br />
&lt;device&gt;<br />
&lt;match key="info.capabilities" contains="input.touchpad"&gt;<br />
&lt;merge key="input.x11_options.SHMConfig" type="string"&gt;true&lt;/merge&gt;<br />
&lt;merge key="input.x11_options.Protocol" type="string"&gt;auto-dev&lt;/merge&gt;<br />
&lt;merge key="input.x11_options.CorePointer" type="string"&gt;true&lt;/merge&gt;<br />
&lt;/match&gt;<br />
&lt;/device&gt;<br />
&lt;/deviceinfo&gt;</code></p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/04/06/aggiornamento-di-xorg-server-in-gentoo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Da flv a mp3 conservando il nome</title>
		<link>http://www.redsend.org/2009/04/03/da-flv-a-mp3-conservando-il-nome/</link>
		<comments>http://www.redsend.org/2009/04/03/da-flv-a-mp3-conservando-il-nome/#comments</comments>
		<pubDate>Fri, 03 Apr 2009 09:34:47 +0000</pubDate>
		<dc:creator>raphe</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[ffmpeg]]></category>
		<category><![CDATA[flv]]></category>
		<category><![CDATA[krename]]></category>
		<category><![CDATA[mp3]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=884</guid>
		<description><![CDATA[Mi sono trovato ad avere una serie di file .flv e a volerne estrarne l&#8217;audio per avere una raccolta di mp3.
Mi interessava anche però conservare il nome del file originale e non volevo farlo a mano ad uno ad uno per ogni file.
Bastano un paio di righe di script bash (usando ffmpeg) per ottenere il [...]]]></description>
			<content:encoded><![CDATA[<p>Mi sono trovato ad avere una serie di file .flv e a volerne estrarne l&#8217;audio per avere una raccolta di mp3.<br />
Mi interessava anche però conservare il nome del file originale e non volevo farlo a mano ad uno ad uno per ogni file.</p>
<p>Bastano un paio di righe di script bash (usando ffmpeg) per ottenere il risultato voluto.</p>
<p>Lo incollo qui che magari può essere d&#8217;aiuto a qualcuno:</p>
<blockquote><p>for i in *.flv; do ffmpeg -i &#8220;$i&#8221; -vn -ar 44100 -ac 2 -ab 192 -f mp3 &#8220;`basename &#8220;$i&#8221; .flv`.mp3&#8243;; done</p></blockquote>
<p>Attenzione agli apici che sono quelli &#8220;inclinati&#8221;.</p>
<p>Un minimo di spiegazione allo script ci vuole, così potete adattarlo a vostro piacimento:</p>
<ul>
<li><em>for i in *.flv </em>permette di scorrere i file flv della directory corrente e memorizzarne il nome nella variabile &#8220;i&#8221;;</li>
<li><em>do</em> esegue il comando successivo;</li>
<li><em>ffmpeg -i &#8220;$i&#8221; -vn -ar 44100 -ac 2 -ab 192 -f mp3</em> è la chiamata a ffmpeg con i parametri di frequenza (-ar), numero di canali (-ac), bitrate (-ab) e formato di output (-f). Notate il parametro -i seguito da $i che indica che il file di input (-i) è quello memorizzato nella variabile &#8220;i&#8221; (precedentemente settata nel for);</li>
<li><em>&#8220;`basename &#8220;$i&#8221; .flv`.mp3&#8243;</em> serve invece a dire il nome del file in output. Basename permette di avere la porzione del nome del file escluse le directory (es: <em>basename /home/pippo/nomefile</em> restituirà <em>nomefile</em>).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/04/03/da-flv-a-mp3-conservando-il-nome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wake on Wan e Router D-Link Part 2 overro hack per il tuo router</title>
		<link>http://www.redsend.org/2009/01/31/wake-on-wan-e-router-d-link-part-2-overro-hack-per-il-tuo-router/</link>
		<comments>http://www.redsend.org/2009/01/31/wake-on-wan-e-router-d-link-part-2-overro-hack-per-il-tuo-router/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 09:00:47 +0000</pubDate>
		<dc:creator>deepred</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[D-Link]]></category>
		<category><![CDATA[expect]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[router]]></category>
		<category><![CDATA[Wake On Wan]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=869</guid>
		<description><![CDATA[Come avevo promesso nell&#8217;articolo &#8220;Wake on Wan e Router D-Link&#8220;, vi spiego come è possibile che una macchina in una rete locale possa dare comandi al router con un intervento minimo dell&#8217;utente. E inoltre vi darò indicazioni sia che la vostra macchina in rete sia una macchina Linux, sia che essa sia una macchina Windows.
Ma [...]]]></description>
			<content:encoded><![CDATA[<p>Come avevo promesso nell&#8217;articolo &#8220;<a href="http://www.redsend.org/2009/01/15/wake-on-wan-e-router-d-link/">Wake on Wan e Router D-Link</a>&#8220;, vi spiego come è possibile che una macchina in una rete locale possa dare comandi al router con un intervento minimo dell&#8217;utente. E inoltre vi darò indicazioni sia che la vostra macchina in rete sia una macchina Linux, sia che essa sia una macchina Windows.</p>
<p>Ma cominciamo con linux&#8230;<span id="more-869"></span></p>
<p>Prima di tutto installare <code>expect</code>: è una semplice utility che permette di creare script interattivi, ossia capaci di rispondere ai prompt di altre applicazioni. A questo punto creiamo il seguente script che chiameremo <code>arp_hack.sh</code></p>
<blockquote><p><code>#!/usr/bin/expect</code></p>
<p><code>spawn telnet router_address<br />
expect login:<br />
send "username\r"<br />
expect Password:<br />
send "password\r"<br />
expect #<br />
send "command\r"<br />
expect #<br />
send "exit\r"<br />
interact</code></p></blockquote>
<p>dove <code>arp -s ip_address eth_address</code> è il comando necessario per il Wake On Wan su router D-Link.</p>
<p>Lanciando questo script otteniamo il risultato desiderato. Se vogliamo che tale operazione venga fatta all&#8217;avvio del sistema operativo, aggiungiamo la riga</p>
<blockquote><p><code>/path/to/arp_hack.sh &amp;&gt;/dev/null</code></p></blockquote>
<p>al file che gestisce le operazioni da eseguire all&#8217;avvio: in gentoo questo file è <code>/etc/conf.d/local.start</code>, in ubuntu &amp; C. si tratta invece del file <code>rc.local</code>.</p>
<p>E se fosse necessario riavviare il router perderei tutto di nuovo? Oppure dovrei ricordarmi di lanciare questo script ogni volta che riavvio il router? Per ovviare a questo problema avremo bisogno di altri 2 script: il primo (<code>router_reboot.sh</code>) gestisce il riavvio.</p>
<blockquote><p><code>#!/usr/bin/expect</code></p>
<p><code>spawn telnet router_address<br />
expect login:<br />
send "username\r"<br />
expect Password:<br />
send "password\r"<br />
expect #<br />
send "reboot\r"<br />
interact</code></p></blockquote>
<p>Il secondo invece gestisce il tutto, richiamando <code>router_reboot.sh</code> per riavviare il router e <code>arp_hack.sh</code> per lanciare il comando.</p>
<blockquote><p><code>#!/usr/bin/expect</code></p>
<p><code>spawn /path/to/router_reboot.sh<br />
sleep 30<br />
send "\r"<br />
sleep 5<br />
spawn path/to/arp_hack.sh<br />
interact</code></p></blockquote>
<p>Ora per riavviare il nostro router basterà semplicemente lanciare questo script e poi farà tutto da solo.</p>
<p>E per quanto riguarda Windows? (<strong>Attenzione</strong>: i seguenti passi sono stati testati solo su Windows XP Home Edition)<br />
Anche per Windows abbiamo bisogno di installare un programma: <code>Plink.exe</code> (scaricabile <a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/" target="_blank">qui</a>).</p>
<p>Per lanciare un comando sul router basterà creare il seguente file <code>arp_hack.cmd</code></p>
<blockquote><p><code>@set PATH=Path\to\plink.exe\;%PATH%<br />
@plink.exe router_address -l username -pw password -batch "command"</code></p></blockquote>
<p>eseguendo questo script nel prompt di Dos o attraverso il menu Start-&gt;Esegui otteniamo l&#8217;obiettivo desiderato. Per eseguirlo al riavvio sarà necessario aggiungere una voce al registro</p>
<blockquote><p><code>"HKEY_LOCAL_MACHINE/Software/Microsoft/Windows/Current Version/Run"</code></p></blockquote>
<p>che abbia come valore di tipo stringa il path allo script <code>arp_hack.cmd</code>. Questo tuttavia darà l&#8217;inconveniente che sarà mostrato il prompt di dos all&#8217;avvio di windows per qualche secondo (ma se si ci ostina ad usare windows qualcosa si deve pure dover pagare&#8230;).</p>
<p>Per ottenere l&#8217;utility di &#8220;reboot e comando&#8221; come in linux sarà necessario installare un&#8217;altro programma: <code>Tasklist</code> (che potete trovare <a href="http://www.computerhope.com/download/winxp/tasklist.exe" target="_blank">qui</a>). Come prima adoperamo 2 script, il primo dei quali (<code>router_reboot.cmd</code>) per riavviare il router:</p>
<blockquote><p><code>@set PATH=Path\to\plink.exe\;%PATH%<br />
@plink.exe router_address -l username -pw password -batch "reboot"</code></p></blockquote>
<p>Il secondo per gestire l&#8217;intera procedura:</p>
<blockquote><p><code>@set PATH=Path\to\tasklist.exe\;%PATH%<br />
@START /b \Path\to\router_reboot.cmd<br />
@ping 127.0.0.1 -n 2 -w 1000 &gt; nul<br />
@ping 127.0.0.1 -n 30 -w 1000&gt; nul<br />
@FOR /F "tokens=2" %%i in ('tasklist.exe /NH /FI "ImageName eq plink.exe"' ) DO SET PID=%%i<br />
@TSKILL %PID%<br />
@START /b \Path\to\arp_hack.cmd</code></p></blockquote>
<p>Tutto chiaro?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/01/31/wake-on-wan-e-router-d-link-part-2-overro-hack-per-il-tuo-router/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dividere un file di grandi dimensioni in più parti</title>
		<link>http://www.redsend.org/2009/01/20/dividere-un-file-di-grandi-dimensioni-in-piu-parti/</link>
		<comments>http://www.redsend.org/2009/01/20/dividere-un-file-di-grandi-dimensioni-in-piu-parti/#comments</comments>
		<pubDate>Tue, 20 Jan 2009 20:50:28 +0000</pubDate>
		<dc:creator>redsend</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[dividere]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[slplit]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=863</guid>
		<description><![CDATA[Che bello linux, c&#8217;è un comando per tutto&#8230;
Mi appunto questi due comandi che come si intuisce dal titolo servono per spezzare e ricomporre un file di grandi dimensioni.
# split -d &#8211;verbose &#8211;bytes=10m file_enorme.tar prefisso-file-piccolo-
Spieghiamo le opzioni

il comando &#8220;split&#8221; serve per dividere il file &#8220;file_enorme.tar&#8221; in tanti piccoli file che avranno come prefisso &#8220;prefisso-file-piccolo-&#8221; seguito da [...]]]></description>
			<content:encoded><![CDATA[<p>Che bello linux, c&#8217;è un comando per tutto&#8230;</p>
<p>Mi appunto questi due comandi che come si intuisce dal titolo servono per spezzare e ricomporre un file di grandi dimensioni.</p>
<p style="padding-left: 30px;"># split -d &#8211;verbose &#8211;bytes=10m file_enorme.tar prefisso-file-piccolo-</p>
<p>Spieghiamo le opzioni</p>
<ul>
<li>il comando &#8220;split&#8221; serve per dividere il file &#8220;file_enorme.tar&#8221; in tanti piccoli file che avranno come prefisso &#8220;prefisso-file-piccolo-&#8221; seguito da un numero/lettere</li>
<li>-d specifica che dopo il prefisso ci andranno dei numeri, se non si specifica quest&#8217;opzione ci saranno delle lettere</li>
<li>&#8211;verbose si capisce a cosa serve</li>
<li>&#8211;bytes=10m specifica la grandezza di ogni file (man split per dettagli)</li>
</ul>
<p>Una volta suddiviso il file ci serve sapere come ricomporlo e queì ci viene in soccorso il classico cat:</p>
<p style="padding-left: 30px;"># cat prefisso-file-piccolo-* &gt; file_enorme.tar</p>
<p>In questo caso non abbiamo opzioni ma una semplice ridirezione &#8220;&gt;&#8221; di tutti i file prefisso-file-piccolo-* nel grande file chiamato &#8220;file_enorme.tar&#8221;.</p>
<p>Ecco da dove ho scopiazzato i comandi <img src='http://www.redsend.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://natonelbronx.wordpress.com/2007/03/20/spezzare-un-grosso-file-in-piu-parti-e-ricomporlo-su-linux/" target="_blank">Spezzare un grosso file in più parti (e ricomporlo).. su Linux</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2009/01/20/dividere-un-file-di-grandi-dimensioni-in-piu-parti/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Creare un file .htaccess direttamente online</title>
		<link>http://www.redsend.org/2008/11/17/creare-un-file-htaccess-direttamente-online/</link>
		<comments>http://www.redsend.org/2008/11/17/creare-un-file-htaccess-direttamente-online/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 08:21:07 +0000</pubDate>
		<dc:creator>mikone</dc:creator>
				<category><![CDATA[Appunti]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[editor]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.redsend.org/?p=762</guid>
		<description><![CDATA[Quante volte abbiamo avuto bisogno di creare un file .htaccess ?
In realtà non so rispondere alla domanda, ma mi sono trovato a doverlo fare senza conoscere le direttive che accetta questo file. Guarda caso mi sono imbattuto in questo sito (www.htaccesseditor.com) che in pochi passi ti segue nella creazione di un file con semplici regole. [...]]]></description>
			<content:encoded><![CDATA[<p>Quante volte abbiamo avuto bisogno di creare un file .htaccess ?<br />
In realtà non so rispondere alla domanda, ma mi sono trovato a doverlo fare senza conoscere le direttive che accetta questo file. Guarda caso mi sono imbattuto in questo sito (<a href="http://www.htaccesseditor.com/it.shtml">www.htaccesseditor.com</a>) che in pochi passi ti segue nella creazione di un file con semplici regole. Non è la cosa definitiva, ma per chi è alle prime armi è un buon punto di inizio.</p>
<p style="text-align: center;"><a href="http://www.redsend.org/wp-content/uploads/2008/11/logo_it.gif" rel="lightbox[762]" rel="shadowbox[post-762];player=img;"><img class="size-medium wp-image-763 aligncenter" title="logo_it" src="http://www.redsend.org/wp-content/uploads/2008/11/logo_it.gif" alt="" width="300" height="60" /></a></p>
<p>La regola principale è sempre provare provare provare, prima o poi si impara.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.redsend.org/2008/11/17/creare-un-file-htaccess-direttamente-online/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
