<?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>OneBlackCatOneBlackCat</title>
	<atom:link href="http://www.oneblackcat.it/index.php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.oneblackcat.it</link>
	<description>Web Design, condivisioni, pensieri...</description>
	<lastBuildDate>Wed, 10 Apr 2013 14:18:01 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Facebook: fare click su mi piace per mostrare la pagina</title>
		<link>http://www.oneblackcat.it/index.php/facebook-fare-click-su-mi-piace-per-mostrare-la-pagina/</link>
		<comments>http://www.oneblackcat.it/index.php/facebook-fare-click-su-mi-piace-per-mostrare-la-pagina/#comments</comments>
		<pubDate>Wed, 10 Apr 2013 13:46:50 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Facebook]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=361</guid>
		<description><![CDATA[A moltissimi di voi sarà capitato di dover creare una pagina sul vostro sito con del contenuto visibile solo a chi ha fatto &#8220;mi piace&#8221; su Facebook in una pagina aziendale. Innanzitutto bisogna creare la propria app in http://developers.facebook.com, perchè, per fare quello che ci serve, abbiamo bisogno di un app ID che Facebook ci [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.oneblackcat.it/wp-content/uploads/2013/04/36028_Facebook_like_sign_02.jpg" rel="lightbox[361]" title="Fare mi piace per mostrare una pagina"><img class="alignleft size-full wp-image-363" title="Fare mi piace per mostrare una pagina" src="http://www.oneblackcat.it/wp-content/uploads/2013/04/36028_Facebook_like_sign_02.jpg" alt="" width="610" height="332" /></a>A moltissimi di voi sarà capitato di dover creare una pagina sul vostro sito con del contenuto visibile solo a chi ha fatto &#8220;<strong>mi piace</strong>&#8221; su <strong>Facebook</strong> in una pagina aziendale.</p>
<p>Innanzitutto bisogna creare la propria app in <a title="Facebook Developers page" href="http://developers.facebook.com" rel="nofollow" target="_blank">http://developers.facebook.com</a>, perchè, per fare quello che ci serve, abbiamo bisogno di un app ID che Facebook ci deve rilasciare.<br />
Una volta creata la vostra app (usando il tasto Crea Applicazione in alto a destra), vi verrà assegnato un App ID/API Key: è un codice numerico.</p>
<p>Ora quello che ci serve è una pagina .html ed una .php, che useremo per caricare le <strong>API di Facebook</strong> e indicheremo come gestire la <strong>cache</strong> al browser.</p>
<p>Create un file e nominatelo facebookapi.php:</p>
<pre class="brush: php; gutter: true; first-line: 1"> &lt;?php
 $cache_expire = 60*60*24*365;
 header(&quot;Pragma: public&quot;);
 header(&quot;Cache-Control: max-age=&quot;.$cache_expire);
 header(&#039;Expires: &#039; . gmdate(&#039;D, d M Y H:i:s&#039;, time()+$cache_expire) . &#039; GMT&#039;);
 ?&gt;
 &lt;script src=&quot;//connect.facebook.net/it_IT/all.js&quot;&gt;&lt;/script&gt;</pre>
<p>Ora create un file index.html:</p>
<pre class="brush: html; gutter: true; first-line: 1">&lt;html&gt;
  &lt;head&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&quot;&gt;&lt;/script&gt;
    &lt;style type=&quot;text/css&quot;&gt;
      div#container_notlike, div#container_like {
        display: none;
      }
    &lt;/style&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div id=&quot;fb-root&quot;&gt;&lt;/div&gt;

    &lt;div id=&quot;container_notlike&quot;&gt;
      Non hai fatto mi piace sulla mia pagina!
    &lt;/div&gt;

    &lt;div id=&quot;container_like&quot;&gt;
      Ti piace eh?
    &lt;/div&gt;

  &lt;/body&gt;
&lt;/html&gt;</pre>
<p>Come potete notare non c&#8217;è ancora traccia del codice javascript per gestire gli eventi. Un attimo di pazienza! Abbiamo semplicemente inserito la libreria jQuery ( una versione non nuovissima, a voi le eventuali implementazioni&#8230;) e i due div che dovranno apparire a seconda degli eventi del codice per gestire gli eventi su <strong>Facebook</strong>.<br />
Sono entrambi nascosti, perchè starà al codice javascript mostrare uno piuttosto che un altro. Viene da sp</p>
<p>Ora dobbiamo inserire il codice javascript nell&#8217;head, possibilmente dopo che il DOM è pronto per rispondere. Come si fa? Beh, facile&#8230;</p>
<pre class="brush: javascript; gutter: true; first-line: 1">$(document).ready(function(e){
    //codice...
});</pre>
<p>Aggiungiamo ora il codice all&#8217;interno del mio <strong>document.ready</strong>&#8230;</p>
<pre class="brush: javascript; gutter: true; first-line: 1">      window.fbAsyncInit = function() {
        FB.init({
          appId      : &#039;[il vostro APP ID senza le parentesi]&#039;,
          channelUrl : &#039;facebookapi.php&#039;,
          status     : true, // controlla lo status su FB
          cookie     : true, // attiva i COOKIES
          xfbml      : true  // fa il parsing XFBML
        });

        FB.getLoginStatus(function(response) {
          var page_id = &quot;[l&#039;id della vostra pagina di Facebook]&quot;;
          if (response &amp;&amp; response.authResponse) {
            var user_id = response.authResponse.userID;
            var fql_query = &quot;SELECT uid FROM page_fan WHERE page_id = &quot;+page_id+&quot;and uid=&quot;+user_id;
            FB.Data.query(fql_query).wait(function(rows) {
              if (rows.length == 1 &amp;&amp; rows[0].uid == user_id) {
                //console.log(&quot;Ha già fatto LIKE, mostro la pagina&quot;);
                $(&#039;#container_like&#039;).show();
              } else {
                //console.log(&quot;Non ha fatto like&quot;);
                $(&#039;#container_notlike&#039;).show();
              }
            });
          } else {
            FB.login(function(response) {
              if (response &amp;&amp; response.authResponse) {
                var user_id = response.authResponse.userID;
                var fql_query = &quot;SELECT uid FROM page_fan WHERE page_id = &quot;+page_id+&quot;and uid=&quot;+user_id;
                FB.Data.query(fql_query).wait(function(rows) {
                  if (rows.length == 1 &amp;&amp; rows[0].uid == user_id) {
                   // console.log(&quot;Ha fatto il Like&quot;);
                    $(&#039;#container_like&#039;).show();
                  } else {
                   // console.log(&quot;Non ha fatto il Like&quot;);
                    $(&#039;#container_notlike&#039;).show();
                  }
                });
              } else {
                //console.log(&quot;Non ha fatto il Like&quot;);
                $(&#039;#container_notlike&#039;).show();
              }
            }, {scope: &#039;user_likes&#039;});
          }
        });
      };

      // Load the SDK Asynchronously
      (function(d){
        var js, id = &#039;facebook-jssdk&#039;; if (d.getElementById(id)) {return;}
        js = d.createElement(&#039;script&#039;); js.id = id; js.async = true;
        js.src = &quot;//connect.facebook.net/en_US/all.js&quot;;
        d.getElementsByTagName(&#039;head&#039;)[0].appendChild(js);
      }(document));</pre>
<p>Ora tutto dovrebbe funzionare a dovere.<br />
Chiaramente non sarebbe male implementare la pagina facendo si che, invece di mostrare il div con la scritta &#8220;hai fatto like&#8221;, venisse caricato del contenuto con una chiamata ajax.<br />
Se non vi funziona, commentate pure esprimendo tutto il vostro disappunto <img src='http://www.oneblackcat.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/facebook-fare-click-su-mi-piace-per-mostrare-la-pagina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Phonegap e Android: missing one of the following</title>
		<link>http://www.oneblackcat.it/index.php/phonegap-e-android-missing-one-of-the-following/</link>
		<comments>http://www.oneblackcat.it/index.php/phonegap-e-android-missing-one-of-the-following/#comments</comments>
		<pubDate>Fri, 05 Apr 2013 21:40:04 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Cordova / Phonegap]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=349</guid>
		<description><![CDATA[Oggi ho provato ad installare tutto il sistema per poter esportare la mia Phonegap App su ambiente Android. Più facile a dirsi che a farsi. Giusto per non farsi mancare nulla, Windows comincia sempre con rispondere con messaggi di errori del tipo: comando non riconosciuto. E già bestemmie come se piovesse&#8230; Scarico Phonegap 2.5.0 e [...]]]></description>
			<content:encoded><![CDATA[<p>Oggi ho provato ad installare tutto il sistema per poter esportare la mia Phonegap App su ambiente Android. Più facile a dirsi che a farsi.<br />
Giusto per non farsi mancare nulla, Windows comincia sempre con rispondere con messaggi di errori del tipo: comando non riconosciuto. E già bestemmie come se piovesse&#8230;</p>
<p>Scarico Phonegap 2.5.0 e provo, così, senza aver letto niente altro, a lanciare il comando create..</p>
<pre class="brush: bash; gutter: true; first-line: 1">create c:\apps com.nomeazienza.nomeapp nomeapp</pre>
<p>Ovviamente terremoto e tragedia, non funziona niente.<br />
Mi accorgo immediatamente che, differentemente da quanto pensassi, non ho installato nè il Java SDK nè ANT, di cui ignoravo l&#8217;esistenza fino a qualche minuto prima.</p>
<p>Nel dubbio mi riscarico tutto:</p>
<ul>
<li>Java SDK da qui: <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html">http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html</a></li>
<li>ANT da qui: <a href="http://ant.apache.org/bindownload.cgi">http://ant.apache.org/bindownload.cgi</a></li>
<li>Android SDK ( nell&#8217;ADT Bundle, dove c&#8217;è anche Eclipse ): <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html</a></li>
</ul>
<p>Non grandi cose, siamo sui 300mb.<br />
Installo il tutto e per controllare che tutto sia funzionante apro la shell e rilancio il comando <em>create</em> come sopra.</p>
<p>Nonostante tutto, continua a non funzionare, mi viene presentato un messaggio <em>Missing one of the following</em> (JDK, SDK, ANT).<br />
Per ovviare a tutto ciò, dovete controllare che tutti i comandi elencati qui siano funzionanti:</p>
<ul>
<li>java</li>
<li>javac</li>
<li>ant</li>
<li>adb</li>
<li>android</li>
</ul>
<p>Non funzionano? Probabilmente nelle variabili di sistema mancano i riferimenti alle cartelle dei vari SDK.<br />
Un esempio su tutti, per far funzionare il comando javac si può inserire in variabile di sistema il riferimento alla cartella JavaSdk:</p>
<pre class="brush: bash; gutter: true; first-line: 1">set path=&quot;%path%;c:\program files\java\jdk7\bin&quot;</pre>
<p><strong>Cosa fa questo comando?</strong><br />
Semplicemente setta la variabile di sistema <em>path</em> con un nuovo valore, <em>c:\program files\java\jdk7\bin</em>, e lo aggiunge al contenuto della variabile stessa <em>%path%</em>.</p>
<p>Per tutti i comandi elencati sopra il discorso è lo stesso.</p>
<p><strong>Ok, il comando create ora funziona, ma cosa fa?</strong></p>
<p>Una volta indicato al comando create dove creare il progetto, dovete semplicemente aprire la cartella generata ( nel mio caso sarà c:\apps\nomeapp ). Troverete tutti i files necessari per generare la vostra Phonegap App per Android.</p>
<p>Ora non vi resta che aprire Eclipse, seguire le istruzioni indicate sulla pagina di <em>Phonegap, Getting started</em> per Android.</p>
<hr />
<p>Elenco links utili:<br />
Android SDK: <a href="http://developer.android.com/sdk/index.html">http://developer.android.com/sdk/index.html<br />
</a>java sdk: <a href="http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html">http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html<br />
</a>Apache Ant: <a href="http://ant.apache.org/bindownload.cgi">http://ant.apache.org/bindownload.cgi<br />
</a>Phonegap per Android: come iniziare: <a href="http://docs.phonegap.com/en/2.5.0/guide_getting-started_android_index.md.html#Getting%20Started%20with%20Android">http://docs.phonegap.com/en/2.5.0/guide_getting-started_android_index.md.html#Getting%20Started%20with%20Android<br />
</a>Aggiungere alle variabili di sistema: <a href="http://stackoverflow.com/questions/1678520/javac-not-working-in-windows-command-prompt">http://stackoverflow.com/questions/1678520/javac-not-working-in-windows-command-prompt<br />
</a>far funzionare il comando create di phonegap per android: <a href="http://simonmacdonald.blogspot.ca/2012/11/getting-create-command-to-work-on.html">http://simonmacdonald.blogspot.ca/2012/11/getting-create-command-to-work-on.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/phonegap-e-android-missing-one-of-the-following/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sottoporre ad Apple una app creata con Phonegap</title>
		<link>http://www.oneblackcat.it/index.php/sottoporre-ad-apple-una-app-creata-con-phonegap/</link>
		<comments>http://www.oneblackcat.it/index.php/sottoporre-ad-apple-una-app-creata-con-phonegap/#comments</comments>
		<pubDate>Thu, 04 Apr 2013 16:36:02 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Cordova / Phonegap]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=343</guid>
		<description><![CDATA[Ho letto su molti forum, Phonegap forum stesso su tutti, che moltissima gente ha problemi a sottoporre ad Apple la propria app, e che spesso gli viene rifiutata perchè &#8220;non abbastanza app&#8221;. Il motivo, in verità, è piuttosto semplice: se creo una app che è semplicemente una trasposizione mobile di un sito web, al 99% [...]]]></description>
			<content:encoded><![CDATA[<p>Ho letto su molti forum, <strong>Phonegap</strong> forum stesso su tutti, che moltissima gente ha problemi a sottoporre ad Apple la propria app, e che spesso gli viene rifiutata perchè &#8220;non abbastanza app&#8221;.</p>
<p>Il motivo, in verità, è piuttosto semplice: se creo una app che è semplicemente una trasposizione mobile di un sito web, al 99% verrà rifiutata da <strong>Apple</strong>, che argomenterà il rifiuto con la frase &#8220;La vostra app non utilizza alcuno strumento tipico di uno smartphone (gps, database, rubrica), quindi spostate il vostro sviluppo verso una versione mobile del sito&#8221;. Grazie tante&#8230;</p>
<p>A parte la condicio sine qua non di fare una app che non faccia vomitare, è piuttosto semplice utilizzare uno degli strumenti che <strong>Phonegap</strong> mette a disposizione, uno su tutti lo <strong>Storage</strong>.</p>
<p>Per utilizzare il database che mette a disposizione Phonegap, è necessario richiamarlo con la seguente funzione:</p>
<pre class="brush: javascript; gutter: true; first-line: 1">function activateDB(){
	var db = window.openDatabase(&quot;NOME_DB&quot;, &quot;VERSIONE_DB&quot;, &quot;DISPLAY_NAME_DB&quot;, 5*1024*1024);
    db.transaction(populateDB, errorCB, successCB);
}

function populateDB(tx) {

	tx.executeSql(&#039;CREATE TABLE IF NOT EXISTS tblPreferiti(id INTEGER PRIMARY KEY ASC, idarticoli INTEGER)&#039;);

	}

function errorCB(err) {
		console.log(&quot;!!! Error processing SQL: &quot;+err.code + &#039; - &#039; + err.message );
}

function successCB() {
}</pre>
<p>La funzione activateDB() mi carica nella variabile db il database NOME_DB, dopo di che mi lancia la funzione populateDB() che, a seconda del risultato positivo o negativo, mi richiama successDB() o errorDB(). Tutto chiaro, no?<br />
Come vedete, è piuttosto semplice interfacciarsi con il DB e basta salvarvi qualcosa al suo interno per utilizzare uno degli strumenti messi a disposizione da Phonegap.<br />
Nel mio caso, ho creato una APP ( non ancora disponibile su Apple Store, ma appena lo sarà posterò il link.. ) e ho utilizzato il db per salvarvi gli articoli preferiti.<br />
In verità salvo esclusivamente l&#8217;ID degli articoli, che vengono poi caricati dal server remoto ogni volta. Un utilizzo minimo del DB, ma&#8230;sufficiente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/sottoporre-ad-apple-una-app-creata-con-phonegap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jsonp e parse file json errato</title>
		<link>http://www.oneblackcat.it/index.php/jsonp-e-parse-file-json-errato/</link>
		<comments>http://www.oneblackcat.it/index.php/jsonp-e-parse-file-json-errato/#comments</comments>
		<pubDate>Thu, 01 Nov 2012 16:03:54 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Cordova / Phonegap]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[cross domain]]></category>
		<category><![CDATA[jsonp]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=324</guid>
		<description><![CDATA[Lavorando su un app con Phonegap mi sono imbattuto in una rogna non da poco, risolta grazie a qualche invocazione dell&#8217;Altissimo e un paio d&#8217;ore di sbattimento. La problematica era di risolvere l&#8217;annoso problema dell&#8217;errore di console di Chrome Origin null is not allowed by Access-Control-Allow-Origin. Leggendo vari post su internet, la problematica è capitata [...]]]></description>
			<content:encoded><![CDATA[<p>Lavorando su un app con <strong>Phonegap</strong> mi sono imbattuto in una rogna non da poco, risolta grazie a qualche invocazione dell&#8217;Altissimo e un paio d&#8217;ore di sbattimento.<br />
La problematica era di risolvere l&#8217;annoso problema dell&#8217;errore di console di Chrome <strong>Origin null is not allowed by Access-Control-Allow-Origin</strong>.<br />
Leggendo vari post su internet, la problematica è capitata a tantissima gente e la risoluzione della stessa non sembra così palese come può sembrare.</p>
<p>Io stesso, soprattutto nei blog italiani, non ho trovato molte soluzioni rapide.<br />
A parte <strong>la quantità indecente di soloni</strong> che si beano della propria conoscenza, cosa che mediamente fa incazzare come quando si paga l&#8217;IMU, che preferiscono rompere i maroni ore ed ore, invece che dare velocemente la soluzione, come se far faticare la gente fosse, in Italia, uno sport nazionale. Nei blog americani, invece, ci si imbatte più spesso in persone più malleabili e meno snob.</p>
<p>Veniamo velocemente al codice:</p>
<pre class="brush: javascript; gutter: true; first-line: 1">$.ajax({
		url:&quot;http://www.vostrodom.it/pagina.asp&quot;,
		type:&quot;GET&quot;,
		dataType:&quot;json&quot;,
		data:&quot;id=&quot; + ID 
}) [...]</pre>
<p>Molto semplicemente, una bella chiamata con jQuery.ajax, ad una pagina sul vostro sito, con il passaggio di una variabile querystring id.<br />
Se usate <strong>Google Chrome</strong>, noterete un bel messaggio di errore, che avvisa che non possono essere effettuate chiamate <strong>CrossDomain</strong>, ossia fuori dal dominio della pagina stessa.<br />
La problematica avviene soprattutto se avete lanciato una pagina da file:\\ .</p>
<p>Come ovviare al problema? Usando come <strong>dataType:jsonp</strong> e non json.<br />
Occhio, le problematiche, usando questo sistema, diventano altre, però, per lo meno, una rogna, di dosso, ve la togliete. Per esempio, scordatevi il passaggio POST dei dati: con <strong>JsonP</strong> avvengono tutte via GET, con tutte le problematiche di dati e sicurezza che ne derivano. Se queste noie non vi interessano, risolvete in fretta il problema.</p>
<p>Risolto un problema, però, ne viene fuori un altro: jsonp utilizza una funzione javascript per ovviare al Domain Crossing. Non modificando niente, potrebbe venire fuori un errore del tipo <strong>Uncaught SyntaxError: Unexpected token</strong>.</p>
<p>Un passo alla volta.<br />
Poniamo il caso che il vostro file json sia come nell&#8217;esempio seguente:</p>
<pre class="brush: xml; gutter: true">{
    &quot;glossary&quot;: {
        &quot;title&quot;: &quot;example glossary&quot; 
    }
}</pre>
<p>Al file json manca un quid, ossia una funzione che conglobi tutto.<br />
Modificate il vostro json aggiungendo, ad esempio, readJson([vostro-codice-json]).</p>
<pre class="brush: xml; gutter: true">readJson({
    &quot;glossary&quot;: {
        &quot;title&quot;: &quot;example glossary&quot; 
    }
})</pre>
<p>Dopo di che, andiamo nel codice javascript a dirgli che la funzione callback che deve leggere si chiama readJson.</p>
<pre class="brush: javascript; gutter: true; first-line: 1;highlight: [6]">$.ajax({
		url:&quot;http://www.vostrodom.it/pagina.asp&quot;,
		type:&quot;GET&quot;,
		dataType:&quot;json&quot;,
		data:&quot;id=&quot; + ID,
                jsonpCallback:	&quot;readJson&quot;
}) [...]</pre>
<p>A questo punto, tutti gli odiosi messaggi d&#8217;errore della console dovrebbero sparire e, magicamente, potrete fare le vostre belle chiamate json esterne.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/jsonp-e-parse-file-json-errato/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Phonegap: creare applicazioni native usando HTML e JS</title>
		<link>http://www.oneblackcat.it/index.php/phonegap-creare-applicazioni-native-usando-html-e-js/</link>
		<comments>http://www.oneblackcat.it/index.php/phonegap-creare-applicazioni-native-usando-html-e-js/#comments</comments>
		<pubDate>Wed, 31 Oct 2012 18:35:12 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Cordova / Phonegap]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=312</guid>
		<description><![CDATA[Se pensate che il mondo delle applicazioni native sia un esclusiva dei relativi linguaggi di programmazione ( Obj-C, .NET, Java ), evidentemente non avete mai sentito parlare del progetto di Adobe, Phonegap. Phonegap è un framework che permette di generare un&#8217;applicativo nativo per iPhone, Android, Windows Phone ed altri, partendo da codice javascript e html. [...]]]></description>
			<content:encoded><![CDATA[<p>Se pensate che il mondo delle applicazioni native sia un esclusiva dei relativi linguaggi di programmazione ( Obj-C, .NET, Java ), evidentemente non avete mai sentito parlare del progetto di Adobe, <strong>Phonegap</strong>.</p>
<p><strong>Phonegap</strong> è un framework che permette di generare un&#8217;applicativo nativo per <strong>iPhone</strong>, Android, Windows Phone ed altri, partendo da codice javascript e html. Insignito alla fine del mese di Ottobre del <strong>2012 Jolt Awards</strong> come migliore tool di sviluppo mobile, rende la vita facile a coloro che non hanno ( ancora ) conoscenze di sviluppo dedicate.</p>
<p>Un esempio vale più di mille parole:</p>
<pre class="brush: javascript; gutter: true; first-line: 1">function checkConnection() {
   var networkState = navigator.network.connection.type;

   var states = {};
   states[Connection.UNKNOWN] = &#039;Unknown connection&#039;;
   states[Connection.ETHERNET] = &#039;Ethernet connection&#039;;
   states[Connection.WIFI] = &#039;WiFi connection&#039;;
   states[Connection.CELL_2G] = &#039;Cell 2G connection&#039;;
   states[Connection.CELL_3G] = &#039;Cell 3G connection&#039;;
   states[Connection.CELL_4G] = &#039;Cell 4G connection&#039;;
   states[Connection.NONE] = &#039;No network connection&#039;;

   alert(&#039;Connection type: &#039; + states[networkState]);
}

document.addEventListener(&#039;deviceready&#039;,function(e){
   checkConnection();
}, false);</pre>
<p>Cosa stiamo facendo? Molto semplicemente, <strong>Phonegap</strong> mette a disposizione un bell&#8217;evento, <em>deviceready</em>, che ci da la sicurezza di lanciare del codice custom non appena il dispositivo è disponibile.<br />
Un bel vantaggio!<br />
Nello specifico, lanciamo la funzione <strong>checkConnection()</strong>, che ci da alcune informazioni su quale connessione sia attualmente attiva sul nostro telefono.</p>
<p>Attualmente alla versione 2.1, <a title="Cordova Events list" href="http://docs.phonegap.com/en/2.1.0/cordova_connection_connection.md.html#Connection" target="_blank">questa pagina</a> ci da una dettagliata panoramica su quali oggetti siano messi a disposizione a noi sviluppatori.</p>
<p>Ogni evento è anche descritto con un minimo di troubleshooting, a seconda del device obiettivo della vostra app. Ad esempio, per quanto riguarda Windows Phone, l&#8217;avviso è:&#8221; <em>Windows Phone Emulator always detects navigator.network.connection.type as Connection.UNKNOWN</em>&#8220;. Quindi &#8230; occhio alle eccezioni.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/phonegap-creare-applicazioni-native-usando-html-e-js/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook: invitare tutti gli amici a fare &#8220;Mi piace&#8221; su una pagina</title>
		<link>http://www.oneblackcat.it/index.php/facebook-invitare-tutti-gli-amici-a-fare-mi-piace-su-una-pagina/</link>
		<comments>http://www.oneblackcat.it/index.php/facebook-invitare-tutti-gli-amici-a-fare-mi-piace-su-una-pagina/#comments</comments>
		<pubDate>Wed, 31 Oct 2012 10:20:22 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Facebook]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=307</guid>
		<description><![CDATA[Una delle cose che non sopporto assolutamente dell&#8217;interfaccia di Facebook è la totale assenza di un aiuto per l&#8217;utente nell&#8217;evitare di fare un milione di click ogni qual volta ci sia da selezionare gli utenti destinatari di un messaggio o di un invito. Aspettando una sorta di Facebook Pro, dove, pagando, si possa agire normalmente [...]]]></description>
			<content:encoded><![CDATA[<p>Una delle cose che non sopporto assolutamente dell&#8217;interfaccia di Facebook è la totale assenza di un aiuto per l&#8217;utente nell&#8217;evitare di fare un milione di click ogni qual volta ci sia da selezionare gli utenti destinatari di un messaggio o di un invito.</p>
<p>Aspettando una sorta di Facebook Pro, dove, pagando, si possa agire normalmente ed agevolmente tra le amicizie e gli utenti delle pagine, inviando loro messaggi privati e quant&#8217;altro in libertà, ora come ora bisogna fare di necessità virtù.</p>
<p>La maggior parte dei siti che offrono automazione sui social non fanno quello che serve a me, come Sproutsocial o SendSocialMedia: l&#8217;unica cosa è manipolare gli oggetto di Facebook stesso, piegandoli alle proprie necessità.</p>
<p>Un esempio lampante è l&#8217;invito a fare mi piace su una pagina di cui si è amministratori.<br />
La sola idea di fare 5000 click per selezionare 5000 amici è di per se stupida, figurarsi un&#8217;interfaccia dove non esiste un semplice bottone che selezioni tutte le checkbox.<br />
Chissà come sono gli stipendi di coloro che si occupano del frontoffice di FB&#8230;</p>
<p>Se conoscete javascript e avete dimestichezza con la console di Chrome, il gioco sarà molto più semplice di quello che può sembrare.</p>
<p>Andate su Facebook usando Google Chrome, entrate nella vostra pagina e, in alto, cliccate su: <strong>Espandi il pubblico &#8211;&gt;  Invita i tuoi amici<br />
</strong>Se non conoscete Google Chrome, fatevi vedere da uno bravo.</p>
<p>Una volta apertosi l&#8217;elenco degli amici, fate <strong>click destro</strong> &#8211;&gt; <strong>Ispeziona elemento</strong> su uno degli amici. Vi si aprirà la finestra della console, con la porzione di codice selezionata evidenziata.</p>
<p>Andando a spulciare nel codice html, cercate il primo form che contiene il codice selezionato.  Dovrebbe essere qualcosa del tipo:<br />
<em>&lt;form rel=&#8221;async&#8221; action=&#8221;/ajax/pages/invite/send/&#8221; method=&#8221;post&#8221; onsubmit=&#8221;return window.Event &amp;amp;&amp;amp; Event.__inlineSubmit &amp;amp;&amp;amp; Event.__inlineSubmit(this,event)&#8221; id=&#8221;<strong>u9y2dfy31</strong>&#8220;&gt;</em></p>
<p>L&#8217;id in grassetto è importante, segnatevelo da qualche parte, poichè ci sarà da inserirlo via codice manualmente.</p>
<p>Ora andare nella sezione console, cliccando in alto nella finestra del codice di Chrome.<br />
Non stupitevi se troverete, come nell&#8217;immagine, un elenco di errori.<br />
<a href="http://www.oneblackcat.it/wp-content/uploads/2012/10/asdsadh39w39sk.gif" rel="lightbox[307]" title="asdsadh39w39sk"><img class="alignleft  wp-image-308" title="asdsadh39w39sk" src="http://www.oneblackcat.it/wp-content/uploads/2012/10/asdsadh39w39sk.gif" alt="" width="180" height="230" /></a><br />
Eliminate il contenuto della console, giusto per non confondervi le idee. Per fare ciò usate il tasto di divieto che trovate in basso a sinistra ( quarta icona ).</p>
<p>Ora siamo pronti per selezionare gli oggetti dal DOM; carichiamo in una variabile il form:</p>
<p><code>var f = document.getElementById('u7h83jn34'); </code></p>
<p>Dopo di che possiamo ciclare tutti gli elementi presenti.<br />
Fate attenzione: sostituite il valore u7h83jn34 con l&#8217;id del vostro form.</p>
<p>Eccovi il secondo blocco di codice da eseguire:<br />
<code><br />
var modulo = f.elements;<br />
for (i=0; i {<br />
if(modulo[i].type == "checkbox" &amp;&amp; !modulo[i].disabled )<br />
{<br />
modulo[i].checked = !(modulo[i].checked);<br />
}<br />
}<br />
</code></p>
<p>Come vedete, ho caricato in modulo il valore di f.elements ( per comodità ).<br />
Per ogni elemento nel form, controllo che sia una checkbox e che non sia disabilitata da FB, modifico lo stato della checkbox.</p>
<p>Notate che se, nella console, usate il tasto freccia su riproporrete il comando immediatamente precedente. Se rilanciate nuovamente il secondo blocco di codice, noterete che le checkbox si deselezioneranno.</p>
<p>Spero vi sia utile!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/facebook-invitare-tutti-gli-amici-a-fare-mi-piace-su-una-pagina/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Phonegap Cordova 2.1, XCode: errori in fase di Build</title>
		<link>http://www.oneblackcat.it/index.php/phonegap-cordova-2-1-xcode-errori-in-fase-di-build/</link>
		<comments>http://www.oneblackcat.it/index.php/phonegap-cordova-2-1-xcode-errori-in-fase-di-build/#comments</comments>
		<pubDate>Tue, 30 Oct 2012 21:32:06 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Cordova / Phonegap]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=302</guid>
		<description><![CDATA[Molti di voi che usano abitualmente Phonegap per creare applicazioni mobili avranno notato qualche cosa di interessante, relativamente al pacchetto di installazione di Phonegap, che ora si chiama Cordova. A differenza di qualche versione fa, dove si poteva tranquillamente installare il file .dmg, ora è necessario scaricare il pacchetto ed avviare il file create con [...]]]></description>
			<content:encoded><![CDATA[<p>Molti di voi che usano abitualmente Phonegap per creare applicazioni mobili avranno notato qualche cosa di interessante, relativamente al pacchetto di installazione di Phonegap, che ora si chiama Cordova.</p>
<p>A differenza di qualche versione fa, dove si poteva tranquillamente installare il file .dmg, ora è necessario scaricare il pacchetto ed avviare il file create con la console.<br />
Per coloro che non sono così scafati con il sistema Mac o comunque non sono pratici del codice via riga di comando, il sistema potrà rivelarsi un ostacolo non da poco.</p>
<p>Andate sul sito Phonegap.com e scaricate nella cartella Download.<br />
Il file che dovete utilizzare per creare un nuovo progetto Cordova è situato, all&#8217;interno della cartella appena scompattata, in /lib/ios/bin.<br />
Copiate la cartella bin all&#8217;interno della cartella Download.</p>
<p>Ora aprite la console ( basta andare in alto a destra e digitare terminal ) e andate in [nomeutente]/documents &#8211;&gt; la cartella dove avete copiato il tutto.</p>
<p>Nella console digitate:<br />
<strong>./create</strong></p>
<p>La console vi risponderà con:<br />
<strong>Usage: ./create &lt;path_to_new_project&gt; &lt;package_name&gt; &lt;project_name&gt;</strong><br />
<strong>&lt;path_to_new_project&gt;: Path to your new Cordova iOS project</strong><br />
<strong>&lt;package_name&gt;: Package name, following reverse-domain style convention</strong><br />
<strong>&lt;project_name&gt;: Project name</strong></p>
<p>Digitiamo quindi, al fine di creare il nostro progetto:<br />
<strong>./create /Users/[nomeutente]/documents/[nomeapp] com.[nomeapp] [nomeapp]</strong></p>
<p>Vi consiglio di evitare spazi o caratteri strani nel nome del progetto, o XCode potrebbe non essere molto clemente <img src='http://www.oneblackcat.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Ora quello che vi rimane da fare è un bel doppio click sul file di progetto XCode generato.<br />
Se, per caso, aprendo il progetto in XCode, <strong>notate alcuni errori gravi</strong> ( segnalati in rosso ), oppure direttamente il Build fallisce miseramente, allora c&#8217;è una sola cosa da fare: <strong>aggiornare XCode</strong>. Nel caso in cui l&#8217;Aggiornamento Software del Mac non vi segnala la presenza della nuova versione, allora dovete andare nell&#8217; App Store e scaricarlo direttamente.</p>
<p>Una volta aggiornato XCode all&#8217;ultima versione disponibile, il vostro Build avverrà senza particolari problemi, salvo alcune segnalazioni di <strong>InvokeString</strong> deprecato, che dipendono però da Cordova stesso.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/phonegap-cordova-2-1-xcode-errori-in-fase-di-build/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Problemi con la cache di Facebook?</title>
		<link>http://www.oneblackcat.it/index.php/problemi-con-la-cache-di-facebook/</link>
		<comments>http://www.oneblackcat.it/index.php/problemi-con-la-cache-di-facebook/#comments</comments>
		<pubDate>Wed, 19 Sep 2012 08:35:29 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Divagazioni]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[facebook]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=292</guid>
		<description><![CDATA[Vi sarà capitato moltissime volte di dover o voler postare un link ad una pagina o ad un articolo su Facebook, ed il più delle volte non avrete notato il fastidioso problema della cache del social network. Se il link non fa parte di un vostro sito, ma di uno esterno, il problema non si [...]]]></description>
			<content:encoded><![CDATA[<p>Vi sarà capitato moltissime volte di dover o voler postare un link ad una pagina o ad un articolo su <strong>Facebook</strong>, ed il più delle volte non avrete notato il fastidioso problema della <strong>cache</strong> del social network.</p>
<p>Se il link non fa parte di un vostro sito, ma di uno esterno, il problema non si pone, difficilmente avrete diretto accesso ai tag tipo <strong>title</strong> e <strong>description</strong>, ma nel momento in cui la pagina è vostra, o ne siete amministratore, beh, il discorso cambia eccome.</p>
<p>Nel mio caso l&#8217;obiettivo era pubblicizzare un articolo su un <strong>sito e-commerce</strong> di un cliente.<br />
Ho postato il link e ho notato che i tag <strong>&lt;title&gt;</strong> e <strong>&lt;description&gt;</strong> erano terrificanti.<br />
Procedo con la modifico dei suddetti tag, aggiorno la pagina, rivado in Facebook, posto nuovamente il link &#8230; e il risultato non cambia. Ma come è possibile? Da una parte l&#8217;HTML della pagina è perfetto, mentre <strong>Facebook mi ripropone i dati precedenti</strong>.</p>
<p>Chiaramente FB salva in memoria i dati relativi a quel link, proprio per evitare un eccessivo traffico verso altri siti. Il problema, però, persiste.</p>
<p><img class="alignleft  wp-image-293" title="Senza-titolo-1" src="http://www.oneblackcat.it/wp-content/uploads/2012/09/Senza-titolo-1.png" alt="" width="323" height="149" /></p>
<p><strong>Ho notato che questo baco è facilmente aggirabile seguendo la seguente procedura.</strong></p>
<p>E&#8217; sufficiente collegarsi al link <a href="http://developers.facebook.com/tools/debug">http://developers.facebook.com/tools/debug</a>, inserire il link che volete postare su FB , attendere il caricamento dei dati ed il gioco è fatto.</p>
<p><strong>Da questo momento</strong>, quando posterete nuovamente il link nella bacheca del Social Network di Mr.Zuckerberg, <strong>la cache sarà aggiornata</strong> all&#8217;ultima versione.</p>
<p>Questa procedura, tra le altre cose, può essere ripetuta N volte, poichè ogni volta verrà aggiornata la versione in memoria.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/problemi-con-la-cache-di-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nuovo blocco di GMail?</title>
		<link>http://www.oneblackcat.it/index.php/nuovo-blocco-di-gmail/</link>
		<comments>http://www.oneblackcat.it/index.php/nuovo-blocco-di-gmail/#comments</comments>
		<pubDate>Thu, 21 Jun 2012 08:27:00 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Divagazioni]]></category>
		<category><![CDATA[gmail]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=286</guid>
		<description><![CDATA[Proprio in queste ore stiamo riscontrando alcuni problemi con alcuni nostri account GMail, mentre su altri funziona tutto regolarmente. Questa la schermata che ci si è presentata pochi minuti fa: Andando negli strumenti di Google Chrome, il profilo pare avere qualche problema: E come succede sempre, cliccando su maggiori informazioni&#8230;]]></description>
			<content:encoded><![CDATA[<p><strong>Proprio in queste ore</strong> stiamo riscontrando alcuni <strong>problemi</strong> con alcuni nostri account <strong>GMail</strong>, mentre su altri funziona tutto regolarmente.</p>
<p>Questa la schermata che ci si è presentata pochi minuti fa:</p>
<p><a href="http://www.oneblackcat.it/wp-content/uploads/2012/06/gmailerror1.png" rel="lightbox[286]" title="gmailerror1"><img class="alignnone  wp-image-289" title="gmailerror1" src="http://www.oneblackcat.it/wp-content/uploads/2012/06/gmailerror1.png" alt="" width="368" height="252" /></a></p>
<p>Andando negli strumenti di Google Chrome, il profilo pare avere qualche problema:</p>
<p><a href="http://www.oneblackcat.it/wp-content/uploads/2012/06/gmailerror2.png" rel="lightbox[286]" title="gmailerror2"><img class="alignnone size-medium wp-image-288" title="gmailerror2" src="http://www.oneblackcat.it/wp-content/uploads/2012/06/gmailerror2-300x205.png" alt="" width="300" height="205" /></a></p>
<p>E come succede sempre, cliccando su maggiori informazioni&#8230;</p>
<p><a href="http://www.oneblackcat.it/wp-content/uploads/2012/06/gmailerror3.png" rel="lightbox[286]" title="gmailerror3"><img class="alignnone size-medium wp-image-287" title="gmailerror3" src="http://www.oneblackcat.it/wp-content/uploads/2012/06/gmailerror3-300x205.png" alt="" width="300" height="205" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/nuovo-blocco-di-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery: semplice validazione di un form</title>
		<link>http://www.oneblackcat.it/index.php/jquery-semplice-validazione-di-un-form/</link>
		<comments>http://www.oneblackcat.it/index.php/jquery-semplice-validazione-di-un-form/#comments</comments>
		<pubDate>Thu, 31 May 2012 19:42:13 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=278</guid>
		<description><![CDATA[A differenza di qualche tempo fa, in cui ero piuttosto interessato a librerie esterne per validare i miei form, oggi preferisco scrivere e ottimizzare la validazione di volta in volta a seconda del sito in questione. Troppe librerie, come jQueryTools o jQuery Validator, sono strettamente dipendenti dalla versione di jQuery utilizzata e vanno spesso in [...]]]></description>
			<content:encoded><![CDATA[<p>A differenza di qualche tempo fa, in cui ero piuttosto interessato a librerie esterne per validare i miei form, oggi preferisco scrivere e ottimizzare la validazione di volta in volta a seconda del sito in questione.</p>
<p>Troppe librerie, come <strong>jQueryTools</strong> o <strong>jQuery Validator</strong>, sono strettamente dipendenti dalla versione di <strong>jQuery</strong> utilizzata e vanno spesso in conflitto con altri elementi nel DOM.</p>
<p><strong>Come procedere, allora, se siamo alle prime armi?</strong><br />
Un passaggio per volta, vediamo di arrivare ad una validazione completa.</p>
<p>Partiamo con il creare una pagina HTML ed inserirvi il riferimento ad un foglio di stile ed alla libreria <strong>jQuery</strong>:</p>
<pre class="brush: plain; title: Codice:; notranslate">
&lt;html&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
&lt;title&gt;Form Validation&lt;/title&gt;
&lt;link href=&quot;stile.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot;&gt;
&lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
...
</pre>
<p><strong>stile.css</strong></p>
<pre class="brush: plain; title: Codice:; notranslate">
body{
	font-size:12px;
	font-family:&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif;
}
/* selezioniamo tutti gli input con type=text e le textarea */
input[type=text], #form1 textarea{
	background:#F9F8F6;
	border:1px solid #706f6f;
	width:90%;
	padding:3px;
	font-size:12px;
	font-family:&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif;
	border-radius:3px;
}
/* diamo uno stile diverso alle select ed ai campi file */
select, #form1 input[type=file]{
	background:#CCCCCC;
	border:1px solid #706f6f;
	width:90%;
	padding:3px;
	font-size:12px;
	font-family:&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif;
	border-radius:3px;
}
button{
	background-color:#CCCCCC;
	border:1px solid #999999;
	width:90%;
	padding:3px;
	font-size:12px;
	font-family:&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif;
	border-radius:3px;
}
button:hover{
	cursor:pointer;
	background-color:#b1b1b1;
}
/* stile che assegno ai campi errati */
.redborder{
	border:1px solid #C00 !important;
	box-shadow:0 0 3px #990000;
}
/* stile che assegno ai campi corretti */
.greenborder{
	border:1px solid #0C0 !important;
	box-shadow:0 0 3px #009933;
}

.errormsg{
	display:none;
}
.errormsg h2{
	color:#C00;
	margin:0px;
	padding:0px;
}
.errormsg ul{
	margin-top:0px;
	font-size:11px;
	color:#C00;
	font-weight:bold;

}
.waitmsg{
	display:none;
}
</pre>
<p><strong>Form:</strong></p>
<pre class="brush: plain; title: Codice:; notranslate">&lt;/pre&gt;
&lt;form id=&quot;form1&quot; action=&quot;#&quot; method=&quot;post&quot; name=&quot;form1&quot;&gt;
&lt;label for=&quot;nome&quot;&gt;Inserisci il tuo nome: &lt;/label&gt;
&lt;input id=&quot;nome&quot; type=&quot;text&quot; name=&quot;nome&quot; data-description=&quot;Nome&quot; /&gt;

&lt;label for=&quot;cognome&quot;&gt;Inserisci il tuo cognome: &lt;/label&gt;
&lt;input id=&quot;cognome&quot; type=&quot;text&quot; name=&quot;cognome&quot; data-description=&quot;Cognome&quot; /&gt;

&lt;label for=&quot;email&quot;&gt;Inserisci la tua E-Mail: &lt;/label&gt;
&lt;input id=&quot;email&quot; type=&quot;text&quot; name=&quot;email&quot; data-description=&quot;E-Mail&quot; /&gt;

&lt;label for=&quot;marca&quot;&gt;Seleziona la marca della tua auto: &lt;/label&gt;
&lt;select name=&quot;marca&quot; data-description=&quot;Marca&quot;&gt; &lt;option selected=&quot;selected&quot; value=&quot;0&quot;&gt;Seleziona una voce...&lt;/option&gt;&lt;/select&gt;
&lt;select name=&quot;marca&quot; data-description=&quot;Marca&quot;&gt; &lt;option value=&quot;1&quot;&gt;BMW&lt;/option&gt;&lt;/select&gt;
&lt;select name=&quot;marca&quot; data-description=&quot;Marca&quot;&gt; &lt;option value=&quot;2&quot;&gt;OPEL&lt;/option&gt;&lt;/select&gt;
&lt;select name=&quot;marca&quot; data-description=&quot;Marca&quot;&gt; &lt;option value=&quot;3&quot;&gt;MERCEDES&lt;/option&gt;&lt;/select&gt;
&lt;select name=&quot;marca&quot; data-description=&quot;Marca&quot;&gt; &lt;option value=&quot;4&quot;&gt;PORSCHE&lt;/option&gt;&lt;/select&gt;

&lt;input id=&quot;privacy&quot; type=&quot;radio&quot; name=&quot;privacy&quot; value=&quot;1&quot; data-description=&quot;Privacy&quot; /&gt;
&lt;label for=&quot;privacy&quot;&gt;*&lt;strong&gt;si&lt;/strong&gt;, ho letto e accetto il trattamento dei miei dati personali&lt;/label&gt;

&lt;button id=&quot;submitform1&quot; type=&quot;button&quot;&gt;Invia la richiesta&lt;/button&gt;
&lt;input id=&quot;errorState&quot; type=&quot;hidden&quot; name=&quot;errorState&quot; value=&quot;0&quot; /&gt;
&lt;div class=&quot;errormsg&quot;&gt;
&lt;h2&gt;Attenzione&lt;/h2&gt;
&lt;/div&gt;
&lt;div class=&quot;waitmsg&quot;&gt;
&lt;h2&gt;&lt;img src=&quot;img/ajax-loader3.gif&quot; alt=&quot;&quot; width=&quot;24&quot; height=&quot;24&quot; align=&quot;absmiddle&quot; /&gt; Attendere prego&lt;/h2&gt;
&lt;/div&gt;
&lt;/form&gt;
&lt;pre&gt;

</pre>
<p><strong>Alcuni tag sono custom, come ad esempio data-description.</strong><br />
Ho preferito gestire in maniera facoltativa il tag <strong>data-description</strong>, così da poter descrivere in maniera diversa, dal nome standard del campo, la label del campo stesso.<br />
Nel caso in cui il campo sia<br />
(input id=&#8221;email&#8221; type=&#8221;text&#8221;) e volessi scrivere &#8220;Il campo E-Mail non è corretto&#8221;, allora inserirò il valore &#8220;E-Mail&#8221; nel tag data-description.<br />
Un sistema <span style="text-decoration: underline;">veloce</span>, facile da customizzare, <span style="text-decoration: underline;">non obbligatorio</span> e <span style="text-decoration: underline;">compatibile</span> anche su IE.</p>
<p>Alla fine del form invece ho un campo con id=<strong>errorState</strong> e <strong>default value=0</strong>.<br />
Durante il processo di validazione, mi appoggio al value di id=errorState, modificandolo in value=1 nel caso di errore in qualsiasi campo.<br />
I messaggi di errore, invece, sono listati in un<br />
(ul) dentro il div con class=errormsg.<br />
Non ho inserito alcun input type=submit, ma un semplice button e ne intercetto il click con un semplicissimo <strong>bind()</strong>, sostituibile ( consigliato ) con un <strong>on()</strong>, visto che le nuove release di jQuery saranno poco gentili nei confronti di metodi deprecati.</p>
<p>Inserisco prima alcune funzioni:</p>
<pre class="brush: plain; title: Codice:; notranslate">
// per pura velocità di scrittura del codice, mi creo una funzione tolog() ne commento il console.log() quando testo su IE.
function tolog(me){
  console.log(me);
}

// funzione che inserisce nella lista degli errori il singolo errore di validazione
function addToErroMsg(msg){
var msg_final = '&lt;/pre&gt;
&lt;ul&gt;
	&lt;li&gt;' + msg + '&lt;/li&gt;
&lt;/ul&gt;
&lt;pre&gt;
';
  $('.errormsg ul').append(msg_final);
}
</pre>
<p>Ora intercetto il click del bottone di invio:</p>
<pre class="brush: plain; title: Codice:; notranslate">
$('#submitform1').click(function(){

        // a tutti i campi del form che hanno la class=redborder rimuovo sia la classe redborder che greenborder
	$('#form1 input.redborder, #form1 select.redborder').removeClass('redborder').removeClass('greenborder');
        // svuoto la lista degli errori
	$('.errormsg ul').empty();
        // rimetto il valore di default di errorState
	$('#errorState').val('0');

        // valido i campi sottostanti. il tipo text può essere omesso, gli altri tipi devono essere citati
        // attualmente ho creato una validazione solamente per email, select e radio
	validField('nome');
	validField('cognome');
	validField('email','email');
	validField('marca','select');
	validField('privacy','radio');

        // se errorState==1 allora c'è stato un errore
	if($('#errorState').val()==1){
		$('.errormsg h2').html('Attenzione:');
		$('.errormsg').fadeIn();
	}else{
                // non c'è stato errore di validazione

		$('#submitform1').attr('disabled','disabled');   // disabilito il pulsante di invio
		$('.errormsg').hide();  // nascondo l'eventuale messaggio di errore validazione
		$('.waitmsg').fadeIn(); // mostro il messaggio di attesa
		$('#form1').submit();   // submit del form
	}

})
</pre>
<p>Ho commentato riga per riga il codice, così vi sarà molto semplice comprendere e personalizzare quando scritto.<br />
Ora non resta che instanziare la funzione <strong>validField()</strong>:</p>
<pre class="brush: plain; title: Codice:; notranslate">
function validField(fieldName,tipo){

	// l'ID è fieldName: ora valuto se ho messo una descrizione diversa
	var fieldDesc = $('#' + fieldName).attr('data-description');
	if(fieldDesc==undefined){
		// il campo ha una descrizione diversa
		fieldDesc = fieldName;
	}

	// validazione per campo TEXT
	if(tipo==undefined || tipo=='text'){
		fieldValue = $('#' + fieldName).val();
		if(fieldValue.length==0){
			// validazione fallita, assegno la classe=redborder
			$('#' + fieldName).addClass('redborder').removeClass('greenborder');
			// errorState=1
			$('#errorState').val('1');
			// messaggio di errore, qui potete personalizzarlo
			addToErroMsg('Campo ' + fieldDesc + ' obbligatorio');
		}else{
			// la validazione è corretta, assegno la classe=greenborder
			$('#' + fieldName).addClass('greenborder').removeClass('redborder');
		}
	} // end type text

	if(tipo=='email'){

		fieldValue = $('#' + fieldName).val();
		if(fieldValue.length==0){
			$('#' + fieldName).addClass('redborder').removeClass('greenborder');
			addToErroMsg('Campo ' + fieldDesc + ' obbligatorio');
			$('#errorState').val('1');
		}else{
			if(fieldValue.indexOf('.')==-1 || fieldValue.indexOf('@')==-1){
				$('#' + fieldName).addClass('redborder').removeClass('greenborder');
				addToErroMsg('E-Mail non valida');
				$('#errorState').val('1');
			}else{
				$('#' + fieldName).addClass('greenborder').removeClass('redborder');
			}
		}
	} // end type email

	if(tipo=='select'){
		fieldValue = $('#' + fieldName + ' option:selected').val();
		if(fieldValue==0){
			$('#' + fieldName).addClass('redborder').removeClass('greenborder');
			addToErroMsg('Campo ' + fieldDesc + ' obbligatorio');
			$('#errorState').val('1');
		}else{
			$('#' + fieldName).addClass('greenborder').removeClass('redborder');
		}
	} // end type select

	if(tipo=='radio'){

		fieldValue = $('#' + fieldName).attr('checked');
		if(fieldValue==undefined){
			$('label[for=&quot;privacy&quot;]').css('color','red');
			addToErroMsg('Campo ' + fieldDesc + ' obbligatorio');
			$('#errorState').val('1');
		}else{
			$('label[for=&quot;privacy&quot;]').css('color','#999');
		}
	} // end type radio

} //end validField function
</pre>
<p>Abbiamo lavorato sullo stato di undefined di alcune variabili: su questa azione c&#8217;è sempre un aperto dibattito se non sia meglio operare diversamente.<br />
Probabilmente si potrebbe procedere in maniera più &#8220;pulita&#8221;, ma in questo caso il tempo era poco e il risultato &#8230; accettabile.</p>
<p><strong>Se volete vedere la demo di questo form, <a title="OneBlackCat Simple Validation Demo" href="http://demo.oneblackcat.it/simplevalidation/" target="_blank">cliccate qui</a>, mentre da <a title="OneBlackCat - Download codice in formato zip" href="http://demo.oneblackcat.it/simplevalidation/form_validator.zip" target="_blank">qui </a>scaricate lo zip con il codice.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/jquery-semplice-validazione-di-un-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Primi passi con jQuery Mobile: realizziamo la prima pagina</title>
		<link>http://www.oneblackcat.it/index.php/primi-passi-con-jquery-mobile-realizziamo-la-prima-pagina/</link>
		<comments>http://www.oneblackcat.it/index.php/primi-passi-con-jquery-mobile-realizziamo-la-prima-pagina/#comments</comments>
		<pubDate>Tue, 29 May 2012 20:53:53 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[jQuery Mobile]]></category>
		<category><![CDATA[jquery mobile]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=269</guid>
		<description><![CDATA[Per tutti coloro che hanno solamente sentito parlare di jQuery Mobile ed hanno bisogno di un piccolo tutorial sui primi passi in jQuery Mobile, vi proponiamo alcuni esempi su come procedere. CODICE HTML INIZIALE: Iniziamo con l&#8217;includere alcune librerie ed il file CSS di jQuery Mobile, contenente i temi proposti di default da jQuery. Non [...]]]></description>
			<content:encoded><![CDATA[<p>Per tutti coloro che hanno solamente sentito parlare di <strong>jQuery Mobile</strong> ed hanno bisogno di un piccolo tutorial sui <strong>primi passi in jQuery Mobile</strong>, vi proponiamo alcuni esempi su come procedere.</p>
<p><strong>CODICE HTML INIZIALE:</strong></p>
<pre class="brush: plain; title: Codice:; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;utf-8&quot; /&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot; /&gt;
        &lt;title&gt;La mia prima pagina jQuery Mobile&lt;/title&gt;
        &lt;link rel=&quot;stylesheet&quot; href=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css&quot; /&gt;
        &lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&quot;&gt;&lt;/script&gt;
        &lt;script src=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js&quot;&gt;&lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Iniziamo con l&#8217;includere alcune librerie ed il file <strong>CSS</strong> di <strong>jQuery Mobile</strong>, contenente i temi proposti di default da jQuery. Non dimenticate inoltre di includere la libreria di jQuery: nel nostro caso includeremo la libreria aggiornata alla versione 1.7.1.</p>
<p>Quello che vogliamo ottenere è la barra nel frontone, in alto, contenente un titolo d&#8217;esempio, ed un testo generico nel corpo.</p>
<p>Iniziamo, prima di tutto, inserendo nel BODY un oggetto che fungerà da pagina:</p>
<pre class="brush: plain; title: Codice:; notranslate">
&lt;div data-role=&quot;page&quot; id=&quot;page1&quot;&gt;
 ...
&lt;/div&gt;
</pre>
<p>Come vedere, l&#8217;oggetto pagina è un semplice DIV. jQuery riconoscerà quel DIV come pagina grazie al tag data-role=page. Chiaramente andremo a dare un ID=page1 per poterla identificare facilmente.</p>
<p>All&#8217;interno di questa PAGE andiamo ad inserire due oggetti: un header ( con il titolo ) e un content.</p>
<pre class="brush: plain; title: Codice:; notranslate">
&lt;div data-role=&quot;page&quot; id=&quot;page1&quot;&gt;

    &lt;div data-role=&quot;header&quot;&gt;
       ...
    &lt;/div&gt;
    &lt;div data-role=&quot;content&quot;&gt;
       ...
    &lt;/div&gt;

&lt;/div&gt;
</pre>
<p><strong><em>Cosa abbiamo fatto?</em></strong><br />
Abbiamo semplicemente creato due oggetti diversi, un header ed un content, identificandoti grazie ai tag <strong>data-role=header</strong> e <strong>data-role=content</strong>. A questo elenco aggiungeremo, volendo, un <strong>data-role=footer</strong>, ma in questo caso non verrà affrontata.</p>
<p>Per poter evidenziare un titolo nell&#8217;header, andiamo ad inserire un <strong>H2</strong>:</p>
<pre class="brush: plain; title: Codice:; notranslate">
&lt;div data-role=&quot;page&quot; id=&quot;page1&quot;&gt;

    &lt;div data-theme=&quot;b&quot; data-role=&quot;header&quot;&gt;
                &lt;h3&gt;
                    Titolo nel frontone
                &lt;/h3&gt;
    &lt;/div&gt;
    &lt;div data-role=&quot;content&quot;&gt;
       ...
    &lt;/div&gt;

&lt;/div&gt;
</pre>
<p>Se avete fatto attenzione, ho inserito un tag html H3 e un riferimento al tema.<br />
Il tema di default avrebbe visualizzato l&#8217;header con uno sfondo nero, mentre forzando il tema a visualizzare il tema=b, sarà di sfondo blu.</p>
<p>Ora non resta che inserire un testo di esempio dentro l&#8217;elemento content.</p>
<pre class="brush: plain; title: Codice:; notranslate">
&lt;div data-role=&quot;page&quot; id=&quot;page1&quot;&gt;

    &lt;div data-theme=&quot;b&quot; data-role=&quot;header&quot;&gt;
                &lt;h3&gt;
                    Titolo nel frontone
                &lt;/h3&gt;
    &lt;/div&gt;
    &lt;div data-role=&quot;content&quot;&gt;
                &lt;div&gt;
                    &lt;h2&gt;
                        &lt;strong&gt;
                            Lorem ipsum: titolo
                        &lt;/strong&gt;
                    &lt;/h2&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;p&gt;
                        &lt;b&gt;
                            &lt;span&gt;
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam facilisis,
                                dolor ultricies blandit molestie, nibh arcu eleifend purus, nec malesuada
                                erat mi ut sem.
                            &lt;/span&gt;
                        &lt;/b&gt;
                    &lt;/p&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;p&gt;
                        &lt;b&gt;
                            &lt;span&gt;
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam facilisis,
                                dolor ultricies blandit molestie, nibh arcu eleifend purus, nec malesuada
                                erat mi ut sem.
                            &lt;/span&gt;
                        &lt;/b&gt;
                    &lt;/p&gt;
                &lt;/div&gt;
    &lt;/div&gt;

&lt;/div&gt;
</pre>
<p>Abbiamo inserito un semplicissimo codice html all&#8217;interno del div data-role=content.<br />
Se tutto è andato come dovrebbe e abbiamo provato il codice soprastante con un browser come Chrome o Firefox, il risultato dovrebbe essere il seguente:</p>
<p><a href="http://www.oneblackcat.it/wp-content/uploads/2012/05/jquerymobile_test1.png" rel="lightbox[269]" title="jquerymobile_test1"><img class="alignnone size-full wp-image-270" title="jquerymobile_test1" src="http://www.oneblackcat.it/wp-content/uploads/2012/05/jquerymobile_test1.png" alt="" width="401" height="572" /></a></p>
<p>Vi siete persi qualche passaggio? Ecco il codice completo:</p>
<pre class="brush: plain; title: Codice:; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;utf-8&quot; /&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot; /&gt;
        &lt;title&gt;
        &lt;/title&gt;
        &lt;link rel=&quot;stylesheet&quot; href=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css&quot; /&gt;
        &lt;script src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js&quot;&gt;
        &lt;/script&gt;
        &lt;script src=&quot;http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js&quot;&gt;
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;div data-role=&quot;page&quot; id=&quot;page1&quot;&gt;
            &lt;div data-theme=&quot;b&quot; data-role=&quot;header&quot;&gt;
                &lt;h3&gt;
                    Titolo nel frontone&lt;/h3&gt;
            &lt;/div&gt;
            &lt;div data-role=&quot;content&quot;&gt;
                &lt;div&gt;
                    &lt;h2&gt;
                        &lt;strong&gt;
                            Lorem ipsum: titolo&lt;/strong&gt;&lt;/h2&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;p&gt;
                        &lt;b&gt;
                            &lt;span&gt;
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam facilisis,
                                dolor ultricies blandit molestie, nibh arcu eleifend purus, nec malesuada
                                erat mi ut sem.
                            &lt;/span&gt;
                        &lt;/b&gt;
                    &lt;/p&gt;
                &lt;/div&gt;
                &lt;div&gt;
                    &lt;p&gt;
                        &lt;b&gt;
                            &lt;span&gt;
                                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam facilisis,
                                dolor ultricies blandit molestie, nibh arcu eleifend purus, nec malesuada
                                erat mi ut sem.
                            &lt;/span&gt;
                        &lt;/b&gt;
                    &lt;/p&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<h2>Piccolo off topic:</h2>
<p>Tutta la nostra solidarietà va agli amici emiliani, così duramente colpiti dalle scosse di questi giorni. Non appena riceveremo le informazioni corrette, pubblicheremo le modalità di acquisto di prodotti agroalimentari dalle ditte così duramente colpite dal disastro. Perchè acquistare il parmigiano al supermercato, quando lo si può acquistare direttamente dai produttori, così bisognosi di aiuto?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/primi-passi-con-jquery-mobile-realizziamo-la-prima-pagina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Motherboard fritta e sostituzione rapida</title>
		<link>http://www.oneblackcat.it/index.php/motherboard-fritta-e-sostituzione-rapida/</link>
		<comments>http://www.oneblackcat.it/index.php/motherboard-fritta-e-sostituzione-rapida/#comments</comments>
		<pubDate>Mon, 28 May 2012 19:46:31 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Divagazioni]]></category>
		<category><![CDATA[asus]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=264</guid>
		<description><![CDATA[Black Friday Venerdì scorso il PC desktop che uso per programmare ha deciso, in seguito ad un fulmine, di friggere e spegnersi. Cose che capitano, ma la cosa molto strana è che, nonostante un gruppo di continuità ed un alimentatore OCZ da 1250w, l&#8217;unica cosa a friggere sia stata la scheda madre, una Asus P6T [...]]]></description>
			<content:encoded><![CDATA[<h3>Black Friday</h3>
<p>Venerdì scorso il PC desktop che uso per programmare ha deciso, in seguito ad un fulmine, di friggere e spegnersi. Cose che capitano, ma la cosa molto strana è che, nonostante un gruppo di continuità ed un alimentatore <strong>OCZ da 1250w</strong>, l&#8217;unica cosa a friggere sia stata la scheda madre, una <strong>Asus P6T Deluxe Palm Edition</strong>.</p>
<p>E&#8217; una scheda che ha sempre fatto il suo lavoro, anche se ultimamente mi ha dato da pensare che non fosse il massimo dell&#8217;ingegneria: sia la mia che quella di mio padre, identiche e comperate assieme, hanno sempre dato qualche piccolo difetto.</p>
<p>Appurato che fosse la MB a partire, il problema nasceva dal fatto che, essendo datata, trovarne una uguale era realmente un problema: le poche schede nuove avevano un costo veramente fuori dal mondo, più di 395£ + spedizione dall&#8217;UK. Una soluzione non percorribile.</p>
<p>Abbandonata l&#8217;idea di trovarne una uguale, mi sono fatto convincere da un amico sistemista di prenderne una con il medesimo <strong>socket 1366</strong> per provare a sostituirla a caldo: devo ammettere che avevo forti dubbi sulle possibilità che tutto andasse bene, ma la mia esperienza in fatto di sistemi è molto limitata, quindi ho preso per buono quanto consigliatomi.</p>
<h3>Una nuova scheda madre: Asus Sabertooth X58</h3>
<p>La nuova scheda è una <strong>Asus Sabertooth X58</strong>, veramente una gran bella scheda, potente, completa e dal costo contenuto, circa 220€ ivata.</p>
<p>Dopo aver smontato tutto e assemblato tutti i componenti, collegati i 4 dischi SATA, il masterizzatore SATA, ho fatto che eliminare una periferica IDE inutile e montato il processore <strong>i7 920</strong> oltre ai 24gb di RAM.</p>
<p>Accendo il PC e &#8230; niente. Il nulla cosmico.<br />
Entro nel BIOS e noto che il mio disco C non è elencato tra i dischi di boot. Il problema, forse, nasce dal fatto di averlo collegato in prima istanza sul canale SATA 6gb/s: probabilmente è un problema di incompatibilità, ma non ho avuto abbastanza tempo per fare le prove del caso.</p>
<p>Spostando il cavo SATA del disco primario sul canale standard 3gb/s, tutto è tornato normale: il disco è presente nell&#8217;elenco degli hard disk di boot.</p>
<p>Una volta corretto il boot list, il sistema sale e, come d&#8217;incanto, Windows mi chiede se voglio uno start normale o in modalità provvisoria. Quasi un miraggio. Evitare di installare di nuovo da zero Windows, tutti gli applicativi, la <strong>Suite Adobe</strong>, l&#8217;infrastruttura virtuale: sapete bene cosa significhi non dover scaricare giga di dati da internet per una installazione, per non parlare delle configurazioni custom perse.</p>
<p>Lo faccio partire in modalità provvisoria, Windows non chiede di essere attivato, la suite di Adobe non riconosce il mio account di <strong>Creative Cloud</strong> e il sistema parte con l&#8217;installazione di una serie di driver standard. Vanno tutti a buon fine, tranne quelli Marvell e i driver video: inserisco il DVD della scheda madre, installo i driver mancanti. Riavvio.</p>
<p>Un sogno. Funziona praticamente tutto alla perfezione.<br />
Mi è bastato scaricare ed installare i driver NVidia aggiornati per le mie due <strong>GT260 in SLI</strong> e il sistema mi configura nuovamente i monitor riportando il mio sistema completo allo status quo pre-frittura mista di condensatori di scheda madre.</p>
<p>Ora il sistema è stabile, più veloce di circa il 20% e mi ritrovo con l&#8217;USB3 nativo on board e il supporto per nuovi processori. La Adobe Creative Suite mi chiede l&#8217;Adobe ID e mi conferma la correttezza e lancia correttamente gli applicativi.</p>
<p>La morale è: se avete una scheda simile alla Asus P6T e dovete gioco forza cambiarla, forse la mia esperienza può tornarvi utile.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/motherboard-fritta-e-sostituzione-rapida/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery: differenze tra .bind() .live() .delegate() e .on()</title>
		<link>http://www.oneblackcat.it/index.php/jquery-differenze-tra-bind-live-delegate-e-on/</link>
		<comments>http://www.oneblackcat.it/index.php/jquery-differenze-tra-bind-live-delegate-e-on/#comments</comments>
		<pubDate>Fri, 25 May 2012 08:35:50 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=258</guid>
		<description><![CDATA[bind(),  live(),  delegate(),  on(): tutti uguali? Una delle cose più incasinate in jQuery è capire la differenza che c&#8217;è realmente tra i vari metodi .bind(), .live(), .delegate() e .on(), poichè, di primo acchito, sembra che ognuno sia una semplice alternativa dell&#8217;altro. Ovviamente così non è, magari qualche commento a riguardo può chiarire questi passaggi, permettendovi [...]]]></description>
			<content:encoded><![CDATA[<h1>bind(),  live(),  delegate(),  on(): tutti uguali?</h1>
<p>Una delle cose più incasinate in <strong>jQuery</strong> è capire la differenza che c&#8217;è realmente tra i vari metodi <strong>.bind()</strong>, <strong>.live()</strong>, <strong>.delegate()</strong> e <strong>.on()</strong>, poichè, di primo acchito, sembra che ognuno sia una semplice alternativa dell&#8217;altro.</p>
<p>Ovviamente così non è, magari qualche commento a riguardo può chiarire questi passaggi, permettendovi di decidere meglio cosa e come fare.</p>
<p>Per prima cosa dichiaro un po&#8217; di codice HTML che userò per i miei esempi:</p>
<pre class="brush: plain; title: Codice:; notranslate">
&lt;ul id=&quot;giocatori&quot; data-role=&quot;listview&quot; data-filter=&quot;true&quot;&gt;
    &lt;!-- ... altri elementi di lista ... --&gt;
    &lt;li&gt;
        &lt;a href=&quot;giocatore_dettaglio.html?id=10&quot;&gt;
            &lt;h3&gt;Mauro Bergamasco&lt;/h3&gt;
            &lt;p&gt;&lt;strong&gt;Flanker&lt;/strong&gt;&lt;/p&gt;
            &lt;p&gt;Nazionale italiana di Rugby&lt;/p&gt;
        &lt;/a&gt;
    &lt;/li&gt;
    &lt;!-- ... altri elementi di lista ... --&gt;
&lt;/ul&gt;
</pre>
<h2>Il metodo bind()</h2>
<pre class="brush: plain; title: Codice:; notranslate">
$( &quot;#giocatori li a&quot; ).bind( &quot;click&quot;, function( e ) {} );
$( &quot;#giocatori li a&quot; ).click( function( e ) {} );
$( &quot;#giocatori li a&quot; ).hover( function( e ) {} );
</pre>
<p>Il metodo <strong>bind()</strong> collega il tipo di evento e l&#8217;handler direttamente nell&#8217;elemento DOM in questione. E&#8217; sicuramente il più usato, grazie alla facilità d&#8217;uso, ma qualche problema di prestazioni lo causa. Considerate che .click() non è nient&#8217;altro che un&#8217;abbreviazione di bind() stesso &#8230; ecco perchè affermo che bind() è il più usato <img src='http://www.oneblackcat.it/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .<br />
Il problema di prestazioni è dato dal fatto che l&#8217;handler dichiarato viene applicato a tutti gli elementi del DOM coinvolti dal comando, e quello che succede è vedere reiterato lo stesso handler N volte. Questa cosa non è il massimo a livello di prestazioni.</p>
<h2>Il metodo live()</h2>
<p>Bastano veramente poche parole per descrivere il metodo live(). Siete soliti usarlo? Allora maggiore sarà il tempo che dovrete impiegare per sostituirlo con un metodo alternativo migliore e, sopra ogni cosa, che non sia deprecato ufficialmente da jQuery dalla 1.7. Ebbene si, notizia ferale.</p>
<p>La problematica principale di live() era quando lo si usava in presenza di pagine molto ricche e soprattutto quando veniva &#8220;invocato&#8221; in maniera non specifica, utilizzando un selettore generico:</p>
<pre class="brush: plain; title: Codice:; notranslate">$( &quot;#giocatori li&quot; ).live( &quot;click&quot;, function( e ) {} );</pre>
<h2>Il metodo delegate()</h2>
<pre class="brush: plain; title: Codice:; notranslate">$( &quot;#giocatori&quot; ).delegate( &quot;li a&quot;, &quot;click&quot;, function( e ) {} );</pre>
<p>Live() collega l&#8217;handler dell&#8217;evento al documento generale, mentre delegate() collega le informazioni, la catena selettore/evento ( &#8220;li a&#8221;&amp;&#8221;click&#8221; ) direttamente all&#8217;elemento nel DOM ( &#8220;#giocatori&#8221; ). Questo sistema di collegamento direttamente nel DOM element ha permesso di risolvere molte problematiche di funzionamento, rispetto che infarcire il document di una sfilza di informazioni una dietro l&#8217;altra e, cosa ancora più importante, funziona correttamente con gli elementi aggiunti dinamicamente DOPO la fine del caricamento iniziale della pagina.</p>
<h2>Il metodo on()</h2>
<p>Quello che, stando alle affermazioni di jQuery stessa, dovrebbe essere il vostro obiettivo futuro è proprio on(), che prenderà in un colpo solo il posto di bind(), unbind(), live(), die(), delegate() e undelegate(). Guardare per credere:</p>
<pre class="brush: plain; title: Codice:; notranslate">
// Bind
$( &quot;#giocatori li a&quot; ).on( &quot;click&quot;, function( e ) {} );
$( &quot;#giocatori li a&quot; ).bind( &quot;click&quot;, function( e ) {} );

// Live
$( document ).on( &quot;click&quot;, &quot;#giocatori li a&quot;, function( e ) {} );
$( &quot;#giocatori li a&quot; ).live( &quot;click&quot;, function( e ) {} );

// Delegate
$( &quot;#giocatori &quot; ).on( &quot;click&quot;, &quot;li a&quot;, function( e ) {} );
$( &quot;#giocatori &quot; ).delegate( &quot;li a&quot;, &quot;click&quot;, function( e ) {} );
</pre>
<p>Come potete vedere, <strong>la potenza data a on() è notevole</strong>: a seconda di come lo chiamate in causa, lui diventa metamorfico e modifica il modo in cui l&#8217;evento è chiamato in causa.<br />
Sicuramente l&#8217;instanziare un metodo solo, che prenda il posto di N metodi, aiuta a standardizzare il tutto, rendendolo anche più facile per jQuery da manipolare.<br />
L&#8217;unico lato negativo, se così si può chiamare, è che, per poterlo usare, bisogna entrare un attimo nell&#8217;ottica di come cambia la gestione dell&#8217;evento a seconda di come richiamate il metodo.</p>
<p>Il suggerimento del maestro Zen è quello di <strong>studiare il metodo on()</strong> e cominciare ad usarlo in tutti i nuovi progetti dove userete<strong> la libreria jQuery dalla 1.7 in poi</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/jquery-differenze-tra-bind-live-delegate-e-on/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery Mobile: prototipazione rapida con Codiqa</title>
		<link>http://www.oneblackcat.it/index.php/jquery-mobile-prototipazione-rapida-con-codiqa/</link>
		<comments>http://www.oneblackcat.it/index.php/jquery-mobile-prototipazione-rapida-con-codiqa/#comments</comments>
		<pubDate>Thu, 24 May 2012 15:22:13 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[jQuery Mobile]]></category>
		<category><![CDATA[codiqa]]></category>
		<category><![CDATA[jquery mobile]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=252</guid>
		<description><![CDATA[Che siate alle prime armi con jQuery Mobile o che sappiate già tutto quello che serve, Codiqa mette a disposizione uno strumento decisamente interessante per realizzare con un&#8217;interfaccia drag&#38;drop le vostre applicazioni web. L&#8217;idea di fondo è dare uno strumento semplice, veloce e intuitivo per creare una bozza di interfaccia da poter, alla fine della [...]]]></description>
			<content:encoded><![CDATA[<p>Che siate alle prime armi con jQuery Mobile o che sappiate già tutto quello che serve, Codiqa mette a disposizione uno strumento decisamente interessante per realizzare con un&#8217;interfaccia drag&amp;drop le vostre applicazioni web.</p>
<p><img class="alignnone size-full wp-image-254" title="Screenshot_2" src="http://www.oneblackcat.it/wp-content/uploads/2012/05/Screenshot_21.png" alt="" width="481" height="401" /></p>
<p>L&#8217;idea di fondo è dare uno strumento semplice, veloce e intuitivo per creare una bozza di interfaccia da poter, alla fine della fase di design, scaricare e, magari, inviare a colui che dovrà mettere mano al codice.</p>
<p>Seguendo un po&#8217; la falsariga del <a title="Sencha Architect 2" href="http://www.sencha.com/products/architect/" target="_blank">Sencha Architect 2</a>, è uno strumento che permette di realizzare il vostro sito mobile senza conoscerne il codice, anche se l&#8217;ottimizzazione manuale è poi obbligatoria se si vuole raffinare il tutto.</p>
<p>Per quelli più attenti tra voi non sarà necessario aggiungere che il plugin di Codiqa è presente anche sul sito ufficiale di <a title="jQuery Mobile Official page" href="http://jquerymobile.com/" target="_blank">jQuery Mobile</a> &#8230;</p>
<p><a href="http://www.oneblackcat.it/wp-content/uploads/2012/05/Screenshot_3.png" rel="lightbox[252]" title="Screenshot_3"><img class="size-medium wp-image-255 alignleft" title="Screenshot_3" src="http://www.oneblackcat.it/wp-content/uploads/2012/05/Screenshot_3-300x191.png" alt="" width="300" height="191" /></a>Essendo Codiqa un servizio cloud, ha un costo mensile differente a seconda del profilo che preferite, ma se fate attenzione, in fondo alla tabella, c&#8217;è un <a title="Codiqa plans" href="http://www.codiqa.com/plans" target="_blank">link </a>per attivare un&#8217;utenza gratuita con delle forti limitazioni ma utile per provare.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/jquery-mobile-prototipazione-rapida-con-codiqa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come effettuare lo scroll di un testo in jQuery Mobile</title>
		<link>http://www.oneblackcat.it/index.php/come-effettuare-lo-scroll-di-un-testo-in-jquery-mobile/</link>
		<comments>http://www.oneblackcat.it/index.php/come-effettuare-lo-scroll-di-un-testo-in-jquery-mobile/#comments</comments>
		<pubDate>Wed, 23 May 2012 16:16:41 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[jQuery Mobile]]></category>
		<category><![CDATA[jquery mobile]]></category>
		<category><![CDATA[scrollview]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=244</guid>
		<description><![CDATA[Il problema con jQuery Mobile A molti di voi sarà capitato di dover realizzare una qualche interfaccia in jQuery Mobile, eccezionale soluzione per dare un appeal mobile alle vostre interfacce. Il mio problema nasceva dal fatto che per alcuni contenuti particolarmente lunghi, dove non bastava lo spazio renderizzato in pagina, non potevo contare su un [...]]]></description>
			<content:encoded><![CDATA[<h2>Il problema con jQuery Mobile</h2>
<p>A molti di voi sarà capitato di dover realizzare una qualche interfaccia in <strong>jQuery Mobile</strong>, eccezionale soluzione per dare un appeal mobile alle vostre interfacce.<br />
Il mio problema nasceva dal fatto che per alcuni contenuti particolarmente lunghi, dove non bastava lo spazio renderizzato in pagina, non potevo contare su un effetto Scroll On Tap, tipico dell&#8217;interfaccia sugli <strong>SmartPhone</strong>.</p>
<h3>Alcune soluzioni esterne</h3>
<p>Una delle soluzioni più usate è quella di usare <strong>iScroll 4</strong>, che trovate <a title="iScroll 4 di Matteo Spinelli" href="http://cubiq.org/iscroll-4" target="_blank">qui</a>, realizzato <strong>Matteo Spinelli</strong>: la sua soluzione è molto usata, funziona bene e bisogna apporre qualche modifica agli stili CSS dei vari DIV che contengono i vostri dati.</p>
<h2>La mia soluzione con Scrollview.js</h2>
<p>Io ho risolto il mio problema utilizzando il plugin di <strong>Adobe</strong> <strong>jquery.mobile.scrollview.js</strong>.<br />
Non ho avuto alcun bisogno di modificare le mie pagine e l&#8217;effetto è abbastanza fluido. Ad esser completamente sinceri, <strong>iScroll4</strong> permette una <span style="text-decoration: underline;">maggiore fluidità di scroll</span> ma il livello di  smooth raggiunto da scrollview.js raggiungeva lo scopo adeguatamente.</p>
<p>La libreria stessa è offerta con la seguente dicitura:<br />
<em>&#8221; Note: Code is in draft form and is subject to change &#8220;</em></p>
<p>Siccome ho effettuato numerose prove di funzionamento, ho raggiunto la ( mia personalissima ) conclusione che l&#8217;ordine di caricamento in pagina dei vari file .js dovrebbe essere il seguente:</p>
<pre class="brush: plain; title: Codice:; notranslate">
        &lt;link rel=&quot;stylesheet&quot; href=&quot;jquery.mobile-1.1.0.min.css&quot; /&gt;
        &lt;link rel=&quot;stylesheet&quot; href=&quot;jquery.mobile.scrollview.css&quot; /&gt;
        &lt;link rel=&quot;stylesheet&quot; href=&quot;my.css&quot; /&gt;

        &lt;script src=&quot;jquery.min.js&quot;&gt;&lt;/script&gt;
        &lt;script src=&quot;jquery.mobile-1.1.0.min.js&quot;&gt; &lt;/script&gt;
        &lt;script src=&quot;jquery.easing.1.3.js&quot;&gt;
        &lt;/script&gt;
        &lt;script src=&quot;jquery.mobile.scrollview.js&quot;&gt;
        &lt;/script&gt;
        &lt;script src=&quot;scrollview.js&quot;&gt;
        &lt;/script&gt;
</pre>
<p>Per praticità, vi posto i links diretti su <em><strong>demo.oneblackcat.it</strong></em>, ma tenete conto che potrebbero esserci delle versioni più aggiornate sul web, quindi il mio consiglio è quello di cercare su <strong><a title="Google" href="http://www.google.it" target="_blank">Google</a></strong>, non vi sarà difficile trovare le fonti ufficiali.</p>
<p>&lt;link rel=&#8221;stylesheet&#8221; href=&#8221;<a href="http://demo.oneblackcat.it/scrollview/jquery.mobile-1.1.0.min.css" target="_blank">jquery.mobile-1.1.0.min.css</a>&#8221; /&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; href=&#8221;<a href="http://demo.oneblackcat.it/scrollview/jquery.mobile.scrollview.css" target="_blank">jquery.mobile.scrollview.css</a>&#8221; /&gt;<br />
&lt;link rel=&#8221;stylesheet&#8221; href=&#8221;my.css&#8221; /&gt;</p>
<p>&lt;script src=&#8221;<a href="http://demo.oneblackcat.it/scrollview/jquery.min.js" target="_blank">jquery.min.js</a>&#8220;&gt;&lt;/script&gt;<br />
&lt;script src=&#8221;<a href="http://demo.oneblackcat.it/scrollview/jquery.mobile-1.1.0.min.js" target="_blank">jquery.mobile-1.1.0.min.js</a>&#8220;&gt; &lt;/script&gt;<br />
&lt;script src=&#8221;<a href="http://demo.oneblackcat.it/scrollview/jquery.easing.1.3.js" target="_blank">jquery.easing.1.3.js</a>&#8220;&gt;&lt;/script&gt;<br />
&lt;script src=&#8221;<a href="http://demo.oneblackcat.it/scrollview/jquery.mobile.scrollview.js" target="_blank">jquery.mobile.scrollview.js</a>&#8220;&gt;&lt;/script&gt;<br />
&lt;script src=&#8221;<a href="http://demo.oneblackcat.it/scrollview/scrollview.js" target="_blank">scrollview.js</a>&#8220;&gt;&lt;/script&gt;</p>
<p>E&#8217; molto semplice attivare lo <strong>scrollview</strong> sul content di una pagina:</p>
<pre class="brush: plain; title: Codice:; notranslate">
        &lt;div data-role=&quot;page&quot; id=&quot;page5&quot;&gt;
            &lt;div data-theme=&quot;b&quot; data-role=&quot;header&quot;&gt;
                &lt;h3&gt;
                   Titolo della pagina
                &lt;/h3&gt;
            &lt;/div&gt;
            &lt;div data-role=&quot;content&quot; class=&quot;ui-scrolllistview&quot;&gt;
                &lt;div style=&quot;&quot; data-role=&quot;listview&quot;&gt;
                	&lt;div class=&quot;mydetail&quot;&gt;
                    	Lorem ipsum...
                        &lt;/div&gt;
                &lt;/div&gt;
            &lt;/div&gt;

        &lt;/div&gt;
</pre>
<p>Aggiungete solamente, al <em>DIV</em> con <strong>data-role=content</strong> la classe <strong>ui.scrolllistview</strong>, mentre al <em>DIV</em> interno assegnate il ruolo di <strong>data-role=listview</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/come-effettuare-lo-scroll-di-un-testo-in-jquery-mobile/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASP: dividere una stringa mediante un carattere</title>
		<link>http://www.oneblackcat.it/index.php/asp-dividere-una-stringa-mediante-un-carattere/</link>
		<comments>http://www.oneblackcat.it/index.php/asp-dividere-una-stringa-mediante-un-carattere/#comments</comments>
		<pubDate>Wed, 23 May 2012 14:54:05 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Classic Asp]]></category>
		<category><![CDATA[asp]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=236</guid>
		<description><![CDATA[La mia attività di nerd totale mi porta spesso a scrivere, partecipare e rispondere a quesiti, più o meno facili, riguardanti ASP, jQuery, jQuery Mobile, Sencha e tutti quei linguaggi per i quali credo di essere ferrato. In questi giorni mi sono accorto che c&#8217;è ancora un grandissimo numero di persone che hanno a che [...]]]></description>
			<content:encoded><![CDATA[<p>La mia attività di nerd totale mi porta spesso a scrivere, partecipare e rispondere a quesiti, più o meno facili, riguardanti <strong>ASP</strong>, <strong>jQuery</strong>, <strong>jQuery Mobile</strong>, <strong>Sencha</strong> e tutti quei linguaggi per i quali credo di essere ferrato.</p>
<p>In questi giorni mi sono accorto che c&#8217;è ancora un grandissimo numero di persone che hanno a che fare con il <strong>Classic ASP</strong>, volenti o nolenti, e che sono ad un livello piuttosto basso, tale da dover chiedere continuamente suggerimenti su come procedere in date situazioni che, a mio avviso, sono un po&#8217; l&#8217;<strong>ABC del VBScript</strong>.</p>
<p>E&#8217; altresì vero che, ovviamente, <span style="text-decoration: underline;">non tutti sono allo stesso livello</span>, e tutti devono avere la possibilità di superare i proprio ostacoli, facili o difficili che siano.</p>
<p>Nel caso specifico, il problema era dato da un elenco di nomi e cognomi, divisi da una virgola, che dovevano essere listati in una certa maniera.<br />
Posto il caso e la soluzione, non sia mai che qualcuno ne ha bisogno e riesce, navigando nei meandri del web, a trovarla.</p>
<pre class="brush: plain; title: Codice:; notranslate">

' la stringa in questione è la seguente
elencoNomi = &quot;Mario Rossi, Gianni Verdi, Alessandro Bianchi, Ivano Azzurri&quot;

' la necessità è quella di avere, uno sotto l'altro, un elenco di nomi linkati ad una pagina X
' l'ultimo nome non dovrà avere la virgola dopo il nome e non dovranno comparire spazi prima o dopo

ar_elencoNomi = Split( elencoNomi, &quot;,&quot; )

' carico nella variabile ar_elencoNomi l'array di tutti i nomi presenti nella lista elencoNomi
' ora devo fare un ciclo che, per ogni voce, mi scrive a video un link ed il relativo nome e cognome

for x=0 to UBound(ar_elencoNomi)    ' un ciclo che va da zero all'ultimo valore dell'array ar_elencoNomi

   if ar_elencoNomi(x)&lt;&gt;&quot;&quot; then    ' tengo in considerazione solo quelle voci che sono diverse da &quot;&quot;, ossia vuote. Può tornare utile

      nome = Trim( ar_elencoNomi(x) )   ' il Trim() mi elimina gli spazi prima e dopo il valore del nome

      if int(x) &lt; int( UBound(ar_elencoNomi) ) then    'controllo che non sia l'ultima voce
          stringa = &quot;&lt;a href=&quot;pagina1.html&quot;&gt;&quot; &amp; nome &amp; &quot;&lt;/a&gt;, &quot;
      else
          stringa = &quot;&lt;a href=&quot;pagina1.html&quot;&gt;&quot; &amp; nome &amp; &quot;&lt;/a&gt;&quot;
      end if

   end if

next   ' prossima voce del ciclo

</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/asp-dividere-una-stringa-mediante-un-carattere/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CSS: selezionare ed illuminare le textbox</title>
		<link>http://www.oneblackcat.it/index.php/css-selezionare-ed-illuminare-le-textbox/</link>
		<comments>http://www.oneblackcat.it/index.php/css-selezionare-ed-illuminare-le-textbox/#comments</comments>
		<pubDate>Tue, 22 May 2012 07:09:27 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[css3]]></category>
		<category><![CDATA[textbox]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=224</guid>
		<description><![CDATA[Ecco una piccola soluzione ad un problema piuttosto comune: mi hanno chiesto di trovare la soluzione più semplice possibile per selezionare tutte le INPUT di tipo TEXT e illuminarne lo sfondo con effetto glow di colore verde. Sicuramente la necessità era quella di utilizzare esclusivamente codice CSS, senza jQuery, javascript o altro: tutto quello che [...]]]></description>
			<content:encoded><![CDATA[<p>Ecco una piccola soluzione ad un problema piuttosto comune: mi hanno chiesto di trovare la soluzione più semplice possibile per selezionare tutte le INPUT di tipo TEXT e illuminarne lo sfondo con effetto glow di colore verde.</p>
<p>Sicuramente la necessità era quella di utilizzare esclusivamente codice CSS, senza jQuery, javascript o altro: tutto quello che serve è li, nel file CSS, senza bisogno di altro.<br />
La compatibilità con i browser meno recenti non è stata affrontata, ma può essere facilmente risolta con Modernizr o altro di simile.</p>
<p>Non potevo, ovviamente, fare riferimento a tutte le input con:</p>
<pre class="brush: plain; title: Codice:; notranslate">
input{
   /* codice css */
}
</pre>
<p>Questo si può facilmente risolvere inserendo:</p>
<pre class="brush: plain; title: Codice:; notranslate">
input[type=text]{
   /* codice css */
}
</pre>
<p>Assegnamo alle input delle proprietà di base:</p>
<pre class="brush: plain; title: Codice:; notranslate">
input[type=text]{
  outline: none;
  padding: 2px;
  border: 1px solid #CCC;
}
</pre>
<p>Ora assegnamo il solito indigesto codice ad IE9 &amp;</p>
<pre class="brush: plain; title: Codice:; notranslate">
input[type=text]{
  outline: none;
  padding: 2px;
  border: 1px solid #CCC;

  -webkit-transition: all 0.40s ease-in-out;
  -moz-transition: all 0.40s ease-in-out;
  -ms-transition: all 0.40s ease-in-out;
  -o-transition: all 0.40s ease-in-out;

}
</pre>
<p>Ora assegnamo un&#8217;ombra all&#8217;onmouseover:</p>
<pre class="brush: plain; title: Codice:; notranslate">
input[type=text]:hover{
   box-shadow: 0 0 5px #43d034;
   border:1px solid #35bf26;
}
</pre>
<p>Et voilà, il gioco dovrebbe essere fatto!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/css-selezionare-ed-illuminare-le-textbox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>IE contro Chrome: Google sta vincendo la battaglia?</title>
		<link>http://www.oneblackcat.it/index.php/ie-contro-chrome-google-sta-vincendo-la-battaglia/</link>
		<comments>http://www.oneblackcat.it/index.php/ie-contro-chrome-google-sta-vincendo-la-battaglia/#comments</comments>
		<pubDate>Mon, 21 May 2012 20:47:15 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[Divagazioni]]></category>
		<category><![CDATA[Web News]]></category>
		<category><![CDATA[browser]]></category>
		<category><![CDATA[chrome]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=227</guid>
		<description><![CDATA[Modernità o Status quo La battaglia dei browsers sta avendo un chiaro vincitore, stando alle statistiche che potete trovare facilmente su StatCounter qui. Chiunque abbia mai giocato, lavorato, smanettato o studiato HTML, CSS3 e compagnia bella, non può non aver maledetto la mediocrità di IE, almeno fino alla versione 9 compresa. La verità è che, però, [...]]]></description>
			<content:encoded><![CDATA[<h1>Modernità o Status quo</h1>
<p><a href="http://www.oneblackcat.it/wp-content/uploads/2012/05/Top-5-Browsers-from-W20-2011-to-W20-2012-StatCounter-Global-Stats.png" rel="lightbox[227]" title="Top 5 Browsers from W20 2011 to W20 2012   StatCounter Global Stats"><img class="size-medium wp-image-228 alignleft" title="Top 5 Browsers from W20 2011 to W20 2012   StatCounter Global Stats" src="http://www.oneblackcat.it/wp-content/uploads/2012/05/Top-5-Browsers-from-W20-2011-to-W20-2012-StatCounter-Global-Stats-300x171.png" alt="" width="300" height="171" /></a><br />
La battaglia dei browsers sta avendo un chiaro vincitore, stando alle statistiche che potete trovare facilmente su <strong>StatCounter</strong> <a title="Statcounter" href="http://gs.statcounter.com/#browser-ww-weekly-201120-201220" target="_blank">qui</a>.</p>
<p>Chiunque abbia mai giocato, lavorato, smanettato o studiato HTML, CSS3 e compagnia bella, non può non aver maledetto la mediocrità di IE, almeno fino alla versione 9 compresa. La verità è che, però, è sempre stato necessario fare i conti con la E blu e così sarà ancora per un lungo periodo.</p>
<p>Prendiamo con le molle il risultato di queste statistiche, il metodo di reperimento dei valori dipende da troppi fattori. E&#8217; altresì vero che se i dati non sono troppo attendibili sia all&#8217;inizio che alla fine, danno comunque un indicazione interessante sull&#8217;affezione degli utenti verso una o l&#8217;altra soluzione. Se prima IE era sinonimo di &#8220;andare su internet&#8221;, ora il trend sta, finalmente, cambiando.</p>
<p>Certamente il fatto che Windows sia stata obbligata ad inserire la scelta del browser può aver indebolito IE, ma la verità è che la maggior parte degli utenti di livello &#8220;basso&#8221;, ossia coloro che hanno poca familiarità con le dinamiche informatiche, utilizza normalmente IE e ignora l&#8217;esistenza di altri browser alternativi, più veloci e, cosa non da poco, decisamente più sicuri.</p>
<h2>L&#8217;obbligo di usare un vecchio sistema</h2>
<p>Chi come me lavora anche con la PA sa benissimo che vengono quotidianamente utilizzati browser come IE 6 e 7, che sono in parole povere un baco con delle toppe, e che la colpa non è solo degli utenti finali, come si può erroneamente pensare: provate voi a collegarvi ai principali siti governativi con Firefox o Safari, oppure ad effettuare operazioni bancarie con Google Chrome sui vari portali bancari.<br />
Una semplice operazione da pochi secondi può trasformarsi in un&#8217;odissea di Denied Request, Page not found o Session Timeout.</p>
<p>La verità è che nessuno di noi tifa per qualche browser in particolare, la speranza comune è che la concorrenza porti tutti a sviluppare browser sempre più stabili, più sicuri e innovativi, magari con un occhio un po&#8217; più dedicato alla leggerezza del pacchetto di installazione: vero Google?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/ie-contro-chrome-google-sta-vincendo-la-battaglia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Semplice countdown in jQuery</title>
		<link>http://www.oneblackcat.it/index.php/semplice-countdown-in-jquery/</link>
		<comments>http://www.oneblackcat.it/index.php/semplice-countdown-in-jquery/#comments</comments>
		<pubDate>Mon, 21 May 2012 14:56:12 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[countdown]]></category>
		<category><![CDATA[jqueryplugin]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=221</guid>
		<description><![CDATA[Per continuare la nostra continua presentazione di plugin di jQuery che possano essere utili a tutti, oggi pongo alla vostra attenzione un semplice script per inserire, in qualsiasi punto della vostra pagina, un countdown verso una data indicata. Lo script lo trovate all&#8217;indirizzo http://keith-wood.name/countdown.html, è molto semplice da configurare e fa semplicemente il suo dovere. Eccovi [...]]]></description>
			<content:encoded><![CDATA[<p>Per continuare la nostra continua presentazione di <strong>plugin di jQuery</strong> che possano essere utili a tutti, oggi pongo alla vostra attenzione un semplice <strong>script</strong> per inserire, in qualsiasi punto della vostra pagina, un <strong>countdown</strong> verso una data indicata.</p>
<p>Lo script lo trovate all&#8217;indirizzo <a title="countdown script in jquery" href="http://keith-wood.name/countdown.html" target="_blank">http://keith-wood.name/countdown.html</a>, è molto semplice da configurare e fa semplicemente il suo dovere.</p>
<p>Eccovi un esempio del codice da inserire per visualizzare un <strong>countdown in jQuery</strong> in versione GIORNI-ORE-MINUTI-SECONDI:</p>
<pre class="brush: plain; title: Codice:; notranslate">
var newYear = new Date();
newYear = new Date(newYear.getFullYear() + 1, 1 - 1, 1);
$('#defaultCountdown').countdown({until: newYear});

$('#removeCountdown').toggle(function() {
        $(this).text('Re-attach');
        $('#defaultCountdown').countdown('destroy');
    },
    function() {
        $(this).text('Remove');
        $('#defaultCountdown').countdown({until: newYear});
    }
);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/semplice-countdown-in-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Responsive images e jQuery: cambiare immagine a seconda della risoluzione</title>
		<link>http://www.oneblackcat.it/index.php/responsive-images-e-jquery-cambiare-immagine-a-seconda-della-risoluzione/</link>
		<comments>http://www.oneblackcat.it/index.php/responsive-images-e-jquery-cambiare-immagine-a-seconda-della-risoluzione/#comments</comments>
		<pubDate>Sat, 19 May 2012 09:56:03 +0000</pubDate>
		<dc:creator>alemux</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[responsive]]></category>

		<guid isPermaLink="false">http://www.oneblackcat.it/?p=188</guid>
		<description><![CDATA[Seguendo il trend delle ultime settimane, così come ha fatto Adobe nel nuovo Dreamweaver CS6 con il Responsive Design e le sue griglie fluide ( la cui traduzione in italiano suona, a mio avviso, veramente male ), mi sono immerso una mezz&#8217;ora in jQuery per risolvere un problema con un sito di un cliente. La [...]]]></description>
			<content:encoded><![CDATA[<p>Seguendo il trend delle ultime settimane, così come ha fatto Adobe nel nuovo <strong>Dreamweaver CS6</strong> con il <strong>Responsive Design</strong> e le sue griglie fluide ( la cui traduzione in italiano suona, a mio avviso, veramente male ), mi sono immerso una mezz&#8217;ora in jQuery per risolvere un problema con un sito di un cliente.</p>
<p>La necessità parte dal fatto che l&#8217;immagine di sfondo, con proprietà <strong>width=100%</strong>, non può essere proposta sia sul mobile che su tablet e desktop alla stessa maniera, della stessa qualità. Bisogna essere cortesi nei confronti degli <strong>user</strong> su <strong>mobile</strong>, giusto?</p>
<p>Partendo da una immagine, ne realizzo una versione <em>MidRes</em> e una <em>LowRes</em>, e mi accingo a scrivere lo script che mi scali l&#8217;immagine in maniera dinamica.</p>
<p>L&#8217;immagine di partenza è la seguente:</p>
<p><a href="http://www.oneblackcat.it/wp-content/uploads/2012/05/image_midres.jpg" rel="lightbox[188]" title="image_midres"><img class="alignnone size-medium wp-image-189" title="image_midres" src="http://www.oneblackcat.it/wp-content/uploads/2012/05/image_midres-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>Prima di tutto, inserisco qualche linea di CSS per eliminare i margini di default del BODY e per mostrare al 100% l&#8217;immagine presente in pagina:</p>
<p>Codice CSS:</p>
<pre class="brush: plain; title: Codice:; notranslate">
body{
	padding:0px;
	margin:0px;
}
img{
	width:100%;
	height:auto;
}
</pre>
<p>Codice HTML:</p>
<pre class="brush: plain; title: Codice:; notranslate">&lt;/pre&gt;
&lt;img id=&quot;thisimg&quot; alt=&quot;&quot; data-lowres=&quot;image_lowres.jpg&quot; data-midres=&quot;image_midres.jpg&quot; data-hd=&quot;image_hd.jpg&quot; /&gt;
&lt;pre&gt;
</pre>
<p>Come noterete, ho usato alcuni <strong>tag custom</strong>, dove ho indicato le tre versioni diverse della medesima immagine. Come noterete, inoltre, non ho inserito alcuna immagine in SRC. Noteremo più avanti questa anomalia.</p>
<p>Ora, prima di tutto, scrivo in console un messaggio ogni qual volta viene ridimensionata la finestra:</p>
<pre class="brush: plain; title: Codice:; notranslate">
$(window).resize(function(){
	var altezza = $(window).height();
	var larghezza = $(window).width();
	console.log('it\'s resizing, now it\'s ' + larghezza +'x'+ altezza);
});
</pre>
<p>Ora, se tutto funziona a dovere, dovreste notare in <strong>Console</strong> la dimensione della finestra ogni qual volta ridimensionerete il tutto. Non funziona? Controllate di avere inserito il riferimento alla libreria <strong>jQuery</strong>.</p>
<p>Ora creiamo la funzione che controlla la dimensione e, eventualmente, cambiamo l&#8217;SRC dell&#8217;immagine.</p>
<pre class="brush: plain; title: Codice:; notranslate">
function CheckRes(object){
	// misuro la dimensione della finestra
	var window_width = $(window).width();

	// controllo l'attuale SRC
	var original_src = $(object).attr('src');

	var img_low = $(object).attr('data-lowres');
	var img_mid = $(object).attr('data-midres');
	var img_hd = $(object).attr('data-hd');

	if(window_width		var new_src = img_low;		// smartphone
	}else{
		if(window_width			var new_src = img_mid;	// iPad
		}else{
			var new_src = img_hd;		// desktop
		}
	}
	if(original_src!=new_src){
		$(object).attr('src',new_src);
	}

}
</pre>
<p>Cosa fa il codice?<br />
Carica la larghezza della finestra nella variabile original_src, successivamente identifica le 3 versioni differenti dell&#8217;immagine e, a seconda della risoluzione, se l&#8217;SRC è differente dal nuovo, ne modifica il puntamento. Tutto molto semplice.</p>
<p>Aggiungiamo quindi, in fase di resizing, la funzione creata.</p>
<pre class="brush: plain; title: Codice:; notranslate">
$(window).resize(function(){
	var altezza = $(window).height();
	var larghezza = $(window).width();
	//console.log('it\'s resizing, now it\'s ' + larghezza +'x'+ altezza);
	CheckRes('#thisimg');   // Nota che CheckRes deve ricevere il selettore corretto, #thisimg
});
</pre>
<p>Ora, al momento del caricamento, la pagina rimarrà vuota e l&#8217;immagine verrà caricata correttamente solo dopo un <strong>window resizing</strong>.<br />
Non ci resta che aggiungere l&#8217;ultima riga di codice:</p>
<pre class="brush: plain; title: Codice:; notranslate">
$(document).ready(function(e) {
    CheckRes('#thisimg');
});
</pre>
<p>Il gioco è fatto.<br />
Fate le varie prove, noterete che ogni volta verrà caricata l&#8217;immagine corretta a seconda della dimensione della finestra. <strong>Buon responsive design</strong>!</p>
<p>Se volete vedere l&#8217;esempio in pratica, <strong><a title="Responsive images in action!" href="http://demo.oneblackcat.it/responsiveimages/index.html" target="_blank">cliccate qui</a></strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.oneblackcat.it/index.php/responsive-images-e-jquery-cambiare-immagine-a-seconda-della-risoluzione/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
