<?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>Diego La Monica &#187; Knowledge Base</title>
	<atom:link href="http://diegolamonica.info/categoria/knowledge-base/feed/" rel="self" type="application/rss+xml" />
	<link>http://diegolamonica.info</link>
	<description>Software, standards, accessibilità, usabilità &#38; Web 2.0</description>
	<lastBuildDate>Wed, 28 Mar 2012 08:00:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Disattivare la verifica del certificato di sicurezza su WordPress</title>
		<link>http://diegolamonica.info/disattivare-la-verifica-del-certificato-di-sicurezza-su-wordpress/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=disattivare-la-verifica-del-certificato-di-sicurezza-su-wordpress</link>
		<comments>http://diegolamonica.info/disattivare-la-verifica-del-certificato-di-sicurezza-su-wordpress/#comments</comments>
		<pubDate>Wed, 15 Feb 2012 19:00:05 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[certificate verify failed]]></category>
		<category><![CDATA[Feed RSS]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[SSL certificate problem]]></category>
		<category><![CDATA[WP HTTP Error]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?p=445</guid>
		<description><![CDATA[In questi giorni mi è capitato di dovermi confrontare con la gestione dei feed RSS prodotti da GitHub che stranamente da WordPress non vengono letti correttamente. Interrogando qualsiasi altro feed da WordPress tutto funziona regolarmente ma considerando che GitHub fornisce i suoi feed RSS su protocollo sicuro http (HTTPS), ne ho dedotto che il problema [...]]]></description>
			<content:encoded><![CDATA[<p>In questi giorni mi è capitato di dovermi confrontare con la gestione dei feed RSS prodotti da GitHub che stranamente da WordPress non vengono letti correttamente.</p>
<p><span id="more-445"></span>Interrogando qualsiasi altro feed da WordPress tutto funziona regolarmente ma considerando che GitHub fornisce i suoi feed RSS su protocollo sicuro http (HTTPS), ne ho dedotto che il problema fosse proprio nel certificato.</p>
<p>Forse perchè l&#8217;authority per la certificazione non risulta tra quelle previste dal server su cui risiede WordPress, oppure perchè c&#8217;è una qualsiasi altra configurazione del server che non consente una validazione del Certificato di Sicurezza, il risultato è che non sarebbe possibile interrogare un feed RSS di GitHhub, ottenendo in compenso questo simpatico messaggio di errore:</p>
<pre><strong>RSS Error</strong>:
WP HTTP Error: SSL certificate problem, verify that the CA cert is OK.
Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed</pre>
<p>Ma come ben sapete &#8220;non è possibile&#8221; non fa parte del mio vocabolario, quindi mi sono spulciato il codice della classe Http di WordPress e facendo un po&#8217; di reverse engignering sono arrivato alla soluzione del problema.</p>
<p>Per evitare che WordPress faccia la verifica del certificato basta mettere nel file functions del proprio tema questa semplice riga di codice:</p>
<pre class="code php">add_filter('https_ssl_verify', '__return_false');</pre>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/disattivare-la-verifica-del-certificato-di-sicurezza-su-wordpress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Come aggiornare un repository Github attraverso il proxy</title>
		<link>http://diegolamonica.info/come-aggiornare-un-repository-github-attraverso-il-proxy/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=come-aggiornare-un-repository-github-attraverso-il-proxy</link>
		<comments>http://diegolamonica.info/come-aggiornare-un-repository-github-attraverso-il-proxy/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 09:58:01 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[configurazione]]></category>
		<category><![CDATA[Github]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[netcat]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?p=442</guid>
		<description><![CDATA[Non utilizzando sempre lo stesso computer e la stessa connessione ad internet, mi capita talvolta di dover effettuare gli aggiornamenti del repository di ALPHA attraverso un proxy aziendale. Per riuscire però ad effettuare i commit attraverso il Proxy che non consente l&#8217;acceso ssh al server github.com ho fatto diverse ricerche su internet, provando le più [...]]]></description>
			<content:encoded><![CDATA[<p>Non utilizzando sempre lo stesso computer e la stessa connessione ad internet, mi capita talvolta di dover effettuare gli aggiornamenti del <a href="https://github.com/diegolamonica/ALPHA/">repository di ALPHA</a> attraverso un proxy aziendale.</p>
<p>Per riuscire però ad effettuare i commit attraverso il Proxy che non consente l&#8217;acceso ssh al server github.com ho fatto diverse ricerche su internet, provando le più diverse strade.</p>
<p><span id="more-442"></span></p>
<p>C&#8217;era chi suggeriva di creare un file wrapper per il proxy seguendo un procedimento alquanto semplice:</p>
<ul>
<li>Installare netcat</li>
<li>creare uno script da shell collocandolo nella directory bin/ dell&#8217;utente che riportava in sintesi questo comando &#8220;<strong>nc -x${PROXY_IP}:${PROXY_PORT} -X5 $*</strong>&#8220;</li>
<li>configurare il parametro <strong>core.gitproxy</strong> indicando il nome del file precedentemenet creato.</li>
</ul>
<p>Per me non ha funzionato e comunque questa procedura a mio avviso poteva essere  semplificata ulteriormente utilizzando questi due semplici comandi eseguiti da shell.</p>
<pre class="code shell">EXPORT http_proxy=http://myproxy:8080
EXPORT https_proxy=http://myproxy:8080</pre>
<p>Non li metterei come valori persistenti perchè, usando il notebook su diverse reti rischierei di non raggiungere il proxy specificato con conseguenza dell&#8217;interruzione della navigazione.</p>
<p>Comunque non ha funzionato. Quindi ho cercato una nuova soluzione al problema.</p>
<p>Un altro sito suggeriva di usare l&#8217;url proposto da github nella versione <strong>https</strong> al posto di quello <strong>ssh</strong>.</p>
<p>Ho fatto un tentativo e non riuscivo nemmeno a clonare il repository remoto ricevendo come risposta &#8220;<em><strong>warning: remote HEAD refers to nonexistent ref, unable to checkout.</strong></em>&#8220;. Quindi ho temuto che fosse un problema del mio repository remoto. Per fortuna anche con il <a href="https://github.com/jquery/jquery">repository di JQuery</a> mi segnalava lo stesso errore. E lo faceva con qualsiasi repository provassi a clonare. Quindi il repository non aveva problemi.</p>
<p>Ho provato a fare un mix tra le soluzioni &#8220;installazione netcat&#8221; e &#8220;https al posto di ssh&#8221; ma comunque non ho avuto il risultato sperato quindi ho continuato nella ricerca della soluzione fino ad incappare in <a href="http://bettercodes.org/answers/working-with-git">questa discussione</a>!</p>
<p>Grazie a quanto è scritto nella discussione precedente ho cominciato a fare un po&#8217; di prove giocando sull&#8217;url per la richiesta del repository.</p>
<p>La soluzione in fondo era più semplice di quanto si pensasse.</p>
<p>Partendo dall&#8217;url di aggiornamento del repository fornito da github in formato https (https://user@github.com/user/repository.git), ho inserito anche la password dell&#8217;account github e ho fatto viaggiare la richiesta su protocollo http (<strong>non sicuro</strong>). Quindi l&#8217;url utilizzato in fine è stato:</p>
<pre class="code shell"><strong>http:</strong>//user<strong>:password</strong>@github.com/user/repository.git</pre>
<p>In questo modo ha funzionato tutto correttamente e sono libero di aggiornare il mio framework da, come direbbero gli americani, &#8220;ognidove&#8221;! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/come-aggiornare-un-repository-github-attraverso-il-proxy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Resettare la password di un utente con una query SQL</title>
		<link>http://diegolamonica.info/resettare-la-password-di-un-utente-con-una-query-sql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=resettare-la-password-di-un-utente-con-una-query-sql</link>
		<comments>http://diegolamonica.info/resettare-la-password-di-un-utente-con-una-query-sql/#comments</comments>
		<pubDate>Sun, 09 Oct 2011 19:59:17 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[autenticazione]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[reset password]]></category>
		<category><![CDATA[utenti]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?p=428</guid>
		<description><![CDATA[Ultimamente mi è capitato di dover accedere ad un vecchio sito in locale che avevo fatto con WordPress, il problema che avevo era di non ricordare la password dell&#8217;unico utente che avevo configurato e non avevo voglia di riconfigurarmi un nuovo WordPress con gli stessi plugin per poter riprodurre una situazione analoga. Unica soluzione che [...]]]></description>
			<content:encoded><![CDATA[<p>Ultimamente mi è capitato di dover accedere ad un vecchio sito in locale che avevo fatto con WordPress, il problema che avevo era di non ricordare la password dell&#8217;unico utente che avevo configurato e non avevo voglia di riconfigurarmi un nuovo WordPress con gli stessi plugin per poter riprodurre una situazione analoga. Unica soluzione che avevo era di reimpostare la password dell&#8217;utente admin. <span id="more-428"></span>Di solito si può accedere alla pagina di login e utilizzare il link &#8220;ho dimenticato la password&#8221;. Ma come fare se il webserver locale è configurato per non mandare mail?</p>
<p>Spulciando un po&#8217; il codice e la <a href="http://codex.wordpress.org/Resetting_Your_Password">documentazione di WordPress</a>, ci sono tanti modi descritti per risolvere il problema, ma tra quelli che prediligo c&#8217;è la modalità SQL, che richiede tu abbia le credenziali di accesso al tuo DB, che se non ricordassi sono nel file <strong>wp-config.php</strong> nella root del sito, e principlamente non richiede la scrittura di codice PHP (almeno evitiamo di scriverlo quando non è realmente necessario :D )!</p>
<p>Questa modalità SQL è molto semplice in quanto WordPress autentica un utente anche accettando una password codificata in MD5 (guardatevi il codice del metodo <strong>wp_check_password()</strong>, nel file <strong>/wp-includes/pluggable.php</strong>).</p>
<p>Quindi accediamo alla nostra console di MySQL (di solito utilizzo MySQL Workbench del quale non riesco più a farne a meno), e stabiliamo la connessione alla nostra banca dati, infine, presupponendo di avere un&#8217;installazione base di WordPress ci dovremmo ritrovare con delle tabelle con prefisso <strong>wp_</strong>, quindi eseguiamo subito una bella query di selezione:</p>
<pre class="code sql">select * from wp_users</pre>
<p>prendiamo nota dell&#8217;ID dell&#8217;utente con ruoli di amministrazione, nel mio caso l&#8217;ID equivaleva a &#8220;1&#8243;. Poi eseguiamo la seguente query:</p>
<pre class="code sql">update wp_users set user_pass = md5('mia nuova password') where ID= 1;</pre>
<p>Come direbbero i francesi &#8220;Les jeux sont fait!&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/resettare-la-password-di-un-utente-con-una-query-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dirottare una pagina di WordPress verso un sito esterno</title>
		<link>http://diegolamonica.info/dirottare-una-pagin-di-wordpress-verso-un-sito-esterno/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dirottare-una-pagin-di-wordpress-verso-un-sito-esterno</link>
		<comments>http://diegolamonica.info/dirottare-una-pagin-di-wordpress-verso-un-sito-esterno/#comments</comments>
		<pubDate>Sat, 10 Sep 2011 08:12:44 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[redirect]]></category>
		<category><![CDATA[RewriteRule]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?p=424</guid>
		<description><![CDATA[Spesso mi capita di cimentarmi nella definizione di regole di riscrittura degli URL (Rewrite Rules). Negli ultimi giorni mi è stato chiesto come dirottare una precisa pagina di WordPress verso un particolare sito web. La soluzione è servita! Presupponendo che l&#8217;installazione di wordpress si presenta con la modalità predefinita di permalink (?page_id=0000) si vuole dirottare [...]]]></description>
			<content:encoded><![CDATA[<p>Spesso mi capita di cimentarmi nella definizione di regole di riscrittura degli URL (Rewrite Rules). Negli ultimi giorni mi è stato chiesto come dirottare una precisa pagina di WordPress verso un particolare sito web.</p>
<p>La soluzione è servita!</p>
<p><span id="more-424"></span>Presupponendo che l&#8217;installazione di wordpress si presenta con la modalità predefinita di permalink (?page_id=0000) si vuole dirottare la pagina con ID 1234 verso il sito http://example.com.</p>
<p>Ecco le considerazioni da cui partire:</p>
<ol>
<li>Si presuppone che sul webserver sia installato e ben configurato il modulo <strong>mod_rewrite</strong> di Apache.</li>
<li>La struttura dell&#8217;url costruito da WordPress per arrivare alla pagina <strong>1234</strong> è <strong>http://miosito.it/?page_id=1234</strong></li>
<li>La regola dovrà prevedere che tutte le richieste che arrivano alla suddetta pagina dovranno essere dirottate verso il sito http://example.com</li>
<li>Per una corretta indicizzazione sui motori di ricerca la pagina 1234 dovrà rispondere con un codice di <strong>Redirect 301</strong> (la pagina è stata trasferita altrove)</li>
</ol>
<p>La regola di rewrite da utilizzare per il suddetto scopo è la seguente:</p>
<pre class="code cpp">RewriteEngine on
RewriteCond %{QUERY_STRING} page_id=1234
RewriteRule .* http://example.com [R=301,L]</pre>
<p>Maggiori informazioni sulle <strong>Rewrite Rules e sul mod_rewrite</strong> potete trovarle nella <a title="Documentazione ufficiale per il modulo Rewrite del webserver Apache (in lingua inglese)" href="http://httpd.apache.org/docs/current/mod/mod_rewrite.html">documentazione ufficiale</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/dirottare-una-pagin-di-wordpress-verso-un-sito-esterno/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Riportare tutti gli articoli di una categoria in bozza</title>
		<link>http://diegolamonica.info/riportare-tutti-gli-articoli-di-una-categoria-in-bozza/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=riportare-tutti-gli-articoli-di-una-categoria-in-bozza</link>
		<comments>http://diegolamonica.info/riportare-tutti-gli-articoli-di-una-categoria-in-bozza/#comments</comments>
		<pubDate>Sun, 04 Sep 2011 11:26:27 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?p=421</guid>
		<description><![CDATA[Mi è capitato per il sito di IWA Italy di dover riportare tutti gli articoli afferenti ad una precisa categoria in bozza. Poichè il numero di articoli era troppo elevato per effettuare un&#8217;operazione individuale ho dovuto fare un&#8217;operazione di massa utilizzando degli script mySQL. Presupponendo di avere un&#8217;installazione di base di WordPress con una configurazione [...]]]></description>
			<content:encoded><![CDATA[<p>Mi è capitato per il sito di <a title="International Webmasters Association Italy" href="http://www.iwa.it">IWA Italy</a> di dover riportare tutti gli articoli afferenti ad una precisa categoria in bozza.</p>
<p>Poichè il numero di articoli era troppo elevato per effettuare un&#8217;operazione individuale ho dovuto fare un&#8217;operazione di massa utilizzando degli script mySQL.</p>
<p><span id="more-421"></span>Presupponendo di avere un&#8217;installazione di base di WordPress con una configurazione del DB di default ( prefisso alle tabelle <strong>wp_</strong> ), la prima cosa da fare è identificare la categoria di nostro interesse:</p>
<pre class="sql code">select * from wp_terms where name='Mia Categoria';</pre>
<p>avremo quindi le seguenti informazioni di nostro interesse:</p>
<ol>
<li><strong>term_id</strong>: chiave primaria della tabella. Questa informazione è la più importante per noi.</li>
<li><strong>name</strong>:  è il nome &#8220;Friendly&#8221; della categoria o del tag.</li>
<li><strong>slug</strong>: invece è il nome così come viene utilizzato da WordPress per identificare negli url in modo univoco la categoria o il tag.</li>
</ol>
<p>In questo momento però abbiamo un serio problema, &#8220;Mia Categoria&#8221; potrebbe essere un tag oppure una categoria. Sì perchè WordPress, conserva queste due informazioni nella stessa tabella, per cui dobbiamo arrivare ad identificare l&#8217;informazione di categoria. Tale informazione è conservata nella tabella <strong>wp_term_taxonomy</strong>.</p>
<p>Dalla tabella <strong>wp_term_taxonomy</strong> prendiamo in considerazione queste 3 informazioni:</p>
<ul>
<li><strong>term_taxonomy_id</strong>: la primary key della tabella</li>
<li><strong>term_id</strong>: che è in realzione uno a molti con la tabella wp_terms (un <strong>term_id</strong> della tabella <strong>wp_terms</strong>, molti <strong>term_id</strong> della tabella <strong>wp_term_taxonomy</strong>)</li>
<li><strong>taxonomy</strong>: che identifica il tipo di tassonomia (categoria, tag).</li>
</ul>
<p>&nbsp;</p>
<pre class="sql code">select
   taxonomy.term_taxonomy_id,
   taxonomy.term_id,
   terms.name,
   terms.slug
from
   wp_terms terms left join wp_term_taxonomy taxonomy on terms.term_id = taxonomy.term_id
where
   taxonomy.taxonomy = 'category' and
   terms.name = 'Mia Categoria';</pre>
<p>A questo punto abbiamo selezionato solo le tassonomie &#8220;Mia Categoria&#8221;. Se però le categorie &#8220;Mia Categoria&#8221; fossero più di una avrebbero certamente uno slug differente quindi si potrebbe definire la condizione utilizzando <strong>terms.slug</strong> anzichè <strong>terms.name</strong>.</p>
<p>Dunque abbiamo a nostra disposizione l&#8217;informazione chiave: <strong>term_taxonomy_id</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/riportare-tutti-gli-articoli-di-una-categoria-in-bozza/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inserire il separatore delle migliaia al posto giusto</title>
		<link>http://diegolamonica.info/inserire-il-separatore-delle-migliaia-al-posto-giusto/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=inserire-il-separatore-delle-migliaia-al-posto-giusto</link>
		<comments>http://diegolamonica.info/inserire-il-separatore-delle-migliaia-al-posto-giusto/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 14:16:19 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[utility varie]]></category>
		<category><![CDATA[valuta]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?p=418</guid>
		<description><![CDATA[La funzione che segue trasforma un ipotetico valore numerico 123456 in &#8216;123.456&#8216;; function applicaSeparatore(importoNumerico){ var importo = importoNumerico.toString(); if(importo.length&#62;3){ importo = importo.split('',importo.length).reverse().join('').replace(/([0-9]{3})/g,'$1.'); importo = importo.split('',importo.length).reverse().join(''); } return importo; }]]></description>
			<content:encoded><![CDATA[<p>La funzione che segue trasforma un ipotetico valore numerico <strong>123456</strong> in &#8216;<strong>123.456</strong>&#8216;;</p>
<p><span id="more-418"></span></p>
<pre class="js code">function applicaSeparatore(importoNumerico){
  var importo = importoNumerico.toString();
  if(importo.length&gt;3){
    importo = importo.split('',importo.length).reverse().join('').replace(/([0-9]{3})/g,'$1.');
    importo = importo.split('',importo.length).reverse().join('');
  }
  return importo;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/inserire-il-separatore-delle-migliaia-al-posto-giusto/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Nascondere la funzione skypecall sulle pagine web</title>
		<link>http://diegolamonica.info/nascondere-la-funzione-skypecall-sulle-pagine-web/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nascondere-la-funzione-skypecall-sulle-pagine-web</link>
		<comments>http://diegolamonica.info/nascondere-la-funzione-skypecall-sulle-pagine-web/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 09:03:17 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Hacks]]></category>
		<category><![CDATA[Skype]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?p=331</guid>
		<description><![CDATA[Skype il famoso strumento di Instant Messanging che ormai quasi tutti gli utenti che vivono il Web usano, durante la fase di installazione chiede se si vuole installare il plugin per il proprio (o i propri) browser. Di solito uno accetta di installare questo plugin, specialmente quando si utilizza Skype a scopo professionale. Mi è [...]]]></description>
			<content:encoded><![CDATA[<p>Skype il famoso strumento di Instant Messanging che ormai quasi tutti gli utenti che vivono il Web usano, durante la fase di installazione chiede se si vuole installare il plugin per il proprio (o i propri) browser.</p>
<p><span id="more-331"></span></p>
<p>Di solito uno accetta di installare questo plugin, specialmente quando si utilizza Skype a scopo professionale.</p>
<p>Mi è successo però che, in un&#8217;applicazione web che stavo sviluppando, il numero di telefono nascondeva al click un&#8217;operazione accessoria che invece mi veniva nascosta dal codice generato dal plugin di Skype per l&#8217;instant call.</p>
<p>Analizzando il codice ho risolto utilizzando semplicemente queste due regole di stile nel mio CSS:</p>
<pre class="css" name="code">span.skype_pnh_container {display:none !important;}
span.skype_pnh_print_container {display:inline !important;}</pre>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/nascondere-la-funzione-skypecall-sulle-pagine-web/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Funzione Replace in Microsoft Visual Basic 5</title>
		<link>http://diegolamonica.info/funzione-replace-in-microsoft-visual-basic-5/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=funzione-replace-in-microsoft-visual-basic-5</link>
		<comments>http://diegolamonica.info/funzione-replace-in-microsoft-visual-basic-5/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 09:59:26 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Manipolazione delle stringhe]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Microsoft Visual Basic]]></category>
		<category><![CDATA[Retrocompatibilità]]></category>
		<category><![CDATA[Sviluppo lato Client]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?page_id=84</guid>
		<description><![CDATA[Sin dalla versione 6 del Visual Basic è stata introdotta la funzione Replace che consente di sostituire una parte di una stringa con una nuova stringa. Questa però è una funzionalità che gli sviluppatori che utilizzano Visual Basic 5 (o una versione precedente) non possono utilizzare se non implementando tale funzione da zero. L&#8217;esigenza mi [...]]]></description>
			<content:encoded><![CDATA[<p>Sin dalla versione 6 del Visual Basic è stata introdotta la funzione Replace che consente di sostituire una parte di una stringa con una nuova stringa. Questa però è una funzionalità che gli sviluppatori che utilizzano Visual Basic 5 (o una versione precedente) non possono utilizzare se non implementando tale funzione da zero. L&#8217;esigenza mi è nata dal momento in cui avevo da manutenere dei vecchi progetti di alcuni clienti che richiedevano l&#8217;uso di tale versione.<span id="more-84"></span></p>
<p>Di seguito è rappresentata la funzione <strong>Replace </strong>da copiare ed incollare in un Modulo ed utilizzabile da Visual Basic 5 quanto dalle versioni precedenti.<br />
Tale funzione utilizza la stessa sintassi della funzione introdotta con il Visual Basic 6 così da consentire eventuali migrazioni delle procedure che ne fanno utilizzo in modo trasparente (rimuovendo quindi solo la funzione dal modulo).</p>
<pre name="code" class="vb">Public Function Replace(ByVal Expression As String, Find As String, sReplace As String, Optional Start As Long = 1) As String
  Dim S As String
  Dim I As Integer
  For I = Start To Len(Expression)
    S = UCase(Mid(Expression, I, Len(Find)))
    If S = UCase(Find) Then
       Expression = Left(Expression, I - 1) &amp; sReplace &amp; _
          Mid(Expression, I + Len(Find))
       I = I + Len(sReplace) - 1
    End If
  Next
  Replace = Expression
End Function</pre>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/funzione-replace-in-microsoft-visual-basic-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spostare un file nel cestino di Windows</title>
		<link>http://diegolamonica.info/spostare-un-file-nel-cestino-di-windows/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=spostare-un-file-nel-cestino-di-windows</link>
		<comments>http://diegolamonica.info/spostare-un-file-nel-cestino-di-windows/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 09:23:44 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[File System]]></category>
		<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Cestino]]></category>
		<category><![CDATA[Microsoft Visual Basic]]></category>
		<category><![CDATA[Sviluppo lato Client]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?page_id=81</guid>
		<description><![CDATA[Tempo addietro, durante lo sviluppo di una procedura lato server, mi capitò di dover gestire l&#8217;eliminazione di alcuni files, ovviamente la prima cosa che feci fu pensare di cancellare direttamente il file&#8230; Ma dopo diverso tempo il cliente mi chiese di modificare tale procedura in modo da non cancellare definitivamente i files ma di spostarli [...]]]></description>
			<content:encoded><![CDATA[<p>Tempo addietro, durante lo sviluppo di una procedura lato server, mi capitò di dover gestire l&#8217;eliminazione di alcuni files, ovviamente la prima cosa che feci fu pensare di cancellare direttamente il file&#8230; Ma dopo diverso tempo il cliente mi chiese di modificare tale procedura in modo da non cancellare definitivamente i files ma di spostarli nel cestino ed avrebbe cestinato lui (in un secondo tempo) quelli che riteneva non più necessari.<span id="more-81"></span></p>
<p>L&#8217;algoritmo che dovetti implementare per cancellare ciascun file fa uso di una API di Windows ed il codice è simile a quello che segue:</p>
<pre name="code" class="vb">Private Type SHFILEOPSTRUCT
 hWnd As Long
 wFunc As Long
 pFrom As String
 pTo As String
 fFlags As Integer
 fAborted As Boolean
 hNameMaps As Long
 sProgress As String
End Type
Private Const FO_DELETE = &amp;H3
Private Const FOF_ALLOWUNDO = &amp;H40
Private Declare Function SHFileOperation Lib "shell32.dll" Alias
  "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long

Public Function SpostaNelCestino(file_name As String)
  Dim SHFileOp As SHFILEOPSTRUCT
  With SHFileOp
   .wFunc = FO_DELETE
   .pFrom = file_name
   .fFlags = FOF_ALLOWUNDO
  End With
  SHFileOperation SHFileOp
End Sub</pre>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/spostare-un-file-nel-cestino-di-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generare un unico file da più files</title>
		<link>http://diegolamonica.info/generare-un-unico-file-da-piu-files/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=generare-un-unico-file-da-piu-files</link>
		<comments>http://diegolamonica.info/generare-un-unico-file-da-piu-files/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 09:21:00 +0000</pubDate>
		<dc:creator>Diego La Monica</dc:creator>
				<category><![CDATA[File System]]></category>
		<category><![CDATA[Knowledge Base]]></category>
		<category><![CDATA[Visual Basic]]></category>
		<category><![CDATA[Accesso ai files]]></category>
		<category><![CDATA[Microsoft Visual Basic]]></category>

		<guid isPermaLink="false">http://diegolamonica.info/?page_id=79</guid>
		<description><![CDATA[Tempo addietro mi capitò di dover suddividere una serie di files particolarmente grandi su una serie di dischetti avendo un cliente un PC &#8220;leggermente&#8221; obsoleto (Microsoft Windows 95). Il problema era successivamente dover ricongiungere questi files in un unico grande file. Rimarcando la mia fama tra gli amici per non riutilizzare mai software impacchettato e [...]]]></description>
			<content:encoded><![CDATA[<p>Tempo addietro mi capitò di dover suddividere una serie di files particolarmente grandi su una serie di dischetti avendo un cliente un <dfn title="Personal Computer">PC</dfn> &#8220;leggermente&#8221; obsoleto (Microsoft Windows 95). Il problema era successivamente dover ricongiungere questi files in un unico grande file.</p>
<p>Rimarcando la mia fama tra gli amici per non riutilizzare mai software impacchettato e freeware, ma sempre propenso a sviluppare internamente quella specifica funzione ad-hoc, decisi di svilupparmi una procedura per lo splitting del file in una serie di n files di una determinata dimensione ed ovviamente sviluppai anche la funzione per la ricongiunzione dei files in un unico grande file.</p>
<p><span id="more-79"></span>Il frammento di codice che trovate di seguito, è estratto da un progetto leggermente più grosso ed ho preferito riportare semplicemente l&#8217;essenziale per comprendere come funziona il tutto:</p>
<pre>Dest = FreeFile
 MergedFile = "C:\Merged.txt"
 Offset = 1
 Open MergedFile for Binary Access Write Lock Read As FDest
 For I=Lbound(filesArray) to UBound(filesArray)
 FSorg = FreeFile
 Open filesArray(I) for binary Access Read Lock Write as FSorg
 S=String(Lof(FSorg),chr(0))
 Get FSorg,1,S
 Close FSorg
 Put FDest,Offset, S
 Offset = Offset + len(S)
 next
 Close FDest</pre>
<p><em>Questa procedura preleva da un array<strong> filesArray</strong> i nomi dei files da concatenare e li salva in un unico file indicato nella variabile <strong>MergedFile</strong></em></p>
]]></content:encoded>
			<wfw:commentRss>http://diegolamonica.info/generare-un-unico-file-da-piu-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

