<?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>Fabio Donatantonio</title>
	<atom:link href="http://www.donatantonio.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.donatantonio.net/blog</link>
	<description>Analista programmatore / Cultore della materia</description>
	<lastBuildDate>Fri, 04 May 2012 19:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Html: altri campi di input</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-altri-campi-di-input/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-altri-campi-di-input/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 10:10:30 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[attributo accept file html]]></category>
		<category><![CDATA[campo file html]]></category>
		<category><![CDATA[input file]]></category>
		<category><![CDATA[input hidden]]></category>
		<category><![CDATA[invio file html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1723</guid>
		<description><![CDATA[Il campo file Oltre che inviare dati in forma testuale, in base a scelte o stringhe digitate, spesso sorge l’esigenza di inviare dei file al server. Immaginiamo ad esempio a quei siti che ci permettono di caricare le nostre foto preferite per farle visualizzare ai nostri amici, fornendo solitamente un modulo nel quale ci viene [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Il campo file</h3>
<p>Oltre che inviare dati in forma testuale, in base a scelte o stringhe digitate, spesso sorge l’esigenza di inviare dei <span style="color: #ff0000;">file</span> al server.<br />
Immaginiamo ad esempio a quei siti che ci permettono di <em>caricare</em> le nostre foto preferite per farle visualizzare ai nostri amici, fornendo solitamente un modulo nel quale ci viene chiesto di scegliere il file (in questo caso l’immagine) dal nostro hard disk.<br />
Il campo in questione prende il nome di file e la sintassi è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;file&quot; name=&quot;...&quot; /&gt;
</pre>
<p>Vediamo il codice completo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form action=&quot;pagin.php&quot; method=&quot;GET&quot; name=&quot;form&quot;&gt;
Scegli il file da inviare:
    &lt;input type=&quot;file&quot; name=&quot;file&quot; /&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Conferma&quot; /&gt;
&lt;/form&gt;
</pre>
<p>Il browser visualizzerà a video un bottone con etichetta &#8216;<em>Sfoglia&#8230;</em>&#8216; e un campo di testo inizialmente vuoto che servirà a contenere il <strong>path</strong> del file prescelto. Cliccando sul bottone, si aprirà una <em>finestra di dialogo</em> per facilitare la selezione del file:</p>
<p style="text-align: left;"><img class="aligncenter size-full wp-image-1724" title="file_html" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/file_html.png" alt="Campo File HTML" width="350" height="136" /><br />
<img class="size-full wp-image-1725 aligncenter" title="file_choose_html" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/file_choose_html.png" alt="Campo File HTML - Scelta file" width="350" height="215" /></p>
<p>Un attributo utile del campo file è <span style="color: #ff0000;">accept</span>, che permette di specificare il <em>tipo di file</em> che è possibile caricare tramite il modulo.<br />
L’attributo accept è così utilizzato qualora si vogliano caricare esclusivamente immagini in formato jpeg:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;file&quot; name=&quot;file&quot; accept=&quot;image/jpeg&quot; /&gt;
</pre>
<p>Altrimenti avremmo anche potuto accettare qualsiasi file di tipo immagine, indipendentemente dal formato:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;file&quot; name=&quot;file&quot; accept=&quot;image/*&quot; /&gt;
</pre>
<h3 class="paragrafo">I campi nascosti</h3>
<p>A volte è utile e necessario passare dei parametri di servizio, che <em>non siano visibili all’utente</em>, tra un form e il programma che elaborerà i dati.<br />
Immaginiamo ad esempio ad un campo che contiene un ID che identifica l&#8217;utente che ha compilato il modulo, oppure un campo che contiene l&#8217;ora di apertura del modulo o semplicemente dati necessari all&#8217;elaborazione lato server.<br />
A tale scopo sono utili i campi di tipo <span style="color: #ff0000;">hidden</span> (<em>nascosto</em>). La sintassi è molto semplice:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;hidden&quot; name=&quot;...&quot; value=&quot;...&quot; /&gt;
</pre>
<p>Il value conterrà il valore, che può essere una stringa, numero o altro, associato alla variabile nascosta. Ad esempio scrivendo come segue, si istanzia un campo nascosto che contiene la data odierna:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;hidden&quot; name=&quot;data&quot; value=&quot;30-09-2010&quot; /&gt;
</pre>
<p><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-altri-campi-di-input/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: checkbox e radio button</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-checkbox-e-radio-button/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-checkbox-e-radio-button/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 10:10:13 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[checkbox html]]></category>
		<category><![CDATA[effettuare scelte html]]></category>
		<category><![CDATA[radio button html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1714</guid>
		<description><![CDATA[Effettuare scelte multiple In alternativa alle select multiple, è possibile utilizzare le checkbox per effettuare scelte multiple. Una checkbox è da intendersi come un elenco di scelte ognuna contraddistinta da un box, ogni box spuntato equivale alla scelta della voce associata. In altre parole ogni casella di controllo (box) se spuntata indica si altrimenti no. [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Effettuare scelte multiple</h3>
<p>In alternativa alle select multiple, è possibile utilizzare le <span style="color: #ff0000;">checkbox</span> per effettuare scelte multiple.<br />
Una checkbox è da intendersi come un <strong>elenco di scelte</strong> ognuna contraddistinta da un box, ogni box spuntato equivale alla scelta della voce associata. In altre parole ogni casella di controllo (box) se spuntata indica <em>si</em> altrimenti <em>no</em>.<br />
La sintassi per definire una checkbox è:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;checkbox&quot; name=&quot;...&quot; value=&quot;...&quot; /&gt;
</pre>
<p>Nonostante spesso le checkbox si presentino in gruppo è necessario assegnare ad ognuna un <em>name</em> diverso, sarà compito del programmatore lato server verificare tramite opportuno codice quale checkbox è stata selezionata.<br />
Se la chekbox è selezionata, il value ad esso associato sarà <em>passato</em> al programma che gestirà la form. In caso contrario, se il box non è selezionato, il value non verrà passato.<br />
Vediamo quindi il codice html per realizzare un elenco di chekbox:</p>
<pre class="brush: xml; title: ; notranslate">&lt;/pre&gt;
&lt;form action=&quot;pagin.php&quot; method=&quot;GET&quot; name=&quot;form&quot;&gt;
    Scegli i tuoi frutti preferiti:
    &lt;input type=&quot;checkbox&quot; name=&quot;mela&quot; value=&quot;M&quot; /&gt; Mela
    &lt;input type=&quot;checkbox&quot; name=&quot;pera&quot; value=&quot;P&quot; /&gt; Pera
    &lt;input type=&quot;checkbox&quot; name=&quot;banana&quot; value=&quot;B&quot; /&gt; Banana
    &lt;input type=&quot;checkbox&quot; name=&quot;uva&quot; value=&quot;U&quot; /&gt; Uva
    &lt;input type=&quot;checkbox&quot; name=&quot;arancia&quot; value=&quot;A&quot; /&gt; Arancia
    &lt;input type=&quot;submit&quot; value=&quot;Conferma&quot; /&gt;
&lt;/form&gt;
</pre>
<p>Ad ogni checkbox abbiamo associato un name diverso ed un value indicativo che contiene l&#8217;iniziale del frutto.</p>
<p><img class="aligncenter size-full wp-image-1716" title="checkbox" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/checkbox.png" alt="Checkbox HTML" width="350" height="153" /></p>
<h3 class="paragrafo">Selezionare valori di default</h3>
<p>Così come per la select, anche per un checkbox è possibile impostare di <em>default</em> la selezione. Scrivendo ad esempio:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;checkbox&quot; name=&quot;mela&quot; value=&quot;M&quot; checked=&quot;checked&quot; /&gt;
</pre>
<p>si ottiene un chekbox <em>spuntato</em>. Inoltre cliccando su un box spuntato si otterrà la pulitura del box stesso.</p>
<p><img class="aligncenter size-full wp-image-1717" title="checkbox_default" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/checkbox_default.png" alt="Checkbox html - Default check" width="350" height="153" /></p>
<h3 class="paragrafo">Effettuare scelte esclusive</h3>
<p>Qualora lo sviluppatore intenda invece fornire la possibilità di una <strong>singola scelta</strong> tra una serie di opzioni, è consigliabile l’uso dei <span style="color: #ff0000;">rabio button</span>. In questo caso quindi una scelta esclude l’altra, a condizione che i radio button abbiano lo <em>stesso name</em> ma valori diversi.<br />
 Il browser visualizza questi elementi come dei bottoni circolari, da ciò il nome radio button. La sintassi è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;radio&quot; name=&quot;...&quot; value=&quot;...&quot; /&gt;
</pre>
<p>Il type è impostato alla parola chiave &#8216;<em>radio</em>&#8216; e il name sarà uguale al name degli altri radio button qualora questi appartengano ad una stessa lista.<br />
 Vediamo quindi il codice html completo per una lista radio button:</p>
<pre class="brush: xml; title: ; notranslate">&lt;/pre&gt;
&lt;form action=&quot;pagin.php&quot; method=&quot;GET&quot; name=&quot;form&quot;&gt;
    Scegli i tuoi frutti preferiti:
    &lt;input type=&quot;radio&quot; name=&quot;frutto&quot; value=&quot;Mela&quot; /&gt; Mela
    &lt;input type=&quot;radio&quot; name=&quot;frutto&quot; value=&quot;Pera&quot; /&gt; Pera
    &lt;input type=&quot;radio&quot; name=&quot;frutto&quot; value=&quot;Banana&quot; /&gt; Banana
    &lt;input type=&quot;radio&quot; name=&quot;frutto&quot; value=&quot;Uva&quot; /&gt; Uva
    &lt;input type=&quot;radio&quot; name=&quot;frutto&quot; value=&quot;Arancia&quot; /&gt; Arancia
    &lt;input type=&quot;submit&quot; value=&quot;Conferma&quot; /&gt;
&lt;/form&gt;
</pre>
<p>Il risultato nella finestra del browser è il seguente:</p>
<p><img class="aligncenter size-full wp-image-1718" title="radiobutton" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/radiobutton.png" alt="Radiobutton HTML" width="350" height="186" /></p>
<p>E’ interessante notare come la selezione di un radio button della lista influisca su un&#8217;eventuale scelta precedente. Difatti come detto, i radio button prevedono una singola scelta così come le select viste precedentemente.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-checkbox-e-radio-button/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: le select</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-select/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-select/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 10:09:26 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[optgroup select]]></category>
		<category><![CDATA[select html]]></category>
		<category><![CDATA[select multiple]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1705</guid>
		<description><![CDATA[Spesso sarà capitato di compilare dei moduli html e trovarsi d&#8217;innanzi una serie di possibili scelte da un menu a tendina. Per realizzare un menu di scelta è necessario il tag &#60;select&#62; che conterrà a sua volta ogni singola voce che compone il menu &#60;option&#62;. La sintassi quindi è la seguente: Come per gli altri [...]]]></description>
			<content:encoded><![CDATA[<p>Spesso sarà capitato di compilare dei moduli html e trovarsi d&#8217;innanzi una serie di possibili scelte da un <strong>menu a tendina</strong>.<br />
Per realizzare un menu di scelta è necessario il tag <span style="color: #ff0000;">&lt;select&gt;</span> che conterrà a sua volta ogni singola voce che compone il menu <span style="color: #ff0000;">&lt;option&gt;</span>. La sintassi quindi è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;select name='…'&gt;
&lt;option value='…'&gt; … &lt;/option&gt;
&lt;option value='…'&gt;…&lt;/option&gt;
…
&lt;/select&gt;
</pre>
<p>Come per gli altri campi di un form, anche la select necessita di un <em>name</em> per essere poi gestita correttamente dai linguaggi di programmazione.<br />
All&#8217;interno della select sono presenti le varie opzioni che compariranno nel menu, e per ognuna di esse è necessario impostare un <strong>valore</strong> (<em>value</em>). Nel momento in cui l’utente seleziona una voce dal menu, il valore ad esso associato sarà passato al programma lato server.<br />
Vediamo quindi un esempio completo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form name='form' action='pagin.php' method='GET'&gt;
	Scegli il tuo frutto preferito:
	&lt;select name='frutto'&gt;
		&lt;option value='A'&gt;Mela&lt;/option&gt;
		&lt;option value='B'&gt;Pera&lt;/option&gt;
		&lt;option value='C'&gt;Banana&lt;/option&gt;
		&lt;option value='D'&gt;Arancia&lt;/option&gt;
	&lt;/select&gt;
	&lt;input type='submit' value='Conferma'&gt;
&lt;/form&gt;
</pre>
<p>Nel codice html proposto abbiamo definito una select con name ‘<em>frutto</em>’. All’interno quattro possibili scelte, ognuna contenente come testo il nome di un frutto e come valore una lettera dell’alfabeto.<br />
In alternativa avremmo potuto scegliere come valore per ogni singola voce, un numero, oppure una stringa o semplicemente l’etichetta stessa della voce nel menu.</p>
<p><img class="aligncenter size-full wp-image-1706" title="select1_html" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/select1_html.png" alt="Select Html" width="350" height="167" /></p>
<h3 class="paragrafo">Attributi di una select</h3>
<p>E&#8217; possibile, tramite l&#8217;attributo <span style="color: #ff0000;">size</span>, specificare quanti elementi del menu visualizzare.<br />
In altre parole il numero di righe che la select deve occupare all&#8217;interno della pagina html.<br />
Scrivere ad esempio:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;select name='frutto' size=‘3’&gt;
...
&lt;/select&gt;
</pre>
<p>fa si che il menu visto in precedenza mostri inizialmente le prime tre voci, quindi poi tramite lo scroll laterale sarà possibile visualizzarne i successivi.</p>
<p><img class="aligncenter size-full wp-image-1707" title="select2_html" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/select2_html.png" alt="Select Html - Attributo size" width="350" height="155" /></p>
<p>Tramite l’attributo <span style="color: #ff0000;">selected</span>, applicato ad uno degli option della select, si può definire a priori una scelta del menu come predefinita. In assenza di tale attributo, la select seleziona di default (lato html) la prima voce in menu.<br />
Per impostare una voce in menu come scelta di default è necessario scrivere:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;option value='B' selected=‘selected’&gt;Pera&lt;/option&gt;
</pre>
<p>Nonostante la select nasca per effettuare <em>una singola scelta</em> tra un numero di voci in elenco, è possibile permettere all&#8217;utente di selezionare <strong>più opzioni</strong>.<br />
Utilizzando l&#8217;attributo <span style="color: #ff0000;">multiple</span> all&#8217;interno del tag select è possibile forzare una select ad accettare <em>più di una voce</em> da parte dell&#8217;utente. Di conseguenza ciò influisce anche sull&#8217;aspetto grafico di una select e sul modo in cui è possibile interagire con essa.<br />
Vediamo il seguente codice html:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form name='form' action='pagin.php' method='GET'&gt;
	Scegli i tuoi frutti preferiti:
	&lt;select name='frutto' multiple='multiple'&gt;
		&lt;option value='A'&gt;Mela&lt;/option&gt;
		&lt;option value='B'&gt;Pera&lt;/option&gt;
		&lt;option value='C'&gt;Banana&lt;/option&gt;
		&lt;option value='D'&gt;Arancia&lt;/option&gt;
		 &lt;option value='E'&gt;Uva&lt;/option&gt;
	&lt;/select&gt;
	&lt;input type='submit' value='Conferma'&gt;
&lt;/form&gt;
</pre>
<p>All’interno del tag select troviamo l’attributo <em>multiple=‘multiple’</em>, di seguito le singole voci che compongono il menu.<br />
L’utente per selezionare più voci dovrà tenere premuto il tasto <strong>ctrl</strong> e cliccare con il tasto sinistro del mouse sulle singole etichette per aggiungerle alla selezione.<br />
Questo tipo di select sarà così visualizzata all’interno del browser:</p>
<p><img class="aligncenter size-full wp-image-1708" title="select3_html" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/select3_html.png" alt="Select Html - Attributo multiple" width="350" height="181" /></p>
<h3 class="paragrafo">Raggruppamento di scelte</h3>
<p>Siccome spesso i menu di scelta tendono a diventare particolarmente lunghi, dalla versione 4 dell&#8217;HTML si è introdotto il tag <span style="color: #ff0000;">optgroup</span> che consente di suddividere le varie possibilità di scelta in <em>gruppi</em> tramite l&#8217;utilizzo di apposite etichette <em>(label)</em>.<br />
La sintassi è molto semplice:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;optgroup label=“Testo etichetta gruppo&quot;&gt;
</pre>
<p>All&#8217;interno del contenitore optgroup vanno elencate le option che formano il gruppo e a sua volta ogni gruppo sarà elencato nella select.<br />
Per comprenderne a pieno l&#8217;utilizzo, segue un esempio:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form name='form' action='pagin.php' method='GET'&gt;
	Scegli il tuo frutto preferito:
	&lt;select name='frutto'&gt;
		&lt;optgroup label='Frutti classici'&gt;
			&lt;option value='A'&gt;Mela&lt;/option&gt;
			&lt;option value='B'&gt;Pera&lt;/option&gt;
			&lt;option value='C'&gt;Banana&lt;/option&gt;
		&lt;/optgroup&gt;
		&lt;optgroup label='Frutti di stagione'&gt;
			&lt;option value='D'&gt;Arancia&lt;/option&gt;
			&lt;option value='E'&gt;Uva&lt;/option&gt;
			&lt;option value='F'&gt;Fragola&lt;/option&gt;
		&lt;/optgroup&gt;
	&lt;/select&gt;
&lt;/form&gt;
</pre>
<p>Il browser visualizzerà la select suddivisa in due gruppi, il primo con etichetta “<em>Frutti classici</em>&#8221; e il secondo con etichetta &#8220;<em>Frutti di stagione</em>&#8220;. Il funzionamento della select non muta e gli attributi precedentemente visti sono combinabili tra loro anche in una select con raggruppamento.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1709" title="select4_html" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/select4_html.png" alt="Select Html - Tag optgroup" width="350" height="206" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-select/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: ulteriori campi di testo</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-ulteriori-campi-di-testo/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-ulteriori-campi-di-testo/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 10:08:58 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[campi password html]]></category>
		<category><![CDATA[textarea html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1696</guid>
		<description><![CDATA[Campi password Oltre ai classici campi di testo visti negli articoli precedenti, è possibile instanziare un campo che sostituisca ad ogni carattere un asterisco (*) o altro simbolo grafico, in modo tale da rendere non leggibile il testo immesso. Solitamente tali campi sono utilizzati per inserire password o parole chiave, soprattutto in presenza di moduli [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Campi password</h3>
<p>Oltre ai classici campi di testo visti negli articoli precedenti, è possibile instanziare un campo che<em> sostituisca</em> ad ogni carattere un <strong>asterisco</strong> (<strong>*</strong>) o altro simbolo grafico, in modo tale da rendere <span style="text-decoration: underline;">non leggibile</span> il testo immesso.<br />
Solitamente tali campi sono utilizzati per inserire password o parole chiave, soprattutto in presenza di moduli di login. Questi campi hanno l’attributo type impostato appunto su password.<br />
La sintassi è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;password&quot; name=&quot;pass&quot; /&gt;
</pre>
<p>L’utente immettendo il testo all’interno del campo visualizzerà un <strong>*</strong> per ogni carattere che compone la stringa:</p>
<p style="text-align: center;"><a href="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/input_password.png"><img class="aligncenter  wp-image-1697" title="input_password" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/input_password.png" alt="Input password html" width="350" height="90" /></a></p>
<h3 class="paragrafo">Campo di testo su più righe</h3>
<p>I campi di testo permettono l&#8217;inserimento di piccole quantità di dati, ad esempio un nome, un cognome, un indirizzo oppure un numero.<br />
Se si ha la necessità di indicare un campo che consenta di inserire una grande quantità di testo conviene invece utilizzare una &#8220;<span style="color: #ff0000;">textarea</span>&#8221; (<em>area di testo</em>).<br />
In fase di inizializzazione di una textarea è possibile impostare il numero di righe e di colonne che si desidera fornire, la sintassi è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;textarea rows='5' cols='20'  name='areatesto'&gt; &lt;/textarea&gt;
</pre>
<p>La sintassi risulta differente al cospetto dei classici campi input; infatti il tag da utilizzare è &lt;textarea&gt; ed è inoltre previsto il rispettivo tag di chiusura.</p>
<p style="text-align: center;"><img class="aligncenter  wp-image-1698" title="textarea_html" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/textarea_html.png" alt="Textarea html" width="350" height="121" /></p>
<p>Per inserire un testo di default all&#8217;interno di una textarea è sufficiente scrivere all&#8217;interno del tag &lt;textarea&gt;, in questo modo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;textarea rows='5' cols='20' name='areatesto'&gt;
Questo è un testo di default…
&lt;/textarea&gt;
</pre>
<p style="text-align: center;"><img class="aligncenter  wp-image-1699" title="textarea_html_default" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/04/textarea_html_default.png" alt="Textarea html con testo default" width="350" height="188" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-ulteriori-campi-di-testo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>toolTitle (simple toolTip) &#8211; Plugin jQuery</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/tooltitle-simple-tooltip-plugin-jquery/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/tooltitle-simple-tooltip-plugin-jquery/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 10:22:58 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[plugin title jQuery]]></category>
		<category><![CDATA[semplice toolTip]]></category>
		<category><![CDATA[toolTip jQuery]]></category>
		<category><![CDATA[toolTitle jQuery]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1682</guid>
		<description><![CDATA[In questo articolo realizzeremo un pulgin jQuery che ci permetta di implementare un semplice toolTip da associare ad un qualsiasi elemento html che compone la pagina. In altre parole, far comparire un suggerimento/aiuto al passaggio del mouse su un elemento che compone la pagina sfruttando l&#8217;attributo title dell&#8217;HTML ed appunto il framework jQuery. Utilizzeremo innanzitutto [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo realizzeremo un <strong>pulgin jQuery</strong> che ci permetta di implementare un semplice toolTip da associare ad un qualsiasi elemento html che compone la pagina.<br />
In altre parole, far comparire un suggerimento/aiuto al passaggio del mouse su un elemento che compone la pagina sfruttando l&#8217;attributo <strong>title</strong> dell&#8217;HTML ed appunto il framework jQuery.</p>
<p>Utilizzeremo innanzitutto tre gestori di eventi: <em>mouseover</em>(quando il puntatore del mouse entra sull&#8217;elemento), <em>mousemove</em>(quando il puntatore si muove sull&#8217;elemento) e <em>mouseout</em>(quando il puntatore esce dall&#8217;elemento).</p>
<p>Come si potrà immaginare vorremmo che all&#8217;ingresso sull&#8217;elemento (mouseover) venga mostrato a video un <em>box</em> contenete il testo presente all&#8217;interno dell&#8217;attributo title; il box dovrà seguire il movimento del cursore(mousemove) e scomparire quando lo stesso esce dall&#8217;area dell&#8217;elemento(mouseout).<br />
Applicheremo al box un <em>effetto trasparenza</em>, e lasceremo all&#8217;utente la scelta del colore di sfondo, del testo, della grandezza del font e delle proprietà del bordo in fase di configurazione del plugin.</p>
<p>Vediamo subito il codice completo del <strong style="color: red;">plugin toolTitle</strong></p>
<pre class="brush: jscript; title: ; notranslate">
/**
  * @author Fabio Donatantonio
  * www.donatantonio.net
  * 2011
  */
/**
  * tooltitle -&gt; Tooltip jQuery
  */

(function($){
	$.fn.tooltitle = function(options) {

	var defaults = {
		textColor: '#fff',
		textSize: '12px',
		backgroundColor: '#000000',
		border: '1px solid #DDDDDD',
		padding: '3px',
		transparency: '0.8'
	};

	var options = $.extend(defaults, options);

	return this.each(function() {
		var tit = $(this).attr('title');
		if(tit=='' || tit==undefined || tit==null){
			tit = &quot;Nessuna descrizione&quot;;
		}
                $(this).data('title',tit).removeAttr('title');

		$(this).mouseover(function(e){
			$('body').append('&lt;/pre&gt;
&lt;div class=&quot;tooltip&quot;&gt;'+$(this).data('title')+'&lt;/div&gt;
&lt;pre&gt;
');

			$('.tooltip').css('position', 'absolute')
			.css('z-index', '9999')
			.css('backgroundColor', options.backgroundColor)
			.css('color', options.textColor)
			.css('fontSize', options.textSize)
			.css('border', options.border)
			.css('padding', options.padding);

			$('.tooltip').css('top', e.pageY + 5 )
			.css('left', e.pageX + 10 );

			$('.tooltip').fadeTo('10',options.transparency);
			e.stopPropagation();
		}).mouseout(function(){
			$('.tooltip').fadeOut('100').remove();
		}).mousemove(function(e){
			$('.tooltip').css('top', e.pageY + 5)
			.css('left', e.pageX + 10 );
		});
	});

	return false;
	};
})(jQuery);
</pre>
<p>Immaginiamo ora di voler applicare toolTitle ad un <em>link</em>:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a class=&quot;myLink&quot; title=&quot;Vai al link!&quot; href=&quot;#&quot;&gt;Clicca qui&lt;/a&gt;
</pre>
<p>per <strong>richiamare</strong> il plugin sull&#8217;elemento scriveremo:</p>
<pre class="brush: jscript; title: ; notranslate">
$('.myLink').tooltitle({
		textColor: '#DDDDDD',
		textSize: '15px',
		backgroundColor: '#0000FF',
		border: '1px solid #CCCCCC',
		padding: '4px',
		transparency: '0.8'
});
</pre>
<p><img class=" wp-image-1684 alignleft" title="toolTitle_jquery_plugin_screenshot" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/03/toolTitle_jquery_plugin_screenshot.bmp" alt="toolTitle jQuery Plugin screenshot" width="162" height="75" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>Il plugin accetta come <strong style="color: red;">parametri</strong>:</p>
<ul>
<li>Colore del testo</li>
<li>Grandezza del font</li>
<li>Colore di sfondo del toolTitle</li>
<li>Lo stile per il bordo del toolTitle</li>
<li>Il padding</li>
<li>Il grado di trasparenza (da 0 a 1)</li>
</ul>
<p>In alternativa potremo invocare toolTitle senza parametri, sfruttando le impostazioni di default:</p>
<pre class="brush: jscript; title: ; notranslate">
$('.myLink').tooltitle();
</pre>
<p>Per far si che il plugin funzioni in maniera corretta è necessario, logicamente, impostare l&#8217;attributo title nell&#8217;html per l&#8217;elemento che vogliamo <em>animare</em>.<br />
E&#8217; possibile, inoltre, associare il plugin a qualsiasi elemento html.<br />
Se volessimo, infine, scrivere il contenuto del <em>toolTitle</em> su <strong>più righe</strong> basta utilizzare il tag <em>&lt;BR/&gt;</em> all&#8217;interno del tag title.</p>
<p><span style="text-decoration: underline;">Il plugin non necessita di fogli di stile</span>.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/jquery_toolTitle/index.html" target="_blank">qui</a></strong> è possibile vedere in azione il plugin toolTitle.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/jquery_toolTitle.rar" target="_blank">qui</a></strong> è possibile scaricare il codice del plugin toolTitle.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/tooltitle-simple-tooltip-plugin-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bentornato a casa</title>
		<link>http://www.donatantonio.net/blog/riflessioni/bentornato-a-casa/</link>
		<comments>http://www.donatantonio.net/blog/riflessioni/bentornato-a-casa/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 08:39:38 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Riflessioni]]></category>
		<category><![CDATA[amore]]></category>
		<category><![CDATA[bentornato a casa]]></category>
		<category><![CDATA[casa]]></category>
		<category><![CDATA[concetto di casa]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1620</guid>
		<description><![CDATA[Qualsiasi luogo perso per il mondo in un attimo può diventare casa &#8220;Buonasera Professore, l&#8217;aspettavamo&#8230; come è andato il viaggio?&#8221; &#8230; &#8220;Per lei la solita stanza&#8230;prego, la chiave&#8230;&#8221; Mi siedo, accendo il televisore e subito dopo una sigaretta&#8230; che caldo che fa e pensare che siamo a marzo. Dovrei cambiarmi&#8230; fare un barba veloce e [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Qualsiasi luogo perso per il mondo in un attimo può diventare casa</h3>
<p>&#8220;<em>Buonasera Professore,</em><br />
<em> l&#8217;aspettavamo&#8230; come è andato il viaggio?</em>&#8221;<br />
&#8230;<br />
&#8220;<em>Per lei la solita stanza&#8230;prego, la chiave&#8230;</em>&#8221;</p>
<p>Mi siedo, accendo il televisore e subito dopo una sigaretta&#8230;<br />
che caldo che fa e pensare che siamo a marzo.<br />
Dovrei cambiarmi&#8230;<br />
fare un barba veloce e poi correre a chiamare un taxi&#8230;<br />
so già che stanotte dormirò poco,<br />
il mal di testa avanza e un panino in treno non può farmi che male.</p>
<p>Rifletto&#8230;<br />
non sono a casa mia&#8230;<br />
non sono nel luogo dove ho lavoro, amici, supermercato di fiducia&#8230;<br />
bollette, spese&#8230; casa&#8230;<br />
Non sono neanche nella mia città di nascita&#8230;<br />
dove ho consumato adolescenza e amori,<br />
dove ho lasciato un pezzo di cuore&#8230;<br />
Sono invece qui, tra quattro mura&#8230;<br />
un letto, una tv e un balcone dal quale si può scorgere il mare,<br />
in una città il cui dialetto non mi appartiene,<br />
dove ogni strada e persona è per me sconociuta.<br />
&#8230; ma perchè anche qui ho qualcosa che mi trattiene, che fa si che io ritorni?&#8230;<br />
Cos&#8217;è realmente ciò che definiamo &#8220;<em>casa</em>&#8220;?<br />
Non è un semplice luogo&#8230; un puntino perso per il mondo&#8230;<br />
non è dove si vive e si respira.<br />
Sentirsi a casa è quando sai che tutto intorno ti può emozionare,<br />
il saluto di qualcuno, un abbraccio,<br />
il sole del primo mattino&#8230;<br />
il vento che senza avvertirti ti accarezza la pelle.<br />
Sentirsi a casa è dove sai di trovare persone che stimi e vuoi bene,<br />
dove puoi sentirti libero, anche solo per un giorno&#8230;<br />
dove il cuore può battere più forte perchè alimentato da un amore.<br />
Questo per me è il concetto di casa&#8230;</p>
<p>Devo alzarmi ora&#8230;<br />
no&#8230;<br />
no, questa non può essere casa mia,<br />
non può esserlo una stanza d&#8217;albergo.<br />
La barba, un pò di profumo&#8230;<br />
la cravatta e la camicia pulita&#8230;<br />
Accendo un&#8217;altra sigaretta,<br />
alzo la cornetta del telefono: &#8220;<em>Signorina può chiamarmi un taxi? Grazie</em>&#8221;</p>
<p>Solo un attimo,<br />
qualcuno bussa alla porta&#8230;<br />
eccoti,<br />
non ti aspettavo ora,<br />
il tuo profumo in un attimo pervade la stanza&#8230;<br />
un bacio&#8230; un abbraccio&#8230;<br />
il balcone che all&#8217;improvviso si apre&#8230;<br />
una brezza di vento mi accarezza&#8230;<br />
il cuore inizia a battere più forte&#8230;<br />
un&#8217;emozione&#8230;</p>
<p>Mi stringi la mano, e sorridendo dici:<br />
&#8220;<em>E&#8217; tanto che ti attendevo&#8230;</em><br />
<em> Bentornato a casa&#8230;</em>&#8221;</p>
<p align="right">
Fabio Donatantonio</p>
<p style="text-align: center;" align="right"><img class="aligncenter size-full wp-image-1623" title="bentornato_a_casa" src="http://www.donatantonio.net/blog/wp-content/uploads/2012/03/bentornato_a_casa.png" alt="Bentornato a casa" width="250" height="330" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/riflessioni/bentornato-a-casa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Centro storico Cava Dè Tirreni</title>
		<link>http://www.donatantonio.net/blog/riflessioni/foto_video/centro-storico-cava-de-tirreni/</link>
		<comments>http://www.donatantonio.net/blog/riflessioni/foto_video/centro-storico-cava-de-tirreni/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 16:21:58 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Foto/Video]]></category>
		<category><![CDATA[cava dè tirreni]]></category>
		<category><![CDATA[periodo natalizio]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1618</guid>
		<description><![CDATA[29/12/2011 &#8211; Una passeggiata per le strade del centro storico di Cava Dè Tirreni(Sa) nel periodo natalizio.]]></description>
			<content:encoded><![CDATA[<p><iframe width="560" height="315" src="http://www.youtube.com/embed/rRdaZKqHLEE" frameborder="0" allowfullscreen></iframe><br />
<br/><br />
29/12/2011 &#8211; Una passeggiata per le strade del centro storico di Cava Dè Tirreni(Sa) nel periodo natalizio.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/riflessioni/foto_video/centro-storico-cava-de-tirreni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Panoramica Messina</title>
		<link>http://www.donatantonio.net/blog/riflessioni/foto_video/panoramica-messina/</link>
		<comments>http://www.donatantonio.net/blog/riflessioni/foto_video/panoramica-messina/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 15:40:21 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Foto/Video]]></category>
		<category><![CDATA[panoramica messina]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1614</guid>
		<description><![CDATA[Messina ripresa dall&#8217;alto del Royal Palace Hotel&#8230; ore 08:00 del 2 dicembre 2011.]]></description>
			<content:encoded><![CDATA[<p><iframe width="560" height="315" src="http://www.youtube.com/embed/fWCIoNvKJPo" frameborder="0" allowfullscreen></iframe><br />
<br/><br />
Messina ripresa dall&#8217;alto del Royal Palace Hotel&#8230; ore 08:00 del 2 dicembre 2011.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/riflessioni/foto_video/panoramica-messina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Number_format Javascript</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/number_format-javascript/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/number_format-javascript/#comments</comments>
		<pubDate>Sat, 25 Feb 2012 15:20:02 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[formattare numero javascript]]></category>
		<category><![CDATA[number format]]></category>
		<category><![CDATA[number_format]]></category>
		<category><![CDATA[number_format javascript]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1600</guid>
		<description><![CDATA[Chi conosce e sviluppa quotidianamente in linguaggio PHP conoscerà di sicuro la funzione number_format che permette, appunto, di formattare un valore numerico impostando il numero di decimali da visualizzare e i caratteri di separazione per le migliaia e per la parte decimale. Putroppo, come spesso capita, in linguaggio Javascript non esiste una funzione simile pronta [...]]]></description>
			<content:encoded><![CDATA[<p>Chi conosce e sviluppa quotidianamente in linguaggio PHP conoscerà di sicuro la funzione <strong>number_format</strong> che permette, appunto, di <em>formattare un valore numerico</em> impostando il numero di decimali da visualizzare e i caratteri di separazione per le migliaia e per la parte decimale.<br />
Putroppo, come spesso capita, in linguaggio Javascript non esiste una funzione simile pronta all&#8217;uso.<br />
In quest&#8217;articolo <em>svilupperemo</em> la versione Javascript della funzione number_format.<br />
Enunciamo innanzitutto la <strong>sintassi e i parametri</strong> che tale funzione accetta:</p>
<pre class="brush: jscript; title: ; notranslate">
number_format(valore,decimali,separatore_decimali,separatore_migliaia)
</pre>
<p>se ad esempio volessimo formattare il numero &#8220;1250.784&#8243; impostando 2 cifre decimali, la virgola come separatore dei decimali e il punto per le migliaia, invocheremo la funzione nel seguente modo:</p>
<pre class="brush: jscript; title: ; notranslate">
number_format(1250.784,2,',','.');

// ottenendo come output 1.250,78
</pre>
<p>Vediamo subito il codice della funzione <strong>number_format</strong>. Ricordo che in fondo all&#8217;articolo sono presenti i link per provare il codice e scaricarlo.</p>
<pre class="brush: jscript; title: ; notranslate">
function toFixedFix(n, precisione) {
    // Funzione per arrotondare valore
    var k = Math.pow(10, precisione);
    return '' + Math.round(n * k) / k;
}

function number_format(numero, decimali, dec_separatore, mig_separatore){
    // Elimino i caratteri che non sono numeri (lascio il segno meno e il punto)
    numero = (numero).replace(/[^0-9\.\-]?/gi,&quot;&quot;);
    // Controllo se valore numerico
    var n = 0;
    if(isFinite(+numero)){
        n=numero;
    }
    // Controllo se i decimali sono accettabili
    var precisione = 0;
    if(isFinite(+decimali) &amp;&amp; decimali&gt;-1){
        precisione = decimali;
    }
    // Recupero caratteri separatori
    var separatore = '.';
    if(typeof mig_separatore != 'undefined'){
        separatore = mig_separatore;
    }
    var dec = ',';
    if(typeof dec_separatore != 'undefined'){
        var dec = dec_separatore;
    }

    // Arrotondo il valore se necessario - Utilizzo funzione toFixedFix
    var s = '';
    if(precisione!=0){
        s = toFixedFix(n, precisione);
    }else{
        s = '' + Math.round(n);
    }
    // Taglio il valore in parte intera e parte decimale
    s = s.split('.');
    // Aggiungo il separatore delle migliaia - ogni 3 numeri sulla parte intera
    if (s[0].length &gt; 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, separatore);
    }
    // Formatto la parte decimale - aggiungo degli 0 se necessari
    if ((s[1] || '').length &lt; precisione) {
        s[1] = s[1] || '';
        s[1] += new Array(precisione - s[1].length + 1).join('0');
    }
    // Aggiungo parte decimale a parte intera - separati da separatore decimali
    return s.join(dec);
}
</pre>
<p>Il codice non è difficile da comprendere ed è grossomodo commentato. Vediamo però i passi fondamentali che esso compie:</p>
<ol>
<li>Definisco una semplice funzione &#8220;toFixedFix&#8221; di supporto che arrotonda/tronca in maniera opportuna un valore numerico.</li>
<li>All&#8217;inizio della funzione number_format pulisco innanzitutto il valore da formattare.</li>
<li>Effettuo alcuni semplici controlli: se il valore da formattare e il numero di cifre decimali sono numerici.</li>
<li>Chiamo la funzione toFixedFix per arrotondare/troncare il valore.</li>
<li>Taglio il valore (ora parzialmente formattato) in parte intera e parte decimale.</li>
<li>Aggiungo il separatore delle migliaia (ogni 3 cifre) alla parte intera.</li>
<li>Formatto la parte decimale aggiungendo degli zeri se necesssario.</li>
<li>Concateno la parte intera con quella decimale.</li>
</ol>
<p>A parte l&#8217;utilizzo della funzione <em>toFixedFix</em>, creata per l&#8217;occasione, nel codice utilizziamo alcune funzioni base del linguaggio, tra cui:<br />
<strong>replace(&#8230;)</strong> per sostituire i caratteri non accettabili<br />
<strong>isFinite(numero)</strong> per controllare se il valore è numerico<br />
<strong>split(.)</strong> per tagliare il numero in parte intera e parte decimale<br />
<strong>join()</strong> per unire parte decimale a parte intera</p>
<p>Logicamente, come è mio solito sottolineare, questa è solo una delle possibile soluzione della funzione number_format.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/number_format/' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/number_format.rar'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/number_format-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testo animato: macchina da scrivere</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/testo-animato-macchina-da-scrivere/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/testo-animato-macchina-da-scrivere/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 11:30:14 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[macchina da scrivere]]></category>
		<category><![CDATA[macchina da scrivere javascript]]></category>
		<category><![CDATA[stile macchina da scrivere]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1566</guid>
		<description><![CDATA[In questo articolo vedremo un simpatico e semplice script che permette di animare un testo facendolo comparire come se questo venisse digitato tramite una macchina da scrivere. In altre parole realizzeremo una funzione Javascript che acquisito in input un testo, lo scriverà, un carattere per volta, all&#8217;interno di un contenitore: div, textarea o altro. In [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo vedremo un <em>simpatico</em> e semplice script che permette di animare un testo facendolo comparire come se questo venisse <em><strong>digitato tramite una macchina da scrivere</strong></em>.<br />
In altre parole realizzeremo una <em>funzione Javascript</em> che acquisito in input un testo, lo scriverà, un carattere per volta, all&#8217;interno di un contenitore: div, textarea o altro.<br />
In fondo all’articolo è possibile <u>provare o scaricare il codice completo</u>.</p>
<p>La funzione che vedremo prende in input <em>3 parametri</em>:<br />
1 &#8211; <strong>id del campo</strong> dove stampare il testo<br />
2 &#8211; il <strong>testo</strong> da stampare<br />
3 &#8211; la <strong>velocità</strong> (espressa in millisecondi) di digitazione<br />
Inoltre forniremo allo script un quarto parametro opzionale (numerico) ad indicare la <strong>posizione</strong> nella quale scrivere il prossimo carattere.</p>
<p>Vediamo subito il codice della funzione <strong style='color:red'>macchinaDaScrivere</strong>:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript&gt;
function macchinaDaScrivere(id_campo, testo, velocita, posizione){
    var lunghezza = testo.length;
    posizione = posizione || 0;
    if(posizione&lt;lunghezza){
        var carattere = testo.substring(posizione,posizione+1);
        document.getElementById(id_campo).innerHTML = document.getElementById(id_campo).innerHTML.substring(0,posizione) + carattere + &quot;_&quot;;
        setTimeout('macchinaDaScrivere(&quot;'+id_campo+'&quot;, &quot;'+testo+'&quot;, '+velocita+', '+(posizione+1)+');', velocita);
    }else{
        document.getElementById(id_campo).innerHTML = document.getElementById(id_campo).innerHTML.substring(0,lunghezza);
    }
}
&lt;/script&gt;
</pre>
<p><em>Analizziamo</em> in maniera dettagliata la funzione Javascript macchinaDaScrivere.<br />
Calcolo la <em>lunghezza del testo</em> da stampare e quindi imposto una variabile <em>posizione</em> ad indicare la posizione nel quale digitare il prossimo carattere.<br />
Il <strong>cuore della funzione</strong> è chiuso all&#8217;interno di un if, valido fino a quando la posizione è minore della lunghezza del testo.<br />
Nella variabile <em>carattere</em> imposto il prossimo carattere da stampare, utilizzando una substring:</p>
<pre class="brush: jscript; title: ; notranslate">
var carattere = testo.substring(posizione,posizione+1);
</pre>
<p>A questo punto <em>accodo</em> il carattere in questione al testo già presente nel box contenitore identificato da <em>id_campo</em>:</p>
<pre class="brush: jscript; title: ; notranslate">
document.getElementById(id_campo).innerHTML = document.getElementById(id_campo).innerHTML.substring(0,posizione) + carattere + &quot;_&quot;;
</pre>
<p>La funzione è praticamente conclusa, non prima che questa venga richiamata con l&#8217;incremento della posizione. A tal proposito è ora chiaro il perchè della presenza del quarto parametro opzionale nella chiamata alla funzione; tale parametro alla prima chiamata varrà 0 (di default) e crescerà man mano che si avanzerà nel testo da digitare.<br />
La funzione <strong>setTimeout</strong> utilizzerà il valore della variabile velocità per ritardare la scrittura del successivo carattere:</p>
<pre class="brush: jscript; title: ; notranslate">
setTimeout('macchinaDaScrivere(&quot;'+id_campo+'&quot;,&quot;'+testo+'&quot;,'+velocita+','+(posizione+1)+');',velocita);
</pre>
<p>Infine è necessario notare la presenza di un carattere di <em>underscore basso</em> alla fine di ciascuna digitazione. E&#8217; chiaro come questo carattere sia esclusivamente &#8220;<em>ornamentale</em>&#8221; e può essere facilmente rimosso dal codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/macchina_da_scrivere/' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/macchina_da_scrivere.rar' target='_blank'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/testo-animato-macchina-da-scrivere/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Str_replace Javascript</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/str_replace-javascript/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/str_replace-javascript/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 17:31:42 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[replace javascript]]></category>
		<category><![CDATA[str_replace javascript]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1532</guid>
		<description><![CDATA[Coloro che sviluppano quotidianamente in Javascript si saranno imbattuti almeno una volta in un problema piuttosto semplice da risolvere con linguaggi di programmazione come Java, PHP, C ecc.. ma non così immediato in Javascript: sostituire tutte le occorrenze di una stringa all&#8217;interno di un&#8217;altra stringa. In Javascript non esiste una funzione pronta che effettui questo [...]]]></description>
			<content:encoded><![CDATA[<p>Coloro che sviluppano quotidianamente in Javascript si saranno imbattuti almeno una volta in un problema piuttosto <em>semplice</em> da risolvere con linguaggi di programmazione come Java, PHP, C ecc.. ma non così immediato in Javascript: <strong>sostituire tutte le occorrenze di una stringa all&#8217;interno di un&#8217;altra stringa</strong>.<br />
In Javascript non esiste una funzione pronta che effettui questo tipo di &#8220;<em>lavoro</em>&#8220;, infatti la replace(stringa, new_stringa) sostituisce solo la prima occorrenza di &#8220;<em>stringa</em>&#8221; e non le eventuali successive. In rete, fortunatamente, sono presenti svariate soluzioni le quali, solitamente, utilizzando <em>espressioni regolari</em> per determinare la sostituzione.</p>
<p>In questo articolo vedremo una <u>possibile soluzione che non utilizza espressioni regolari</u> bensì un semplice <strong>ciclo while</strong> combinato con le funzioni <strong>indexOf</strong>, <strong>substring</strong> e <strong>replace</strong> di Javascript. Il codice della funzione <strong style="color:red">str_replace</strong> è il seguente:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
function str_replace(s_search, s_replace, s_subject){
    var pointer = 0;
    while(s_subject.indexOf(s_search,pointer)!=-1){
        pointer = s_subject.indexOf(s_search,pointer);
        s_subject = s_subject.substring(0,pointer) + s_subject.substring(pointer).replace(s_search,s_replace);
        pointer = pointer + s_replace.length;
    }
    return s_subject;
}
&lt;/script&gt;
</pre>
<p>La funzione può essere così richiamata:</p>
<pre class="brush: jscript; title: ; notranslate">
var new_stringa = str_replace(str_da_cercare,str_da_sostituire,str_originale);
</pre>
<p>Analizziamo brevemente il codice della funzione str_replace.</p>
<p>Acquisisco tre parametri: <em>stringa da cercare</em>, <em>stringa da sostituire</em>, <em>stringa su cui operare</em>.<br />
Imposto una variabile <strong>pointer</strong> a 0 (inizio stringa).<br />
Ciclo sulla stringa fino a che indexOf è vera. Bisogna ricordare che indexOf restituisce la posizione della prima occorrenza di stringa da cercare: </p>
<pre class="brush: jscript; title: ; notranslate">
s_subject.indexOf(s_search,pointer)
</pre>
<p>Con l&#8217;aiuto della variabile pointer effetto il taglio in due della stringa originale andando a sostituire con una replace la sotto-stringa trovata nella seconda parte di stringa originale:</p>
<pre class="brush: jscript; title: ; notranslate">
s_subject = s_subject.substring(0,pointer)+s_subject.substring(pointer).replace(s_search, s_replace);
</pre>
<p>nel frattempo incremento pointer avanzando nella stringa:</p>
<pre class="brush: jscript; title: ; notranslate">
pointer = pointer + s_replace.length;
</pre>
<p>La funzione può sembrare complessa nel suo insieme ma svolge in maniera adeguata il suo compito. Inutile sottolineare che questa è solo una possibile soluzione.<br />
<strong>N.B.</strong> La funzione appena realizzata è <em>case sensitive</em>.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/str_replace/' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/str_replace.rar' target='_blank'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/str_replace-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maxlength textarea</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/maxlength-textarea/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/maxlength-textarea/#comments</comments>
		<pubDate>Thu, 21 Jul 2011 19:42:56 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[maxlength di una textarea]]></category>
		<category><![CDATA[size textarea]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1471</guid>
		<description><![CDATA[In questo articolo risolveremo la problematica del maxlength di una textarea html utilizzando poche semplici righe di codice Javascript. Come tutti sapranno, l&#8217;attributo maxlength è accettato esclusivamente dai campi di tipo testo e non dalle aree di testo. Realizzeremo una funzione che chiameremo appunto maxlength che accetta in input 2 parametri obbligatori ed un terzo [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo risolveremo la problematica del <strong>maxlength</strong> <strong>di una textarea</strong> html utilizzando poche semplici righe di codice Javascript.<br />
Come tutti sapranno, l&#8217;attributo maxlength è accettato <em>esclusivamente</em> dai campi di tipo testo e non dalle aree di testo.<br />
Realizzeremo una funzione che chiameremo appunto <strong>maxlength</strong> che accetta in input 2 parametri obbligatori ed un terzo opzionale:</p>
<ul>
<li>riferimento alla textarea</li>
<li>numero massimo di caratteri</li>
<li>id campo contatore caratteri mancanti (opzionale)</li>
</ul>
<p>Prima di vedere il codice chiariamo il concetto del terzo campo opzionale. Vorremmo ad esempio poter predisporre un <strong>contatore</strong> affiancato alla textarea che visualizzi il numero di caratteri cancora disponibili.<br />
<span style="text-decoration: underline;">In fondo all&#8217;articolo è possibile scaricare il codice completo e testare una demo</span>.</p>
<p>Ecco il codice della funzione maxlength:</p>
<pre class="brush: jscript; title: ; notranslate">
function maxlength(area,max,id_campo){
    var conta = max - area.value.length;
    if(id_campo!=null){
        document.getElementById(id_campo).innerHTML=conta;
    }
    if(conta &lt; 0){
        area.value = area.value.substring(0,max);
        if(id_campo!=null){
            document.getElementById(id_campo).innerHTML = '0';
        }
    }
}
</pre>
<p>Il codice della funzione è molto semplice:</p>
<ul>
<li>calcoliamo quanti caratteri sono ancora disponibili (var conta)</li>
<li>se tale valore è minore di 0 allora cancelliamo i caratteri in più (substring)</li>
</ul>
<p>Una volta definita la funzione, questa va così richiamata all&#8217;evento onKeyUp:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- Soluzione base --&gt;
&lt;textarea rows=&quot;7&quot; cols=&quot;40&quot; onkeyup=&quot;maxlength(this,160)&quot;&gt;
&lt;/textarea&gt;
</pre>
<p>Qualora volessimo presentare all&#8217;utente anche il contatore dei caratteri ancora disponibili:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- Soluzione con contatore caratteri disponibili --&gt;
Hai a disposizione ancora &lt;span id='conta'&gt;160&lt;/span&gt; caratteri:&lt;br/&gt;
&lt;textarea rows=&quot;7&quot; cols=&quot;40&quot; onkeyup=&quot;maxlength(this,160,'conta')&quot;&gt;
&lt;/textarea&gt;
</pre>
<p>Da notare che nella seconda soluzione abbiamo aggiunto l&#8217;ID di un elemento di tipo span adibito a contatore.<br />
In conclusione la sintassi della funzione maxlength è la seguente:</p>
<p><strong style='color:red'>maxlength(<em>this</em>,<em>max_caratteri</em>,[<em>id_contatore</em>])</strong></p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/maxlength_textarea/" title="Maxlegth textarea" target="_blank">qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/maxlength_textarea.rar" title="Scarica Maxlength Textarea" target="_blank">qui</a></strong> è possibile scaricare il codice.<br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/maxlength-textarea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: i bottoni</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-bottoni/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-bottoni/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 19:11:12 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[bottoni form html]]></category>
		<category><![CDATA[form html]]></category>
		<category><![CDATA[tag button html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1417</guid>
		<description><![CDATA[Dopo aver compilato un modulo, l’utente è tenuto ad inviare i dati al server per usufruire di un particolare servizio. Solitamente sul fondo di un form viene fornito un bottone che conclude la compilazione del modulo. La sintassi per questo particolare bottone è: L’attributo type è avvalorato a submit e l’attributo value specifica un’etichetta per il [...]]]></description>
			<content:encoded><![CDATA[<p>Dopo aver compilato un modulo, l’utente è tenuto ad inviare i dati al server per usufruire di un particolare servizio.<br />
Solitamente sul fondo di un form viene fornito un <strong>bottone</strong> che conclude la compilazione del modulo. La sintassi per questo particolare bottone è:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type=&quot;submit&quot; value=&quot;Invia i dati&quot; /&gt;
</pre>
<p>L’attributo <strong>type</strong> è avvalorato a<span style="color: #ff0000;"> submit</span> e l’attributo <strong>value</strong> specifica un’etichetta per il bottone.<br />
Al click del bottone di tipo submit, i dati del form vengono organizzati tramite il metodo di invio (<em>attributo method</em>) e quindi inviati alla pagina che li processerà (<em>attributo action</em>).</p>
<p>In alternativa all’invio dei dati, l’utente potrebbe decidere di <strong>annullare</strong> ciò che ha immesso nel modulo e riportare quindi il form stesso allo stato iniziale.<br />
Per far ciò è necessario fornire un ulteriore bottone, questa volta di tipo <span style="color: #ff0000;">reset</span> che al click andrà a <em>pulire</em> in automatico ogni singolo campo del form:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type='reset' value='Pulisci form'/&gt;
</pre>
<p>E’ utile posizionare questo bottone sul fondo della form, in concomitanza del bottone di submit. Il vantaggio è di fornire agli utenti un modo veloce ed efficiente per pulire i campi senza che questi debba cancellare a mano ogni singolo contenuto.</p>
<p><img class="aligncenter" title="Bottoni HTML" src="http://www.donatantonio.net/img_html/button_html.jpg" alt="Bottoni HTML" /></p>
<h3 class="paragrafo">Bottoni di uso generale</h3>
<p>Oltre i bottoni di submit e reset è possibile implementare <strong>ulteriori bottoni</strong> ai quali associare particolari funzioni definite dal programmatore.<br />
La sintassi è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type='button' value='Bottone' onClick='funzione()'/&gt;
</pre>
<p>Il type è necessariamente impostato a <span style="color: #ff0000;">button</span>. Inoltre va definita la funzione da richiamare ad un particolare evento, in questo caso al <strong>clic</strong> del pulsante.<br />
La parola chiave <span style="color: #ff0000;">onClick</span> rientra nella famiglia dei cosiddetti gestori di eventi dei quali sarà approfondito il significato nelle lezioni su <strong>Javascript</strong>.</p>
<h3 class="paragrafo">Il tag BUTTON</h3>
<p>Con l&#8217;<strong>HTML 4</strong> è stato introdotto il <span style="color: #ff0000;">tag button</span> che offre la possibilità di creare dei bottoni con un aspetto particolarmente ricco.<br />
Il tag button, a differenza del tag input, dà la possibilità di inserire il testo del bottone tra l&#8217;apertura e la chiusura del tag medesimo. Questo ci consente di specificare anche del codice html all’interno del tag, o addirittura delle immagini o oggetti.<br />
Analizziamo il codice html sottostante:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;button&gt;
	&lt;img src='img/esclamativo.jpg' alt='Invia' border='1'  align='middle'&gt;
	Invia i dati
&lt;/button&gt;
</pre>
<p>All’interno del bottone verrà visualizzata un’immagine e quindi un testo. Niente ci avrebbe vietato l’aggiunta di ulteriore testo o immagini al contenuto del bottone.</p>
<p><img class="aligncenter" title="Il tag button HTML" src="http://www.donatantonio.net/img_html/button_html_1.jpg" alt="Il tag button HTML" /></p>
<h3 class="paragrafo">Disabilitare un bottone</h3>
<p>Grazie all’attributo <span style="color: #ff0000;">disable</span>, infine, è possibile disabilitare un bottone in modo tale che questo non sia cliccabile.<br />
Inoltre il browser visualizzerà tale bottone nella pagina con uno stile a basso rilievo ad intendere che il pulsante non è abilitato. La sintassi è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type='submit' value='Invia i dati' disabled /&gt;
</pre>
<p>Il bottone sarà così visibile:</p>
<p><img class="aligncenter" title="Il tag button HTML disabilitato" src="http://www.donatantonio.net/img_html/button_disabled.jpg" alt="Il tag button HTML disabilitato" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-bottoni/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: i form</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-form/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-form/#comments</comments>
		<pubDate>Mon, 18 Jul 2011 19:11:00 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[campi di input]]></category>
		<category><![CDATA[form html]]></category>
		<category><![CDATA[form input text]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1407</guid>
		<description><![CDATA[Uno dei fattori che ha decretato negli anni il successo del web è senza dubbio la possibilità che offre agli utenti di interagire con esso. Pensiamo ad esempio ai forum, alle newsletter e alla possibilità di iscriversi a portali e chat. Per ognuno di questi esempi è indispensabile ritrovarsi dinnanzi a moduli html da compilare [...]]]></description>
			<content:encoded><![CDATA[<p>Uno dei fattori che ha decretato negli anni il successo del web è senza dubbio la possibilità che offre agli utenti di <strong>interagire con esso</strong>.<br />
Pensiamo ad esempio ai <em>forum</em>, alle <em>newsletter</em> e alla possibilità di iscriversi a portali e chat. Per ognuno di questi esempi è indispensabile ritrovarsi dinnanzi a<em> moduli html</em> da compilare per usufruire del servizio e fornire i dati necessari al web server.<br />
I<span style="color: #ff0000;"><strong> form</strong></span> sono quindi da definirsi come l’area di una pagina html adibita all’inserimento di dati da parte degli utenti. Di seguito un esempio grafico di form:</p>
<p><img class="aligncenter" title="Form HTML" src="http://www.donatantonio.net/img_html/form_intro.jpg" alt="Form HTML" align="center" /></p>
<p>Ogni modulo html è definito innanzitutto da un tag di apertura e da uno di chiusura:</p>
<p><strong>&lt;form &#8230; &gt;</strong><br />
<strong>     &#8230;</strong><br />
<strong>&lt;/form&gt;</strong></p>
<p>All’interno di questo contenitore vanno quindi definiti il testo e gli elementi che compongono il form.<br />
Solitamente l’invio dei dati è organizzato in due parti:</p>
<ul>
<li>una <strong>pagina iniziale</strong> che contiene il modulo che consente all’utente di effettuare scelte e immettere testo</li>
<li>una <strong>pagina secondaria</strong> che viene richiamata dal modulo ed ha lo scopo di processare i dati ricevuti. Solitamente trattandosi di una pagina di programmazione che risiede sul server e può essere in <strong>CGI</strong>, <strong>ASP</strong>, <strong>PHP</strong>, <strong>JSP</strong> o altro linguaggio.</li>
</ul>
<p>A tal proposito è necessario introdurre alcuni attributi indispensabili del tag form:</p>
<p><strong>&lt;form name=‘nome_form’ action=‘pagina_secondaria.php’ method=‘GET’&gt;</strong><br />
<strong>    …</strong><br />
<strong>&lt;/form&gt;</strong></p>
<p>L’attributo <span style="color: #ff0000;">name</span> serve per indicare un nome ad un form, necessario per processare lato client(con Javascript) i dati del modulo.<br />
L’attributo <span style="color: #ff0000;">action</span> definisce l’url della pagina o del programma che processerà i dati del modulo html.<br />
L’attributo <span style="color: #ff0000;">method</span>, infine, definisce il metodo di invio dei dati al server. Può assumere valore GET o POST.</p>
<p>Con il metodo <strong>GET</strong> la pagina di risposta viene contattata e i dati vengono inviati in un unico step. Nell&#8217;URL della pagina di risposta potremo allora vedere tutti i parametri nella barra degli indirizzi (più precisamente nella <em>“query string”</em>, cioè nella stringa di interrogazione) secondo questa forma:</p>
<p><strong>pagina_secondaria.php?parametro=valore&amp;parametro=valore</strong></p>
<p>Nel metodo <strong>POST</strong> invece l&#8217;invio dei dati avviene in due step distinti: prima viene contattata la pagina sul server che deve processare i dati, e poi vengono inviati i dati stessi. Per questo motivo i parametri non compaiono nella query string (dunque se non si desidera che i parametri siano mostrati all&#8217;utente questo metodo è preferibile).</p>
<h3 class="paragrafo">Controlli del modulo</h3>
<p>Per controlli di un modulo html si intende l’insieme degli elementi che costituiscono il modulo stesso e che forniscono all’utente gli strumenti per effettuare scelte e immettere dati.<br />
I tipi di controlli sono:</p>
<ul>
<li>Bottoni (submit/reset)</li>
<li>Caselle di Testo (anche nascoste come pswd)</li>
<li>Caselle di Spunta</li>
<li>Radio Button (come caselle di spunta, ma mutex)</li>
<li>Immagini (come i bottoni)</li>
<li>Selezione di File</li>
<li>Controlli nascosti</li>
</ul>
<p>Per ciascuno di essi è possibile associare un’etichetta per identificare l’elemento in maniera univoca. Ogni controllo ha inoltre un nome (specificato nel codice html dall’attributo <strong>name</strong>) e un valore (specificato dall’attributo <strong>value</strong>) che può assumere significati diversi in relazione al tipo di controllo.<br />
Il name e il value vengono accoppiati e passati dal browser al server per essere elaborati.</p>
<h3 class="paragrafo">Il tag INPUT</h3>
<p>Il tag <strong><span style="color: #ff0000;">&lt;input&gt;</span></strong> definisce un singolo campo che compone un modulo. La sintassi è la seguente:</p>
<p><strong>&lt;input  type=‘…’ /&gt;</strong></p>
<p>L’input non prevede il tag di chiusura e l’attributo type specifica il tipo di dato che il campo contempla. Scrivere ad esempio : <strong>&lt;input type=‘text’ /&gt;</strong> ci permette di definire un campo di input di tipo testo.</p>
<p>Analizziamo il codice html che segue:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form name='form' action='pagin.php' method='GET'&gt;
	&lt;table border='0'&gt;
	&lt;tr&gt;
		&lt;td&gt;Nome :&lt;/td&gt;
		&lt;td&gt;&lt;input type='text' name='nome'/&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Cognome:&lt;/td&gt;
		&lt;td&gt;&lt;input type='text' name='cognome'/&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Codice Fiscale :&lt;/td&gt;
		&lt;td&gt;&lt;input type='text' name='cf'/&gt;&lt;/td&gt;
	&lt;/tr&gt;
	&lt;/table&gt;
&lt;/form&gt;
</pre>
<p>Il form contiene tre campi di input di tipo testo. I campi sono tabellati e provvisti dell’attributo name. Il risultato nella finestra del browser è il seguente:</p>
<p><img class="aligncenter" title="Esempio form HTML" src="http://www.donatantonio.net/img_html/form_1.jpg" alt="Form HTML esempio" align="center" /></p>
<p>Grazie all’attributo <span style="color: #ff0000;">value</span> è inoltre possibile impostare un testo di default per ciascun campo di testo:</p>
<pre class="brush: xml; title: ; notranslate">
…
		&lt;td&gt;&lt;input type='text' name='nome‘ value=‘Il tuo nome’/&gt;&lt;/td&gt;
…
		&lt;td&gt;&lt;input type='text' name=‘cognome’ value=‘Il tuo cognome’/&gt;&lt;/td&gt;
</pre>
<p><img class="aligncenter" title="Esempio value form HTML" src="http://www.donatantonio.net/img_html/form_2.jpg" alt="Form HTML esempio value" align="center" /></p>
<p>Il campo di input di tipo testo permette inoltre di specificare il <em>numero massimo di caratteri ammissibile</em>. A tale scopo esistono alcuni attributi, tra i quali:</p>
<ul>
<li>
<div><span style="color: #ff0000;">SIZE</span> (grandezza della casella mostrata nella pagina)</div>
</li>
<li>
<div><span style="color: #ff0000;">MAXLENGTH</span> (numero massimo di caratteri che l’utente può inserire)</div>
</li>
</ul>
<p>La sintassi è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type='text' name='nome' size='10' maxlength='10'/&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-form/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Informatica per le scienze umane</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/informatica-per-le-scienze-umane/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/informatica-per-le-scienze-umane/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 18:46:44 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Tutorial e Pubblicazioni]]></category>
		<category><![CDATA[Botteri]]></category>
		<category><![CDATA[Ceracchi]]></category>
		<category><![CDATA[Donatantonio]]></category>
		<category><![CDATA[Informatica per le scienze umane]]></category>
		<category><![CDATA[libro]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1381</guid>
		<description><![CDATA[Informatica per le scienze umane R. Botteri, F. Donatantonio , M. Ceracchi (2011) Collana Quaderni di Lettere – Ed. C.E.S.D. srl Il presente compendio raccoglie, in un unico testo, una selezione di temi tratti dalle lezioni del corso &#8220;Informatica per le Scienze Umane&#8221; il cui obiettivo è quello di fornire le conoscenze di base degli [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"><strong>Informatica per le scienze umane</strong></span><br />
<strong> R. Botteri, F. Donatantonio , M. Ceracchi</strong><br />
<strong> (2011) Collana Quaderni di Lettere – Ed. C.E.S.D. srl</strong></p>
<p><img class="alignleft" style="margin-right: 10px;" title="Informatica per le scienze umane - Botteri, Donatantonio, Ceracchi" src="http://www.donatantonio.net/img/Informatica_per_le_scienze_umane.jpg" alt="Informatica per le scienze umane - Botteri, Donatantonio, Ceracchi" width="250" height="363" />Il presente compendio raccoglie, in un unico testo, una selezione di temi tratti dalle lezioni del corso &#8220;Informatica per le Scienze Umane&#8221; il cui obiettivo è quello di fornire le conoscenze di base degli aspetti teorici e pratici dell&#8217;informatica, che l&#8217;allievo potrà poi valorizzare nel prosieguo degli studi e nell&#8217; ambiente di lavoro.<br />
Nella stessa ottica gli argomenti presentati approfondiscono aspetti più strettamente legati all&#8217;attività di un umanista, mediante le lezioni dedicate:<br />
- all&#8217;utilizzo dell&#8217;informatica nelle diverse realtà professionali;<br />
- al tipo di relazione che esiste fra l&#8217;uomo e il personal computer;<br />
- all&#8217;uso ed allo sviluppo di strumenti informatici operativi di semplice utilizzo per facilitare l&#8217;apprendimento altrui mediante la creazione di modelli didattici innovativi, affinare e personalizzare le ricerche di area umanistica in Internet e consultare/creare archivi e biblioteche digitali.<br />
La natura semplificata della trattazione delle varie componenti del programma rende tale compendio fruibile anche al lettore che intende avvicinarsi all&#8217;informatica, a Windows 7 e alla Suite MS Office 2010, indipendentemente dalla necessità di sostenere un esame universitario.</p>
<table border="0">
<tbody>
<tr>
<td height="32">Disponibile in formato:</td>
<td>Cartaceo &#8211; Ed. C.E.S.D.</td>
</tr>
<tr>
<td height="32">Numero di Pagine:</td>
<td>460</td>
</tr>
<tr>
<td height="32">Anno:</td>
<td>2011</td>
</tr>
</tbody>
</table>
<p><a rel="nofollow" title="Informatica per le scienze umane - Botteri, Donatantonio, Ceracchi" href="http://www.uniecampus.it/area-riservata/collana-editoriale-universitaria/dettaglio/index.html?no_cache=1&amp;tx_extendedshop_pi1%5BproductID%5D=16&amp;tx_extendedshop_pi1%5Bpid_product%5D=632&amp;cHash=ea9be6f2318473471cddaadbedc3fea0" target="_blank"><img title="Informatica per le scienze umane - Botteri, Donatantonio, Ceracchi" src="http://www.donatantonio.net/img/buy.png" border="0" alt="" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/informatica-per-le-scienze-umane/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fondamenti di Informatica</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/fondamenti-di-informatica/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/fondamenti-di-informatica/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 18:46:32 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Tutorial e Pubblicazioni]]></category>
		<category><![CDATA[Botteri Donatantonio Ceracchi]]></category>
		<category><![CDATA[Fondamenti di Informatica]]></category>
		<category><![CDATA[libro]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1368</guid>
		<description><![CDATA[Fondamenti di Informatica R. Botteri, F. Donatantonio, M. Ceracchi (2011) Collana Quaderni di Psicologia – Ed. C.E.S.D. srl Il presente compendio raccoglie, in un unico testo, una selezione di temi tratti dalle lezioni del corso di &#8220;Fondamenti di Informatica&#8221; per la Facoltà di Psicologia ed ha l&#8217;obiettivo di fornire le conoscenze di base degli aspetti [...]]]></description>
			<content:encoded><![CDATA[<p><strong><span style="color: #ff0000;">Fondamenti di Informatica</span></strong><br />
<strong>R. Botteri, F. Donatantonio, M. Ceracchi</strong><br />
<strong> (2011) Collana Quaderni di Psicologia – Ed. C.E.S.D. srl</strong></p>
<p><img class="alignleft" style="margin-right: 10px;" title="Fondamenti di Informatica - Botteri, Donatantonio, Ceracchi" src="http://www.donatantonio.net/img/Fondamenti_di_informatica.jpg" alt="Fondamenti di Informatica - Botteri, Donatantonio, Ceracchi" width="250" height="363" />Il presente compendio raccoglie, in un unico testo, una selezione di temi tratti dalle lezioni del corso di &#8220;Fondamenti di Informatica&#8221; per la Facoltà di Psicologia ed ha l&#8217;obiettivo di fornire le conoscenze di base degli aspetti teorici e pratici dell&#8217;informatica che l&#8217;allievo potrà poi valorizzare nel prosieguo degli studi e nell&#8217; ambiente di lavoro.<br />
Nella stessa ottica gli argomenti presentati approfondiscono aspetti più strettamente legati alla psicologia, mediante le sezioni dedicate:<br />
- all&#8217;utilizzo dell&#8217;informatica nelle diverse realtà professionali;<br />
- al tipo di relazione che esiste fra l&#8217;uomo e il personal computer;<br />
- all&#8217;uso ed allo sviluppo di strumenti informatici operativi di semplice utilizzo, tesi a facilitare l&#8217;apprendimento altrui mediante la creazione di modelli didattici innovativi.<br />
La natura semplificata della trattazione delle varie componenti del programma rende tale compendio fruibile anche al lettore che intende avvicinarsi all&#8217;informatica, a Windows 7 e alla Suite MS Office 2010, indipendentemente dalla necessità di sostenere un esame universitario.</p>
<table border="0">
<tbody>
<tr>
<td height="32">Disponibile in formato:</td>
<td>Cartaceo &#8211; Ed. C.E.S.D.</td>
</tr>
<tr>
<td height="32">Numero di Pagine:</td>
<td>327</td>
</tr>
<tr>
<td height="32">Anno:</td>
<td>2011</td>
</tr>
</tbody>
</table>
<p><a rel="nofollow" title="Fondamenti di Informatica - Botteri, Donatantonio, Ceracchi" href="http://www.uniecampus.it/area-riservata/collana-editoriale-universitaria/dettaglio/index.html?no_cache=1&amp;tx_extendedshop_pi1%5BproductID%5D=17&amp;tx_extendedshop_pi1%5Bpid_product%5D=632&amp;cHash=6a47fd1e3fccd1cdda4544fc03376659" target="_blank"><img title="Fondamenti di Informatica - Botteri, Donatantonio, Ceracchi" src="http://www.donatantonio.net/img/buy.png" border="0" alt="" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/fondamenti-di-informatica/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La semina della vita</title>
		<link>http://www.donatantonio.net/blog/riflessioni/la-semina-della-vita/</link>
		<comments>http://www.donatantonio.net/blog/riflessioni/la-semina-della-vita/#comments</comments>
		<pubDate>Sat, 25 Jun 2011 18:33:45 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Riflessioni]]></category>
		<category><![CDATA[i semi della vita]]></category>
		<category><![CDATA[la semina della vita]]></category>
		<category><![CDATA[la vita]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1348</guid>
		<description><![CDATA[Ho sempre immaginato che ogni uomo dal momento in cui nasce ha con se 100 semini&#8230; La vita in fondo non è altro che un grande campo arido e deserto, per tutti è così&#8230; all&#8217;inizio&#8230; Poi si cresce e quei 100 semini vanno ben distribuiti nell&#8217;arco della propria esistenza. Ogni semino è un pezzo di [...]]]></description>
			<content:encoded><![CDATA[<p>Ho sempre immaginato che ogni uomo dal momento in cui nasce ha con se 100 semini&#8230;<br />
La vita in fondo non è altro che un grande campo arido e deserto,<br />
per tutti è così&#8230; all&#8217;inizio&#8230;</p>
<p>Poi si cresce e quei 100 semini vanno ben distribuiti nell&#8217;arco della propria esistenza.<br />
Ogni semino è un pezzo di passione, impegno, speranza&#8230; vita.<br />
Nessuno sà come seminarli, nessuno sà come e quando è giusto buttarli lì su quella terra&#8230;<br />
fin quando non inizi a buttarne via qualcuno&#8230;</p>
<p>E io immagino che ognuno di noi divida il proprio pezzo di terra in pezzi più piccoli&#8230;<br />
e ad ognuno di questi assegni un valore&#8230; un motivo.<br />
Ed ecco che c&#8217;è il pezzettino di terra chiamato amore, quello chiamato lavoro, amicizia, passioni&#8230;<br />
divertimento, salute&#8230; ciascuno sceglie come dividerlo.</p>
<p>Così durante la vita, c&#8217;è chi si dedica a coltivarne uno piuttosto che un&#8217;altro&#8230;<br />
utilizzando quei semini che ci hanno donato.<br />
Difficile è capire dove gettare più semi&#8230;<br />
Tutti vivono con la speranza di veder nascere solo il meglio su ogni pezzo di terra&#8230;<br />
vogliono l&#8217;amore, la salute, il lavoro&#8230; divertirsi, avere tanti amici&#8230; avere un futuro.<br />
In troppi però sbagliano&#8230;<br />
sprecano i loro semi gettandoli su terre dove mai niente sboccerà&#8230;<br />
oppure, peggio ancora, li perdono rincorrendo falsi ideali.<br />
Altri invece buttano tutti i loro semi su un unico pezzo di terra&#8230;<br />
fino a ritrovarsi vecchi e con una sola speranza a tenerli vivi.</p>
<p>Quindi perchè sprecare questo dono?<br />
I 100 semini sono stati donati a tutti e non esiste alcuna regola per una buona semina.<br />
Siamo noi che decidiamo&#8230; siamo noi gli artefici del nostro futuro.<br />
Siamo noi che dobbiamo curare il nostro pezzo di terra&#8230; la nostra vita.</p>
<p>Gettiamo i nostri semini su ciò che ci rende vivi,<br />
su ciò che ci emoziona&#8230;<br />
Non sprechiamone neanche uno, distribuiamoli in maniera che su ogni pezzettino di terra nasca qualcosa&#8230;<br />
un fiore, una rosa&#8230; un giardino incantato&#8230;<br />
Non lasciamo che vinca aridità e siccità.</p>
<p>Immaginiamo di ritrovarci in una giornata di fine estate, seduti al centro della propria terra&#8230;<br />
tra un ulivo&#8230; una siepe fiorita&#8230; una quercia&#8230;<br />
e col sorriso sulle labbra, alzare gli occhi al cielo&#8230;<br />
e pensare quanto è stata dura la semina della vita.</p>
<p style="text-align: right;">Fabio Donatantonio</p>
<p style="text-align: right;"><img class="aligncenter" title="La semina della vita" src="http://www.donatantonio.net/img/semina.png" alt="La semina della vita" width="500" height="331" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/riflessioni/la-semina-della-vita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>tZebra (tabella zebrata) &#8211; Plugin jQuery</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/tzebra-tabella-zebrata-plugin-jquery/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/tzebra-tabella-zebrata-plugin-jquery/#comments</comments>
		<pubDate>Fri, 24 Jun 2011 22:13:06 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[plugin tZebra jQuery]]></category>
		<category><![CDATA[tabella colori alternati]]></category>
		<category><![CDATA[tabella zebrata]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1334</guid>
		<description><![CDATA[In questo articolo realizzeremo un plugin jQuery che ci permetta di implementare una tabella HTML con le righe di due colori alternati. In altre parole la nostra tabella avrà tutte le righe pari (2,4,6 ecc..) di un colore e quelle dispari (1,3,5 ecc..) di un altro colore. Personalizzeremo, inoltre, il plugin con ulteriori caratteristiche. Ad [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo realizzeremo un<strong> plugin jQuery</strong> che ci permetta di implementare una tabella HTML con le righe di due colori alternati.<br />
In altre parole la nostra tabella avrà tutte le <em>righe pari</em> (2,4,6 ecc..) di un colore e quelle <em>dispari</em> (1,3,5 ecc..) di un altro colore.<br />
Personalizzeremo, inoltre, il plugin con ulteriori caratteristiche. Ad esempio al passaggio del mouse su una riga, questa si animerà cambiando di colore e font.</p>
<p>Iniziamo subito lo sviluppo del plugin, che chiameremo &#8220;<strong><span style="color: #ff0000;">tzebra</span></strong>&#8220;, determinando quali saranno i parametri da passare alla funzione:</p>
<ul>
<li>Colore per righe dispari</li>
<li>Colore per righe pari</li>
<li>Colore per animazione riga</li>
</ul>
<p>Una volta terminato il lavoro vorremmo poter invocare il plugin con questa <strong>sintassi</strong>:</p>
<pre class="brush: jscript; title: ; notranslate">
$('#myTable').tzebra({
	color1: '#e0ffff',
	color2: '#add8e6',
	focusColor: '#00ffff'
});
</pre>
<p>Ottenendo quindi il seguente risultato:</p>
<p><img src="http://www.donatantonio.net/script/jquery_tzebra/esempio.jpg" alt="Plugin tZebra" /></p>
<p>Introduciamo il codice del plugin:</p>
<pre class="brush: jscript; title: ; notranslate">
(function($){
	$.fn.tzebra = function(options) {

	var defaults = {
	   color1: &quot;#FFFFFF&quot;,
	   color2: &quot;#CCCCCC&quot;,
	   focusColor: ''
	};

	var options = $.extend(defaults, options);

	return this.each(function() {
		var id_table = $(this).attr('id');

		$('#'+id_table+ ' tbody tr:odd').css('background-color',options.color1);
		$('#'+id_table+ ' tbody tr:even').css('background-color',options.color2);

		if(options.focusColor!=''){
			$('#'+id_table+ ' tbody tr').css('cursor','pointer');

			$('#'+id_table+ ' tbody tr:odd').mouseover(function() {
				$(this).css('background-color',options.focusColor);
				$(this).css('font-weight','bold');
			}).mouseout(function(){
				$(this).css('background-color',options.color1);
				$(this).css('font-weight','normal');
			});

			$('#'+id_table+ ' tbody tr:even').mouseover(function() {
				$(this).css('background-color',options.focusColor);
				$(this).css('font-weight','bold');
			}).mouseout(function(){
				$(this).css('background-color',options.color2);
				$(this).css('font-weight','normal');
			});
		}

		return false;
	});

	};
})(jQuery);
</pre>
<p>Analizziamo il codice focalizzando l&#8217;attenzione sulle istruzioni fondamentali che lo compongono.<br />
Innanzitutto passiamo alla funzione i parametri all&#8217;interno dell&#8217;array <em>&#8220;options</em>&#8220;, per intenderci i tre colori da noi scelti. Nell&#8217;array <em>&#8220;default&#8221;</em> abbiamo invece impostato i tre colori di default qualora i parametri in input siano nulli.<br />
Nella variabile <em>&#8220;id_table&#8221;</em> scriviamo l&#8217;ID della tabella, utilizzando il metodo <strong>attr</strong>; l&#8217;ID ci servirà per accedere alla nostra tabella.<br />
I passi successivi creano <strong>l&#8217;effetto zebrato</strong>:</p>
<pre class="brush: jscript; title: ; notranslate">
$('#'+id_table+ ' tbody tr:odd').css('background-color',options.color1);
$('#'+id_table+ ' tbody tr:even').css('background-color',options.color2);
</pre>
<p>Tramite un opportuno selettore impostiamo rispettivamente il colore per le righe pari(<strong style="color: #ff0000;">odd</strong>) e poi per quelle dispari(<strong style="color: #ff0000;">even</strong>), manipolando la proprietà background-color grazie al metodo <strong>css</strong> di jQuery.<br />
Le righe pari avranno come colore di sfondo <em>options.color1</em>, mentre le righe dispari avranno come colore <em>options.color2</em><br />
A questo punto abbiamo reso zebrata la nostra tabella, resta da animare le righe al passaggio del mouse.<br />
Da notare che di default abbiamo settato il <em>focusColor</em> a blank per permettere una maggiore personalizzazione del nostro plugin, infatti potremo evitare di passare come parametro il terzo colore (il colore del focus riga) lasciando la tabella al semplice stato zebrato.<br />
Una volta controllato che sia stato impostato il <em>focusColor</em> aggiungiamo gli eventi <strong>mouseover</strong> e <strong>mouseout</strong> sulle righe della nostra tabella, modificando il css prima per le righe dispari e poi per quelle pari.<br />
I seguenti passi, ad esempio, aggiungono l&#8217;animazione sulle righe pari:</p>
<pre class="brush: jscript; title: ; notranslate">
$('#'+id_table+ ' tbody tr:odd').mouseover(function() {
	$(this).css('background-color',options.focusColor);
	$(this).css('font-weight','bold');
 }).mouseout(function(){
	$(this).css('background-color',options.color1);
	$(this).css('font-weight','normal');
});
</pre>
<p>Al passaggio del mouse su una riga questa cambia di colore e il font diventa grassetto, quando il muose lascia la riga si ritorna allo stato precedente ripristinando colore e font.</p>
<p>Il plugin è concluso e pronto per l&#8217;uso.<br />
Prima però è necessario salvare il codice in un file con estensione .js che chiameremo<span style="color: #ff0000;"> jquery.tzebra.js</span> rispettando così la sintassi proposta da jQuery (jquery.[nome del plugin].js).</p>
<p>Richiamiamo il codice del plugin, realizziamo una semplice tabella e invochiamo il metodo tzebra:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0 Transitional//EN&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Tabella zebrata&lt;/title&gt;

&lt;script src=&quot;http://code.jquery.com/jquery-latest.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;jquery.tzebra.js&quot;&gt;&lt;/script&gt;

&lt;script type='text/javascript'&gt;
$(document).ready(function(){
    $('#myTable').tzebra({
		color1: '#e0ffff',
		color2: '#add8e6',
		focusColor: '#00ffff'
	});
});
&lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;

&lt;table id='myTable' border='0' cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;&lt;th&gt;Nome&lt;/th&gt;&lt;th&gt;Cognome&lt;/th&gt;&lt;th&gt;Voto Informatica&lt;/th&gt;&lt;th&gt;Voto Lettere&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Marco&lt;/td&gt;&lt;td&gt;Rossi&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Luigi&lt;/td&gt;&lt;td&gt;Bianchi&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Marco&lt;/td&gt;&lt;td&gt;Neri&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Giuseppe&lt;/td&gt;&lt;td&gt;Rossi&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Enrico&lt;/td&gt;&lt;td&gt;Giallo&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Fabio&lt;/td&gt;&lt;td&gt;Neroni&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>L&#8217;unica attenzione che dobbiamo riporre nello scrivere il codice HTML della tabella è di racchiudere l&#8217;intestazione nel tag <em>thead</em> e il corpo nel tag <em>tbody</em>.<br />
Al caricamento della pagina invochiamo tzebra passando i <em>tre colori scelti</em>, oppure volendo solo i primi due per gestire unicamente l&#8217;effetto zebrato.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/jquery_tzebra/index.html" target="_blank">qui</a></strong> è possibile vedere in azione il plugin tzebra.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/jquery_tzebra.rar" target="_blank">qui</a></strong> è possibile scaricare il codice del plugin tzebra.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/tzebra-tabella-zebrata-plugin-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: unione di celle</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-unione-di-celle/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-unione-di-celle/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 22:15:47 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[colspan e rowspan]]></category>
		<category><![CDATA[tabelle html]]></category>
		<category><![CDATA[unione di celle html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1325</guid>
		<description><![CDATA[L&#8217;attributo COLSPAN Finora abbiamo creato tabelle come griglie rigide, in cui il numero delle colonne era dato come costante e non modificabile. In realtà è possibile raggruppare le celle all&#8217;interno delle colonne in modo da avere ad esempio una riga da 3 colonne e un’altra da 4. Per ottenere questo risultato è necessario specificare che [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">L&#8217;attributo COLSPAN</h3>
<p>Finora abbiamo creato tabelle come griglie rigide, in cui il numero delle colonne era dato come costante e non modificabile.<br />
In realtà è possibile<strong> raggruppare le celle</strong> all&#8217;interno delle colonne in modo da avere ad esempio una riga da 3 colonne e un’altra da 4. Per ottenere questo risultato è necessario specificare che una cella deve occupare il posto di 2 (o più colonne).<br />
In questo caso si utilizza l’attributo <strong><span style="color: #ff0000;">COLSPAN</span></strong> all’interno del tag &lt;td&gt;, specificando come valore il numero di celle che devono essere occupate.<br />
La sintassi è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;td colspan='2'&gt;… contenuto cella …&lt;/td&gt;
</pre>
<p>In questo caso la cella occuperà il posto di due celle e il suo contenuto sarà visibile all’interno dello spazio creato.<br />
Analizziamo a questo punto il codice completo di una tabella che contiene 3 righe, la prima composta da 4 celle, la seconda da 3 e la terza da 2 celle:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;TABELLE - COLSPAN&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;table border='1' width='400px'&gt;
&lt;tr&gt;
	&lt;td align='center'&gt;Cella 1&lt;/td&gt;
	&lt;td align='center'&gt;Cella 2&lt;/td&gt;
	&lt;td align='center'&gt;Cella 3&lt;/td&gt;
	&lt;td align='center'&gt;Cella 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
	&lt;td align='center'&gt;Cella 5&lt;/td&gt;
	&lt;td align='center'&gt;Cella 6&lt;/td&gt;
	&lt;td colspan='2' align='center'&gt;Cella 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
	&lt;td align='center'&gt;Cella 8&lt;/td&gt;
	&lt;td colspan='3' align='center'&gt;Cella 9&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Il risultato nella finestra del browser è il seguente:</p>
<p><img class="aligncenter" title="Colspan HTML" src="http://www.donatantonio.net/img_html/colspan_html.jpg" alt="Colspan HTML" width="500" height="217" /></p>
<p>Quando si utilizza l’attributo colspan è facile incorrere in errori. Ad esempio realizzare una riga con 4 colonne (celle) e successivamente una riga con sole 2 colonne provoca in fase di visualizzazione effetti indesiderati.<br />
E’ sempre consigliabile, indipendentemente dal numero di celle unite che si andranno a realizzare, preparare una <em>bozza cartacea</em> della tabella comprensiva di un numero uguale di celle per ogni riga. Successivamente scegliere le celle da unire evidenziandole da un segno grafico e quindi realizzare il codice html.</p>
<p><img class="aligncenter" title="Unione celle" src="http://www.donatantonio.net/img_html/unione_celle_html.jpg" alt="Unione celle" width="500" height="147" /></p>
<h3 class="paragrafo">L&#8217;attributo ROWSPAN</h3>
<p>Anche l’attributo <strong><span style="color: #ff0000;">ROWSPAN</span></strong> è utile ad unire le celle di una tabella html. A differenza di colspan però questo attributo lavora sull’<strong>unione di righe</strong>.<br />
In altre parole è possibile far si che una cella si estenda su più righe:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;td rowspan='2'&gt;… contenuto cella …&lt;/td&gt;
</pre>
<p>In questo caso infatti il contenuto della cella verrà visualizzato in una cella estesa su due righe (<em>rowspan=&#8217;2&#8242;</em>). E’ possibile inoltre combinare insieme rowspan e colspan se vogliamo ad esempio che una cella si estenda sia in orizzontale che in verticale.<br />
Riprendendo il codice html proposto nella sezione precedente, modifichiamolo in modo tale che la prima cella si estenda su tutte e tre le righe lasciando intatte le colonne con attributo colspan:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;TABELLE - ROWSPAN&lt;/title&gt;
&lt;/head&gt;
&lt;table border='1' width='400px'&gt;
&lt;tr&gt;
	&lt;td align='center' rowspan='3'&gt;Cella 1&lt;/td&gt;
	&lt;td align='center'&gt;Cella 2&lt;/td&gt;
	&lt;td align='center'&gt;Cella 3&lt;/td&gt;
	&lt;td align='center'&gt;Cella 4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
	&lt;td align='center'&gt;Cella 6&lt;/td&gt;
	&lt;td colspan='2' align='center'&gt;Cella 7&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
	&lt;td colspan='3' align='center'&gt;Cella 9&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Di seguito è visibile la modifica apportata alla tabella con l’estensione della prima cella su tutte le righe:</p>
<p><img class="aligncenter" title="Rowspan html" src="http://www.donatantonio.net/img_html/rowspan_html.jpg" alt="Rowspan html" width="500" height="366" /></p>
<p>Come per l’attributo colspan, anche con rowspan bisogna prestare particolare attenzione nella progettazione di una tabella e quindi valgono le regole definite in precedente. L’unica attenzione in più richiesta è quella di <em>non perdere di vista il numero di righe</em> su cui si estende una cella onde evitare di ritrovarsi con un numero di celle maggiore o minore su una delle righe successive.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-unione-di-celle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: le tabelle</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-tabelle/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-tabelle/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 22:15:28 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[tabelle html]]></category>
		<category><![CDATA[tag table html]]></category>
		<category><![CDATA[td]]></category>
		<category><![CDATA[th html]]></category>
		<category><![CDATA[tr]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1319</guid>
		<description><![CDATA[Oltre che testo e immagini spesso è necessario inserire dei dati in tabelle e visualizzarle a video all’interno di pagine web. Inoltre spesso una struttura tabellare è utilizzata per realizzare il layout di un sito web e per disporre i diversi elementi che costituiscono la pagina html. Ad esempio per formattare la pagina con un [...]]]></description>
			<content:encoded><![CDATA[<p>Oltre che testo e immagini spesso è necessario inserire dei dati in <strong>tabelle</strong> e visualizzarle a video all’interno di pagine web.<br />
Inoltre spesso una struttura tabellare è utilizzata per realizzare il layout di un sito web e per disporre i diversi elementi che costituiscono la pagina html. Ad esempio per formattare la pagina con un menu superiore, una barra laterale e un corpo centrale si utilizza una tabella con due colonne di cui una di larghezza minore per il menu laterale e una colonna larga per il corpo.<br />
Per <em>realizzare una tabella</em> è necessario definire il tag:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;table border='1'&gt;
… …
&lt;/table&gt;
</pre>
<p>Al cui interno andranno specificate per ogni riga le celle che la compongono e quindi il contenuto. A tale scopo è necessario introdurre due tag fondamentali:</p>
<ul>
<li>
<div><span style="color: #ff0000;"><strong>TR</strong></span> è il tag che definisce una riga di una tabella;</div>
</li>
<li>
<div><strong><span style="color: #ff0000;">TD</span></strong> è il tag che definisce una singola cella della tabella.</div>
</li>
</ul>
<p>La sintassi completa per realizzare una tabella è quindi la seguente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;table border='1'&gt;
    &lt;tr&gt;
        &lt;td&gt;Cella&lt;/td&gt;
        …
    &lt;/tr&gt;
    …
&lt;/table&gt;
</pre>
<p>E’ necessario, così come definito nelle lezioni precedenti, attenersi ad una corretta nidificazione dei tag. Nel caso delle tabelle<em> il tag TD deve essere sempre instanziato all’interno del tag TR</em>.<br />
Il codice html seguente descrive un esempio completo di tabella:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;TABELLE HTML&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h2 align='center'&gt;La prima tabella&lt;/h2&gt;

&lt;table border='1'&gt;
	&lt;tr&gt;
		&lt;td&gt;Cella 1&lt;/td&gt;
		&lt;td&gt;Cella 2&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Cella 3&lt;/td&gt;
		&lt;td&gt;Cella 4&lt;/td&gt;
	&lt;/tr&gt;
           &lt;tr&gt;
		&lt;td&gt;Cella 5&lt;/td&gt;
		&lt;td&gt;Cella 6&lt;/td&gt;
	&lt;/tr&gt;
	&lt;tr&gt;
		&lt;td&gt;Cella 7&lt;/td&gt;
		&lt;td&gt;Cella 8&lt;/td&gt;
	&lt;/tr&gt;
&lt;/table&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Analizzando il codice si evidenzia la presenza di una tabella con <strong>bordo di 1px</strong> composta da<strong> quattro righe</strong> e <strong>due colonne</strong>.<br />
Il risultato all’interno del browser è il seguente:</p>
<p><img class="aligncenter" title="Tabella Html" src="http://www.donatantonio.net/img_html/tabella_html.jpg" alt="Tabella Html" width="500" height="287" /></p>
<h3 class="paragrafo">Intestazione delle tabelle</h3>
<p>E’ buona norma, soprattutto in presenza di tabelle che contengono dati, impostare una riga iniziale che funga da intestazione per le tabelle.<br />
La sintassi è simile a quella vista per realizzare una singola riga con l’unica differenza che al posto del tag TD va utilizzato il tag <strong><span style="color: #ff0000;">TH</span></strong>:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;tr&gt;
	&lt;th&gt;TITOLO COLONNA 1&lt;/th&gt;
	&lt;th&gt;TITOLO COLONNA 2&lt;/th&gt;
	…
&lt;/tr&gt;
</pre>
<p>Il browser interpreterà il tag TH ed evidenzierà il contenuto utilizzando un carattere in grassetto e lo allineerà al centro della cella. Nonostante solitamente questo tag si usi nella prima riga della tabella, nulla vieta di utilizzare il tag TH in altri punti della stessa, come ad esempio riga del totale in fondo ad una tabella:</p>
<p><img class="aligncenter" title="Tag TH" src="http://www.donatantonio.net/img_html/tag_th.jpg" alt="Tag TH" width="500" height="285" /></p>
<h3 class="paragrafo">Altri attributi del tag TD</h3>
<p>Tra gli attributi maggiormente utilizzati per il tag TD se ne identificano essenzialmente due: <span style="color: #ff0000;">ALIGN</span> e <span style="color: #ff0000;">VALIGN</span>, che rispettivamente hanno la funzione di definire un allineamento orizzontale e verticale del contenuto della cella.<br />
Ad esempio scrivere la seguente riga di codice html:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;td align='center' valign='top'&gt;
    Contenuto della cella...
&lt;/td&gt;
</pre>
<p>comporta un allineamento al centro del contenuto della cella (<em>align=’center’</em>) ed inoltre un allineamento verso l’alto (<em>valign=’top’</em>) dello stesso contenuto.<br />
Altri valori che può assumere l’attributo valign sono: <strong>BOTTOM</strong>, <strong>MIDDLE</strong> e <strong>BASELINE</strong>.<br />
Di default la maggior parte dei browser utilizza MIDDLE come valore di valign.</p>
<p><img class="aligncenter" title="Align e Valign" src="http://www.donatantonio.net/img_html/align_valign_html.jpg" alt="Align e Valign" width="500" height="256" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-tabelle/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Chi può dire</title>
		<link>http://www.donatantonio.net/blog/riflessioni/chi-puo-dire/</link>
		<comments>http://www.donatantonio.net/blog/riflessioni/chi-puo-dire/#comments</comments>
		<pubDate>Tue, 31 May 2011 22:41:16 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Riflessioni]]></category>
		<category><![CDATA[chi pò dicere pino daniele]]></category>
		<category><![CDATA[chi può dire]]></category>
		<category><![CDATA[traduzione chi pò dicere pino daniele]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1309</guid>
		<description><![CDATA[Chi può dire che sto muorendo. Chi può dire che sono contento. Chi può dire che sto sbagliando, parlando male di tutti questi anni. Tanto tempo ma ci penso ancora&#8230; quella non era la strada buona. A chi mi dice amore, rispondo dolore. Chi può dire &#8220;domani vengo&#8221;&#8230; e aspetti tutta una vita&#8230; e ti [...]]]></description>
			<content:encoded><![CDATA[<p>Chi può dire che sto muorendo.<br />
Chi può dire che sono contento.<br />
Chi può dire che sto sbagliando,<br />
parlando male di tutti questi anni.<br />
Tanto tempo ma ci penso ancora&#8230;<br />
quella non era la strada buona.<br />
A chi mi dice amore,<br />
rispondo dolore.<br />
Chi può dire &#8220;domani vengo&#8221;&#8230;<br />
e aspetti tutta una vita&#8230;<br />
e ti accorgi che non hai capito<br />
e non ti passa più.<br />
A chi mi dice umanità,<br />
rispondo amore, amore, amore.</p>
<p><span style="color: #ffffff;">Libera traduzione di &#8220;Chi pò dicere&#8221;</span><br />
<span style="color: #ffffff;"> Pino Daniele (Terra Mia) &#8211; 1977</span></p>
<p><img class="aligncenter" title="Chi può dire" src="http://www.donatantonio.net/img/chi_puo_dire.png" alt="Chi può dire" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/riflessioni/chi-puo-dire/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Libertà</title>
		<link>http://www.donatantonio.net/blog/riflessioni/liberta/</link>
		<comments>http://www.donatantonio.net/blog/riflessioni/liberta/#comments</comments>
		<pubDate>Tue, 31 May 2011 22:12:04 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Riflessioni]]></category>
		<category><![CDATA[libertà pino daniele]]></category>
		<category><![CDATA[traduzione libertà pino daniele]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1301</guid>
		<description><![CDATA[Piove sopra questi palazzi scuri, sopra le mura fradice di casa mia. Tutt&#8217;intorno l&#8217;aria odora di bagnato. Chi sono io&#8230; che cammina per la strada parlando di libertà. Sta dormendo senza tempo un ricordo che non penso più. Ma che succede&#8230; io sto piangendo pensando al tempo che se ne va&#8230; E cammino per la [...]]]></description>
			<content:encoded><![CDATA[<p>Piove sopra questi palazzi scuri,<br />
sopra le mura fradice di casa mia.<br />
Tutt&#8217;intorno l&#8217;aria odora di bagnato.<br />
Chi sono io&#8230;<br />
che cammina per la strada<br />
parlando di libertà.<br />
Sta dormendo senza tempo<br />
un ricordo che non penso più.<br />
Ma che succede&#8230; io sto piangendo<br />
pensando al tempo che se ne va&#8230;<br />
E cammino per la strada<br />
parlando di libertà.</p>
<p><span style="color: #ffffff;">Libera traduzione di &#8220;Libertà&#8221;</span><br />
<span style="color: #ffffff;">Pino Daniele (Terra Mia) &#8211; 1977</span></p>
<p><img class="aligncenter" title="Libertà" src="http://www.donatantonio.net/img/liberta.png" alt="Libertà" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/riflessioni/liberta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cammina, cammina</title>
		<link>http://www.donatantonio.net/blog/riflessioni/cammina-cammina/</link>
		<comments>http://www.donatantonio.net/blog/riflessioni/cammina-cammina/#comments</comments>
		<pubDate>Tue, 31 May 2011 21:43:19 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Riflessioni]]></category>
		<category><![CDATA[cammina cammina]]></category>
		<category><![CDATA[cammina pino daniele]]></category>
		<category><![CDATA[traduzione cammina cammina]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1295</guid>
		<description><![CDATA[Sull&#8217;erba odorosa calano i colori e il vecchietto cammina sotto la luna&#8230; quante volte si è fermato per parlare con qualcuno &#8230; e non ci sta mai nessuno che si fermi per ascoltarlo. E cammina, cammina&#8230; vicino al porto e ridendo pensa alla morte. &#8220;Se arrivasse adesso sarei più contento, tanto io parlo ma nessuno [...]]]></description>
			<content:encoded><![CDATA[<p>Sull&#8217;erba odorosa calano i colori<br />
e il vecchietto cammina sotto la luna&#8230;<br />
quante volte si è fermato per parlare con qualcuno<br />
&#8230; e non ci sta mai nessuno che si fermi per ascoltarlo.<br />
E cammina, cammina&#8230; vicino al porto<br />
e ridendo pensa alla morte.</p>
<p>&#8220;Se arrivasse adesso sarei più contento,<br />
tanto io parlo ma nessuno mi ascolta.<br />
Guardando il mare penso a Maria che adesso non ci sta più&#8230;<br />
sono solo tre anni e ci penso tutte le sere,<br />
passa il tempo e non mi sembra vero.&#8221;</p>
<p>E cammina, cammina&#8230; vicino al porto<br />
e piangendo aspetta la morte,<br />
sotto la luna non parla nessuno&#8230;<br />
sotto la luna nessuno vuole ascoltare.</p>
<p><span style="color: #ffffff;">Libera traduzione di &#8220;Cammina cammina&#8221;</span><br />
<span style="color: #ffffff;"> Pino Daniele (Terra Mia) &#8211; 1977.</span></p>
<p><img class="aligncenter" title="Cammina cammina" src="http://www.donatantonio.net/img/cammina_cammina.png" alt="Cammina cammina" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/riflessioni/cammina-cammina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: immagini come link e mappe</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-immagini-come-link-e-mappe/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-immagini-come-link-e-mappe/#comments</comments>
		<pubDate>Sun, 29 May 2011 17:56:35 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[immagini e link]]></category>
		<category><![CDATA[immagini html]]></category>
		<category><![CDATA[mappe immagine html]]></category>
		<category><![CDATA[tag area]]></category>
		<category><![CDATA[tag map]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1286</guid>
		<description><![CDATA[Nelle lezioni precedenti è stato analizzato e approfondito il concetto di collegamento ipertestuale e quindi la sintassi del tag &#60;a&#62;. Fino a questo momento si è sempre utilizzato del semplice testo per evidenziare un link, ma è pratica comune nel mondo web rendere un’immagine, un logo o un’icona cliccabile. Immaginiamo ad esempio ad un menu [...]]]></description>
			<content:encoded><![CDATA[<p>Nelle lezioni precedenti è stato analizzato e approfondito il concetto di collegamento ipertestuale e quindi la sintassi del tag &lt;a&gt;.<br />
Fino a questo momento si è sempre utilizzato del semplice testo per evidenziare un link, ma è pratica comune nel mondo web rendere un’immagine, un logo o un’icona <em>cliccabile</em>.<br />
Immaginiamo ad esempio ad un menu html, che a differenza di quello <a href="http://www.donatantonio.net/blog/?p=1267" target="_blank">proposto in precedenza</a>, proponga per ogni link un bottone sottoforma di immagine gif o png.</p>
<p>Realizzare un link mediante un’immagine consiste essenzialmente nell’annidare un tag <strong>&lt;img&gt;</strong> all’interno del tag <strong>&lt;a&gt;</strong>:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a href=‘pagina.html’&gt;&lt;img src=‘immagine.jpg’ /&gt;&lt;/a&gt;
</pre>
<p>In linea generale potremo sostenere che tutto ciò che compare all’interno del tag &lt;a&gt; diventa in automatico cliccabile.<br />
Il codice sottostante descrive l’utilizzo di un logo png come link:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
    &lt;head&gt;
    &lt;title&gt;IMMAGINI COME LINK&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;div&gt;Clicca sotto per accedere alla home : &lt;/div&gt;
    &lt;p align='justify'&gt;
	&lt;a href=‘home.html’&gt;&lt;img src=‘home.png' align='left'/&gt;&lt;/a&gt;
    &lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Di seguito è visibile il risultato nella finestra del browser, da notare che di default il browser applica un bordo blu ad indicare che l’immagine è un link.<br />
Per <strong>rimuove il bordo</strong> è necessario semplicemente impostare l’attributo border=‘0’.</p>
<p><img class="aligncenter" title="Immagini come link" src="http://www.donatantonio.net/img_html/img_link.jpg" alt="Immagini come link" width="500" height="284" /></p>
<h3 class="paragrafo">Le mappe.</h3>
<p>Abbiamo visto che le immagini possono essere utilizzate come link con altre pagine di un sito web.<br />
A volte è necessario far sì che solo una <em>determinata parte di un&#8217;immagine</em> sia collegata a un link. È il tipico caso delle <em>Regioni d’Italia</em>: abbiamo una cartina e abbiamo la necessità che alla sagoma di ciascuna regione corrisponda un differente collegamento.<br />
La logica di una <span style="color: #ff0000;">mappa html</span> è quella di suddividere l’immagine in aree dette anche zone calde (<strong>hotspot</strong>)  grazie alle quali, facendo clic su di esse, è possibile raggiungere le destinazioni dei link.<br />
Per creare una mappa di immagine cliccabile dobbiamo utilizzare diversi comandi HTML che passiamo in rassegna:</p>
<ul>
<li><strong>map</strong> genera la mappa con riferimento all&#8217;immagine da mappare;</li>
<li><strong>area</strong> genera le aree sensibili al click del mouse;</li>
<li><strong>img</strong> visualizza l&#8217;immagine da mappare, con riferimento alla mappa.</li>
</ul>
<p>Ciascuno di questi tag ha come scopo finale quello di realizzare una mappa immagine.<br />
Di seguito un esempio di codice html per la realizzazione di una mappa:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;map name=&quot;MiaMappa&quot;&gt;
    &lt;area href=&quot;pag_1.html&quot; shape=&quot;rect&quot; coords=&quot;100, 200, 300, 400&quot;&gt;
    &lt;area href=&quot;pag_2.html&quot; shape=&quot;rect&quot; coords=&quot;500, 600, 700, 800&quot;&gt;
&lt;/map&gt;
&lt;img src=&quot;miafoto.jpg&quot; usemap=&quot;#MiaMappa&quot; border=&quot;0&quot;&gt;
</pre>
<p>Analizzando nel dettaglio il codice proposto si può notare come la mappa sia contenuta all’interno del tag <strong>MAP</strong> a cui viene assegnato un nome tramite l’attributo name.<br />
All’interno del MAP si trovano i tag <strong>AREA</strong> a cui vengono assegnati i seguenti attributi:</p>
<ul>
<li><strong>href </strong>: riferimento al collegamento ipertestuale associato all’area;</li>
<li><strong>shape</strong> : descrive la forma dell’area e può assumere il valore rect, circle e polygon;</li>
<li><strong>coords</strong> : elenca le coordinate dell’area cliccabile, separate da virgole.</li>
</ul>
<p>Infine al tag IMG viene associato l’attributo <strong>usemap</strong> (mappa da utilizzare) che accetta il nome della mappa preceduto dal cancelletto (#).<br />
Il punto cruciale nella realizzazione di una mappa immagine è l’individuazione delle coordinate da assegnare alle varie aree. A tale scopo è necessario utilizzare appositi programmi di editing di immagini o in alternativa applicazioni che individuate le coordinate creano al volo il codice html da includere all’interno del tag MAP.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-immagini-come-link-e-mappe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: allineamento delle immagini e altri attributi</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-allineamento-delle-immagini-e-altri-attributi/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-allineamento-delle-immagini-e-altri-attributi/#comments</comments>
		<pubDate>Sun, 29 May 2011 17:56:04 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[allineamento immagini html]]></category>
		<category><![CDATA[attributi immagini html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1279</guid>
		<description><![CDATA[L‘allineamento delle immagini è dipeso in sostanza dagli elementi che circondano l’immagine. Se ad esempio definiamo un’immagine dopo un div o un paragrafo questa verrà posizionata a capo rispetto al contenuto del blocco precedente. Più interessante è invece l’allineamento di un’immagine rispetto al testo che lo circonda. L’attributo align permette di definire il tipo di [...]]]></description>
			<content:encoded><![CDATA[<p>L‘allineamento delle immagini è dipeso in sostanza dagli elementi che circondano l’immagine.<br />
Se ad esempio definiamo un’immagine dopo un div o un paragrafo questa verrà posizionata a capo rispetto al contenuto del blocco precedente.<br />
Più interessante è invece l’allineamento di un’immagine rispetto al testo che lo circonda.</p>
<p>L’attributo <span style="color: #ff0000;">align</span> permette di definire il tipo di allineamento dell’immagine:</p>
<ul>
<li>
<div><strong>LEFT</strong>: l’immagine è allineata alla sinistra del testo</div>
</li>
<li>
<div><strong>RIGHT</strong>: l’immagine è allineata alla destra del testo</div>
</li>
<li>
<div><strong>TOP</strong>: il testo è allineato con il margine superiore destro dell’immagine</div>
</li>
<li>
<div><strong>MIDDLE</strong>: il testo è allineato con il centro dell’immagine</div>
</li>
<li>
<div><strong>BOTTOM</strong>: il testo è allineato con il margine inferiore destro dell’immagine</div>
</li>
</ul>
<p>Analizziamo  ad esempio il seguente codice html:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;POSIZIONAMENTO IMMAGINI&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div&gt;Posizionamento di un immagine rispetto al testo : &lt;/div&gt;
&lt;p align='justify'&gt;
	&lt;img src='img/promessi.jpg' align='left'/&gt;

Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a ristringersi, e a prender corso e figura di fiume, tra un promontorio a destra, e un'ampia costiera dall'altra parte…
….
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>All’interno del paragrafo viene definita un’immagine con allineamento a sinistra e di seguito il testo. Il browser interpreterà il codice e darà come risultato la seguente schermata:</p>
<p><img class="aligncenter" title="Allineamento immagini" src="http://www.donatantonio.net/img_html/align_immagini.jpg" alt="Allineamento immagini" width="500" height="391" /></p>
<p>In alternativa l’attributo align avrebbe potuto assumere valore right o center:</p>
<p><img class="aligncenter" title="Allineamento immagini" src="http://www.donatantonio.net/img_html/align_immagini_bis.jpg" alt="Allineamento immagini" width="500" height="191" /></p>
<h3 class="paragrafo">Bordo delle immagini.</h3>
<p>Tramite l’attributo <span style="color: #ff0000;">border</span> è possibile impostare una bordatura alle immagini, specificando in pixel lo spessore del bordo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src=‘immagine.jpg’ border=‘2’ alt='Testo alternativo' /&gt;
</pre>
<p>In questo caso l’immagine apparirà con un bordo nero di 2px:</p>
<p><img class="aligncenter" title="Bordo immagini" src="http://www.donatantonio.net/img_html/border_immagini.jpg" alt="Bordo immagini" width="400" height="367" /></p>
<h3 class="paragrafo">Margine delle immagini.</h3>
<p>Nonostante le regole CSS permettano di definire un margine tra un’immagine e gli elementi che lo circondano esiste la possibilità di utilizzare due attributi: <span style="color: #ff0000;">vspace</span> e <span style="color: #ff0000;">hspace</span> che rispettivamente permettono di definire una<em> spaziatura verticale</em> e una <em>orizzontale </em>per l’immagine in questione.<br />
Ad esempio scrivendo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src=‘immagine.jpg’ alt='Testo alternativo' hspace=‘20’ vspace=’10’ /&gt;
</pre>
<p>impostiamo un’immagine con una spaziatura verticale di 10px e una orizzontale di 20px. In questo caso il margine è suddiviso in maniera equa tra i due lati, in altre parole verticalmente l’immagine avrà un margine destro di 5px e un margine sinistro di 5px, ugualmente un margine superiore di 10px e uno inferiore di 10px.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-allineamento-delle-immagini-e-altri-attributi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: le immagini</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-immagini/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-immagini/#comments</comments>
		<pubDate>Sat, 28 May 2011 20:24:49 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[alt immagini html]]></category>
		<category><![CDATA[height immagini]]></category>
		<category><![CDATA[immagini html]]></category>
		<category><![CDATA[width immagini]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1271</guid>
		<description><![CDATA[Fino ad ora si è concentrata l’attenzione alla formattazione del testo, quindi paragrafi, titoli e contenitori di testo, consapevoli che il moderno web non mette a disposizione solo questo tipo di informazioni. Siamo lontani dai siti web dei primissimi anni ’90, quando le pagine erano composte totalmente da testo, oggi è impensabile non visualizzare in [...]]]></description>
			<content:encoded><![CDATA[<p>Fino ad ora si è concentrata l’attenzione alla formattazione del testo, quindi paragrafi, titoli e contenitori di testo, consapevoli che il moderno web non mette a disposizione solo questo tipo di informazioni.<br />
Siamo lontani dai siti web dei primissimi<em> anni ’90</em>, quando le pagine erano composte totalmente da testo, oggi è impensabile non visualizzare in una pagina web un’immagine, un video o qualche altro elemento grafico.<br />
Per inserire un’<span style="color: #ff0000;">immagine</span> in una pagina html si utilizza il tag <strong>&lt;img&gt;</strong>. La sintassi per inserire un’ipotetica immagine è:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src=‘immagini/foto.jpg’ /&gt;
</pre>
<p>Il tag &lt;img&gt; si compone essenzialmente di un attributo obbligatorio <span style="color: #ff0000;">src</span>, che indica l’url dell’immagine da visualizzare.<br />
In fase di visualizzazione quando il browser incontra il tag img, analizza l’url associato e carica l’immagine, ponendola all’interno della pagina dove questa è stata definita dallo sviluppatore.<br />
Il seguente codice HTML descrive in maniera completa l’inserimento di un immagine in una pagina html:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
     &lt;head&gt;
     &lt;title&gt;IMMAGINI&lt;/title&gt;
     &lt;/head&gt;

     &lt;body&gt;

          &lt;div&gt;La nostra prima immagine : &lt;/div&gt;

          &lt;!-- INSERISCO L’IMMAGINE logo.jpg --&gt;
          &lt;img src=‘img/logo.jpg’ /&gt;

     &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Il risultato nel browser è il seguente:</p>
<p><img class="aligncenter" title="Immagini html" src="http://www.donatantonio.net/img_html/img_html.jpg" alt="Immagini html" width="500" height="216" /></p>
<p>Non avendo specificato allineamento e altri attributi, l’immagine viene stampata a sinistra e dopo l’elemento che lo precede nel codice (nel nostro caso il div che contiene il testo).</p>
<h3 class="paragrafo">I formati per le immagini web.</h3>
<p>Nonostante non siano definiti in maniera precisa i formati ammissibili per le immagini è bene sottolineare che nella scelta del formato va tenuta in grande considerazione la pesantezza dell’immagine (espressa in byte).<br />
I formati più indicati per il web sono sostanzialmente tre:</p>
<p><img class="aligncenter" title="Formati immagini html" src="http://www.donatantonio.net/img_html/formati_img.jpg" alt="Formati immagini html" width="520" height="179" /></p>
<p>Indipendentemente dal formato utilizzato è importante ricordare che <strong>abusare</strong> delle immagini incide negativamente sulle <em>prestazioni</em> del browser. Difatti caricare una pagina html con molte immagini richiede un tempo maggiore rispetto ad una pagina con testo e poche immagini.<br />
Una volta scelte le immagini da inserire queste vanno<span style="color: #ff0000;"> ottimizzate</span>, regolando la dimensione e il formato. La regola alla quale attenersi per scegliere il formato corretto è riassunta di seguito:</p>
<ul>
<li> se bisogna inserire una foto allora scegliamo il formato jpg;</li>
<li>se bisogna inserire un logo o un disegno scegliamo il formato gif o png.</li>
</ul>
<h3 class="paragrafo">L&#8217;attributo ALT e le regole di accessibilità.</h3>
<p>Un aspetto importante di cui tener conto è che non tutti i browser visualizzano le immagini presenti in una pagina html, o ad esempio per scelta un utente potrebbe non visualizzare le immagini.<br />
Alcuni utenti, quali gli <em>ipovedenti</em>, non sono in grado di mettere a fuoco del tutto le immagini inserite nelle pagine web, i <em>non vedenti </em>sono del tutto esclusi anche da questa pur limitata possibilità; altri ancora utilizzano browser che non supportano immagini e interpretano solamente i testi contenuti nelle pagine stesse.<br />
Pensare di creare pagine web alternative a quelle che utilizzano le immagini significherebbe di fatto discriminare tali utenti da una completa fruizione di tutto ciò che di positivo spesso riserva la rete.<br />
Fornire invece un <strong>testo equivalente</strong> per le immagini garantisce in tutti i casi sopraelencati l&#8217;accessibilità, oltre a essere utile indistintamente a tutti gli utenti: si tratta in ogni caso di un elemento irrinunciabile per assicurare sempre e comunque accessibilità alle immagini inserite in una pagina web.</p>
<p>L’attributo <span style="color: #ff0000;">ALT</span> permette appunto di definire un testo da visualizzare in assenza dell’immagine.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src=‘img/logo.jpg’  alt=‘Il logo del corso HTML’ /&gt;
</pre>
<p>Seppur non obbligatorio come attributo, l&#8217;uso dell&#8217;attributo alt è opportuno sulle principali immagini incluse in una pagina, in modo particolare nel caso in cui l&#8217;immagine rappresenta un prodotto, un servizio, o comunque un elemento relativo alla pagina.<br />
Utilizzando l’attributo alt si potrà notare come in Internet Explorer il testo venga visualizzato anche in presenza dell’immagine qualora l’utente trascini su di essa il puntatore del mouse; negli altri browser invece il testo viene visualizzato solo in assenza dell’immagine.</p>
<h3 class="paragrafo">Altezza e larghezza delle immagini.</h3>
<p>Gli attributi <span style="color: #ff0000;">width</span> e <span style="color: #ff0000;">height</span> possono essere usati per impostare l&#8217;altezza e la larghezza di una immagine. Per impostare l&#8217;altezza e la larghezza viene usato, solitamente, un valore in pixel.<br />
A differenza dei centimetri, i pixel sono unità di misura relative che dipendono dalla risoluzione dello schermo. Ad un utente con uno schermo ad alta risoluzione, 25 pixel possono corrispondere ad 1 centimetro, mentre gli stessi 25 pixel su uno schermo a bassa risoluzione possono corrispondere sullo schermo a 1.5 centimetri.<br />
Se non vengono impostate l&#8217;altezza e la larghezza, l&#8217;immagine verrà inserita con le sue dimensioni originali. Bisogna comunque tenere in considerazione che il browser conosce le dimensioni di un’immagine solo nel momento in cui questa viene <strong>caricata completamente</strong>, in ogni caso è consigliabile indicare le dimensioni dell’immagine favorendo la realizzazione del layout al browser.<br />
Gli attributi width e height possono inoltre essere utilizzati per scalare le immagini troppo grandi.</p>
<p>Il codice html sottostante descrive l’utilizzo degli attributi width e height:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
     &lt;head&gt;
     &lt;title&gt;ALTEZZA E LARGHEZZA IMMAGINI&lt;/title&gt;
     &lt;/head&gt;
     &lt;body&gt;
     &lt;div&gt;Dimensione delle immagini : &lt;/div&gt;

     &lt;img src='img/logo.jpg' width='82px' height='200px' alt='Il logo del corso HTML!'/&gt;
     &lt;img src='img/logo.jpg' width='70px' height='170px' alt='Il logo del corso HTML!'/&gt;
     &lt;img src='img/logo.jpg' width='50px' height='150px' alt='Il logo del corso HTML!'/&gt;

     &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Nel codice sono presenti<em> tre immagini</em> in sequenza con dimensioni diminuite di volta in volta.<br />
Di seguito è mostrato il risultato:<br />
<img class="aligncenter" title="Altezza e larghezza immagini" src="http://www.donatantonio.net/img_html/img_height_width.jpg" alt="Altezza e larghezza immagini" width="500" height="235" /><br />
In definitiva la sintassi per impostare altezza e larghezza di un immagine è:</p>
<p><strong>&lt;img src=&#8221;‘immagine.jpg’&#8221; alt=&#8221;" width=&#8221;‘100px’&#8221; height=&#8221;‘100px’&#8221; /&gt;</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-immagini/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: realizzare un menu (esercizio guidato)</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-realizzare-un-menu-esercizio-guidato/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-realizzare-un-menu-esercizio-guidato/#comments</comments>
		<pubDate>Sat, 28 May 2011 20:24:39 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[esercizio menu html]]></category>
		<category><![CDATA[menu html]]></category>
		<category><![CDATA[realizzare un menu html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1267</guid>
		<description><![CDATA[Come detto nelle lezioni precedenti, i link permettono di collegare tra loro le varie sezioni di un sito web. Solitamente lo strumento che viene reso disponibile agli utenti per accedere alle varie pagine è il cosiddetto menu. Nel menu sono raccolti e ordinati i link alle varie pagine. Gli aspetti grafici dei menu sono vari [...]]]></description>
			<content:encoded><![CDATA[<p>Come detto nelle<em> lezioni precedenti</em>, i link permettono di <strong>collegare</strong> tra loro le varie sezioni di un sito web.<br />
Solitamente lo strumento che viene reso disponibile agli utenti per accedere alle varie pagine è il cosiddetto <span style="color: #ff0000;">menu</span>. Nel menu sono raccolti e ordinati i link alle varie pagine.<br />
Gli aspetti <em>grafici</em> dei menu sono vari e spesso molto accattivanti, devono non solo facilitare la navigazione del sito ma anche <em>attirare l’attenzione</em> dell’utente verso i vari contenuti proposti.</p>
<h3>Progettazione del menu.</h3>
<p>Il menu che realizzeremo sarà un menu di tipo <strong>orizzontale</strong>. I vari link saranno disposti l’uno di fianco all’altro all’interno di bottoni dalla forma rettangolare.<br />
Grazie alle conoscenze fin’ora acquisite utilizzeremo <em>DIV</em> e <em>paragrafi</em> per disporre i vari elementi del menu. Inoltre verrà introdotto un minimo di regole di stile per rendere più gradevole l’aspetto del menu.</p>
<p>Ecco il codice html completo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;
	&lt;title&gt;MENU&lt;/title&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;h2 align='center'&gt;Titolo del sito&lt;/h2&gt;

&lt;div align='center' style='background-color:blue; padding:4px;'&gt;
	&lt;span style=&quot;background-color:orange; border:2px solid black; padding:4px; 	width:150px&quot;&gt;&lt;a href='#'&gt;HOME&lt;/a&gt;&lt;/span&gt;
	&lt;span style=&quot;background-color:orange; border:2px solid black; padding:4px; 	width:150px&quot;&gt;&lt;a href='#'&gt;CHI SIAMO&lt;/a&gt;&lt;/span&gt;
	&lt;span style=&quot;background-color:orange; border:2px solid black; padding:4px; 	width:150px&quot;&gt;&lt;a href='#'&gt;DOVE SIAMO&lt;/a&gt;&lt;/span&gt;
	&lt;span style=&quot;background-color:orange; border:2px solid black; padding:4px; 	width:150px&quot;&gt;&lt;a href='#'&gt;CONTATTI&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;

&lt;hr/&gt;

&lt;p align='justify'&gt;
Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non interrotte di monti, tutto a seni e a golfi, a seconda dello sporgere e del rientrare di quelli, vien, quasi a un tratto, a ristringersi, e a prender corso e figura di fiume, tra un promontorio a destra, e un'ampia costiera dall'altra parte; e il ponte, che ivi congiunge le due rive, par che renda ancor più sensibile all'occhio questa trasformazione, e segni il punto in cui il lago cessa, e l'Adda rincomincia, per ripigliar poi nome di lago dove le rive, allontanandosi di nuovo, lascian l'acqua distendersi e rallentarsi in nuovi golfi e in nuovi seni…
….
&lt;/p&gt;

&lt;hr/&gt;

&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Una volta salvato il file con estensione .html il risultato è il seguente:</p>
<p><img class="aligncenter" title="Menu html" src="http://www.donatantonio.net/img_html/menu_html.jpg" alt="Menu html" width="500" height="269" /></p>
<p>Analizzando il codice html si può innanzitutto notare la<em> nidificazione</em> di tag <strong>DIV</strong>, <strong>SPAN</strong> e <strong>A</strong> per realizzare la parte alta della pagina.<br />
Andando per ordine, all’interno del tag body viene definito innanzitutto un titolo grazie al tag &lt;h2&gt;, le successive righe di codice implementano il menu orizzontale: un DIV contenitore con allineamento centrale al quale è associato la seguente riga di stile che definisce un colore di sfondo e una spaziatura interna di 4px:</p>
<p><strong>style=&#8217;background-color:blue; padding:4px;‘</strong></p>
<p>Nelle lezioni dedicate al<em> CSS</em> saranno approfondite le regole di stile.</p>
<p>Il DIV conterrà i singoli bottoni che comporranno il menu, dove ogni bottone sarà identificato da uno span al cui interno sarà presente il link:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;span style=&quot;background-color:orange; border:2px solid black; padding:4px; width:150px&quot;&gt;
     &lt;a href=‘index.html'&gt;HOME&lt;/a&gt;
&lt;/span&gt;
</pre>
<p>Tralasciando nel dettaglio le regole di stile è importante notare la sintassi e la nidificazione del link.<br />
Continuando ad analizzare il codice si può notare la presenza di un separatore lineare &lt;hr/&gt; e la presenza di un paragrafo che racchiude il testo della pagina.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-realizzare-un-menu-esercizio-guidato/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JQuery, il metodo .remove()</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-remove/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-remove/#comments</comments>
		<pubDate>Tue, 17 May 2011 21:55:45 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery remove()]]></category>
		<category><![CDATA[metodo remove()]]></category>
		<category><![CDATA[rimuovere elementi DOM]]></category>
		<category><![CDATA[rimuovere elemento html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1247</guid>
		<description><![CDATA[Il metodo remove() del framerwork jQuery permette di rimuovere un elemento html dal DOM della pagina. Diversamente da tutti i metodi che modificando il css rendono &#8220;invisibile&#8221; un elemento, il metodo remove() elimina in maniera quasi del tutto definitiva l&#8217;elemento, rendendo nulli tutti i successivi riferimenti ad esso. La sintassi, come è buona abitudine di [...]]]></description>
			<content:encoded><![CDATA[<p>Il metodo<span style="color: #ff0000;"> remove()</span> del framerwork jQuery permette di <strong>rimuovere un elemento</strong> html dal <strong>DOM</strong> della pagina.<br />
Diversamente da tutti i metodi che modificando il css rendono &#8220;invisibile&#8221; un elemento, il metodo remove() elimina in maniera quasi del tutto definitiva l&#8217;elemento, rendendo <strong>nulli</strong> tutti i successivi riferimenti ad esso.<br />
La sintassi, come è buona abitudine di jQuery, è molto<em> semplice</em> e grazie all&#8217;uso dei vari selettori disponibili le possibilità di utilizzo del metodo .remove() sono pressochè infinite.<br />
Potremo ad esempio associare il metodo ad alcuni bottoni o link delle nostre pagine, permettendo agli utenti di <em>&#8220;eliminare&#8221;</em> i contenuti che non desiderano consultare. Pensiamo ad esempio ad una finestra in sovraimpressione che mostra al suo interno un banner: sarebbe <em>elengante e cortese</em> fornire un icona di chiusura che ne permetta la rimozione definitiva dalla pagina.</p>
<p>La sintassi di base del metodo .remove() è la seguente:</p>
<pre class="brush: jscript; title: ; notranslate">
$('id_elemento').remove();
</pre>
<p>Tramite il<strong> selettore ID </strong>andremo a rimuovere l&#8217;elemento il cui id è uguale a &#8220;<em>id_elemento</em>&#8220;. Dopo l&#8217;esecuzione del semplice codice proposto, vedremo &#8220;scomparire&#8221;, in maniera quasi brutale, l&#8217;elemento dalla pagina web e nel DOM non ne resterà più traccia.<br />
Vediamo ora qualche altro esempio utilizzando gli altri selettori disponibili:</p>
<pre class="brush: jscript; title: ; notranslate">
// Selettore di classe
$('.nome_classe').remove();

// Selettore di tag
$('p').remove();

// Selettore di contenuto
$(&quot;p:contains('Ciao')&quot;).remove();
</pre>
<p>Negli esempi proposti, i vari selettori operano su <strong>più elementi</strong> (ad esempio tutti gli elementi appartenenti ad una determinata <em>classe</em>, tutti i blocchi di <em>tipo &lt;p&gt;</em> oppure tutti gli elementi di tipo &lt;p&gt; che <em>contengono la parola &#8216;Ciao&#8217;</em>), quindi invocando il metodo remove() elimineremo tutti questi elementi grazie ad una sola riga di codice.<br />
Prima di concludere prendiamo in considerazione due <em>aspetti del metodo remove()</em>:</p>
<ul>
<li>un elemento rimosso non può essere recuperato;</li>
<li>la rimozione degli elementi tramite class comporta la rimozione di tutti gli elementi appartenenti a quella classe, indipendetemente dal tipo di elemento (DIV, SPAN, P, ecc);</li>
</ul>
<p>Per porre, in parte, rimedio al primo caso possiamo <strong>memorizzare l&#8217;elemento</strong> (in una sorta di cache) prima che questo venga rimosso:</p>
<pre class="brush: jscript; title: ; notranslate">
// Memorizzo l'elemento in una variaibile
var elemento = $('#id_elemento');

// Rimuovo l'elemento
$('#id_elemento').remove();
</pre>
<p>Il blocco nonostante sia stato eliminato dalla pagina web, è ancora presente in una variabile (<em>var elemento</em>), e può essere riutilizzato e volendo riposizionato all&#8217;interno del DOM, magari in un&#8217;altra posizione.<br />
Per il secondo caso in analisi, invece, è necessario utilizzare il metodo remove() in maniera leggermente differente da come si è visto fino ad ora; possiamo così <strong>filtrare solo alcuni elementi</strong> da rimuovere che hanno una classe in comune, evitando la rimozione complessiva di tutti i blocchi:</p>
<pre class="brush: jscript; title: ; notranslate">
// Rimozione solo dei div con classe 'nome_classe'
$('div').remove('.nome_classe');
</pre>
<p>Grazie alla riga di codice proposta, andremo ad eliminare gli elementi che hanno come nome classe &#8220;<em>nome_classe</em>&#8221; ma solo se di tipo DIV. Da notare, quindi la differenza con il codice proposto all&#8217;inizio dell&#8217;articolo, quando effettuavamo la rimozione di tutti gli elementi tramite selettore di classe.<br />
Le funzioni viste sono state <strong>raccolte in una pagina web d’esempio</strong>.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/jquery_remove/index.html" target="_blank">qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/jquery_remove.rar" target="_blank">qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-remove/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: i segnalibri</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-segnalibri/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-segnalibri/#comments</comments>
		<pubDate>Tue, 17 May 2011 18:55:36 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[i segnalibri html]]></category>
		<category><![CDATA[link interni html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1241</guid>
		<description><![CDATA[Un link oltre che puntare all’inizio di un nuovo documento HTML, permette di visualizzare il documento attualmente aperto a partire da un determinato punto che chiameremo segnalibro. Questi tipi di link vengono denominati link interni, difatti sono definiti in una pagina HTML e puntato ad una porzione della stessa pagina. Per realizzare un link interno [...]]]></description>
			<content:encoded><![CDATA[<p>Un link oltre che puntare all’inizio di un nuovo documento HTML, permette di visualizzare il documento attualmente aperto <strong>a partire da un determinato punto</strong> che chiameremo <span style="color: #ff0000;">segnalibro</span>.<br />
Questi tipi di link vengono denominati <span style="color: #ff0000;">link interni</span>, difatti sono definiti in una pagina HTML e puntato ad una porzione della stessa pagina.<br />
Per realizzare un link interno è necessario procedere in questo modo:</p>
<ul>
<li>
<div>definire il segnalibro assegnandogli un nome univoco;</div>
</li>
<li>
<div>definire un link che conduca al segnalibro.</div>
</li>
</ul>
<p>La seguente riga di codice descrive un segnalibro o ancora:</p>
<pre class="brush: xml; title: ; notranslate">&lt;a name=&quot;capitolo1&quot;&gt;&lt;/a&gt;</pre>
<p>Il nome <em>capitolo1</em> viene assegnato al link dall’attributo <strong>name</strong> dell’elemento a. Il link che permetterà di raggiungere il segnalibro sarà:</p>
<pre class="brush: xml; title: ; notranslate">&lt;a  href=&quot;#capitolo1&quot;&gt;Vai al capitolo 1&lt;/a&gt;</pre>
<p>Il tag a definisce un link ipertestuale con l’ancora capitolo1 come destinazione. Il simbolo <strong>#</strong> indica al browser che l’ancora va ricercata all’interno della pagina attuale.<br />
Diversamente è possibile collegare un link ad un segnalibro definito in un’altra pagina nel seguente modo:</p>
<pre class="brush: xml; title: ; notranslate">&lt;a href=&quot;index.html#capitolo1&quot;&gt;Vai al capitolo 1&lt;/a&gt;</pre>
<p>In questo caso l’ancora capitolo1 sarà ricercata nella pagina index.html.<br />
I link interni vengono utilizzati soprattutto per<strong> facilitare la lettura e navigazione</strong> di pagine HTML con un grande contenuto di informazioni.</p>
<h3 class="paragrafo">Utilizzo dei segnalibri.</h3>
<p>Lo scopo principale di un segnalibro html è quello di facilitare la navigazione di pagine complesse, un classico esempio che ne chiarisce l’utilità è quello di una pagina HTML che contiene il testo di un libro suddiviso per capitoli.<br />
Un indice iniziale linkato sul titolo di ogni capitolo, poterà l’utente a visualizzare il testo del capitolo in questione. Oppure, ad esempio, una semplice pagina html suddivisa in paragrafi che fornisce nella parte alta un menu dove ogni voce conduce ad un paragrafo e quindi ad un segnalibro.<br />
Il seguente codice html descrive un esempio completo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;SEGNALIBRI&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h2&gt;I Promessi Sposi&lt;/h2&gt;
        &lt;a href='#capitolo1'&gt;Capitolo 1&lt;/a&gt;&lt;br/&gt;
        &lt;a href='#capitolo2'&gt;Capitolo 2&lt;/a&gt;&lt;br/&gt;
        &lt;a href='#capitolo3'&gt;Capitolo 3&lt;/a&gt;&lt;br/&gt;
        &lt;hr/&gt;
        &lt;p align='justify'&gt;
	&lt;a name='capitolo1'&gt;&lt;/a&gt;
	&lt;h3&gt;CAPITOLO 1&lt;/h3&gt;
	Quel ramo del lago di Como, che volge a mezzogiorno, tra due catene non 	interrotte di monti, tutto a seni e a golfi …
	...
        &lt;/p&gt;
        &lt;hr/&gt;
        &lt;p align='justify'&gt;
	&lt;a name='capitolo2'&gt;&lt;/a&gt;
	&lt;h3&gt;CAPITOLO 2&lt;/h3&gt;
	Si racconta che il principe di Condé dormì profondamente la notte avanti la 	giornata di Rocroi …
	...
        &lt;/p&gt;
        &lt;hr/&gt;
        &lt;p align='justify'&gt;
            &lt;a name='capitolo3'&gt;&lt;/a&gt;
            &lt;h3&gt;CAPITOLO 3&lt;/h3&gt;
	 Lucia entrò nella stanza terrena, mentre Renzo stava angosciosamente 	informando Agnese, la quale angosciosamente lo ascoltava …
	 ...
        &lt;/p&gt;
        &lt;hr/&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>All’apertura della pagina nel browser verrà visualizzata la parte alta, che contiene il titolo e i tre link che conducono ai capitoli dei Promessi Sposi.</p>
<p><img class="aligncenter" title="Segnalibri HTML" src="http://www.donatantonio.net/img_html/segnalibri_html1.jpg" alt="Segnalibri HTML" width="500" height="399" /></p>
<p>Evitando quindi di scrollare la pagina si potrà visualizzare in cima il capitolo 2, cliccando sull’apposito link.</p>
<p><img class="aligncenter" title="Segnalibri HTML" src="http://www.donatantonio.net/img_html/segnalibri_html2.jpg" alt="Segnalibri HTML" width="500" height="399" /></p>
<p>Da notare infine come il funzionamento dei segnalibri sia dipeso non solo dalla struttura della pagina ma anche dalla <strong>quantità di spazio</strong> che questa occupa nella finestra del browser.<br />
Definire uno o più segnalibri in una pagina che viene <strong>visualizzata per intero nel browser</strong> (senza la presenza dello scroll laterale) non produce l’effetto desiderato perché il segnalibro in questione punterebbe ad una porzione di pagina già in visualizzazione.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-segnalibri/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: i collegamenti ipertestuali</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-collegamenti-ipertestuali/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-collegamenti-ipertestuali/#comments</comments>
		<pubDate>Tue, 17 May 2011 18:55:21 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[attributo target]]></category>
		<category><![CDATA[attributo title su link html]]></category>
		<category><![CDATA[collegamenti ipertestuali]]></category>
		<category><![CDATA[i link html]]></category>
		<category><![CDATA[il tag a]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1236</guid>
		<description><![CDATA[Come collegare i documenti. I collegamenti ipertestuali sono la base del web. Chiunque navighi sul web si imbatte continuamente nei cosiddetti link che uniscono una pagina html ad un’altra in maniera tale che nessuna di queste resti irraggiungibile. La caratteristica primaria degli ipertesti è quella di formattare i documenti in forma non sequenziale. Grazie ai [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Come collegare i documenti.</h3>
<p>I <span style="color: #ff0000;">collegamenti ipertestuali</span> sono la base del web. Chiunque navighi sul web si imbatte continuamente nei cosiddetti<strong> link</strong> che uniscono una pagina html ad un’altra in maniera tale che nessuna di queste resti irraggiungibile.<br />
La caratteristica primaria degli ipertesti è quella di formattare i documenti in forma <em>non sequenziale</em>. Grazie ai collegamenti ipertestuali (<em>link</em>) è possibile leggere i documenti senza seguire necessariamente un ordine sequenziale.<br />
La peculiarità di saltare da un punto all&#8217;altro del documento è tipica del <strong>WWW</strong>, dove spesso seguendo un documento si passa da un sito all&#8217;altro<em> senza soluzione di continuità</em>.<br />
La maggiora parte dei link vengono individuati nel browser con un testo <strong>sottolineato di colore blu</strong>.<br />
Passando il puntatore del mouse sul testo evidenziato il cursore assume il simbolo della <em>mano</em> e nella barra di stato della finestra viene mostrato l’url del link che è possibile raggiungere al successivo clic del tasto sinistro.</p>
<p><img class="aligncenter" title="Link HTML" src="http://www.donatantonio.net/img_html/link_html.jpg" alt="Link HTML" width="500" height="218" /></p>
<h3 class="paragrafo">Il tag &lt;a&gt;.</h3>
<p>La struttura base per creare un link è la seguente:</p>
<pre class="brush: xml; title: ; notranslate">&lt;a href=&quot;http://www.sito.com&quot;&gt;vai al sito&lt;/a&gt;</pre>
<p>Nel parametro <span style="color: #ff0000;">href</span> inseriamo l&#8217;indirizzo della pagina o del sito; fra i tag <span style="color: #ff0000;">&lt;a&gt;</span> e <span style="color: #ff0000;">&lt;/a&gt;</span> metteremo il testo o l’oggetto che vogliamo rendere cliccabile.<br />
Difatti tra i tag &lt;a&gt; può anche non comparire un testo, bensì un’immagine o un oggetto che fungono da richiamo ad un’altra pagina. Successivamente sarà descritto un esempio nel quale un’immagine fungerà da link.<br />
All’interno dell’attributo href è possibile specificare anche solo il <em>nome della pagina</em> a cui collegare il link, ad esempio scrivendo:</p>
<pre class="brush: xml; title: ; notranslate">&lt;a href=&quot;pagina.html&quot;&gt;Link relativo&lt;/a&gt;</pre>
<p>Questa soluzione è adottata qualora ci stessimo riferendo ad una pagina dello<em> stesso dominio</em> di appartenenza della pagina nella quale è definito il link. Inoltre come link si può far riferimento direttamente ad una directory, il server in questo caso restituisce il file index.html o altri file di default per cui è stato settato.</p>
<p>Ad esempio se si scrivesse:</p>
<pre class="brush: xml; title: ; notranslate">&lt;a href=&quot;http://www.sito.com/cartella/&quot;&gt;Link a directory&lt;/a&gt;</pre>
<p>verremmo indirizzati al file index.html presente nella directory denominata cartella. Qualora il file non sia presente il browser lancerà un errore 404 che indica l’assenza della risorsa richiesta.</p>
<h3 class="paragrafo">L&#8217;attributo target.</h3>
<p>Con l&#8217;attributo <span style="color: #ff0000;">target</span> possiamo far capire al browser su <strong>quale finestra dovrà aprire il collegamento</strong>:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;http://www.sito.com/&quot; target=&quot;nome finestra&quot;&gt;Link in altra finestra&lt;/a&gt;
</pre>
<p>Questo attributo risulta indispensabile qualora ci si trovasse a lavorare con una pagina strutturata su più<strong> frame</strong> (più <em>sottofinestre</em>), per aggiornare tramite link solo il contenuto di una finestra.<br />
Con l’uso sempre minore dei frame (che vedremo nelle lezioni successive), l’attributo target viene particolarmente utilizzato per aprire un collegamento in una nuova finestra senza sovrascrivere il contenuto della finestra di partenza (utile per saltare da un sito ad un altro).<br />
In questo caso l’attributo target assume il parametro “<strong>_blank</strong>”:</p>
<pre class="brush: xml; title: ; notranslate">&lt;a href=&quot;http://www.sito.com/&quot; target=&quot;_blank&quot;&gt;Link in nuova finestra&lt;/a&gt;</pre>
<p>Il risultato ottenuto è mostrato sotto:</p>
<p><img class="aligncenter" title="Target HTML" src="http://www.donatantonio.net/img_html/target_html.jpg" alt="Target HTML" width="500" height="285" /></p>
<p>Il clic sul link della prima finestra attiva l’apertura di una seconda finestra che contiene la risorsa richiesta.</p>
<p>Ulteriori parametri per l’attributo target sono:</p>
<ul>
<li>
<div><span style="color: #ff0000;">target=&#8221;_parent&#8221;</span> Apre il collegamento nel frame o nella finestra genitore   della finestra.</div>
</li>
<li>
<div><span style="color: #ff0000;">target=&#8221;_self&#8221;</span> Apre il collegamento nello stesso frame o finestra.</div>
</li>
<li>
<div><span style="color: #ff0000;">target=&#8221;_top&#8221;</span> Apre il collegamento nel frame o finestra più importante.</div>
</li>
</ul>
<h3 class="paragrafo">Assegnare un titolo al link.</h3>
<p>Per i collegamenti ipertestuali è possibile assegnare un <span style="color: #ff0000;">testo di commento</span>, attivato quando il mouse passa sull&#8217;area di link simile.<br />
Questa pratica può essere utile sostanzialmente per due motivi :</p>
<ul>
<li>
<div>per aiutare i motori di ricerca ad indicizzare in maniera efficiente un sito;</div>
</li>
<li>
<div>per fornire a prima vista all’utente una sorta di introduzione al contenuto della pagina linkata.</div>
</li>
</ul>
<p>Il seguente codice HTML descrive l’utilizzo dell’attributo title:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;TITOLO DEL LINK&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;p align='justify'&gt;
	Per prenotare gli esami di informatica &amp;egrave; necessario consultare la tabella accessibile da&lt;br/&gt;
	&lt;a href='esami.html' title='Qui è possibile consultare il calendario degli esami'&gt;
		qui...
	&lt;/a&gt;
        &lt;/p&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Il risultato ottenuto è mostrato sotto, al passaggio del mouse sul link viene visualizzato per alcuni secondi il titolo.</p>
<p><img class="aligncenter" title="Attributo title HTML" src="http://www.donatantonio.net/img_html/title_link_html.jpg" alt="Attributo title HTML" width="500" height="206" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-collegamenti-ipertestuali/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: annidamento, indentazione e commenti</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-annidamento-indentazione-e-commenti/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-annidamento-indentazione-e-commenti/#comments</comments>
		<pubDate>Fri, 13 May 2011 12:20:57 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[annidamento tag html]]></category>
		<category><![CDATA[commenti html]]></category>
		<category><![CDATA[indentazione tag html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1232</guid>
		<description><![CDATA[Annidamento dei tag. Una caratteristica importante del codice HTML è che i tag possono essere annidati l&#8217;uno dentro l&#8217;altro. Anzi molto spesso è necessario farlo. Una delle prime regole a cui è importante attenersi nella stesura di una pagina HTML è prestare attenzione alla chiusura dei tag aperti. Per limitare il numero di errori è [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Annidamento dei tag.</h3>
<p>Una caratteristica importante del codice HTML è che i tag possono essere<span style="color: #ff0000;"> annidati </span>l&#8217;uno dentro l&#8217;altro. Anzi molto spesso è necessario farlo.<br />
Una delle prime regole a cui è importante attenersi nella stesura di una pagina HTML è prestare attenzione alla <strong>chiusura dei tag</strong> aperti. Per limitare il numero di errori è consigliabile aggiungere il tag di chiusura subito dopo aver aperto il tag in questione, quindi poi aggiungere il contenuto al tag.<br />
Questa tecnica è particolarmente suggerita in presenza di nidificazioni di tag, così facendo si riduce la possibilità di avere errori nella visualizzazione della pagina nel browser.<br />
Potremmo quindi avere una situazione del genere:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;p&gt;
Questo è un testo…
&lt;div&gt;
Seguito da un testo in un div…
&lt;/div&gt;
&lt;/p&gt;
</pre>
<p>Da notare le ultime due righe del codice appena proposto, dove viene in sequenza chiuso prima il <strong>DIV</strong> e poi successivamente <strong>P</strong>.<br />
Il caso precedente è un caso di nidificazione di tag; il <strong>DIV</strong> è contenuto nel paragrafo <strong>P</strong>.<br />
Nessuno vieta inoltre di definire più livelli di nidificazione.</p>
<h3 class="paragrafo">Indentazione del codice.</h3>
<p>E’ una buona norma utilizzare dei <span style="color: #ff0000;">caratteri di tabulazione</span> (il tasto tab a sinistra della lettera Q) per far rientrare il testo ogni volta che ci troviamo in presenza di un annidamento e man mano che entriamo più in profondità nel documento. Questa tecnica prende il nome di indentazione.<br />
In pratica apertura e chiusura del tag si trovano allo <strong>stesso livello</strong>, mentre <strong>il contenuto viene spostato verso destra di un tab</strong>: non si tratta soltanto di un fattore visivo, ma l&#8217;allineamento di apertura e chiusura tag viene mantenuto anche se scorriamo in verticale il documento con il cursore.<br />
Grazie a questa tecnica di stesura del codice, il codice stesso risulta più leggibile e facilmente modificabile in fasi successive.<br />
Il codice del paragrafo precedente è così riformulato:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;p&gt;
	Questo è un testo…
	&lt;div&gt;
		Seguito da un testo in un div…
	&lt;/div&gt;
&lt;/p&gt;
</pre>
<h3 class="paragrafo">I commenti.</h3>
<p>Per rendere il nostro codice<span style="color: #ff0000;"> più leggibile</span> è consigliabile inserire dei commenti nei punti più significativi: si tratta di indicazioni significative per il <em>webmaster</em>, ma<em> invisibili </em>al browser. Inserendo i commenti in punti specifici del documento ci permette di mantenere l&#8217;orientamento anche in file molto complessi e lunghi. La sintassi è la seguente:</p>
<p><strong>&lt;!&#8211; Questo testo è un commento &#8211;&gt;</strong></p>
<p>Tutto ciò che compare all’interno di questi particolari tag viene<strong> ignorato in fase di visualizzazione</strong> nel browser, ma resta comunque leggibile e accessibile da chiunque perché presente nel codice HTML. E’ quindi preferibile non utilizzare i commenti per inserire informazioni sensibili onde evitare problemi di sicurezza.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;p&gt;
	Questo è un paragrafo che contiene semplice testo.&lt;br/&gt;
	All’interno del paragrafo è presente un commento per gli sviluppatori.
	&lt;!-- COMMENTO : questo è un paragrafo --&gt;
&lt;/p&gt;
</pre>
<p><img class="aligncenter" title="Commenti HTML" src="http://www.donatantonio.net/img_html/commenti_html.jpg" alt="Commenti HTML" width="500" height="223" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-annidamento-indentazione-e-commenti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: le entità</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-entita/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-entita/#comments</comments>
		<pubDate>Fri, 13 May 2011 12:20:43 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[entità di uso frequente]]></category>
		<category><![CDATA[le entità html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1224</guid>
		<description><![CDATA[Quando inseriamo del testo nelle nostre pagine HTML dobbiamo utilizzare le entità per definire alcuni caratteri particolari. Ad esempio se dobbiamo scrivere la lettera a minuscola con accento grave (à) non basta pigiare l’apposito tasto sulla nostra tastiera, bensì per scrivere correttamente &#8220;à&#8221; dobbiamo digitare: &#38;agrave; Nel codice HTML leggeremo &#38;agrave; e nella pagina Html [...]]]></description>
			<content:encoded><![CDATA[<p>Quando inseriamo del testo nelle nostre pagine HTML dobbiamo utilizzare le <em>entità</em> per definire alcuni <strong>caratteri particolari</strong>.<br />
Ad esempio se dobbiamo scrivere la lettera <em>a</em> minuscola con accento <em>grave</em> (<strong>à</strong>) non basta pigiare l’apposito tasto sulla nostra tastiera, bensì per scrivere correttamente <em>&#8220;à&#8221;</em> dobbiamo digitare:</p>
<p><span style="color: #ff0000;">&amp;agrave;</span></p>
<p>Nel codice HTML leggeremo<strong> &amp;agrave;</strong> e nella pagina Html visualizzata dal browser vedremo la nostra lettera <em>a</em> minuscola con accento grave.<br />
Se nel codice HTML scriviamo la parola &#8220;<em>velocità</em>&#8221; invece di &#8220;<em>velocit&amp;agrave;</em>&#8221; i browser visualizzeranno correttamente la parola solo se tramite intestazioni HTTP o codice HTML riceveranno l&#8217;informazione di caricare la giusta<em> tabella-codici</em> (in questo caso <strong>ISO 8859-1</strong>).<br />
Nonostante ciò per evitare qualsiasi problema ed anche per rendere le pagine web più conformi allo standard HTML è preferibile inserire nel testo direttamente le entità carattere.</p>
<h3 class="paragrafo">Le entità di uso frequente.</h3>
<p>Tutte le entità HTML si formano con una<em> e commerciale</em> (<strong>&amp;</strong>) come primo carattere e un punto e virgola (<strong>;</strong>) come ultimo.<br />
Nella tabella è indicato esattamente per ciascuna entità come si scrive: i loro nomi sono <em>case-sensitive</em> (occorre rispettare maiuscole e minuscole).</p>
<p><img class="aligncenter" title="Le entità HTML" src="http://www.donatantonio.net/img_html/entita_html.jpg" alt="Le entità HTML" width="520" height="614" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-le-entita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: separatori ed elenchi</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-separatori-ed-elenchi/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-separatori-ed-elenchi/#comments</comments>
		<pubDate>Thu, 12 May 2011 18:26:06 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[elenchi ordinati html]]></category>
		<category><![CDATA[elenchi puntati html]]></category>
		<category><![CDATA[tag hr]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1219</guid>
		<description><![CDATA[Il tag HR. Per creare delle linee di separazione con un semplice tag HTML, senza dover ricorrere alla creazione di un&#8217;immagine è possibile utilizzare l’&#60;hr&#62;. Per creare la linea basta inserire nel codice sorgente il solo tag &#60;hr/&#62; ed avremo la creazione di una linea con colorazione grigia, di uno spessore standard e larga quanto [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Il tag HR.</h3>
<p>Per creare delle<strong> linee di separazione</strong> con un semplice tag HTML, senza dover ricorrere alla creazione di un&#8217;immagine è possibile utilizzare l’<strong>&lt;hr&gt;</strong>.<br />
Per creare la linea basta inserire nel codice sorgente il solo tag &lt;hr/&gt; ed avremo la creazione di una linea con colorazione<em> grigia</em>, di uno spessore standard e larga quanto il <em>“contenitore”</em> nella quale è instanziata.<br />
E’ possibile personalizzare l’aspetto grafico del tag &lt;hr&gt; con la definizione di alcuni attributi tra i quali ad esempio width, size, color e align.</p>
<p>Ad esempio scrivendo:</p>
<p><strong>&lt;hr width=&#8221;150px&#8221; size=&#8221;1&#8243; color=&#8221;red&#8221; align=&#8221;center“ /&gt;</strong></p>
<p>definiamo un separatore di colore rosso allineato al centro e di lunghezza 150px.<br />
Di seguito ecco come verrà visualizzato nel browser l’&lt;hr&gt; appena definito.</p>
<p><img class="aligncenter" title="Tag HR" src="http://www.donatantonio.net/img_html/tag_hr.jpg" alt="Tag HR" width="500" height="161" /></p>
<p>Il tag &lt;hr&gt; risulta quindi molto utile nel momento in cui è necessario suddividere parti della pagina in maniera veloce ed efficiente.</p>
<h3 class="paragrafo">Gli elenchi puntati e numerati.</h3>
<p>Se abbiamo la necessità di inserire un elenco di termini, possiamo utilizzare le &#8220;liste&#8221;, che sono sostanzialmente di tre tipi:</p>
<ul>
<li>
<div>elenchi ordinati;</div>
</li>
<li>
<div>elenchi non ordinati.</div>
</li>
</ul>
<p>Tutti e due i tipi di elenchi funzionano nel medesimo modo: si apre il tag, si elencano i vari elementi della lista (ciascuno con il proprio tag), si chiude il tag dell&#8217;elenco. La sintassi ha quindi questa forma:</p>
<p><strong>&lt;elenco&gt;</strong><br />
<strong> &lt;elemento&gt;</strong>nome del primo elemento<strong>&lt;/elemento&gt;</strong><br />
<strong> &lt;elemento&gt;</strong>nome del secondo elemento<strong>&lt;/elemento&gt;</strong><br />
<strong>&lt;/elenco&gt;</strong></p>
<p>Gli elenchi ordinati sono contraddistinti dall&#8217;enumerazione degli elementi che compongono la lista.<br />
Il tag da utilizzare per aprire un elenco ordinato è <span style="color: #ff0000;">&lt;ol&gt;</span> (<em>ordered list</em>) e gli elementi sono individuati dal tag <span style="color: #ff0000;">&lt;li&gt;</span> (<em>list item</em>):</p>
<pre class="brush: xml; title: ; notranslate">
Elenco numerato:
&lt;ol&gt;
    &lt;li&gt;Primo Elemento&lt;/li&gt;
    &lt;li&gt;Secondo Elemento&lt;/li&gt;
    &lt;li&gt;Terzo Elemento&lt;/li&gt;
&lt;/ol&gt;
</pre>
<p>Il cui risultato è il seguente:</p>
<p><img class="aligncenter" title="Elenchi HTML" src="http://www.donatantonio.net/img_html/elenchi_html.jpg" alt="Elenchi HTML" width="500" height="209" /></p>
<p>Gli elementi dell&#8217;elenco sono sempre rientrati di uno spazio verso destra: tutto questo serve a individuare in modo inequivocabile l&#8217;elenco. Lo stile di enumerazione visualizzata di default dal browser è quella numerica, ma è possibile indicare uno stile differente specificandolo per mezzo dell&#8217;attributo type.</p>
<ul>
<li>
<div><strong>type=“a”</strong> Elenco con alfabeto minuscolo</div>
</li>
<li>
<div><strong>type=“A”</strong> Elenco con alfabeto maiuscolo</div>
</li>
<li>
<div><strong>type=“i”</strong> Elenco con numeri romani in minuscolo</div>
</li>
<li>
<div><strong>type=“I”</strong> Elenco con numeri romani in maiuscolo</div>
</li>
</ul>
<p>Gli<strong> elenchi non ordinati</strong> (<em>o puntati</em>) sono individuati dal tag <span style="color: #ff0000;">&lt;ul&gt;</span> (<em>unordered list</em>), e gli elementi dell&#8217;elenco sono contraddistinti anch&#8217;essi dal tag <em>&lt;li&gt;</em>.</p>
<pre class="brush: xml; title: ; notranslate">
Elenco puntato:
&lt;ul&gt;
    &lt;li&gt;Primo Elemento&lt;/li&gt;
    &lt;li&gt;Secondo Elemento&lt;/li&gt;
    &lt;li&gt;Terzo Elemento&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Il cui risultato è il seguente:</p>
<p><img class="aligncenter" title="Elenchi puntati HTML" src="http://www.donatantonio.net/img_html/elenchi_puntati_html.jpg" alt="Elenchi puntati HTML" width="500" height="193" /></p>
<p>Anche per gli elementi puntati è possibile personalizzare il tipo di segno grafico utilizzato per individuare gli elementi.</p>
<ul>
<li>
<div><strong>type=“disc”</strong> Visualizza un pallino nero (default)</div>
</li>
<li>
<div><strong>type=“circle” </strong> Visualizza un cerchio vuoto</div>
</li>
<li>
<div><strong>type=“square” </strong> Visualizza un quadrato pieno</div>
</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-separatori-ed-elenchi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: stile per il testo</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-stile-per-il-testo/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-stile-per-il-testo/#comments</comments>
		<pubDate>Thu, 12 May 2011 18:25:42 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[stile fisico html]]></category>
		<category><![CDATA[stile logico html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1215</guid>
		<description><![CDATA[L&#8217;HTML ha due tipi di stile per il testo: logico formatta del testo a seconda del suo significato descrive “l’uso” di una parte di testo lascia al browser l’interpretazione del comando secondo le proprie capacità e fisico indica al browser il formato specifico del testo forza il testo ad assumere un particolare aspetto richiede uno [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;HTML ha due tipi di stile per il testo:</p>
<p><span style="color: #ff0000;"><strong>logico</strong></span></p>
<ul>
<li>formatta del testo a seconda del suo significato</li>
<li>descrive “l’uso” di una parte di testo</li>
<li>lascia al browser l’interpretazione del comando secondo le proprie capacità</li>
</ul>
<p>e</p>
<p><strong><span style="color: #ff0000;">fisico</span></strong></p>
<ul>
<li>indica al browser il formato specifico del testo</li>
<li>forza il testo ad assumere un particolare aspetto</li>
<li>richiede uno specifico formato fisico e causa problemi se il browser non è in grado   di gestire il formato specificato</li>
</ul>
<h3 class="paragrafo">Tipi di stile logico.</h3>
<ul>
<li><strong>&lt;EM&gt;</strong> E’ utilizzato per enfatizzare un testo</li>
<li><strong>&lt;STRONG&gt;</strong> E’ utilizzato per dare una forte enfasi ad un testo</li>
<li><strong>&lt;ADDRESS&gt;</strong> Tag contenitore usato per fornire informazioni di locazione</li>
<li><strong>&lt;CITE&gt;</strong> Per testo di citazione</li>
<li><strong>&lt;BLOCKQUOTE&gt;</strong> Usato per citazioni e risalto di blocchi di testo</li>
<li><strong>&lt;DFN&gt;</strong> Utilizzato per la definizione di un termine</li>
<li><strong>&lt;CODE&gt;</strong> Utilizzato per includere il codice di un programma</li>
<li><strong>&lt;KBD&gt;</strong> Utilizzato per indicare un testo da digitare</li>
</ul>
<p>Il seguente codice descrive l’utilizzo di questi tag:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;body&gt;
    &lt;em&gt;Questo è enfatizzato&lt;/em&gt;
    &lt;strong&gt;Questo è strong&lt;/strong&gt;
    &lt;address&gt;Questo è address&lt;/address&gt;
    &lt;cite&gt;Questa è una citazione&lt;/cite&gt;
    &lt;blockquote&gt;Questo è un blockquote&lt;/blockquote&gt;
    &lt;dfn&gt;Questa è una definizione&lt;/dfn&gt;
    &lt;code&gt;Questo è un codice&lt;/code&gt;
    &lt;kbd&gt;Questo è un testo da digitare&lt;/kbd&gt;
&lt;/body&gt;
</pre>
<p>Il codice precedente produce:</p>
<p style="text-align: center;"><img class="aligncenter" title="Stile Logico HTML" src="http://www.donatantonio.net/img_html/stile_logico.jpg" alt="Stile Logico HTML" width="500" height="316" /></p>
<h3 class="paragrafo">Tipi di stile fisico.</h3>
<ul>
<li><strong>&lt;B&gt;</strong> Per il testo in grassetto</li>
<li><strong>&lt;I&gt; </strong> Per il testo in italico</li>
<li><strong>&lt;U&gt; </strong> Per il testo sottolineato</li>
<li><strong>&lt;STRIKE&gt; </strong> Per un testo barrato</li>
<li><strong>&lt;TT&gt;</strong> Per mantenere una spaziatura fissa</li>
<li><strong>&lt;SUB&gt;</strong> Per un testo al pedice</li>
<li><strong>&lt;SUP&gt;</strong> Per un testo all’apice</li>
</ul>
<p>Il seguente codice descrive l’utilizzo di questi tag:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;body&gt;
&lt;b&gt;Testo in grassetto&lt;/b&gt;
&lt;l&gt;Testo in italico&lt;/l&gt;
&lt;u&gt;Testo sottolineato&lt;/u&gt;
&lt;strike&gt;Testo barrato&lt;/strike&gt;
&lt;tt&gt;Testo a spaziatura fissa&lt;/tt&gt;
X&lt;sub&gt;Questo testo è al pedice&lt;/sub&gt;
X&lt;sup&gt;Questo testo è all’apice&lt;/sup&gt;
&lt;/body&gt;
</pre>
<p>Il risultato è il seguente:</p>
<p><img class="aligncenter" title="Stile fisico HTML" src="http://www.donatantonio.net/img_html/stile_fisico.jpg" alt="Stile fisico HTML" width="500" height="241" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-stile-per-il-testo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: i tag di uso frequente</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-tag-di-uso-frequente/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-tag-di-uso-frequente/#comments</comments>
		<pubDate>Thu, 12 May 2011 18:25:15 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[div html]]></category>
		<category><![CDATA[elementi di blocco html]]></category>
		<category><![CDATA[paragrafi html]]></category>
		<category><![CDATA[tag contenitori]]></category>
		<category><![CDATA[tag frequenti]]></category>
		<category><![CDATA[titoli html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1209</guid>
		<description><![CDATA[Tag contenitori. Come visto in un articolo precedente nulla vieta di scrivere direttamente all&#8217;interno del tag body il testo di ciò che vogliamo appaia a schermo. Risulta più pratico racchiudere il testo in appositi tag a seconda della funzione che il testo sta svolgendo. La nostra pagina html risulterà più semplice da leggere, quando dovremo modificarla, e [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Tag contenitori.</h3>
<p>Come visto in un articolo precedente nulla vieta di scrivere direttamente all&#8217;interno del tag body il testo di ciò che vogliamo appaia a schermo.<br />
Risulta più pratico racchiudere il testo in appositi tag a seconda della funzione che il testo sta svolgendo.<br />
La nostra pagina html risulterà più semplice da leggere, quando dovremo modificarla, e inoltre potremo ottenere un effetto grafico più gradevole e rispondente alle diverse esigenze.<br />
Vediamo i principali <span style="color: #ff0000;">tag-contenitori </span>da utilizzare per formattare il testo.</p>
<h3 class="paragrafo">Titoli.</h3>
<p>Esistono 6 differenti livelli di titolo che si ottengono utilizzando i seguenti tag:</p>
<ul>
<li>&lt;h1&gt;</li>
<li>&lt;h2&gt;</li>
<li>&lt;h3&gt;</li>
<li>&lt;h4&gt;</li>
<li>&lt;h5&gt;</li>
<li>&lt;h6&gt;</li>
</ul>
<p>La &#8220;<strong>h</strong>&#8221; sta per &#8220;<em>heading</em>&#8220;, cioè titolo e ogni livello indica una grandezza diversa.<br />
Dall&#8217;&lt;h1&gt;, che è il più importante, si va via via degradando fino all&#8217;&lt;h6&gt; che rappresenta il titolo con grandezza minore.<br />
Gli heading, così come altri tag contenitori, appartengono alla famiglia degli <strong>elementi di blocco</strong>. Tali elementi sono così chiamati perché una volta definiti creano un blocco attorno a sé, di conseguenza vanno a capo e risultano distanziati dagli elementi che li circondano.</p>
<p>Analizziamo il seguente codice html:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
    &lt;head&gt;
        &lt;title&gt;TITOLI&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        &lt;h1&gt;Esame di informatica&lt;/h1&gt;
        &lt;h2&gt;Esame di informatica&lt;/h2&gt;
        &lt;h3&gt;Esame di informatica&lt;/h3&gt;
        &lt;h4&gt;Esame di informatica&lt;/h4&gt;
        &lt;h5&gt;Esame di informatica&lt;/h5&gt;
        &lt;h6&gt;Esame di informatica&lt;/h6&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Nella pagina html abbiamo definito <em>6 titoli </em>con ugual testo ma grandezza diversa, utilizzando in successione i tag da <strong>h1</strong> ad <strong>h6</strong>.<br />
Ciascun titolo verrà automaticamente portato a capo rispetto al precedente e di default sarà applicato un margine (inferiore e superiore) che differisce seppur minimamente da browser a browser.<br />
Di seguito viene mostrato il risultato in Internet Explorer:</p>
<p><img class="aligncenter" title="Titoli HTML" src="http://www.donatantonio.net/img_html/tag_titolo.jpg" alt="Titoli HTML" width="500" height="311" /></p>
<h3 class="paragrafo">Paragrafi.</h3>
<p>I browser non riconoscono da soli la formattazione del testo, bensì è necessario indicargliela tramite appositi tag html. In caso contrario il browser si limiterà a visualizzare a video i caratteri uno dietro all’altro senza alcuna regola.<br />
Il <span style="color: #ff0000;">paragrafo</span> rappresenta l&#8217;unità di base entro cui suddividere un testo.<br />
Il tag <strong>&lt;p&gt;</strong> lascia una riga vuota prima della sua apertura e dopo la sua chiusura. La sintassi è la seguente:</p>
<p><strong>&lt;p&gt;Questo testo è in un paragrafo…&lt;/p&gt;</strong></p>
<p>Il tag &lt;/p&gt; di chiusura può essere omesso ma è buona norma abituarsi ad inserirlo sempre, soprattutto nel caso in cui siano necessari più paragrafi in successione.<br />
Analizziamo il seguente esempio di codice html:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;p&gt;Questo &amp;egrave; un primo paragrafo... &lt;/p&gt;
&lt;p&gt;Questo &amp;egrave; un secondo paragrafo...&lt;/p&gt;
</pre>
<p>I browser visualizzerà così i due paragrafi:</p>
<p><img class="aligncenter" title="Paragrafi HTML" src="http://www.donatantonio.net/img_html/paragrafi.jpg" alt="Paragrafi HTML" width="500" height="193" /></p>
<p>Il tag &lt;p&gt; possiede inoltre un importante attributo presente nella maggior parte degli elementi di blocco che prende il nome di align.<br />
Specificando ad esempio:</p>
<p><strong>&lt;p align=‘right’&gt;Questo è un paragrafo…&lt;/p&gt;</strong></p>
<p>il testo contenuto all’interno del paragrafo sarà allineato a destra. In alternativa il testo potrà essere allineato a sinistra (<em>left</em>), al centro (<em>center</em>) oppure giustificato (<em>justify</em>).</p>
<h3 class="paragrafo">Andare a capo.</h3>
<p>Si sarà notato che andando a capo nel codice html all’interno di un paragrafo, questo non riproduce lo stesso effetto visualizzato nel browser. Ad esempio scrivere come segue non produce l’effetto desiderato:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;p&gt;
Questo &amp;egrave; un paragrafo
questa riga dovrebbe andare a capo
cos&amp;igrave; come questa riga…
&lt;/p&gt;
</pre>
<p>Il tag <span style="color: #ff0000;">&lt;br/&gt;</span> permette invece di inserire un interruzione di riga, quindi un a capo. Essendo questo un <em>tag vuoto</em> e non un contenitore come &lt;p&gt;, nella sintassi verrà definito senza contenuto e quindi senza la coppia di tag di apertura e chiusura.<br />
L’esempio precedente è così riformulato grazie al tag &lt;br&gt;:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;p&gt;
Questo &amp;egrave; un paragrafo &lt;br/&gt;
questa riga dovrebbe andare a capo &lt;br/&gt;
cos&amp;igrave; come questa riga…
&lt;/p&gt;
</pre>
<p>Utilizzando semplicemente una coppia di tag &lt;br&gt; si ottiene di conseguenza una <em>linea bianca</em>.</p>
<h3 class="paragrafo">Il div e lo span.</h3>
<p>Il tag <span style="color: #ff0000;">&lt;div&gt;</span> definisce un blocco di testo che va a capo ma, a differenza del paragrafo, non lascia spazi prima e dopo la sua apertura.<br />
Il DIV grazie alla sua enorme versatilità viene definito nel linguaggio HTML come <strong>l’elemento di tipo blocco per eccellenza</strong>. E’ utilizzato più che per contenere semplice testo soprattutto per la suddivisione strutturale delle pagine html.<br />
La sintassi del DIV è la seguente:</p>
<p><strong>&lt;div&gt;Questo è un testo all’interno di un blocco div.&lt;/div&gt;</strong></p>
<p>Lo <span style="color: #ff0000;">&lt;span&gt;</span> invece è un contenitore generico che può essere annidato ad esempio all&#8217;interno dei &lt;div&gt;.<br />
A differenza dei tag &lt;p&gt; e &lt;div&gt; si tratta di un <strong>elemento inline</strong>, che cioè non va a capo e continua sulla stessa linea del tag che lo include.<br />
Lo &lt;span&gt; è un elemento molto utilizzato soprattutto insieme ai fogli di stile (CSS), ad esempio per definire delle aree di testo particolari come quelle per segnalare errori o informazioni all’utente.<br />
Se non viene associato ad uno stile la sua presenza risulta <em>nulla</em> e dipendente esclusivamente dallo stile del tag che lo contiene.<br />
Analizziamo quindi il seguente codice HTML:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div&gt;
Questo testo è all’interno di un blocco.&lt;br/&gt;
E’ possibile inserire immagini, link o altri oggetti all’interno di un div.&lt;br/&gt;
Inoltre un div può contenere uno span che a sua volta contiene ad esempio una parola o una frase.&lt;br/&gt;
&lt;span&gt;Questo testo è in uno span.&lt;/span&gt;
&lt;/div&gt;
</pre>
<p>E’ stato definito un div che contiene esclusivamente testo formattato grazie a dei &lt;br&gt; e prima della chiusura uno span con del testo. Da notare la nidificazione dello span nel div.<br />
Il risultato dell’esempio precedente è così visualizzato dal browser:</p>
<p><img class="aligncenter" title="DIV e SPAN" src="http://www.donatantonio.net/img_html/div_e_span.jpg" alt="DIV e SPAN" width="500" height="219" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-i-tag-di-uso-frequente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JQuery, il metodo .text()</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-text/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-text/#comments</comments>
		<pubDate>Tue, 10 May 2011 14:30:30 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[aggiungere testo a elemento html]]></category>
		<category><![CDATA[il metodo text]]></category>
		<category><![CDATA[jquery text]]></category>
		<category><![CDATA[scrivere in un elemento html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1199</guid>
		<description><![CDATA[In un articolo precedente abbiamo visto le potenzialità e gli usi pratici del metodo .html() di jQuery. Esiste però un metodo che per certi aspetti somiglia molto a quello appena citato, sia per funzionalità che per sintassi, il metodo .text(). Questo metodo ci permette di leggere e scrivere il contenuto di un elemento HTML che [...]]]></description>
			<content:encoded><![CDATA[<p>In un <a title="Il metodo .html() di jQuery" href="http://www.donatantonio.net/blog/?p=1188" target="_blank">articolo precedente</a> abbiamo visto le potenzialità e gli usi pratici del metodo .html() di jQuery.<br />
Esiste però un metodo che per certi aspetti somiglia molto a quello appena citato, sia per funzionalità che per sintassi, il metodo <span style="color: #ff0000;">.text()</span>.</p>
<p>Questo metodo ci permette di leggere e scrivere il contenuto di un elemento HTML che compone la pagina. A differenza però di .html(), il metodo .text() accede esclusivamente ai <strong>textNode</strong>, operando quindi solo sul testo e tralasciando i tag HTML.<br />
Chiariamo questo concetto introducendo la sintassi del metodo .text():</p>
<pre class="brush: jscript; title: ; notranslate">
$('#id_blocco').text();
</pre>
<p>Con questa linea di codice stiamo accedendo ai <em>contenuti testuali </em>dell&#8217;elemento identificato tramite id. Se ad esempio avessimo un DIV così definito:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id='my_div'&gt;
    Questo è un blocco di esempio.&lt;br/&gt;
    Contiene un elenco:
    &lt;ul&gt;
        &lt;li&gt;Voce 1&lt;/li&gt;
        &lt;li&gt;Voce 2&lt;/li&gt;
    &lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>richiamando il metodo text() sul div con la seguente sintassi:</p>
<pre class="brush: jscript; title: ; notranslate">
var testo = $('#my_div').text();
</pre>
<p>avvaloreremo la variabile &#8220;<em>testo</em>&#8221; con la seguente stringa:</p>
<p><strong>Questo è un blocco di esempio. Contiene un elenco: Voce 1 Voce 2</strong></p>
<p>Ciò che è importante notare è che il metodo restituisce <span style="color: #ff0000;">esclusivamente i nodi di testo</span>. I tag HTML non vengono considerati testo e dell&#8217;elenco che abbiamo definito è stato restuito solo il testo, quindi il contenuto dei tag &lt;li&gt;.</p>
<p>Come detto ad inizio articolo, il metodo .text() può essere utilizzato anche per <strong>scrivere testo </strong>all&#8217;interno di un blocco HTML. La sintassi è semplice e del tutto simile a quella del metodo .html():</p>
<pre class="brush: jscript; title: ; notranslate">
$('#id_blocco').text('Testo da inserire');
</pre>
<p>Il metodo accetta come parametro una stringa, la quale verrà scritta all&#8217;interno dell&#8217;elemento identificato tramite ID.<br />
Una caratteristica importante da tenere in considerazione è che l&#8217;istruzione precedente, se richiamata su un elemento contenente a sua volta altri elementi HTML, <em>sovrascrive tutto il contenuto</em>, realizzando quindi un semplice nodo di testo.<br />
E&#8217; interessante notare, inoltre, cosa accade quando la stringa in input al metodo contiene codice HTML, in questo caso il codice non verrà interpretato, bensì verrà convertito in una semplice stringa di testo.</p>
<p>Infine vediamo tre funzioni parametrizzate che utilizzano il metodo .text():</p>
<pre class="brush: jscript; title: ; notranslate">
// Funzione che restituisce il testo contenuto in un elemento
function GetText(id){
    var testo = $('#'+id).text();
    alert('Il testo contenuto è:\n\n'+testo);
}
// Funzione che scrive un testo in un elemento
function SetText(id,testo){
    $('#'+id).text(testo);
}
// Funzione che aggiunge testo ad un elemento
function AddText(id,new_testo){
    var testo = $('#'+id).text();
    $('#'+id).text(testo+new_testo);
}
</pre>
<p>Nonostante il metodo .text() possa risultare meno utile del metodo .html(), offre molteplici spunti progettuali.<br />
Le funzioni viste sono state <strong>raccolte in una pagina web d’esempio</strong>.</p>
<p><strong>Cliccando <a title="Esempio metodo .text()" href="http://www.donatantonio.net/script/jquery_text/" target="_blank">qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a title="Scarica esempio metodo .text()" href="http://www.donatantonio.net/script/jquery_text.rar" target="_blank">qui</a></strong> è possibile scaricare il codice.<br />
<br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-text/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JQuery, il metodo .html()</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-html/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-html/#comments</comments>
		<pubDate>Mon, 09 May 2011 21:07:09 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[aggiungere codice html]]></category>
		<category><![CDATA[il metodo html]]></category>
		<category><![CDATA[inserire codice html jquery]]></category>
		<category><![CDATA[jquery html]]></category>
		<category><![CDATA[jquery leggere html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1188</guid>
		<description><![CDATA[Il metodo .html() del framework jQuery permette di immettere in maniera dinamica codice html  in un elemento esistente della pagina, inoltre il metodo è utilizzabile anche per leggere e prelevare il contenuto html di un elemento. La duplice funzione che svolge ne fa un ottimo alleato in tutti quei casi in cui lo sviluppatore ha [...]]]></description>
			<content:encoded><![CDATA[<p>Il metodo <span style="color: #ff0000;">.html() </span>del framework jQuery permette di immettere in maniera dinamica codice html  in un elemento esistente della pagina, inoltre il metodo è utilizzabile anche per leggere e prelevare il contenuto html di un elemento.</p>
<p>La <strong>duplice</strong> funzione che svolge ne fa un ottimo alleato in tutti quei casi in cui lo sviluppatore ha necessità di modificare &#8220;<em>a volo</em>&#8221; la pagina web, in relazione ad esempio ad un azione dell&#8217;utente o ad una chiamata Ajax.</p>
<p>In questo articolo analizzeremo l&#8217;utilizzo del metodo html() nei seguenti casi:</p>
<ul>
<li>prelevare il contenuto di un elemento della pagina;</li>
<li>sovrascrivere il contenuto di un elemento della pagina;</li>
<li>aggiungere contenuti ad un elemento della pagina;</li>
<li>modifica di elementi da chiamata Ajax;</li>
<li>modifica contemporanea del contenuto di più elementi.</li>
</ul>
<p>Vediamo subito la <span style="color: #ff0000;">sintassi base</span> del metodo html():</p>
<pre class="brush: jscript; title: ; notranslate">
$('#id_blocco').html();
</pre>
<p>Con questa semplice linea di codice stiamo accedendo, tramite ID, al contenuto di un blocco HTML. Possiamo, partendo da questa istruzione base, creare una funzione parametrizzata che restituisce a video il codice HTML contenuto in un elemento:</p>
<pre class="brush: jscript; title: ; notranslate">
function GetHtml(id){
    var codice = $('#'+id).html();
    alert('Il codice HTML è:\n\n'+codice);
}
</pre>
<p>La funzione <strong>GetHtml(id)</strong> stampa, tramite un alert, il codice HTML prelevato tramite il metodo .html(). Possiamo pensare di personalizzare questa funzione per rendere le nostre pagine più dinamiche e le possibilità sono svariate.<br />
Ma, come detto in fase di introduzione all&#8217;articolo, il metodo .html() permette anche di <strong>modificare il contenuto</strong> di un elemento della pagina. La sintassi è molto semplice, basta aggiungere un parametro in input al metodo:</p>
<pre class="brush: jscript; title: ; notranslate">
$('#id_blocco').html(new_codice);
</pre>
<p>La varibile &#8220;<em>new_codice</em>&#8221; conterrà il nuovo codice HTML da applicare all&#8217;elemento selezionato tramite ID. In alternativa è possibile<strong> accodare </strong>il codice della variabile &#8220;<em>new_codice</em>&#8221; a quello esistente, senza quindi sovrascrivvere quello esistente:</p>
<pre class="brush: jscript; title: ; notranslate">
var codice_attuale = $('#id_blocco').html();
$('#id_blocco').html(codice_attuale+new_codice);
</pre>
<p>Possiamo racchiudere queste linee di codice in una funzione che chiameremo <strong>AddHtml</strong>, la quale opportunamente parametrizzata permetta di aggiungere contenuti ad un elemento della pagina. La funzione può tornare molto utile in tutti quei casi in cui lo sviluppatore ha necessità di &#8220;<em>completare</em>&#8221; la pagina in step successivi:</p>
<pre class="brush: jscript; title: ; notranslate">
function AddHtml(id,codice_html){
    var codice_attuale = $('#'+id).html();
    $('#'+id).html(codice_attuale+codice_html);
}
</pre>
<p>Per migliorare la funzione precedente è necessario introdurre <strong>Ajax</strong> (leggi articolo <a title="Ajax con jQuery" href="http://www.donatantonio.net/blog/?p=693" target="_blank">Ajax con jQuery</a>). Il nuovo codice HTML sarà generato da uno script lato server, opportunamente richiamato:</p>
<pre class="brush: jscript; title: ; notranslate">
function SetHtmlAjax(id){
    $.ajax({
     type: &quot;GET&quot;,
     dataType: &quot;html&quot;,
     cache: false,
     url: &quot;data.php&quot;,
     data: &quot;&quot;,
     success: function(msg){
        $('#'+id).html(msg);
     }
     });
}
</pre>
<p>La funzione, una volta invocata, effettua una chiamata Ajax ad uno script (nel nostro esempio <em>data.php</em>) che dopo opportune elaborazioni genera ed invia al client <strong>una porzione di codice HTML</strong>. Sarà compito del metodo .html() di jQuery sovrascrivere il contenuto del blocco identificato tramite ID. Eventualmente è possibile modificare la funzione in modo tale che aggiunga il codice invece di sovrascriverlo.</p>
<p>Infine vediamo come il metodo .html() risulti utile e immediato per aggiornare il contenuto di <strong>più elementi contemporaneamente</strong>:</p>
<pre class="brush: jscript; title: ; notranslate">
$('div').html('Nuovo contenuto');

$('h1').html('Nuovo titolo');
</pre>
<p>Possiamo modificare il contenuto di tutti i blocchi di tipo <em>DIV</em> oppure i titoli di livello <em>H1</em> e così via.<br />
Le funzioni viste sono state <strong>raccolte in una pagina web d&#8217;esempio</strong>.</p>
<p><strong>Cliccando <a title="Esempio metodo .html()" href="http://www.donatantonio.net/script/jquery_html/" target="_blank">qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a title="Scarica esempio metodo .html()" href="http://www.donatantonio.net/script/jquery_html.rar" target="_blank">qui</a></strong> è possibile scaricare il codice.<br />
<br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-html/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JQuery, il metodo .val()</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-val/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-val/#comments</comments>
		<pubDate>Thu, 05 May 2011 21:18:48 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[campi di input con jquery]]></category>
		<category><![CDATA[checkbox jquery]]></category>
		<category><![CDATA[form jquery]]></category>
		<category><![CDATA[il metodo val]]></category>
		<category><![CDATA[jquery select val]]></category>
		<category><![CDATA[jquery val]]></category>
		<category><![CDATA[radio button jquery]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1174</guid>
		<description><![CDATA[Il metodo val() è indubbiamente uno degli strumenti più utili ed efficienti che il framework jQuery mette a disposizione di tutti gli sviluppatori web. Quante volte ci siam trovati dinnanzi all&#8217;esigenza di controllare i campi di un form html, con la necessità di dover accedere al contenuto di campi di testo, select, radio button, checkbox, [...]]]></description>
			<content:encoded><![CDATA[<p>Il metodo <span style="color: #ff0000;">val()</span> è indubbiamente uno degli strumenti più utili ed efficienti che il framework jQuery mette a disposizione di tutti gli sviluppatori web.<br />
Quante volte ci siam trovati dinnanzi all&#8217;esigenza di<em> controllare i campi di un form html</em>, con la necessità di dover accedere al contenuto di campi di testo, select, radio button, checkbox, focalizzando l&#8217;attenzione sulla sintassi e le metodologie da adottare.</p>
<p>Il metodo .val() permette di accedere al contenuto di <strong>tutti gli elementi</strong> che caratterizzano un form. Le sue potenzialità non finiscono qui, infatti è inoltre possibile impostare il valore che ogni elemento deve assumere. <strong><span style="text-decoration: underline;">Tutto con un solo metodo</span></strong>.<br />
In questo articolo mostreremo:</p>
<ul>
<li>come leggere il valore di un campo di testo;</li>
<li>come scrivere nei campi di testo;</li>
<li>come leggere la voce selezionata in una select;</li>
<li>come impostare una voce di una select;</li>
<li>come verificare il check di un set di radio button;</li>
<li>come impostare il check di un set di radio button;</li>
<li>come verificare il check di una checkbox;</li>
<li>come impostare il check di una checkbox;</li>
</ul>
<p>Vediamo innanzitutto la sintassi di base del metodo .val():</p>
<pre class="brush: jscript; title: ; notranslate">
// Se accediamo ad un campo tramite ID
$(&quot;#id_campo&quot;).val();

// Se accediamo ad un campo tramite type-name
$(&quot;input[type=text][name=nome_campo]&quot;).val();
</pre>
<p>Con queste prime due linee di codice introduciamo il metodo val in modalità<strong> lettura</strong> (get). La prima accede al <span style="color: #ff0000;">campo di testo</span> tramite <strong>ID</strong>, il secondo invece tramite la coppia <strong>type &#8211; name</strong>. Scrivendo quindi il seguente codice:</p>
<pre class="brush: jscript; title: ; notranslate">
var contenuto = $(&quot;#id_campo&quot;).val();
</pre>
<p>avvaloriamo la variabile contenuto con il contenuto del campo &#8220;<em>id_campo</em>&#8220;.<br />
Supponiamo invece di voler<strong> impostare un valore</strong> ad un campo di testo, utilizzando il metodo .val() in modalità scrittura (set):</p>
<pre class="brush: jscript; title: ; notranslate">
// Se accediamo ad un campo tramite ID
$(&quot;#id_campo&quot;).val(&quot;Nuovo contenuto!&quot;);

// Se accediamo ad un campo tramite type-name
$(&quot;input[type=text][name=nome_campo]&quot;).val(&quot;Nuovo contenuto!&quot;);
</pre>
<p>La sintassi resta invariata rispetto alla modalità lettura, logicamente il metodo val accetta in ingresso la<em> stringa </em>da impostare nel campo di testo.</p>
<p>Vediamo adesso come accedere ad una <span style="color: #ff0000;">select</span> html.<br />
Chi conosce bene Javascript sa che <em>non è immediato</em> il controllo di una select, è necessario individuare la select, quindi individuare la voce selezionata tramite indice e finalmente accedere al valore. Più complesso è selezionare una voce in maniera dinamica.<br />
Con il metodo val() tutto si riduce a ciò:</p>
<pre class="brush: jscript; title: ; notranslate">
// Se accediamo ad una select tramite ID
var valore = $('#id_select').val();

// Se accediamo ad una select tramite name
var valore = $(&quot;select[name=nome_campo]&quot;).val();
</pre>
<p>Selezionare una voce della select è altrettanto immediato:</p>
<pre class="brush: jscript; title: ; notranslate">
// Se accediamo alla select tramite ID
$(&quot;@id_select&quot;).val(new_valore);

// Se accediamo alla select tramite name
$(&quot;select[name=nome_campo]&quot;).val(new_valore);
</pre>
<p>L&#8217;unica considerazione a riguardo è che il contenuto della variabile &#8220;<em>new_valore</em>&#8221; deve essere, logicamente, una voce presente in select.</p>
<p>Passiamo ora ai <span style="color: #ff0000;">radio button</span>.<br />
Anche in questo caso il metodo val() ci aiuta a verificare quale radio button del gruppo<em> è selezionato</em> e ad effettuare il <em>check dinamico</em> di uno di essi.</p>
<pre class="brush: jscript; title: ; notranslate">
// Accediamo al radio button tramite la coppia type - name
var valore = $(&quot;input[type=radio][name=nome_campo]:checked&quot;).val();

// Immpostiamo il check di un radio button
$(&quot;input[type=radio][name=nome_campo]&quot;).val([new_valore]);
</pre>
<p>In fase di lettura, la variabile &#8220;<em>valore</em>&#8221; conterrà il value del radio button selezionato; qualora nessuno sia selezionato il risultato sarà &#8220;<em>null</em>&#8220;.<br />
Per impostare il check di un radio button è necessario prestare un pò di <span style="text-decoration: underline;">attenzione</span> al parametro del metodo val(), &#8220;<em>new_valore</em>&#8221; si riferisce al value di uno dei radio button del gruppo, racchiuso tra <em>parentesi quadre</em> ,<strong>val([new_valore])</strong>.</p>
<p>Infine accediamo agli elementi di tipo<span style="color: #ff0000;"> checkbox</span>.</p>
<pre class="brush: jscript; title: ; notranslate">
// Se accediamo al checkbox tramite ID
var valore = $(&quot;#id_checkbox:checked&quot;).val();

// Se accediamo al checkbox tramite coppia type - name
var valore = $(&quot;input[type=checkbox][name=nome_campo]:checked&quot;).val();
</pre>
<p>La variabile &#8220;<em>valore</em>&#8221; conterrà il value del checkbox se questo è selezionato, altrimenti &#8220;<em>null</em>&#8220;.<br />
Per effettuare il check invece:</p>
<pre class="brush: jscript; title: ; notranslate">
// Se accediamo al checkbox tramite ID
$(&quot;#id_checkbox&quot;).val([new_valore]);

// Se accediamo al checkbox tramite coppia type - name
$(&quot;input[type=checkbox][name=nome_campo]&quot;).val([new_valore]);
</pre>
<p>Come per i radio button, anche il checkbox prevede come &#8220;<em>new_valore</em>&#8221; il value del checkbox racchiuso tra <em>parentesi quadre</em>.</p>
<p>Per dimostrare le capacità del metodo .val() di jQuery ho racchiuso il codice presentato in alcune <strong>funzioni parametrizzate</strong> e richiamate su un form di esempio.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/jquery_val/" target="_blank">qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/jquery_val.rar">qui</a></strong> è possibile scaricare il codice.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/jquery-il-metodo-val/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validazione del codice HTML</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/validazione-del-codice-html/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/validazione-del-codice-html/#comments</comments>
		<pubDate>Wed, 04 May 2011 11:57:16 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[doctype html]]></category>
		<category><![CDATA[validazione del codice]]></category>
		<category><![CDATA[validazione W3C]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1160</guid>
		<description><![CDATA[Il W3C. L&#8217;organizzazione che si occupa di standardizzare la sintassi del linguaggio HTML (il W3C: World Wide Web Consortium) ha rilasciato diverse versioni di questo linguaggio (HTML 2.0, HTML 3.2, HTML 4.0); e, da un certo punto in poi, l&#8217;HTML si è evoluto in XHTML (si tratta dell&#8217;HTML riformulato come linguaggio XML). La versione dell&#8217;HTML [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Il W3C.</h3>
<p>L&#8217;organizzazione che si occupa di standardizzare la sintassi del linguaggio HTML (il <strong>W3C</strong>: <em>World Wide Web Consortium</em>) ha rilasciato diverse versioni di questo linguaggio (<span style="color: #ff0000;">HTML 2.0</span>, <span style="color: #ff0000;">HTML 3.2</span>, <span style="color: #ff0000;">HTML 4.0</span>); e, da un certo punto in poi, l&#8217;HTML si è evoluto in <strong>XHTML</strong> (si tratta dell&#8217;HTML riformulato come linguaggio <em>XML</em>).<br />
La versione dell&#8217;HTML a cui si farà riferimento è l&#8217;ultima rilasciata: si tratta dell&#8217;<em>HTML 4.01</em>.</p>
<p>Si è detto che l&#8217;HTML si è evoluto in XHTML; ci sono però ottime ragioni per incominciare a studiare l&#8217;HTML e non l&#8217;XHTML:</p>
<ul>
<li>di fatto l&#8217;HTML verrà utilizzato ancora per diversi anni come linguaggio principe delle pagine web;</li>
<li>alcuni concetti di XHTML richiedono già una certa esperienza. L&#8217;<em>HTML è più immediato</em> e consente di incominciare subito a produrre documenti web;</li>
</ul>
<p>chi conosce l&#8217;XHTML non può non conoscere l&#8217;HTML. La conoscenza dell&#8217;HTML è infatti il prerequisito essenziale. Le differenze tra i due linguaggi non sono così marcate e passare dall&#8217;uno all&#8217;altro non richiede poi molta fatica.</p>
<h3 class="paragrafo">Il DOCTYPE.</h3>
<p>Il W3C, ha esplicitamente definito l&#8217;HTML come un&#8217;applicazione <em>SGML</em> che, pertanto, deve aderire agli standard internazionali <strong>ISO 8879</strong>.<br />
La <span style="color: #ff0000;"><strong>DTD</strong></span> (<em>Document Type Definition</em>) di un documento HTML definisce i marcatori (tag) e la sintassi utilizzata per creare il documento stesso.<br />
Una pagina HTML valida deve dunque contenere il <strong>&lt;!DOCTYPE&gt;</strong> (o <em>Document Type Declaration</em>) che ne dichiara la versione ed la relativa DTD cui è conforme.</p>
<p>Il &lt;!DOCTYPE&gt; è quel piccolo pezzo di codice che precede tutti i tag di un documento HTML.<br />
Può assumere  una sintassi di questo genere:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN“ http://www.w3.org/TR/html4/loose.dtd&gt;
</pre>
<p>Questa riga fornisce le seguenti informazioni:</p>
<p><img class="aligncenter" title="Inormazioni Doctype" src="http://www.donatantonio.net/img_html/doctype.jpg" alt="Informazioni Doctype" width="500" height="209" /></p>
<p>Inoltre, se necessario, è possibile specificare l<em>&#8216;indirizzo di riferimento</em> a cui è possibile trovare la DTD se omesso il browser non darà errore dato che gli URL a cui trovare la documentazione sono universalmente noti.<br />
Per quel che riguarda l&#8217;HTML le indicazioni possibili sono tre:</p>
<ul>
<li><span style="color: #ff0000;"><strong>Strict</strong></span>, che è una DTD particolarmente rigorosa. Esclude ogni elemento che riguarda il layout e non è consentito l&#8217;uso degli elementi deprecati;</li>
<li><span style="color: #ff0000;"><strong>Transitional</strong></span>, che è una versione temporanea, per consentire il passaggio da una specifica all&#8217;altra. Nella DTD transitional i tag deprecati sono ammessi. Questa DTD andrà bene nella maggior parte dei casi;</li>
<li><span style="color: #ff0000;"><strong>Frameset</strong></span>, che è la DTD che riguarda i frames.</li>
</ul>
<p>Una volta definita la DTD il browser conosce esattamente come dovrebbe leggere e visualizzare la pagina HTML. La DTD è essenziale soprattutto quando si vuol validare il codice html.</p>
<h3 class="paragrafo">Validazione HTML.</h3>
<p>Nonostante non sia obbligatorio validare il codice html è buona norma, soprattutto per chi intende realizzare pagine web di livello professionale, effettuare il <strong>controllo del codice </strong>alla ricerca di errori.<br />
Validare consiste essenzialmente nel controllare che il codice <strong>risponda alla DTD </strong>a cui è associata e che non ci siano errori di annidamento e nomenclatura dei tag.<br />
A tale scopo il W3C mette a disposizione, tramite il sito ufficiale del consorzio, uno strumento di <span style="color: #ff0000;">validazione on-line </span>accessibile al seguente indirizzo: <a href="http://validator.w3.org/">http://validator.w3.org/</a>.<br />
Lo strumento in questione permette di verificare una pagina html tramite url diretto oppure, qualora il file sia in locale, caricando il file html tramite apposita procedura.<br />
Una volta che il controllo del codice è terminato, il validatore <em>segnala eventuali errori </em>e avvertimenti, indicando per ognuno di essi il numero di riga e riportando la porzione di codice incriminato.<br />
Nel momento in cui il codice risulta valido viene <strong>rilasciato un logo </strong>applicabile alla pagina che certifica la validità del codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/validazione-del-codice-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Il tag HTML, HEAD e META</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/il-tag-html-head-e-meta/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/il-tag-html-head-e-meta/#comments</comments>
		<pubDate>Wed, 04 May 2011 11:57:03 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[attributi tag html]]></category>
		<category><![CDATA[tag meta]]></category>
		<category><![CDATA[tag script]]></category>
		<category><![CDATA[tag style]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1157</guid>
		<description><![CDATA[Gli attributi del tag Html. Gli attributi del tag html sono: DIR LANG VERSION (deprecato) DIR specifica in quale direzione il browser mostra il testo all&#8217;interno dell&#8217;intero documento. Valore di default ltr left-to-right. Il valore rtl è usato per il cinese, l&#8217;ebraico, &#8230; LANG specifica la lingua utilizzata in tutto il documento. Idealmente il browser [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Gli attributi del tag Html.</h3>
<p>Gli <em>attributi</em> del tag html sono:</p>
<ul>
<li><span style="color: #ff0000;">DIR</span></li>
<li><span style="color: #ff0000;">LANG</span></li>
<li><span style="color: #ff0000;">VERSION</span> (deprecato)</li>
</ul>
<p><strong>DIR</strong> specifica in quale direzione il browser mostra il testo all&#8217;interno dell&#8217;intero documento. Valore di default<strong> ltr </strong>left-to-right. Il valore <strong>rtl</strong> è usato per il cinese, l&#8217;ebraico, &#8230;</p>
<p><strong>LANG</strong> specifica la lingua utilizzata in tutto il documento. Idealmente il browser lo usa per rendere migliore il testo per l&#8217;utente. Setta l&#8217;attributo ad uno standard ISO-639.</p>
<h3 class="paragrafo">I tag SCRIPT, STYLE E LINK.</h3>
<p>All’interno dell’<strong>HEAD</strong> oltre al titolo vengono solitamente definiti ulteriori tag che il browser utilizza per l’elaborazione della pagina.</p>
<p>Questi tag contengono informazioni riguardanti la pagina html, come fogli di stile, script o riferimenti ad oggetti esterni al documento.</p>
<p><strong><span style="color: #ff0000;">SCRIPT</span></strong> è usato per immergere, all’interno del documento del codice in un linguaggio di scripting, in genere Javascript.<br />
Sintassi:</p>
<p><strong>&lt;SCRIPT  LANGUAGE=“…”  TYPE=“…” &gt;…&lt;/SCRIPT&gt;</strong></p>
<ul>
<li><strong>LANGUAGE</strong> specifica il linguaggio</li>
<li><strong>TYPE</strong> è un MIME Type (e.g., <em>text/javasript</em>)<span style="color: #ff0000;">﻿</span></li>
</ul>
<p><span style="color: #ff0000;"><strong>STYLE</strong></span> è usato per includere, all’interno del documento, un foglio di stile.<br />
Sintassi:</p>
<p><strong>&lt;STYLE  TYPE=“…” &gt; . . . &lt;/STYLE&gt;</strong></p>
<ul>
<li><strong>TYPE</strong> è un MIME Type (e.g., <em>text/css</em>)</li>
</ul>
<p><span style="color: #ff0000;"><strong>LINK</strong></span> fornisce solo delle informazioni su come il documento corrente si relaziona agli altri documenti, specificando una locazione dell’indice, un documento precedente oppure quello successivo o semplicemente per pre-caricare alcune pagine.<br />
Il tag LINK viene perlopiù utilizzato per <strong>includere dei file esterni </strong>(<em>javascript</em>, <em>css</em>, ecc..), come ad esempio file .js o file .css.<br />
La sintassi per includere un foglio di stile è:</p>
<p><strong>&lt;LINK  HREF=“stile.css”  REL=“STYLESHEET”  TYPE=“text/css”&gt;</strong></p>
<h3 class="paragrafo">Il tag META.</h3>
<p>Il tag <span style="color: #ff0000;"><strong>META</strong></span> viene definito all’interno dell’HEAD ed è utilizzato per conservare informazioni sul documento, caricare o ricaricare una pagina web e includere file di suoni.<br />
Il tag META nasce inizialmente come supporto per i motori di ricerca. Più precisamente all’interno del tag vengono definite parole chiave e sintesi del contenuto della pagina, per far si che i motori di ricerca cataloghino il documento in maniera più proficua.<br />
Molte delle informazioni del tag META sono individuate dalla coppia <strong>NAME</strong>-<strong>CONTENT</strong>:</p>
<ul>
<li><strong>NAME</strong> identifica il nome della proprietà</li>
<li><strong>CONTENT</strong> identifica il valore della proprietà</li>
</ul>
<p>La sintassi è la seguente:</p>
<p><strong>&lt;META  NAME=“…”  CONTENT=“…” &gt;</strong></p>
<p>Per l’attributo <strong>NAME</strong> le proprietà più utilizzate sono:</p>
<ul>
<li><strong>author</strong> &#8211; Autore del documento</li>
<li><strong>description</strong> &#8211; Breve descrizione del documento</li>
<li><strong>keywords</strong> &#8211; Parole che descrivono il documento usate dai motori di ricerca</li>
<li><strong>generator</strong> &#8211; Programma che ha generato il documento</li>
</ul>
<p>Un esempio completo di utilizzo del tag META potrebbe essere:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;HEAD&gt;
    &lt;TITLE&gt;Utilizzo del tag META&lt;/TITLE&gt;

    &lt;META name=&quot;author&quot; content=“Fabio Donatantonio&quot;&gt;
    &lt;META name=&quot;description“ content=“Tecnologie di Sviluppo per il Web&quot;&gt;
    &lt;META name=&quot;keywords“ content=“HTTP, HTML, CSS,  JAVASCRIPT&quot;&gt;

&lt;/HEAD&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/il-tag-html-head-e-meta/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I documenti HTML</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/i-documenti-html/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/i-documenti-html/#comments</comments>
		<pubDate>Wed, 04 May 2011 11:56:47 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[html head e body]]></category>
		<category><![CDATA[il primo html]]></category>
		<category><![CDATA[introduzione ai documenti html]]></category>
		<category><![CDATA[introduzione html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1144</guid>
		<description><![CDATA[File Html. Un file HTML è, in origine, un semplice documento di testo non formattato (di tipo ASCII). Affinché un file contenente codice HTML sia visto come tale da un browser e quindi interpretato è necessario che la sua estensione sia .html o più semplicemente .htm. Il primo file html che andremo a realizzare avrà [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">File Html.</h3>
<p>Un file HTML è, in origine, un semplice documento di testo <em>non formattato</em> (di tipo ASCII).<br />
Affinché un file contenente codice HTML sia visto come tale da un browser e quindi<em> interpretato</em> è necessario che la sua estensione sia <strong>.html</strong> o più semplicemente<strong> .htm</strong>.<br />
Il primo file html che andremo a realizzare avrà come nome ad esempio: <strong>index.html</strong>.<br />
Per realizzare una pagina html è necessario un semplice editor di testi come ad esempio il <strong>Blocco note</strong> di Windows o <strong>Notepad</strong>, o in alternativa programmi più complessi che aiutano il programmatore nella stesura del documento, come ad esempio:</p>
<div>
<ul>
<li>Microsoft Frontpage;</li>
<li>Dreamweaver di Macromedia.</li>
</ul>
</div>
<p>E’ consigliabile, soprattutto per chi è alle prime armi con HTML, non utilizzare nessun strumento che ne faciliti la realizzazione, bensì un semplice ‘Blocco note’ permette di comprendere più a fondo gli elementi fondamentali del linguaggio.</p>
<p>Una volta che si è conclusa la stesura di un file HTML, è necessario aprire il file in un browser per vederne il <em>risultato finale</em>. Si tenga presente che tutti i browser in circolazione permettono la possibilità di visionare il codice sorgente della pagina in visualizzazione, procedura che in molti casi aiuta lo sviluppatore nel correggere eventuali errori.<br />
Di conseguenza è importante sottolineare che gli eventuali errori di sintassi in HTML non vengono segnalati dai browser, bensì i browser tendono sempre a visualizzare a video il documento anche qualora questo sia mal formattato.<br />
Il passo successivo, alla verifica della correttezza del documento, consiste nel salvare il file su un <em>web server</em> in modo che questo sia accessibile dai client attraverso richieste http.</p>
<h3 class="paragrafo">I tag.</h3>
<p>I tag sono <strong>parole speciali</strong> che creano la formattazione del documento (il browser le interpreta e in questo modo sa come comportarsi). Consistono di una parentesi angolare aperta<strong> &lt;</strong>, seguita da un nome, e da una parentesi angolare chiusa<strong> &gt;</strong>:</p>
<p style="text-align: center;"><strong><span style="color: #ff0000;">&lt;NOMETAG&gt;</span><em>… CONTENUTO …</em><span style="color: #ff0000;">&lt;/NOMETAG&gt;</span></strong><span style="color: #ff0000;">.</span></p>
<p>Quindi qualunque comando di formattazione ha la seguente forma:</p>
<p><img class="aligncenter" title="I tag" src="http://www.donatantonio.net/img_html/tag.jpg" alt="I tag" /></p>
<p>Esistono tag di apertura e tag di chiusura:</p>
<p><span style="color: #ff0000;">&lt;H1&gt;</span> è un tag di <strong>apertura</strong>;<br />
<span style="color: #ff0000;">&lt;/H1&gt;</span> è un tag di <strong>chiusura</strong>.</p>
<p>Ogni qualvolta in un documento html apriamo un tag è buona norma chiudere il tag onde evitare problemi in fase di visualizzazione.<br />
I tag possono inoltre essere scritti sia in minuscolo che in maiuscolo senza comprometterne l’interpretazione, anche in questo caso è buona norma sceglierne a priori lo stile evitando di mescolare tag minuscoli con maiuscoli.</p>
<h3 class="paragrafo">Gli attributi dei tag.</h3>
<p>Gli attributi sono <strong>informazioni aggiuntive associate a un tag</strong>, aiutando quindi ad associare una particolare proprietà in fase di formattazione dell’elemento.</p>
<p>La sintassi è:</p>
<p><strong>nomeAttributo=“valore”</strong>,</p>
<p>che posto all’interno di un tag assume ad esempio tale sintassi:</p>
<p><strong>&lt;nometag <span style="color: #ff0000;">nomeAttributo=“valore”</span>&gt;<em>… Contenuto …</em>&lt;/nometag&gt;</strong> .</p>
<p>Nel momento in cui il browser interpreta il contenuto del tag, associa il valore specificato alla proprietà definita in nomeAttributo. Un esempio reale ed esaustivo può essere:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div align=&quot;center&quot;&gt;QUESTO E' UN SEMPLICE TESTO&lt;/div&gt;
</pre>
<p>Abbiamo specificato un blocco “<em>DIV</em>” che contiene all’interno un testo e un attributo che specifica il tipo di allineamento del blocco all’interno della pagina. In questo caso al centro.<br />
La maggior parte degli attributi definiscono regole di visualizzazione e stile ed è quindi buona norma che questi vengano definiti a parte e non all’interno del file html.<br />
Una regola di buona progettazione vuole che si realizzino degli opportuni <strong>fogli di stile </strong>(<em>CSS</em>) che contengano le regole di visualizzazione degli elementi e quindi gli attributi associati ai singoli tag.</p>
<h3 class="paragrafo">Struttura di un documento Html.</h3>
<p>Ogni documento HTML inizia con il tag <strong>&lt;HTML&gt;</strong> e termina con <strong>&lt;/HTML&gt;</strong>.<br />
Tutto ciò che è racchiuso tra questi due tag è interpretato dal browser come una pagina html.<br />
Il documento viene poi suddiviso in due parti:</p>
<ul>
<li>intestazione <strong>&lt;HEAD&gt; &lt;/HEAD&gt;</strong> che contiene il titolo del documento ed altre informazioni non visualizzate dal browser;</li>
<li>corpo <strong>&lt;BODY&gt; &lt;/BODY&gt;</strong> che contiene il documento vero e proprio.</li>
</ul>
<p>Lo scheletro di un documento html è quindi il seguente:</p>
<p><img class="aligncenter" title="Scheletro documento Html" src="http://www.donatantonio.net/img_html/scheletro_html.jpg" alt="Scheletro documento Html" width="500" height="206" /></p>
<p>L’intestazione (<span style="color: #ff0000;"><strong>HEAD</strong></span>) fornisce inoltre al browser informazioni importanti sul documento che si vuole visualizzare come ad esempio i file javascript esterni da includere o le regole di stile.<br />
Il <span style="color: #ff0000;"><strong>BODY</strong></span> è il ‘<em>cuore</em>’ del documento html. Il testo, le immagini, i video, le tabelle, i bottoni, i link sono tutti definiti all’interno del corpo della pagina.<br />
Ecco quindi un primo documento HTML minimale:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;HTML&gt;
    &lt;HEAD&gt;
        &lt;TITLE&gt;Un semplice documento HTML&lt;/TITLE&gt;
    &lt;/HEAD&gt;
    &lt;BODY&gt;
        Questo &amp;egrave; un semplicissimo documento HTML
    &lt;/BODY&gt;
&lt;/HTML&gt;
</pre>
<p>Abbiamo definito un titolo alla pagina (nel tag <strong>title</strong>) e all’interno del body una stringa di caratteri. Una volta salvato il file con estensione .html possiamo aprirlo all’interno del browser.</p>
<p>Ecco il risultato:</p>
<p><img class="aligncenter" title="Primo esempio - HTML minimale" src="http://www.donatantonio.net/img_html/primo_esempio.jpg" alt="Primo esempio - HTML minimale" width="500" height="238" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/i-documenti-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Html: concetti preliminari</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-concetti-preliminari/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-concetti-preliminari/#comments</comments>
		<pubDate>Wed, 04 May 2011 11:56:19 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[introduzione agli ipertesti]]></category>
		<category><![CDATA[introduzione html]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1136</guid>
		<description><![CDATA[HTML HTML è l’acronimo di HyperText Markup Language e definisce un linguaggio di formattazione del testo per pubblicare documenti sul web. Il linguaggio HTML non è quindi da definirsi come un vero e proprio linguaggio di programmazione, bensì come “raccoglitore” di parole chiave con le quali identificare le singole parti che compongono una pagina web. [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">HTML</h3>
<p><strong>HTML</strong> è l’acronimo di <span style="color: #ff0000;"><strong>HyperText Markup Language</strong></span> e definisce un linguaggio di formattazione del testo per pubblicare documenti sul web.<br />
Il linguaggio HTML non è quindi da definirsi come un vero e proprio linguaggio di programmazione, bensì come “<em>raccoglitore</em>” di parole chiave con le quali identificare le singole parti che compongono una pagina web.<br />
D’altra parte, è nato essenzialmente con l’obiettivo di consentire la definizione di documenti ipertestuali distribuiti su una rete di computer.</p>
<h3 class="paragrafo">Caratterisctiche dell&#8217;Html.</h3>
<p>Con l’HTML è possibile:</p>
<ul>
<li>definire la struttura logica di un documento;</li>
<li>definire la formattazione tipografica del testo fornendo indicazioni utili per il rendering;</li>
<li>definire dei collegamenti ipertestuali tra i vari documenti;</li>
<li>definire l’interfaccia utente di un’applicazione WEB.</li>
</ul>
<h3 class="paragrafo">Interpretazione di un documento Html.</h3>
<p>Il <span style="color: #ff0000;"><strong>browser</strong></span> è il componente software in grado di leggere un documento scritto in linguaggio HTML interpretandone i comandi e visualizzandolo a video.<br />
Basti considerare le operazioni che solitamente eseguiamo quando siamo connessi ad internet e visualizziamo un sito web. Se ad esempio dovessimo digitare l’indirizzo http://www.google.it/ all’interno del browser, quello che visualizzeremo a video sarà il risultato dell’interpretazione di un documento pervenuto al browser sottoforma di codice HTML.<br />
Nonostante Internet Explorer sia il browser più utilizzato, seguito poi da Mozilla, è importante sapere dell’esistenza di decine di browser e acquisire di conseguenza una mentalità multi-browser. Difatti nonostante un efficace standardizzazione del codice HTML, sovente l’interpretazione da parte di un browser del documento può<em> risultare differente</em> soprattutto qualora entrino in gioco effetti di stile e formattazione non nativa del linguaggio. Tale problematica verrà trattata quando si vedranno i fogli di stile CSS.<br />
E’ quindi necessario sempre “<em>provare</em>” un codice HTML in più browser o almeno in quelli di maggiore utilizzo.</p>
<h3 class="paragrafo">Origine ed evoluzione dell&#8217;Html.</h3>
<p><img class="alignleft" src="http://www.donatantonio.net/img_html/Tim_Berners.jpg" alt="Tim Berners-Lee" align="left" />L&#8217;Html è stato sviluppato alla fine degli anni ottanta da <span style="color: #ff0000;"><strong>Tim Berners-Lee</strong></span> al <strong>CERN</strong> di Ginevra assieme al noto protocollo HTTP che supporta invece il trasferimento di documenti in tale formato.<br />
Le specifiche del linguaggio HTML sono state pubblicate dal <strong>World Wide Web Consortium</strong> (W3C). Questo organismo internazionale, fondato nell&#8217;ottobre <em>1994</em>, è composto da università e aziende private (tra cui IBM, Microsoft, Netscape Communications Corporation, Novell Softquad, Spyglass e Sun Microsystems) e coordinato da LCS (Laboratory for Computer Science). Esso ha lo scopo di guidare lo sviluppo del Web e di definirne gli standard.<br />
HTML è derivato da <strong>SGML</strong> (Standard Generalized Mark Up Language), uno standard ISO (International Standards Organization) per descrivere linguaggi di formattazione di testi.<br />
Le principali evoluzioni dell’HTML sono state:</p>
<ul>
<li>HTML 4.0 (standardizzato nel 1997), che ha introdotto molte caratteristiche rispetto alla precedente versione, ma ha anche deprecato molte delle caratteristiche delle versioni precedenti;</li>
<li>HTML 4.01 (standardizzato nel 1998), una “ripulitura” della versione 4.0;</li>
<li>XHTML 1.0 è HTML 4.01 modificato in modo da soddisfare la sintassi XML (Extensible Marked Language, ‘erede’ dell&#8217;HTML; mentre quest&#8217;ultimo descrive come il testo deve essere presentato sulla pagina web, l&#8217;XML riguarda direttamente la classificazione e la strutturazione del contenuto).</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/html-concetti-preliminari/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Regole di progettazione ipertestuale</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/regole-di-progettazione-ipertestuale/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/regole-di-progettazione-ipertestuale/#comments</comments>
		<pubDate>Tue, 03 May 2011 14:56:59 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[ipertesto: disorientamento]]></category>
		<category><![CDATA[spazio grafico-visivo]]></category>
		<category><![CDATA[spazio interattivo]]></category>
		<category><![CDATA[sviluppo ipertesto]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1126</guid>
		<description><![CDATA[Lo spazio grafico-visivo dell&#8217;ipertesto. L’architettura logica dell’ipertesto, nelle diverse possibili forme descritte nell&#8217;articolo precedente, trova un suo luogo di rappresentazione nella pagina elettronica, uno spazio visivo che pur mantenendo la tendenza all’integrazione di regole e forme della pagina del testo cartaceo, ne introduce di nuove legate alle caratteristiche e alle potenzialità specifiche del nuovo media. [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Lo spazio grafico-visivo dell&#8217;ipertesto.</h3>
<p>L’architettura logica dell’ipertesto, nelle diverse possibili forme descritte <a href='http://www.donatantonio.net/blog/?p=1118'>nell&#8217;articolo precedente</a>, trova un suo luogo di rappresentazione nella <strong>pagina elettronica</strong>, uno spazio visivo che pur mantenendo la tendenza all’integrazione di regole e forme della pagina del testo cartaceo, ne introduce di nuove legate alle caratteristiche e alle potenzialità specifiche del nuovo media.<br />
E’ importante definire gli elementi che compongono la pagina grafica di un ipertesto e gli effetti prodotti dal loro uso.<br />
Lo <strong>spazio di presentazione </strong>è rappresentato dalla pagina così come viene visualizzata sul monitor; su questo sfondo si dispongono poi i diversi elementi informativi che la compongono. Già per lo stesso sfondo assumono rilevanza semantica alcune scelte relative al colore utilizzato o sulla simulazione di superfici reali (texture).<br />
Altri elementi grafici che compongono una pagina possono essere <strong>linee</strong>, <strong>forme</strong> e <strong>oggetti iconici</strong>; inoltre a sua volta la pagina può essere suddivisa in più frame ognuno dei quali contiene a sua volta oggetti grafici.<br />
I criteri che guidano queste scelte progettuali riguardano in particolare il peso visivo che assumono i diversi elementi in gioco, le linee di forza visiva che essi generano, i rapporti di equilibrio o di contrasto tra sfondo e figure che si possono trasmettere e più in generale i nuovi significati che si aggiungono con tecniche evocative.<br />
Nell’analisi di dimensione visiva e grafica dell’ipertesto rimane comunque centrale il ruolo giocato dal testo alfabetico attraverso lo spazio che occupa nell’impaginazione.</p>
<h3 class="paragrafo">Lo spazio interattivo dell&#8217;ipertesto.</h3>
<p>Lo spazio interattivo rappresenta la <strong>dimensione funzionale dell&#8217;ambiente ipertestuale </strong>grazie alla quale il lettore sceglie le diverse possibili modalità di uso dell&#8217;ambiente, in definitiva costruisce strategie di lettura, le più vicine alle sue esigenze immediate, al suo stile di consultazione e di apprendimento.<br />
La conoscenza delle forme in cui il dialogo comunicativo si realizza in ambiente ipertestuale consente agli autori e ai progettisti di predisporre i dispositivi di iterazione più idonei che integrano e nello stesso tempo si differenziano da quelli al quale il lettore è abituato nell’uso di altri media.<br />
In questa categoria di strutture si possono riconoscere <strong>strumenti di navigazione, di orientamento e di ricerca</strong>. Inoltre i browser implementano funzioni standard come cronologia, backtracking e forward che espandono lo spazio interattivo degli ipertesti e forniscono funzioni di aiuto alla navigazione.</p>
<h3 class="paragrafo">I rischi dell&#8217;ipertesto: il disorientamento.</h3>
<p>La possibilità di lettura multilineare e plurima offerta dagli ipertesti (in particolare dagli ipertesti con struttura a rete) comporta da parte del lettore il rischio di perdersi.<br />
Con il nome di <strong>disorientamento spaziale </strong>si intende appunto il fenomeno di perdita del controllo del territorio ipertestuale che può interessare il lettore di fronte alla fitta rete di nodi e legami che compone l’ipertesto.<br />
Nella fase di progettazione di un ipertesto va tenuto in grande considerazione questo aspetto e vanno realizzati i cosiddetti punti di riferimento per favorire un “ripristino” della linea di navigazione scelta dal lettore.<br />
Una serie di <strong>strumenti</strong> (interni all’ipertesto o piuttosto integrati nel browser o più in generale nel visualizzatore) cercano di porre rimedio all’effetto di disorientamento mediante:</p>
<p>- mappe del sito, anche con funzione di indice;<br />
- tasti di navigazione;<br />
- l’uso della grafica per distinguere links interni ed esterni;<br />
- la visualizzazione della lista delle pagine visitate;<br />
- visite guidate all’ipertesto;<br />
- motori di ricerca per parole chiave;<br />
- una funzione segnalibro.</p>
<p>Sarà compito del progettista dell’ipertesto fornire questi strumenti in maniera opportuna.<br />
Di conseguenza la maggior parte dei siti che si rispettino mettono a disposizione degli utenti menu, link rapidi, mappe del sito e motore di ricerca interno.</p>
<h3 class="paragrafo">Realizzazione di un ipertesto.</h3>
<p>Nello sviluppo di un ipertesto è necessario porre particolare attenzione alla fase di <strong>progettazione</strong>.<br />
Lo sviluppatore deve pensare ad una struttura che sia allo stesso tempo aperta e flessibile ma non caotica. Ciascun nodo deve uniformarsi agli altri dal punto di vista visivo e le informazioni devo essere strutturate in blocchi abbastanza brevi e di facile lettura.<br />
E’ controproducente infatti realizzare pagine molto lunghe, con tante informazioni e contenuti; il lettore dinnanzi a queste pagine sarà portato ad abbandonare la lettura non riuscendo a districarsi tra le diverse informazioni di suo interesse.<br />
Inoltre i nodi di informazione devono essere uniti da una loro tematica, evitando quindi “salti” da un argomento all’altro senza che tra questi ci sia un collegamento logico.<br />
Le connessioni tra i nodi devono di conseguenza seguire dei <strong>fili logici </strong>e al contempo stimolare il lettore ad approfondire particolari argomenti.<br />
A tal proposito è giusto sottolineare che gli oggetti multimediali vanno utilizzati <strong>senza abusarne </strong>o comunque in modo funzionale ed equilibrato onde evitare fenomeni di disorientamento.<br />
In fine è buona abitudine in fase di progettazione predisporre strumenti che facilitano la navigazione dell’ipertesto.</p>
<p>Quindi in fase di <strong>progettazione</strong> bisogna:<br />
- scegliere l’argomento da trattare;<br />
- articolare le tematiche dell’argomento scelto;<br />
- definire una mappa di navigazione.</p>
<p>Nella fase di <strong>realizzazione</strong> bisogna:<br />
- scrivere il contenuto dei nodi di testo;<br />
- definire i legami (link) tra i vari nodi.</p>
<p>Infine nella fase di <strong>test</strong> bisogna:<br />
- controllare che i legami siano rispondenti ai percorsi logici;<br />
- controllare che non ci sia possibilità di disorientamento;<br />
- verificare la corretta impaginazione delle informazioni.</p>
<h3 class="paragrafo">Lo sviluppo di una argomentazione.</h3>
<p>L’operazione della <strong>tematizzazione</strong> e della sua organizzazione in sottoinsiemi di interesse è di fondamentale importanza e richiede una selezione ben definita e coerente con l’argomento generale che verrà presentato nell’ipertesto.<br />
﻿Si può immaginare una corrispondenza tra gli argomenti scelti e le unità di contenuto da preparare. Ad ogni tema corrisponderà un <strong>nodo informativo </strong>o un gruppo di nodi che svilupperanno le <strong>sotto-tematizzazioni</strong>.<br />
In questo modo si eviterà la scelta di temi troppo ampi, che difficilmente potrebbero essere sviluppati in modo efficace evitando il vincolo della pagina sullo schermo.<br />
Un corretto lavoro di articolazione tematica può restituire ai progettisti una prima visione d’insieme già abbastanza chiara e definita delle aree di contenuto da sviluppare e ne prefigura una prima possibile segmentazione negli spazi rappresentativi dei nodi e delle pagine del nostro ipertesto.<br />
Tale visione grafica dell’architettura dei contenuti in via di costruzione è anche una prima visione d’insieme dei percorsi che l’autore intende offrire al lettore. Costruendo in questo modo la mappa dell’ipertesto si adotta una strategia cognitiva di organizzazione dei contenuti che si chiama <strong>top-down</strong> (<em>dall’alto verso il basso</em>), che si muove dalla struttura generale ai singoli elementi che la compongono.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/regole-di-progettazione-ipertestuale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tipologie di Ipertesto</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/tipologie-di-ipertesto/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/tipologie-di-ipertesto/#comments</comments>
		<pubDate>Tue, 03 May 2011 14:56:26 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[ipertesto assiale]]></category>
		<category><![CDATA[ipertesto gerarchico]]></category>
		<category><![CDATA[ipertesto referenziale]]></category>
		<category><![CDATA[tipologie ipertesto]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1118</guid>
		<description><![CDATA[Spazio logico dell&#8217;ipertesto. Gli ipertesti si differenziano tra loro innanzitutto per la tematica di cui trattano. I primi ipertesti, solitamente distribuiti su supporti CD, erano legati ad opere cartacee come ad esempio libri didattici o manuali. Soprattutto nei primi anni ‘90 era consuetudine trovare in commercio libri che allegavano al loro interno un CD-ROM con [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Spazio logico dell&#8217;ipertesto.</h3>
<p>Gli ipertesti si differenziano tra loro innanzitutto per la <em>tematica di cui trattano</em>.<br />
I primi ipertesti, solitamente distribuiti su supporti CD, erano legati ad opere cartacee come ad esempio libri didattici o manuali. Soprattutto nei primi anni ‘90 era consuetudine trovare in commercio libri che allegavano al loro interno un CD-ROM con un sunto o una schematizzazione degli argomenti trattati nel libro.<br />
Gli ipertesti erano realizzati con <em>appositi programmi </em>e il risultato finale era consultabile attraverso un visualizzatore creato ad hoc da chi distribuiva l’ipertesto.</p>
<p>La seconda differenziazione è nella diversa struttura che un ipertesto può assumere, in relazione alla sequenza di informazioni trattate ciascun autore decide a priori i collegamenti tra i vari argomenti e il loro grado di interconnessione.<br />
Lo <strong>spazio logico </strong>dell’ipertesto individua quindi la rete di connessioni che legano tra loro i diversi nodi di contenuto. Questi legami identificano la struttura logica di organizzazione delle informazioni.<br />
Attualmente la configurazione di massima di un ipertesto è la cosiddetta <strong>struttura a rete </strong>(o <em>referenziale</em>); in genere le distinguiamo in: <strong>assiale</strong>, <strong>gerarchica</strong> e, appunto, referenziale.</p>
<h3 class="paragrafo">Ipertesti a struttura assiale.</h3>
<p>In un ipertesto a <strong>struttura assiale </strong>i vari nodi si differenziano in nodi <strong>primari</strong> e nodi <strong>secondari</strong>. La sequenza di informazioni risulta essere abbastanza lineare, difatti i nodi primari sono interconnessi tra loro in maniera sequenziale ma ciascun nodo primario può indirizzare ad uno o più nodi secondari che solitamente hanno lo scopo di approfondire l’argomento trattato dal nodo primario.</p>
<p>Lo schema è il seguente:</p>
<div><img class="aligncenter" src="http://www.donatantonio.net/img_html/assiale.jpg" alt="Ipertesto a struttura assiale" /></div>
<h3 class="paragrafo">Ipertesti a struttura gerarchica.</h3>
<p>In un ipertesto a <strong>struttura gerarchica </strong>i vari nodi sono posti su <strong>livelli diversi</strong>.<br />
Ciascun nodo possiede un nodo ‘<em>figlio</em>’, in una sorta di struttura ad albero che ha inizio da un nodo principale (<em>root</em>) che a sua volta definisce uno o più nodi figlio che hanno lo scopo di continuare, tramite un opportuno collegamento, l’argomento trattato dal nodo ‘<em>padre</em>’.<br />
La struttura gerarchica è assimilabile alla struttura di molti siti internet odierni che forniscono tramite una pagina iniziale denominata <strong>home</strong> (quindi root), una serie di collegamenti a pagine secondarie (o sottosezioni) che trattano tematiche diverse tra loro.<br />
Ciascuna di queste sottosezioni può indirizzare a pagine specifiche di livello più basso.<br />
La navigazione all’interno della struttura gerarchica è dall’alto verso il basso con la presenza di un nodo principale che funge da crocevia per la trattazione di argomenti diversi.</p>
<p>Lo schema è il seguente:</p>
<div><img class="aligncenter" src="http://www.donatantonio.net/img_html/gerarchica.jpg" alt="Ipertesto a struttura gerarchica" /></div>
<h3 class="paragrafo">Ipertesti a struttura di rete o referenziale.</h3>
<p>In un ipertesto a <strong>struttura di rete </strong>i nodi sono posti allo <strong>stesso livello </strong>e interconnessi tra loro in maniera non sequenziale.<br />
Ciascun nodo può avere un collegamento con uno o più nodi e possono esistere nodi che fungono da crocevia per il raggiungimento di un gruppo ben definito di nodi.<br />
In questa struttura il <em>grado di libertà </em>è molto alto ed è compito del progettista dell’ipertesto realizzare i collegamenti tra le varie informazioni in maniera tale che ci si possa orientare senza per questo perdere l’orientamento.<br />
Una struttura di rete è infatti indicata qualora ci siano una grande mole di informazioni da schematizzare e l’ordine di lettura è pienamente libero da sequenze predefinite.<br />
Il lettore può <strong>partire da un nodo e raggiungere un altro nodo senza passare per nodi intermedi </strong>oppure un testo può indirizzare a più testi di approfondimento che a loro volta linkano a testi di natura diversa.<br />
Molti siti internet moderni utilizzano una struttura di rete per distribuire le informazioni, basti pensare al famoso portale <strong>Wikipedia</strong> che permette di raggiungere un argomento passando per infiniti argomenti legati tramite parole chiavi o riferimenti.</p>
<p>Lo schema della struttura di rete è il seguente:</p>
<div><img class="aligncenter" src="http://www.donatantonio.net/img_html/referenziale.jpg" alt="Ipertesto a struttura referenziale" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/tipologie-di-ipertesto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ipertesti, ipermedia e multimedialità</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/ipertesti-ipermedia-e-multimedialita/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/ipertesti-ipermedia-e-multimedialita/#comments</comments>
		<pubDate>Tue, 03 May 2011 14:25:03 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Html/Css]]></category>
		<category><![CDATA[introduzione agli ipertesti]]></category>
		<category><![CDATA[ipermedia]]></category>
		<category><![CDATA[ipertesto]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1109</guid>
		<description><![CDATA[Le origini Il concetto di rete e condivisione esiste già dalla fine degli anni ‘60, ma solo nei primi anni ‘90 un gruppo di ricercatori del CERN di Ginevra, capitanati da Tim Berners-Lee, Robert Cailliau e Carl Barker cercarono di realizzare il progetto di rendere pubblicamente accessibili documenti di testo interconnessi tra loro e con [...]]]></description>
			<content:encoded><![CDATA[<h3 class="paragrafo">Le origini</h3>
<p>Il concetto di rete e condivisione esiste già dalla fine degli anni <em>‘60</em>, ma solo nei primi anni <em>‘90 </em>un gruppo di ricercatori del <strong>CERN di Ginevra</strong>, capitanati da <strong>Tim Berners-Lee</strong>, <strong>Robert Cailliau </strong>e <strong>Carl Barker </strong>cercarono di realizzare il progetto di rendere pubblicamente accessibili documenti di testo interconnessi tra loro e con file di suoni e immagini.<br />
Nonostante fossero fisici gli inventori del web ebbero un’idea di natura profondamente “<em>umanistica</em>”: scrivere, scambiare, archiviare e organizzare informazioni.<br />
Un <strong>ipertesto</strong> quindi è un tipo di strutturazione delle informazioni in forma non necessariamente unilineare, tipica del mondo digitale, in cui i singoli blocchi di informazione (“<em>nodi</em>”) sono collegati tra di loro da legami (“<em>links</em>”).</p>
<div><img class="aligncenter" src="http://www.donatantonio.net/img_html/ipertesto.jpg" alt="Ipertesto" /></div>
<p>La caratteristica principale di un ipertesto è che la lettura può svolgersi in maniera non lineare: qualsiasi documento della rete può essere &#8220;il successivo&#8221;, in base alla scelta del lettore di quale link (o parola chiave) usare.<br />
Nonostante ciò le somiglianze tra un ipertesto e un testo a stampa di carattere erudito sono più numerose di quanto si pensi.<br />
Nei testi a stampa i sommari, gli indici analitici, i rimandi interni a note di approfondimento e ad apparati iconografici, come anche i rimandi esterni ad altri testi costituiscono altrettanti legami ipertestuali.<br />
L’ipertesto deve il suo successo grazie al fatto che <em>riflette meglio il nostro modo di pensare </em>e il modo in cui funziona il nostro cervello. Di conseguenza non è da vedersi come una tecnologia, ma semplicemente un modo efficiente e logico di organizzare l’informazione.</p>
<h3 class="paragrafo">Le strutture compositive dell&#8217;ipertesto.</h3>
<p>Come detto le strutture che compongono un ipertesto sono:<br />
<strong><em>il nodo;</em></strong><br />
<strong><em>il legame;</em></strong><br />
<strong><em>le mappe di navigazione</em></strong>.</p>
<p>Il <strong>nodo ipertestuale </strong>è uno spazio di informazione che si identifica con lo schermo del computer e può contenere dati e informazioni di varia natura. La dimensione del nodo dipende esclusivamente dalla volontà dell&#8217;autore e comporta scelte di segmentazione o<br />
modularizzazione dell&#8217;informazione che si sta organizzando.<br />
Creare informazione modularizzata significa determinare i confini al flusso del discorso, ritagliando il testo in insiemi e sottoinsiemi tematici.<br />
Il <strong>link</strong> (o <strong>legame</strong>) è una struttura di collegamento che unisce con estrema facilità e rapidità nodi diversi dell’ipertesto, permettendo in questo modo al lettore la possibilità di esaminare i contenuti secondo un modello di lettura esplorativa.<br />
La <strong>mappa di navigazione </strong>è un nodo speciale che contiene la rappresentazione grafica di tutti i nodi dell’ipertesto.<br />
Il lettore può utilizzare questo strumento per orientarsi, evitando così fenomeni di <em>disorientamento</em> e allo stesso tempo per muoversi più agevolmente all’interno della rete di nodi e legami. La mappa in definitiva può identificarsi come una sorte di indice o menu che raccoglie i link ai vari nodi.</p>
<h3 class="paragrafo">Non sequenzialità e multilinearità dell&#8217;ipertesto.</h3>
<p>Il carattere non sequenziale dell’ipertesto non esclude una sua particolare forma di linearità.<br />
Negli ambienti ipertestuali si procede per scelta del lettore che seleziona, secondo i suoi criteri di curiosità e di conoscenza, percorsi di lettura associativa, in taluni casi neanche prevedibili dallo stesso autore che li ha predisposti.<br />
Il risultato di questo attraversamento rimane comunque una linea sulla quale si collocano in successione i nodi di testo, così come vengono ordinati dall’azione del singolo lettore. Per questo motivo si può parlare di <strong>multi-linearità </strong>dell’ipertesto.</p>
<h3 class="paragrafo">Dall&#8217;ipertesto all&#8217;ipermedia.</h3>
<p>In origine l’ipertesto era composto esclusivamente da una serie di testi e conseguenti link di collegamento.<br />
Ciascun testo era organizzato in maniera semplice, solitamente un titolo e quindi il testo nel quale comparivano di tanto in tanto riferimenti ad altri testi raggiungibili attraverso l’utilizzo delle parole evidenziate.<br />
Lo sviluppo sempre maggiore della tecnologia informatica e la conseguente progettazione e realizzazione di strumenti per la visualizzazione dei contenuti ha permesso l’evoluzione degli ipertesti verso la multimedialità.<br />
Grazie al moderno PC si è automatizzato il passaggio da un documento all’altro e il proliferare di interfacce grafiche ha dato vita a numerosi ipertesti con un livello di interattività sempre maggiore.<br />
Basti pensare che oggi qualunque ipertesto è multimediale perché oltre che a contenere e organizzare informazioni testuali, ingloba al suo interno immagini, suoni, video e animazioni.<br />
Un’<strong>ipermedia</strong> non è altro che l’evoluzione naturale degli ipertesti verso il mondo web che attualmente ci circonda, composto non solo da testo ma da numerosi oggetti multimediali.</p>
<div><img class="aligncenter" src="http://www.donatantonio.net/img_html/ipermedia.jpg" alt="Ipermedia" /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/htmlcss/ipertesti-ipermedia-e-multimedialita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Filtro per Chat in PHP</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/filtro-per-chat-in-php/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/filtro-per-chat-in-php/#comments</comments>
		<pubDate>Mon, 02 May 2011 19:12:38 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[filtrare stringa]]></category>
		<category><![CDATA[filtro per chat]]></category>
		<category><![CDATA[nascondere parole in stringa]]></category>
		<category><![CDATA[pulire stringa php]]></category>
		<category><![CDATA[str_ireplace]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1092</guid>
		<description><![CDATA[Quando si realizza una chat in PHP o altro linguaggio è necessario prevedere una funzione che effettui la pulizia dei messaggi inoltrati dagli utenti. Tale codice dovrà intercettare le parole ritenute non legali e oscurarle in fase di visualizzazione. A tal proposito realizzeremo una funzione in PHP che chiameremo semplicemente filtro; la quale ammetterà come [...]]]></description>
			<content:encoded><![CDATA[<p>Quando si realizza una chat in PHP o altro linguaggio è necessario prevedere una funzione che effettui la <em>pulizia</em> dei messaggi inoltrati dagli utenti.<br />
Tale codice dovrà intercettare le parole ritenute non legali e oscurarle in fase di visualizzazione.</p>
<p>A tal proposito realizzeremo una funzione in PHP che chiameremo semplicemente <strong>filtro</strong>; la quale ammetterà come parametro d&#8217;input una stringa di testo, contenente appunto il messaggio da filtrare.<br />
La nostra funzione sostituirà le parole incriminate con degli asterischi, lasciando però inalterali il primo e l&#8217;ultimo carattere che la compongono.<br />
Se ad esempio volessimo filtrare dal messaggio tutte le ricorrenze della parola <strong style="color: red;">gratis</strong>, vedremmo al suo posto la parola: <strong style="color: red;">g****s</strong>.<br />
Vediamo quindi il codice della funzione filtro:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
  $parole = &quot;gratis,sesso,acquista,visitami&quot;;

  function filtro($testo){
      global $parole;
      $app = split(',',$parole);
      for($i=0; $i&lt;count($app); $i++){
          if(stripos($testo,$app[$i])!==false){
              $sostituta = substr($app[$i],0,1);
              for($j=1; $j&lt;strlen($app[$i])-1; $j++){
                   $sostituta=$sostituta.'*';
              }
              $sostituta = $sostituta.substr($app[$i],-1);
              $testo = str_ireplace($app[$i],$sostituta,$testo);
          }
      }
      return $testo;
  }
?&gt;
</pre>
<p>La funzione utilizza essenzialmente cinque funzioni PHP per la manipolazione delle stringhe:</p>
<p>- split<br />
- stripos<br />
- strlen<br />
- substr<br />
- str_ireplace</p>
<p>Da notare innanzitutto la presenza di una variabile <strong>parole</strong> definita a livello globale, che conterrà appunto la sequenza di parole, separate da virgola(,), da filtrare.<br />
<span style="text-decoration: underline;">Per personalizzare il codice è sufficiente aggiungere le stringhe da filtrare nella variabile parole.</span><br />
Tornando alla funzione, vediamo per grandi linee le operazioni che essa effettua sul testo in input:</p>
<ol>
<li> Preleva tutte le parole da filtrare (split)</li>
<li> Cerca ciascuna parola nel messaggio di input (stripos)</li>
<li> Realizza una parola sostitutiva calcolata sulla lunghezza dell&#8217;originale (strlen)</li>
<li> La parola sostitutiva mantiene il carattere iniziale e finale dell&#8217;originale (substr)</li>
<li> La parola incriminata viene sostituita (str_ireplace)</li>
</ol>
<p>Infine il messaggio viene restituito <em>pulito</em>.<br />
La funzione, una volta salvata in un file separato(ad esempio filtro.php) verrà così invocata:</p>
<pre class="brush: php; title: ; notranslate">
// Richiamo alla funzione
require('filtro.php');

// Chiamata alla funzione su testo $messaggio
$stringa_pulita = filtro($messaggio);
</pre>
<p>La funzione può tornare molto utile anche qualora si desiderasse eliminare dal messaggio link o url poco graditi. Basterà, come già detto sopra, aggiungere le stringhe da controllare alla variabile globale <strong>$parole</strong>, prestando attenzione a separare ciascuna da una virgola.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/filtro_per_chat/">qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href="http://www.donatantonio.net/script/filtro_per_chat.rar">qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/filtro-per-chat-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 29 &#8211; Simulazione banca (ArrayList)</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-29-simulazione-banca-arraylist/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-29-simulazione-banca-arraylist/#comments</comments>
		<pubDate>Wed, 10 Nov 2010 09:49:31 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[arraylist java]]></category>
		<category><![CDATA[conto bancario java]]></category>
		<category><![CDATA[simulazione banca]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=1004</guid>
		<description><![CDATA[Implementare e testare una classe Bank che contenga un ArrayList di oggetti di tipo BankAccount e abbia i seguenti metodi: addAccount(initialBalance, customerName) deposit(accountNumber, amount) withdraw(accountNumber, amount) getBalance(accountNumber) transfer(fromAccNumber, toAccNumber, amount) La classe BankAccount fornirà i classici metodi per il deposito e il prelievo nonchè i metodi per la restituzione delle informazioni in esso contenute. Realizzare [...]]]></description>
			<content:encoded><![CDATA[<p>Implementare e testare una classe Bank che contenga un ArrayList di oggetti di tipo BankAccount e abbia i seguenti metodi:</p>
<ul>
<li>addAccount(initialBalance, customerName)</li>
<li>deposit(accountNumber, amount)</li>
<li>withdraw(accountNumber, amount)</li>
<li>getBalance(accountNumber)</li>
<li>transfer(fromAccNumber, toAccNumber, amount)</li>
</ul>
<p>La classe BankAccount fornirà i classici metodi per il deposito e il prelievo nonchè i metodi per la restituzione delle informazioni in esso contenute.<br />
Realizzare inoltre una classe di test.</p>
<p>La classe BankAccount.java:</p>
<pre class="brush: java; title: ; notranslate">
public class BankAccount
{

  // Metodo Costruttore inizializzato con nome proprietario, saldo e numeroAcc
  public BankAccount(double a, String n, int num)
  {
      acconto = a;
      nome = n;
      numAcc = num;
  }

  // Metodo per il deposito di denaro nel conto
  public void deposit(double s)
  {
      double temp = acconto;
      acconto = temp + s;
  }

  // Metodo per il prelievo di denaro dal conto
  public void withdraw(double s)
  {
      double temp = acconto;
      acconto = temp - s;
  }

  // Metodo che restituisce il valore del conto
  public double getBalance()
  {
      return acconto;
  }

  // Metodo che restituisce il numero di conto
  public int getNumber()
  {
      return numAcc;
  }

  // Metodo che restituisce il numero di conto
  public int getName()
  {
      return nome;
  }

  private int numAcc;
  private double acconto;
  private String nome;
}
</pre>
<p>La classe Bank che gestisce la collezione di BankAccount:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.ArrayList;
public class Bank
{
ArrayList&lt;BankAccount&gt; banca;

  // Metodo Costruttore
  public Bank()
  {
      this.banca = new ArrayList&lt;BankAccount&gt;();
  }

  // Metodo che aggiunge un nuovo conto nella banca
  public void addAccount(double b, String nome)
  {
      int i = banca.size() + 1;
      BankAccount  bk = new BankAccount(b,nome,i);
      banca.add(bk);
  }

  // Metodo che permette di depositare denaro in un conto daro il numeroConto
  public void deposit(int n , double s)
  {
      for(int j=0; j&lt;banca.size(); j++)
      {
          BankAccount temp = (BankAccount) banca.get(j);
          int number = temp.getNumber();
          if(number == n)
          {
              temp.deposit(s);
          }
      }
  }

  // Metodo che permette di sottrarre una somma a un conto dato un numeroConto
  public void withdraw(int n,double s)
  {
       for(int j=0; j&lt;banca.size(); j++)
       {
          BankAccount temp = (BankAccount) banca.get(j);
          int number = temp.getNumber();
          if(number == n)
          {
              temp.withdraw(s);
          }
       }
  }

  //Metodo che restituisce il valore del conto dato un numeroConto
  public String getBalance(int n)
  {
      for(int j=0; j&lt;banca.size(); j++)
      {
           BankAccount temp = (BankAccount) banca.get(j);
           if(temp.getNumber()==n){
                return &quot;Conto codice &quot;+temp.getNumber()+&quot; con importo &quot;+temp.getBalance();
           }
      }
      return &quot;Conto non trovato!&quot;;
  }

  // Metodo che trasferisce una somma di denaro da un conto ad un altro
  public boolean transfer(int n1, int n2, double d)
  {
	  BankAccount uscita = null;
	  BankAccount entrata = null;
	  for(int j=0; j&lt;banca.size(); j++)
	  {
		  BankAccount temp = (BankAccount) banca.get(j);
		  if(temp.getNumber()==n1){
			  uscita = temp;
		  }
		  if(temp.getNumber()==n2){
			  entrata = temp;
		  }
	  }
	  if(uscita!=null &amp;&amp; entrata!=null){
		  uscita.withdraw(d);
		  entrata.deposit(d);
		  return true;
	  }
	  return false;
  }
}
</pre>
<p>La classe di test:</p>
<pre class="brush: java; title: ; notranslate">
public class TestaBanca
{
  public static void main(String[] args)
  {
    // Creo un nuovo oggetto Bank
    Bank prova = new Bank();

    // Aggiungo 4 nuovi conti
    prova.addAccount(2000,&quot;Marco Rossi&quot;);
    prova.addAccount(1000,&quot;Enzo Bianchi&quot;);
    prova.addAccount(500,&quot;Lucia Neri&quot;);
    prova.addAccount(700,&quot;Silvia Rossini&quot;);

    // Effettuo alcune operazioni sui conti
    prova.deposit(1,200);
    prova.withdraw(2,1000);

    // Visualizzo a video lo stato dei conti presenti nella banca
    System.out.println(prova.getBalance(1));
    System.out.println(prova.getBalance(2));
    System.out.println(prova.getBalance(3));
    System.out.println(prova.getBalance(4));

    // Trasferisco una somma di denaro da un conto all'altro
    double somma = 100;
    if(prova.transfer(1, 2, somma)==true){
    	System.out.println(&quot;Trasferimento denaro avvenuto correttamente!&quot;);
    }else{
    	System.out.println(&quot;Errore nel trasferimento di denaro!&quot;);
    }

    // Ristampo lo stato dei due conti soggetti a trasferimento denaro
    System.out.println(prova.getBalance(1));
    System.out.println(prova.getBalance(2));
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-29-simulazione-banca-arraylist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestione della cache con PHP</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/gestione-della-cache-con-php/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/gestione-della-cache-con-php/#comments</comments>
		<pubDate>Fri, 05 Nov 2010 14:13:09 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cache in php]]></category>
		<category><![CDATA[classe per cache php]]></category>
		<category><![CDATA[gestire la cache]]></category>
		<category><![CDATA[PhpCache]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=992</guid>
		<description><![CDATA[In questo articolo realizzeremo una classe PHP per gestire la cache delle nostre pagine web. L&#8217;obiettivo sarà quello di mettere in cache una pagina intera o parte di essa per essere poi riutilizzata ad una successiva richiesta che rientri in un tempo limite da noi preventivamente scelto. Questa tecnica, sapientemente utilizzata, evita l&#8217;esecuzione di script [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo realizzeremo una classe PHP per gestire la cache delle nostre pagine web.<br />
L&#8217;obiettivo sarà quello di mettere in cache una pagina intera o parte di essa per essere poi riutilizzata ad una successiva richiesta che rientri in un tempo limite da noi preventivamente scelto. Questa tecnica, sapientemente utilizzata, evita l&#8217;esecuzione di script &#8220;pesanti&#8221; che vengono richiamati frequentemente, soprattutto qualora i dati rappresentati non subiscono variazioni nel breve termine.<br />
La classe phpCache avrà i seguenti metodi:</p>
<ul>
<li>start() &#8211; Per avviare il processo di cache della pagina</li>
<li>stop() &#8211; Per concludere il processo di cache della pagina</li>
<li>paginaCorrente() &#8211; Per prelevare il nome della pagina corrente</li>
</ul>
<p>Inoltre il costruttore della classe acquisisce due parametri:</p>
<ul>
<li>Il periodo di validità di un file in cache (espresso in minuti)</li>
<li>Il percorso relativo per la cartella di cache</li>
</ul>
<p>In fondo all’articolo è possibile <u>provare e scaricare il codice completo</u>.</p>
<p>Vediamo subito il codice della classe PhpCache:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
class PhpCache{
	var $durata;
	var $cache_url;
	var $nome_pagina;

	/*
                Costruttore - i parametri sono:
	   i minuti di vita della cache e il percorso della cartella di cache
	*/
	function PhpCache($minuti,$percorso){
		$this-&gt;durata = intval($minuti) * 60;
		$this-&gt;cache_url = $percorso;
	}

	// Funzione di start della cache
	function start(){
		// Start dell'output buffer
		ob_start();
		// prelevo il nome della pagina attuale e creo il percorso nella cache
		$this-&gt;nome_pagina = $this-&gt;cache_url.&quot;&quot;.$this-&gt;paginaCorrente();
		/* se il file esiste in cache e la versione è ancora valida rispetto al tempo di vita
		   allora includo il file in cache e non vado oltre
		*/
		if (file_exists($this-&gt;nome_pagina) &amp;&amp; ((time() - $this-&gt;durata) &lt; filemtime($this-&gt;nome_pagina)))
		{
			include($this-&gt;nome_pagina);
			exit;
		}
	}

             // Funzione di stop della cache
	function stop(){
		// Scriviamo il contenuto del buffer nel file di cache
		$file = fopen($this-&gt;nome_pagina, 'w');
		fwrite($file, ob_get_contents());
		fclose($file);
		// Chiudiamo il buffer
		ob_end_flush();
	}

	// Metodo che restituisce il nome della pagina [eventuali parametri compresi]
	function paginaCorrente() {
		$pagina_corrente = $_SERVER[&quot;SERVER_NAME&quot;].$_SERVER['REQUEST_URI'];
		$pezzi = explode(&quot;/&quot;,$pagina_corrente);
		$pagina_corrente = $pezzi[count($pezzi)-1];
		return $pagina_corrente;
	}
}
?&gt;
</pre>
<p>Per capire come funziona questa classe possiamo innanzitutto dire che:<br />
<strong>tutto il codice compreso tra la chiamata al metodo start() e la chiamata al metodo stop() viene messo in cache</strong></p>
<p>Lo <strong>start()</strong> ha innanzitutto il compito di aprire un <strong>buffer di output</strong> (ob_start()) in modo da convogliare tutto il codice di echo e html in una unica variabile, inoltre verificare se la pagina richiesta sia già presente in cache e sia ancora valida:</p>
<pre class="brush: php; title: ; notranslate">
ob_start();
$this-&gt;nome_pagina = $this-&gt;cache_url.&quot;&quot;.$this-&gt;paginaCorrente();
if (file_exists($this-&gt;nome_pagina) &amp;&amp; ((time() - $this-&gt;durata) &lt; filemtime($this-&gt;nome_pagina)))
{
	include($this-&gt;nome_pagina);
	exit;
}
</pre>
<p>A tale scopo è di supporto il metodo <strong>paginaCorrente()</strong> che restituisce il nome della pagina richiesta, compreso di eventuali parametri in GET.<br />
Il metodo di <strong>stop()</strong> ha il compito di salvare il contenuto del buffer nel file in cache, in modo tale che ad una nuova apertura della pagina il metodo di start() possa verificarne la presenza.</p>
<p>La classe va utilizzata quindi nel seguente modo:</p>
<pre class="brush: php; title: ; notranslate">
require_once('phpCache.php');

$cache = new PhpCache(10,'cache/');
$cache-&gt;start();

// segue il codice php/html
// ...

$cache-&gt;stop();
</pre>
<p>Nel costruttore abbiamo, ad esempio, scelto di rendere validi i file in cache per 10 minuti e salvare quest&#8217;ultimi in una cartella denominata cache/.</p>
<p>In conclusione è possibile scaricare e provare il codice. A tal proposito si consiglia di verificare il salvataggio in cache della pagina d&#8217;esempio controllando l&#8217;orario che questa stampa a video.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpCache/index.php' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpCache.rar'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/gestione-della-cache-con-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 28 &#8211; Implementazione di un portafoglio</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-28-implementazione-di-un-portafoglio/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-28-implementazione-di-un-portafoglio/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 17:46:20 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java purse]]></category>
		<category><![CDATA[portafoglio in java]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=988</guid>
		<description><![CDATA[Implementare e testare una classe Purse come collezione di monete. Una moneta è un’istanza di una classe Coin: gli oggetti di Coin sono immutabili e hanno un nome (nome della moneta) e un valore (valore della moneta). Deve essere possibile recuperare l’informazione contenuta in ogni oggetto Coin oltre che implementare i seguenti metodi: addCoin(Coin aCoin): [...]]]></description>
			<content:encoded><![CDATA[<p>Implementare e testare una classe <strong>Purse</strong> come collezione di monete.<br />
Una moneta è un’istanza di una classe <strong>Coin</strong>:<br />
gli oggetti di Coin sono immutabili e hanno <strong>un nome</strong> (nome della moneta) e <strong>un valore</strong> (valore della moneta).</p>
<p>Deve essere possibile recuperare l’informazione contenuta in ogni oggetto Coin oltre che implementare i seguenti metodi:</p>
<ul>
<li><u>addCoin(Coin aCoin)</u>: aggiungere una moneta al portafoglio</li>
<li><u>conteggio(String nomeCoin)</u>: conta il numero di monete dato un nome moneta</li>
<li><u>getTotal()</u>: restituisce il totale monete presenti nel portafoglio</li>
<li><u>remove(Coin aCoin)</u>: rimuove una moneta di valore pari a a Coin se presente nella borsa</li>
<li><u>find(Coin aCoin)</u>: restituisce l’indice di una moneta di valore pari a Coin (private)</li>
</ul>
<p>Vediamo innanzitutto la semplice classe Coin.java:</p>
<pre class="brush: java; title: ; notranslate">
public class Coin
{
	double valore;
	String nome;

	// Metodo Costruttore Coin inizializzato con nome moneta e relativo valore
	public Coin(double v, String n){
		valore = v;
		nome = n;
	}

	// Metodo che restituisce il valore della moneta
	public double getValue(){
		return valore;
	}

	// Metodo che restituisce il nome della moneta
	public String getNome(){
		return nome;
	}
}
</pre>
<p>Quindi la classe che gestisce la collezzione di monete Purse.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.ArrayList;
public class Purse
{
private ArrayList&lt;Coin&gt; lista;

  	// Metodo Costruttore vuoto
  	public Purse(){
  		this.lista = new ArrayList&lt;Coin&gt;();
  	}

  	public void addCoin(Coin c){
  		lista.add(c);
  	}

  	// Metodo che restituisce il totale di monete presenti nel portafoglio
  	public void getTotal()
  	{
  		double totale = 0;
  		for(int i=0 ; i&lt;lista.size(); i++)
  		{
  			Coin a = (Coin) lista.get(i);
  			double t = a.getValue();
  			totale = totale + t;
  		}
  		System.out.println(totale);
  	}

  	/* Metodo che conta il numero di monete presenti nel portafoglio
       data una moneta
  	 **/
  	public int conteggio(String nome)
  	{
  		int c = 0;
  		for(int i=0 ; i&lt;lista.size(); i++)
  		{
  			Coin a = (Coin) lista.get(i);
  			String m = a.getNome();
  			if(m.equalsIgnoreCase(nome))
  			{
  				c++;
  			}
  		}
  		return c;
  	}

  	// Metodo che elimina una moneta dal portafolio
  	public String remove(Coin a)
  	{
  		String nome = a.getNome();
  		int i =0;
  		while (i &lt; lista.size())
  		{
  			Coin b = (Coin) lista.get(i);
  			String v = b.getNome();
  			if(v.equalsIgnoreCase(nome))
  			{
  				lista.remove(i);
  				return &quot;Moneta eliminata&quot;;
  			}
  			i++;
  		}
  		return &quot;Moneta non presente&quot;;
  	}

  	// Metodo che verifica l'uguaglianza tra due monete
  	public boolean find(Coin a)
  	{
  		String nome = a.getNome();
  		int i =0;
  		while (i &lt; lista.size())
  		{
  			Coin b = (Coin) lista.get(i);
  			String v = b.getNome();
  			if(v.equalsIgnoreCase(nome))
  			{
  				return true;
  			}
  			i++;
  		}
  		return false;
  	}
}
</pre>
<p>Infine una classe di test che permette all&#8217;utente di accedere, tramite un menu, alle funzioni di aggiunta moneta, rimozione moneta, stampa del saldo, conteggio e ricerca di monete.<br />
La classe TestPurse.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestPurse {

	public static void main(String[] args)
	{
		// Costruisco un oggetto Purse
		Purse fabio = new Purse();
		Scanner in = new Scanner(System.in);

		String exit = &quot;no&quot;;

	    // Visualizzo le varie procedure possibili
	    while (exit.equalsIgnoreCase(&quot;no&quot;))
	    {
		    System.out.println(&quot;  *** MENU *** &quot;);
		    System.out.println(&quot;1 - Aggiungere monete&quot;);
		    System.out.println(&quot;2 - Sottrarre monete&quot;);
		    System.out.println(&quot;3 - Cercare una moneta&quot;);
		    System.out.println(&quot;4 - Stampare il totale borsa&quot;);
		    System.out.println(&quot;5 - Esci&quot;);

		    int menu= in.nextInt();
		    String continua = &quot;si&quot;;
		    String continua2 = &quot;si&quot;;
		    // Aggiungo monete al portafoglio
		    if(menu == 1){
		    	while (continua.equalsIgnoreCase(&quot;si&quot;)){
			        System.out.println(&quot;Quale moneta vuoi aggiungere alla borsa?&quot;);
			        System.out.println(&quot;1 - 1 Euro&quot;);
			        System.out.println(&quot;2 - 2 Euro&quot;);
			        System.out.println(&quot;3 - 50 Centesimi di Euro&quot;);
			        System.out.println(&quot;4 - 20 Centesimi di Euro&quot;);

			        int scelta = in.nextInt();

			        if(scelta == 1){
			        	Coin moneta = new Coin(1,&quot;Un Euro&quot;);
			        	fabio.addCoin(moneta);
			        }
			        if(scelta == 2){
			        	Coin moneta = new Coin(2,&quot;Due Euro&quot;);
			        	fabio.addCoin(moneta);
			        }
			        if(scelta == 3){
			        	Coin moneta = new Coin(0.50,&quot;50 Centesimi&quot;);
			        	fabio.addCoin(moneta);
			        }
			        if(scelta == 4){
			        	Coin moneta = new Coin(0.20,&quot;20 Centesimi&quot;);
			        	fabio.addCoin(moneta);
			        }
			        // Stampo a video il contenuto del portafoglio
			        System.out.print(&quot;Nella tuo portafoglio è presente questa somma: &quot;);
			        fabio.getTotal();
			        System.out.print(&quot;Vuoi continuare a inserire monete?&quot;);
			        continua = in.next();
		    	}
		    }
		    // Elimino monete dal portafoglio
		    if(menu == 2){
		    	while ( continua2.equalsIgnoreCase(&quot;si&quot;)){
		            System.out.println(&quot;Quale moneta vuoi eliminare dalla borsa?&quot;);
		            System.out.println(&quot;1 - 1 Euro&quot;);
		            System.out.println(&quot;2 - 2 Euro&quot;);
		            System.out.println(&quot;3 - 50 Centesimi di Euro&quot;);
		            System.out.println(&quot;4 - 20 Centesimi di Euro&quot;);

		            int scelta = in.nextInt();

		            if(scelta == 1){
		               Coin daEliminare = new Coin(1,&quot;Un Euro&quot;);
		               System.out.println(fabio.remove(daEliminare));
		            }
		            if(scelta == 2){
		                Coin daEliminare = new Coin(2,&quot;Due Euro&quot;);
		                System.out.println(fabio.remove(daEliminare));
		            }
		            if(scelta == 3){
		                Coin daEliminare = new Coin(0.50,&quot;50 centesimi&quot;);
		                System.out.println(fabio.remove(daEliminare));
		            }
		            if(scelta == 4){
		                Coin daEliminare = new Coin(0.20,&quot;20 centesimi&quot;);
		                System.out.println(fabio.remove(daEliminare));
		            }
		            // Stampo a video il contenuto del portafoglio
		            System.out.print(&quot;Nella tua borsa è presente questa somma: &quot;);
		            fabio.getTotal();
		            System.out.print(&quot;Vuoi continuare a eliminare monete?&quot;);
		            continua2 = in.next();
		    	}
		    }

		    // Cerco una moneta nel portafoglio
		    if (menu == 3){
		        System.out.println(&quot;Quale moneta vuoi cercare nella borsa?&quot;);
		        System.out.println(&quot;1 - Un Euro&quot;);
		        System.out.println(&quot;2 - Due Euro&quot;);
		        System.out.println(&quot;3 - 50 Centesimi&quot;);
		        System.out.println(&quot;4 - 20 Centesimi&quot;);

		        int scelta = in.nextInt();

		        if(scelta == 1){
		               Coin daCercare = new Coin(1,&quot;Un Euro&quot;);
		               System.out.println(fabio.find(daCercare));
		        }
		        if(scelta == 2){
		                Coin daCercare = new Coin(2,&quot;Due Euro&quot;);
		                System.out.println(fabio.find(daCercare));
		        }
		        if(scelta == 3){
		                Coin daCercare = new Coin(0.50,&quot;50 centesimi&quot;);
		                System.out.println(fabio.find(daCercare));
		        }
		        if(scelta == 4){
		                Coin daCercare = new Coin(0.20,&quot;20 centesimi&quot;);
		                System.out.println(fabio.find(daCercare));
		        }
		    }

		    // Stampo a video il contenuto del portafoglio
		    if(menu == 4){
		    	System.out.print(&quot;Il totale della borsa è : &quot;);
		    	fabio.getTotal();
		    }

		    // Termino esecuzione
		    if (menu == 5){
		    	exit = &quot;si&quot;;
		    }
	    }
        }
}
</pre>
<p><br/><br />
<strong>Cliccando <a href='http://www.donatantonio.net/java/javapurse.exe'>qui</a></strong> è possibile scaricare l’eseguibile.<br />
<br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-28-implementazione-di-un-portafoglio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 27 &#8211; Simulazione Casinò</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-27-simulazione-casino/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-27-simulazione-casino/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 10:31:21 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[casinò java]]></category>
		<category><![CDATA[lancio dado]]></category>
		<category><![CDATA[simulazione casinò]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=981</guid>
		<description><![CDATA[Scrivere un programma che si comporta come segue: Crea due conti correnti uno (conto giocatore) con importo iniziale pari a 1000 euro ed uno (conto casinò) con importo iniziale pari a 100000 euro. Prende in input da tastiera un intero n e un double somma e simula il lancio di un dado (con 6 facce). [...]]]></description>
			<content:encoded><![CDATA[<p>Scrivere un programma che si comporta come segue:</p>
<ul>
<li>Crea due conti correnti uno (<strong>conto giocatore</strong>) con importo iniziale pari a 1000 euro ed uno (<strong>conto casinò</strong>) con importo iniziale pari a 100000 euro.</li>
<li>Prende in input da tastiera un intero n e un double somma e <strong>simula il lancio di un dado</strong> (con 6 facce). Se il risultato del lancio è n allora il programma trasferisce un importo pari a <strong>5 volte il valore</strong> di somma dal conto del casinò al conto del giocatore; se il risultato è diverso da n il programma trasferisce un importo pari a somma dal conto del giocatore a quello del casinò. Il valore di somma deve essere inferiore al saldo del vostro conto e 5 volte più piccolo di quello del conto del casinò.</li>
<li>Se dopo la scommessa il giocatore dispone ancora di soldi sul conto, il programma chiede se volete continuare a scommettere. Se digitate “si” il <strong>programma continua</strong> dal punto 2. Se digitate qualcosa di diverso da “si” oppure il saldo è zero il <strong>programma si interrompe</strong> stampando il saldo del vostro conto.</li>
</ul>
<p>Infondo all&#8217;esercizio è possibile lanciare e scaricare l&#8217;eseguibile.</p>
<p>Innanzitutto il codice della classe Dado.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Random;
public class Dado {
	// Metodo Costruttore. Numero di facce impostato a 6.
	public Dado()
	{
		facce = 6;
		generatore = new Random();
	}

	// Metodo che simula il lancio del dado
	public int lancia()
	{
		return 1 + generatore.nextInt(facce);
	}

	private Random generatore;
	private int facce;
}
</pre>
<p>Quindi le classi per gestire i due conti.<br />
ContoGiocatore.java:</p>
<pre class="brush: java; title: ; notranslate">
public class ContoGiocatore
{
	double contoGio;

	// Metodo Costruttore inizializzato con un valore double
	public ContoGiocatore(double c)
	{
		contoGio = c;
	}

	// Metodo che restituisce l'importo del conto giocatore
	public double getContoGiocatore()
	{
		return contoGio;
	}

	// Metodo che permette di sottrarre la somma persa dal giocatore
	public void sottraiContoGiocatore(double s)
	{
		double temp = contoGio;
		temp = temp - s;
		contoGio = temp;
	}

	/** Metodo che permette di aggiungere la somma vinta dal giocatore.
      Somma vinta = somma giocata * 5.
	 */
	public void aumentaContoGiocatore(double s)
	{
		double temp = 5*s;
		contoGio = contoGio + temp;
	}
}
</pre>
<p>ContoCasino.java:</p>
<pre class="brush: java; title: ; notranslate">
public class ContoCasino
{
	double contoCas;

	// Metodo Costruttore ContoCasinò inizializzato con un valore double
	public ContoCasino(double c)
	{
		contoCas = c;
	}

	// Metodo che restituisce l'importo del conto casinò
	public double getContoCasino()
	{
		return contoCas;
	}

	/** Metodo che permette di sottrarre una somma vinta da un giocatore
        al conto del casinò.
        La somma sottratta è pari alla somma giocata dal giocatore moltiplicata
        per cinque.
	 */
	public void sottraiContoCasino(double s)
	{
		double temp = contoCas;
		double temp1 = s*5;
		temp = temp - temp1;
		contoCas = temp;
	}

	/** Metodo che permette di aggiungere una somma persa da un giocatore
        al conto del casino
	 */
	public void sommaContoCasino(double s)
	{
		double temp = contoCas;
		temp = temp + s;
		contoCas = temp;
	}
}
</pre>
<p>Quindi infine la classe di test che si chiamerà VaiAlCasino.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class VaiAlCasino
{

	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);

		// Costruisco un oggetto dado
		Dado d = new Dado();

		// Costruisco un nuovo oggetto giocatore e uno casinò
		ContoGiocatore fabio = new ContoGiocatore(1000);
		ContoCasino casino = new ContoCasino(100000);

		String verifica = &quot;si&quot;;
		System.out.println(&quot;*** BENVENUTI AL CASINò ***&quot;);

		// Simulo la giocata
		while ( verifica.equalsIgnoreCase(&quot;si&quot;))
		{
			// Scelgo un numero del dado
			System.out.println(&quot;Scegli un numero:&quot;);
			int num = in.nextInt();
			if(num&gt;0 &amp;&amp; num&lt;7)
			{
				// Punto una somma di denaro
				System.out.println(&quot;Punta una somma di denaro: &quot;);
				System.out.print(&quot;(ricorda che il tuo credito è pari a &quot; + fabio.getContoGiocatore());
				System.out.println(&quot; )&quot;);
				double somma = in.nextDouble();

				double contoG = fabio.getContoGiocatore();
				double contoC = casino.getContoCasino();
				double contoCc = contoC/5;

				// Verifico la puntata e il budget del casinò
				if ( somma &lt;= contoG &amp;&amp; somma &lt;= contoCc)
				{
					// Simulo il lancio del dado
					System.out.println(&quot;Lancio il dado...&quot;);
					int lancio = d.lancia();
					System.out.print(&quot;Il risulatato del dado è :  &quot;);
					System.out.println(lancio);

					// Verifico se il giocatore vince o perde
					if ( lancio == num)
					{
						System.out.println(&quot;Complimenti hai vinto&quot;);
						fabio.aumentaContoGiocatore(somma);
						casino.sottraiContoCasino(somma);
					}else{
						System.out.println(&quot;Peccato, hai perso&quot;);
						casino.sommaContoCasino(somma);
						fabio.sottraiContoGiocatore(somma);
					}

				}else{
					System.out.println(&quot;Non puoi puntare quella somma&quot;);
				}

				double newSomma = fabio.getContoGiocatore();

				// Verifico se il giocatore può continuare a giocare
				if ( newSomma &gt; 0)
				{
					// Il giocatore sceglie se continuare a giocare
					System.out.println(&quot;Vuoi continuare a scommettere?&quot;);
					verifica = in.next();
					System.out.print(&quot;Il tuo conto è pari a :  &quot;);
					System.out.println(fabio.getContoGiocatore());
				}else{
					System.out.println(&quot;CONTO ESAURITO&quot;);
					System.out.println(fabio.getContoGiocatore());
					verifica = &quot;no&quot;;
				}
			}
		}
	}
}
</pre>
<p><br/><br />
<strong>Cliccando <a href='http://www.donatantonio.net/java/javacasino.exe'>qui</a></strong> è possibile scaricare l&#8217;eseguibile.<br />
<br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-27-simulazione-casino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 26 &#8211; Ricerca e conteggio di parole</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-26-ricerca-e-conteggio-di-parole/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-26-ricerca-e-conteggio-di-parole/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 20:44:48 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[occorrenze in un testo]]></category>
		<category><![CDATA[ricerca parola in testo]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=977</guid>
		<description><![CDATA[Scrivere e testare un programma che data una parola w ed un testo t conta il numero di occorrenze di w in t. La classe ContaOccorrenze.java: La classe di test ContaParola.java:]]></description>
			<content:encoded><![CDATA[<p>Scrivere e testare un programma che data una <strong>parola w</strong> ed un <strong>testo t</strong> conta il numero di occorrenze di w in t.</p>
<p>La classe ContaOccorrenze.java:</p>
<pre class="brush: java; title: ; notranslate">
public class ContaOccorrenze {
	String testo;

	// Il costruttore inizializza il testo sul quale effettuare la ricerca
	public ContaOccorrenze(String txt){
		this.testo = txt;
	}

	// Il metodo conta acquisisce in input la parola da cercare
	public int conta(String parola){
		// Calcolo la lunghezza del testo e della parola
	    int lunghezza_parola = parola.length();
	    int lunghezza_testo = testo.length();

	    // Definisco due variabili: un indice per il testo e un contatore
	    int indice = 0;
	    int numeroParole = 0;

	    // Fin quando l'indice del testo è valido
	    while (indice &lt;= lunghezza_testo-lunghezza_parola){
	    	// Controllo se la substring del testo è uguale alla parola
	    	if(testo.subSequence(indice, indice+lunghezza_parola).equals(parola)){
	    		numeroParole++;
	    	}
	    	// L'indice aumenta ad ogni iterazione
	    	indice++;
	    }
	    return numeroParole;
	}
}
</pre>
<p>La classe di test ContaParola.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class ContaParola
{
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);

	    // Prendo in input un testo
	    System.out.println(&quot;Scrivi un testo: &quot;);
	    String testo = in.nextLine();

	    // Prendo in input una lettera da cercare nel testo
	    System.out.println(&quot;Dammi una parola da ricercare e conteggiare: &quot;);
	    String parola = in.nextLine();

               // Istanzio l'oggetto ContaOccorrenze
	    ContaOccorrenze contatore = new ContaOccorrenze(testo);
               // Invovo il metodo che restituisce il numero di occorrenze di parola in testo
	    int occorrenze = contatore.conta(parola);

	    System.out.println(&quot;La parola è presente : &quot;);
	    System.out.println(occorrenze + &quot; volte&quot;);
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-26-ricerca-e-conteggio-di-parole/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 25 &#8211; Generatore numeri primi</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-25-generatore-numeri-primi/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-25-generatore-numeri-primi/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 20:05:23 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[generatore numeri primi]]></category>
		<category><![CDATA[numeri primi]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=973</guid>
		<description><![CDATA[Realizzare una classe PrimeGenerator con metodo nextPrime() che genera il prossimo numero primo. Scrivere e testare un programma che chiede all’utente un intero n e stampa tutti i numeri primi compresi tra 2 ed n. Ad esempio se l’input è 20, il programma stampa: 2 3 5 7 11 13 17 19 La classe PrimeGenerator.java: [...]]]></description>
			<content:encoded><![CDATA[<p>Realizzare una classe <strong>PrimeGenerator</strong> con metodo <strong>nextPrime()</strong> che genera il prossimo numero primo.<br />
Scrivere e testare un programma che chiede all’utente un intero n e stampa tutti i numeri primi compresi tra 2 ed n.<br />
Ad esempio se l’input è 20, il programma stampa:<br />
2<br />
3<br />
5<br />
7<br />
11<br />
13<br />
17<br />
19</p>
<p>La classe PrimeGenerator.java:</p>
<pre class="brush: java; title: ; notranslate">
public class PrimeGenerator
{
	int numero;

  	// Metodo Costruttore vuoto
	public PrimeGenerator(int n){
		this.numero = n;
		nextPrime(2);
	}

	// Metodo che calcola i numeri primi compresi tra 1 e n
	public void nextPrime(int n)
	{
	    int posMax = (int)Math.sqrt(n + 1);

	    for(int divisore = 2; divisore &lt;= posMax; divisore++){
	    	if (n % divisore == 0 &amp;&amp; n!=2){
	    		if(n&lt;=numero){
	    			nextPrime(n+1);
	    		}
	    		return;
	    	}
	    }
	    System.out.println(n);
	    if(n&lt;=numero){
	    	nextPrime(n+1);
	    }
	}
}
</pre>
<p>La classe di test:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestPrime
{
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);

		// Prendo in input un numero
		System.out.println(&quot;Dammi un numero: &quot;);
		int num = in.nextInt();

		PrimeGenerator NumeriPrimi = new PrimeGenerator(num);

	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-25-generatore-numeri-primi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Il disco cifrante di Alberti in PHP</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/il-disco-cifrante-di-alberti-in-php/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/il-disco-cifrante-di-alberti-in-php/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 08:59:17 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cifrario di alberti]]></category>
		<category><![CDATA[disco cifrante di alberti]]></category>
		<category><![CDATA[disco di alberti in php]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=949</guid>
		<description><![CDATA[Dopo il cifrario di Cesare e Vigenère continuiamo l&#8217;excursus sulle tecniche di cifratura che hanno contraddistinto la storia e l&#8217;evoluzione di questa disciplina. Leon Battista Alberti, vissuto a metà del &#8217;400, fu una delle figure artistiche più poliedriche del Rinascimento. Scrittore, architetto e matematico, fu anche un celebrato crittografo per gli standard della sua epoca, [...]]]></description>
			<content:encoded><![CDATA[<p><img src='http://upload.wikimedia.org/wikipedia/commons/thumb/7/70/Alberti_cipher_disk.JPG/250px-Alberti_cipher_disk.JPG' alt='Disco di Alberti' align='right' style='margin-left:10px'/>Dopo il cifrario di <a href='http://www.donatantonio.net/blog/?p=875' target='_blank'>Cesare</a> e <a href='http://www.donatantonio.net/blog/?p=888' target='_blank'>Vigenère</a> continuiamo l&#8217;excursus sulle tecniche di cifratura che hanno contraddistinto la storia e l&#8217;evoluzione di questa disciplina.<br />
<strong>Leon Battista Alberti</strong>, vissuto a metà del &#8217;400, fu una delle figure artistiche più poliedriche del Rinascimento. Scrittore, architetto e matematico, fu anche un celebrato crittografo per gli standard della sua epoca, ed inventò un metodo per generare messaggi criptati con l&#8217;aiuto di un apparecchio, il <strong>disco cifrante</strong>.<br />
Il disco cifrante è il primo sistema di cifratura polialfabetica, ancor prima del &#8220;troppo&#8221; famoso cifrario di Vigenère rispetto cui è estremamente più potente.<br />
L&#8217;apparecchio si compone di due dischi concentrici, rotanti uno rispetto all&#8217;altro, contenenti un alfabeto ordinato per il chiaro (testo da cifrare) e un alfabeto mischiato per il cifrato (testo risultante). Permette la sostituzione polialfabetica con periodo irregolare. Lo scorrimento degli alfabeti avviene per mezzo di lettere chiave inserite nel corpo del crittogramma.<br />
Nonostante la potenza di questo algoritmo il suo utilizzo è molto semplice e intuitivo. Prendiamo ad esempio in considerazione i due alfabeti:</p>
<table border='0' cellpadding='2' style='font-weight:bold'>
<tr>
<td>Disco esterno&nbsp;&nbsp;</td>
<td>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
<td>E</td>
<td>F</td>
<td>G</td>
<td>H</td>
<td>I</td>
<td>J</td>
<td>K</td>
<td>L</td>
<td>M</td>
<td>N</td>
<td>O</td>
<td>P</td>
<td>Q</td>
<td>R</td>
<td>S</td>
<td>T</td>
<td>U</td>
<td>V</td>
<td>W</td>
<td>X</td>
<td>Y</td>
<td>Z</td>
</tr>
<tr>
<td>Disco interno&nbsp;&nbsp;</td>
<td>t</td>
<td>d</td>
<td>v</td>
<td>h</td>
<td>a</td>
<td>r</td>
<td>s</td>
<td>z</td>
<td>c</td>
<td>p</td>
<td>e</td>
<td>w</td>
<td>i</td>
<td>x</td>
<td>g</td>
<td>u</td>
<td>k</td>
<td>m</td>
<td>b</td>
<td>l</td>
<td>y</td>
<td>f</td>
<td>j</td>
<td>o</td>
<td>n</td>
<td>q</td>
</tr>
</table>
<p>Il mittente e il destinatario si accordano su un <em>indice di cifratura</em> che dovrà rimanere segreto. Quest&#8217;indice è essenzialmente una lettera dell&#8217;alfabeto ordinato.<br />
In base a questo indice si effettuerà la cifratura/decifratura, sottoponendo di volta in volta una lettera del disco interno e mobile.<br />
In relazione agli alfabeti visti sopra, se ad esempio la lettera &#8220;indice&#8221; fosse la <strong>&#8220;A&#8221;</strong> e si decidesse di cifrare con lettera &#8220;chiave&#8221; uguale a <strong>&#8220;s&#8221;</strong> si otterrebbe il seguente disco cifrante (abbiamo ruotato di <strong>n posizioni</strong> l&#8217;alfabeto mischiato):</p>
<table border='0' cellpadding='2' style='font-weight:bold'>
<tr>
<td>Disco esterno&nbsp;&nbsp;</td>
<td style='color:red'>A</td>
<td>B</td>
<td>C</td>
<td>D</td>
<td>E</td>
<td>F</td>
<td>G</td>
<td>H</td>
<td>I</td>
<td>J</td>
<td>K</td>
<td>L</td>
<td>M</td>
<td>N</td>
<td>O</td>
<td>P</td>
<td>Q</td>
<td>R</td>
<td>S</td>
<td>T</td>
<td>U</td>
<td>V</td>
<td>W</td>
<td>X</td>
<td>Y</td>
<td>Z</td>
</tr>
<tr>
<td>Disco interno&nbsp;&nbsp;</td>
<td style='color:red'>s</td>
<td>z</td>
<td>c</td>
<td>p</td>
<td>e</td>
<td>w</td>
<td>i</td>
<td>x</td>
<td>g</td>
<td>u</td>
<td>k</td>
<td>m</td>
<td>b</td>
<td>l</td>
<td>y</td>
<td>f</td>
<td>j</td>
<td>o</td>
<td>n</td>
<td>q</td>
<td>t</td>
<td>d</td>
<td>v</td>
<td>h</td>
<td>a</td>
<td>r</td>
</tr>
</table>
<p>A questo punto cifriamo la frase: CIAO MAMMA</p>
<p><strong style='color:red'>CIAO MAMMA</strong> = <strong style='color:red'>Scgsy bsbbs</strong></p>
<p>Sostituendo a ciascuna lettera in chiaro del disco superiore, la sottostante lettera cifrata del disco inferiore si ottiene il testo cifrato. Da notare la prima lettera in maiuscolo (la <strong>R</strong>) che indica appunto la lettera chiave di cifratura utile al destinatario per interpretare il messaggio.<br />
Dopo aver cifrato alcune lettere si inserisce una nuova lettera maiuscola che indica il cambio delle lettera chiave, ruotando appunto il disco mobile e ottenendo una nuova cifratura.<br />
Il cifrario di Alberti è quindi a tutti gli effetti una <strong>sostituzione polialfabetica con alfabeti mischiati cambiati saltuariamente</strong> in modo segreto.</p>
<p>Veniamo ora al nostro codice PHP che ci permette di implementare tale cifrario.<br />
Realizzeremo una classe denominata <strong>Alberti</strong> che farà uso di due array contenenti il primo l&#8217;alfabeto <em>ordinato e in maiuscolo</em> e il secondo un alfabeto <em>mischiato in minuscolo</em>.<br />
Nel costruttore della classe acquisiamo due lettera:</p>
<ul>
<li>La lettera indice dell&#8217;alfabeto ordinato</li>
<li>La lettera chiave dell&#8217;alfabeto mischiato</li>
</ul>
<p>Infine forniremo tre metodi:</p>
<ul>
<li>Stampa del disco ottenuto</li>
<li>Cifratura</li>
<li>Decifratura</li>
</ul>
<p>In fondo all’articolo è possibile <u>provare e scaricare il codice completo</u>.</p>
<p>Vediamo il codice della classe:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
class Alberti{
	var $fisso = array('A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
	var $disco = array('t','d','v','h','a','r','s','z','c','p','e','w', 'i','x','g','u','k','m','b','l','y','f','j','o','n','q');
	var $posizione;
	function Alberti($base, $partenza){
		// Scegliamo la lettera di base che andrà in posizione 0
		$this-&gt;posizione = array_search(strtoupper($base),$this-&gt;fisso);
		$app1 = array_slice($this-&gt;fisso,0,$this-&gt;posizione);
		$app2 = array_slice($this-&gt;fisso,$this-&gt;posizione);
		$this-&gt;fisso = array_merge($app2,$app1);
		// Ruotiamo il disco interno in base alla lettera di partenza che andrà in posizione 0
		$rotazione = array_search(strtolower($partenza),$this-&gt;disco);
		$app1 = array_slice($this-&gt;disco,0,$rotazione);
		$app2 = array_slice($this-&gt;disco,$rotazione);
		$this-&gt;disco = array_merge($app2,$app1);
	}

	function stampa(){
		echo &quot;&lt;table border='1'&gt;&lt;tr&gt;&lt;td&gt;Disco esterno&lt;/td&gt;&quot;;
		for($i=0; $i&lt;count($this-&gt;fisso); $i++){
			echo &quot;&lt;td&gt;&quot;.$this-&gt;fisso[$i].&quot;&lt;/td&gt;&quot;;
		}
		echo &quot;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Disco interno&lt;/td&gt;&quot;;
		for($i=0; $i&lt;count($this-&gt;disco); $i++){
			echo &quot;&lt;td&gt;&quot;.$this-&gt;disco[$i].&quot;&lt;/td&gt;&quot;;
		}
		echo &quot;&lt;/tr&gt;&lt;/table&gt;&quot;;
	}

	function cifratura($testo){
		$txt_cifrato = strtoupper($this-&gt;disco[0]).&quot;&quot;;
		for($i=0; $i&lt;strlen($testo); $i++){
			$chr_t = substr($testo,$i,1);
			if(in_array(strtoupper($chr_t),$this-&gt;fisso)){
				$pos = array_search(strtoupper($chr_t),$this-&gt;fisso);
				$txt_cifrato = $txt_cifrato.$this-&gt;disco[$pos];
			}else{
				$txt_cifrato = $txt_cifrato.$chr_t;
			}
		}
		return $txt_cifrato;
	}

	function decifratura($cifrato){
		$txt_chiaro = &quot;&quot;;
		for($i=1; $i&lt;strlen($cifrato); $i++){
			$chr_t = substr($cifrato,$i,1);
			if(in_array(strtolower($chr_t),$this-&gt;disco)){
				$pos = array_search(strtolower($chr_t),$this-&gt;disco);
				$txt_chiaro = $txt_chiaro.$this-&gt;fisso[$pos];
			}else{
				$txt_chiaro = $txt_chiaro.$chr_t;
			}
		}
		return $txt_chiaro;
	}
}
?&gt;
</pre>
<p>L&#8217;alfabeto del disco mobile (quello mischiato) è stato scelto in modo del tutto arbitrario, è possibile modificarlo per ottenere cifrature sempre diverse.<br />
Nel costruttore, in relazione alle due lettere acquisite, vengono <strong>ruotati gli alfabeti</strong> in modo tale da far coincidere in posizione <strong>0</strong> (zero) le due lettere scelte per la cifratura.<br />
A tale scopo viene utilizzato una funzione php molto utile, <strong>array_slice</strong>, che ci permette di tagliare un array ottenendo un sottoarray:</p>
<pre class="brush: php; title: ; notranslate">
$app1 = array_slice($this-&gt;disco,0,$rotazione);
$app2 = array_slice($this-&gt;disco,$rotazione);
</pre>
<p>Una volta riuniti i due sottoarray in ordine inverso si ottine la rotazione dell&#8217;alfabeto.<br />
Grazie a questi due array la cifratura e decifratura si limita ad una sostituzione di lettere in base alla loro posizione.</p>
<p>La sintassi per utilizzare questa classe è la seguente:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
require_once 'alberti.php';
$alberti = new Alberti($lettera_indice,$lettera_chiave);
$alberti-&gt;stampa();
$txt_cifrato = $alberti-&gt;cifratura($testo);
$txt_decifrato = $alberti-&gt;decifratura($txt_cifrato);
?&gt;
</pre>
<p>Alcune considerazioni finali sono d&#8217;obbligo; l&#8217;algoritmo implementato non tiene conto di alcune <em>varianti</em> presenti nella cifratura di Alberti, riguardanti ad esempio le lettere doppie e i numeri.<br />
<em>Per ottenere una sostituzione polialfabetica basta poi invocare la classe più volte cambiando di conseguenza la lettera chiave dell&#8217;alfabeto mischiato.</em></p>
<p>All’interno della cartella contenente il codice completo sono presenti i seguenti file:</p>
<ul>
<li>alberti.php (la classe vista sopra)</li>
<li>test.php (lo script che effettua la cifratura/decifratura)</li>
<li>index.html (un form per il test di coppie chiave-testo in chiaro)</li>
</ul>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpAlberti/index.html' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpAlberti.rar'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/il-disco-cifrante-di-alberti-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ricerca in tabella html</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/ricerca-in-tabella-html/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/ricerca-in-tabella-html/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 16:43:02 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[cerca valore in tabella html]]></category>
		<category><![CDATA[dom e tabella]]></category>
		<category><![CDATA[ricerca in tabella html]]></category>
		<category><![CDATA[table dhtml]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=939</guid>
		<description><![CDATA[In un articolo precedente abbiamo analizzato uno script Javascript che ci permetteva di inserire righe in maniera dinamica in una tabella html preesistente. In questo nuovo articolo realizzeremo alcune funzioni che ci aiuteranno a ricercare un valore o una stringa all&#8217;interno di una tabella. Utilizzando il DOM, accederemo alle singole celle che compongono la tabella [...]]]></description>
			<content:encoded><![CDATA[<p>In un <a href='http://www.donatantonio.net/blog/?p=758' target='_blank'>articolo precedente</a> abbiamo analizzato uno script Javascript che ci permetteva di inserire righe in maniera dinamica in una tabella html preesistente.<br />
In questo nuovo articolo realizzeremo alcune funzioni che ci aiuteranno a <em>ricercare un valore o una stringa all&#8217;interno di una tabella</em>.<br />
Utilizzando il <strong>DOM</strong>, accederemo alle singole celle che compongono la tabella e qualora il contenuto sia uguale al valore cercato evidenzieremo la cella con un colore differente.<br />
Ad esempio può risultare molto utile, in presenza di grandi tabelle contenenti dati di varia natura, fornire all&#8217;utente un form tramite il quale effettuare ricerche su tutti i dati o in alternativa su una singola colonna.</p>
<p>Realizzeremo quindi tre funzioni:<br />
<strong>- Cercare un valore in tabella (ricercaInTable)<br />
- Cercare un valore in una singola colonna della tabella (ricercaInCol)<br />
- Ripristinare lo stato iniziale della tabella (ripristinaTable)</strong></p>
<p>In fondo all&#8217;articolo è possibile <u>provare o scaricare il codice completo</u>.</p>
<p>Vediamo subito il codice Javascript:</p>
<pre class="brush: jscript; title: ; notranslate">
// FUNZIONE PER RICERCA IN TABELLA
function ricercaInTable(id_table){
     ripristinaTable(id_table);
     var valore = document.ricerca.campo.value;
     var table = document.getElementById(id_table);
     var celle = table.getElementsByTagName('td');
     var contatore = 0;
     for(var j=0; j&lt;celle.length; j++){
          if(celle[j].innerHTML==valore){
               celle[j].className='trovato';
               contatore++;
          }
     }
     document.getElementById('responso').innerHTML='Trovati: '+contatore;
}

// FUNZIONE PER RICERCA IN SINGOLA COLONNA DI TABELLA
function ricercaInCol(id_table,colonna){
     ripristinaTable(id_table);
     var valore = document.ricerca.campo.value;
     var table = document.getElementById(id_table);
     var n_colonne = table.getElementsByTagName('th').length;
     var celle = table.getElementsByTagName('td');
     var contatore = 0;
     for(var j=(colonna-1); j&lt;celle.length; j=(j+n_colonne)){
          if(celle[j].innerHTML==valore){
               celle[j].className='trovato';
	  contatore++;
          }
     }
     document.getElementById('responso').innerHTML='Trovati: '+contatore;
}

// FUNZIONE CHE RIPRISTINA LO STILE INIZIALE DELLA TABELLA
function ripristinaTable(id_table){
     var table = document.getElementById(id_table);
     var celle = table.getElementsByTagName('td');
     for(var j=0; j&lt;celle.length; j++){
          celle[j].className='default';
     }
     document.getElementById('responso').innerHTML='';
}
</pre>
<p>Innanzitutto chiariamo alcuni concetti che ci aiutino a comprendere il codice:<br />
- La tabella ha uno stile di defaul tramite CSS<br />
- Un ciclo for ci permette di ciclare su tutte le celle &lt;td&gt; della tabella<br />
- Il valore contenuto nella cella viene confrontato con quello ricercato<br />
- Quando un valore viene trovato la cella corrispondete cambia il suo stile</p>
<p>La funzione <strong>ricercaInTable</strong> acquisisce come parametro un id tabella.<br />
Innanzitutto preleviamo da un form html il testo da ricercare:<br />
<strong style='color:red'>var valore = document.ricerca.campo.value;</strong><br />
Dopo aver identificato la tabella, otteniamo l&#8217;array contenente tutti gli elementi con nome tag &lt;td&gt;:<br />
<strong style='color:red'>var celle = table.getElementsByTagName(&#8216;td&#8217;);</strong><br />
Ciclando su questo array verifichiamo il contenuto della cella:<br />
<strong style='color:red'>if(celle[j].innerHTML==valore){&#8230;</strong><br />
Se la condizione è verificata allora cambia lo stile della cella:<br />
<strong style='color:red'>celle[j].className=&#8217;trovato&#8217;;</strong></p>
<p>La funzione che permette la ricerca su una singola colonna prenderà come parametro un valore numerico per identificare la colonna da esaminare.<br />
Se ad esempio volessimo cercare un valore nella terza colonna della tabella id_table:</p>
<pre class="brush: jscript; title: ; notranslate">
ricercaInCol('id_table',3);
</pre>
<p>La funzione <strong>ricercaInCol</strong> opera come la funzione <strong>ricercaInTable</strong> con l&#8217;unica differenza che esamina solo le celle che (tramite opportuno incremento dell&#8217;indice) ricadono nella colonna in esame.<br />
Infine la funzione <strong>ripristinaTable</strong> ha il compito di riportare la tabella allo stile iniziale prima di effettuare una nuova ricerca.</p>
<p>Vediamo ora il codice CSS utilizzato:</p>
<pre class="brush: css; title: ; notranslate">
th.intestazione{
     background-color:#0000FF;
     color:#FFFFFF;
     font-weight:bold;
     padding:3px;
}

td.default{
     background-color:#7FFFD4;
}

td.trovato{
     background-color:#FF0000;
     font-weight:bold;
}
</pre>
<p>Il <strong>td.default</strong> è utilizzato per tutte le celle della tabella mentre <strong>td.trovato</strong> è lo stile applicato solo alle celle il cui valore corrisponde con quello ricercato.</p>
<p>Infine è necessario logicamente realizzare una tabella html e richiamare le funzioni tramite un form.</p>
<p>Il codice proposto è da intendersi esclusivamente come la <em>base</em> per realizzare una ricerca in una tabella html. Le metodologie di ricerca e gli stili sono perfezionabili.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/cercaInTable/' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/cercaInTable.rar'>qui</a></strong> è possibile scaricare il codice.<br/><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/ricerca-in-tabella-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>News a scorrimento (news ticker)</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/news-a-scorrimento-news-ticker/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/news-a-scorrimento-news-ticker/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 15:45:20 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery li-scroller]]></category>
		<category><![CDATA[jquery news ticker]]></category>
		<category><![CDATA[news effetto scorrimento]]></category>
		<category><![CDATA[news ticker]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=923</guid>
		<description><![CDATA[Dopo aver visto una finestra con news a comparsa, implementeremo ora una barra orizzontale contenente news scorrevoli da destra verso sinistra (un cosiddetto news ticker) . In questo caso è preferibile che il testo di ogni news sia composto esclusivamente dal titolo, il quale rimandi poi, tramite link, al testo completo. In fondo all’articolo è [...]]]></description>
			<content:encoded><![CDATA[<p>Dopo aver visto una <a href='http://www.donatantonio.net/blog/?p=911'>finestra con news a comparsa</a>, implementeremo ora una barra orizzontale contenente news scorrevoli da destra verso sinistra (un cosiddetto <strong>news ticker</strong>) .<br />
In questo caso è preferibile che il testo di ogni news sia composto esclusivamente dal titolo, il quale rimandi poi, tramite link, al testo completo.<br />
In fondo all’articolo è possibile <u>provare e scaricare il codice completo</u>.</p>
<p>Per realizzare il box e l&#8217;effetto desiderato utilizzeremo jQuery e il plugin denominato <a href='http://www.gcmingati.net/wordpress/wp-content/lab/jquery/newsticker/jq-liscroll/scrollanimate.html' target='_blank'>liScroll</a> che trasforma qualsiasi elenco in un <strong>news ticker</strong> a scorrimento.</p>
<p>A tal proposito vediamo il codice html:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;ul id=&quot;news&quot;&gt;
     &lt;li&gt;&lt;span&gt;News 1&lt;/span&gt;
          &lt;a href=&quot;#&quot;&gt;Quel ramo del lago di Como ...&lt;/a&gt;
     &lt;/li&gt;
     &lt;li&gt;&lt;span&gt;News 2&lt;/span&gt;
          &lt;a href=&quot;#&quot;&gt;Si racconta che il principe di ...&lt;/a&gt;
     &lt;/li&gt;
     &lt;li&gt;&lt;span&gt;News 3&lt;/span&gt;
          &lt;a href=&quot;#&quot;&gt;Lucia entrò nella stanza ...&lt;/a&gt;
     &lt;/li&gt;
     &lt;li&gt;&lt;span&gt;News 4&lt;/span&gt;
          &lt;a href=&quot;#&quot;&gt;Il sole non era ancor tutto ...&lt;/a&gt;
     &lt;/li&gt;
     &lt;li&gt;&lt;span&gt;News 5&lt;/span&gt;
          &lt;a href=&quot;#&quot;&gt;Da i Promessi Sposi ...&lt;/a&gt;
     &lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Grazie alle potenzialità di questo plugin il codice html si riduce ad un semplice elenco non ordinato. La regola generale è che: <strong>ogni voce dell&#8217;elenco è una news</strong>.<br />
Per far si che sia possibile animare il news ticker è necessario assegnare un id all&#8217;elemento &lt;ul&gt;.<br />
Prima di poter animare le news dobbiamo richiamare jQuery e il plugin. All&#8217;interno dell&#8217;head scriveremo:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript' src='jquery-1.4.3.min.js'&gt;&lt;/script&gt;
&lt;script type='text/javascript' src='jquery.li-scroller.1.0.js'&gt;&lt;/script&gt;
</pre>
<p>Il codice Javascript per dare il via allo scorrere delle news è il seguente (si ricorda che va definito dopo il codice html dell&#8217;elenco o richiamato al completo caricamento della pagina):</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
     $(&quot;ul#news&quot;).liScroll({travelocity: 0.06});
&lt;/script&gt;
</pre>
<p>Il metodo da invocare sull&#8217;elenco è <strong>liScroll</strong> a cui è possibile passare come parametro un valore che esprima la velocità di scorrimento del testo.<br />
Il codice completo fornisce infine un file css modificabile per ottenere lo stile desiderato.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/testoScorrevole/' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/testoScorrevole.rar'>qui</a></strong> è possibile scaricare il codice.</p>
<p>Sito ufficiale del plugin liScroll: <a href='http://www.gcmingati.net/wordpress/' target='_blank'>http://www.gcmingati.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/news-a-scorrimento-news-ticker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finestra news con effetto fade (news ticker)</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/finestra-news-con-effetto-fade/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/finestra-news-con-effetto-fade/#comments</comments>
		<pubDate>Tue, 26 Oct 2010 13:13:51 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[box news]]></category>
		<category><![CDATA[box news con jQuery]]></category>
		<category><![CDATA[finestra con news]]></category>
		<category><![CDATA[news effetto fade]]></category>
		<category><![CDATA[news ticker]]></category>
		<category><![CDATA[testo effetto fade]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=911</guid>
		<description><![CDATA[In questo articolo creeremo, partendo da zero, una finestra contenente un elenco di news che in sequenza appariranno a video con un effetto a dissolvenza(fade). Utilizzeremo jQuery esclusivamente per gestire le animazioni e grazie a Javascript realizzeremo le funzioni necessarie per implementare la nostra finestra delle news. Per completare l&#8217;opera e dare al box la [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo creeremo, partendo da zero, una finestra contenente un elenco di news che in sequenza appariranno a video con un effetto a <strong>dissolvenza</strong>(fade).<br />
Utilizzeremo <em>jQuery</em> esclusivamente per gestire le animazioni e grazie a Javascript realizzeremo le funzioni necessarie per implementare la nostra finestra delle news. Per completare l&#8217;opera e dare al box la parvenza di finestra, forniremo una semplice barra del titolo compresa di icona per la chiusura della finestra.<br />
In fondo all’articolo è possibile <u>provare e scaricare il codice completo</u>.</p>
<p>Vediamo innanzitutto la parte html che oltre ad essere molto semplice ci fornisce una prima idea di come sarà il nostro news ticker:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id='box'&gt;
     &lt;div id='intestazione'&gt;
          &lt;div id='titolo'&gt;Le News&lt;/div&gt;
          &lt;img id='chiudi' src='chiudi.png' border='0' alt='Chiudi' align='right'/&gt;
     &lt;/div&gt;
     &lt;p&gt;... Testo della news numero 1 ...&lt;/p&gt;
     &lt;p&gt;... Testo della news numero 2 ...&lt;/p&gt;
     &lt;p&gt;... Testo della news numero 3 ...&lt;/p&gt;
     &lt;p&gt;... Testo della news numero 4 ...&lt;/p&gt;
&lt;/div&gt;
</pre>
<p>La regola per riempire il box è semplice:<br />
<strong>il testo di ciascuna news è in un paragrafo (&lt;p&gt;) diverso.</strong><br />
Questa sintassi va necessariamente rispettata perchè solo in questo modo Javascript sarà in grado di leggere il contenuto del box riconoscendo le news che lo compongono.<br />
All&#8217;interno del paragrafo siamo liberi di definire link, immagini o oggetti oltre al classico testo.<br />
Passiamo quindi al codice Javascript che si compone essenzialmente di <em>5 funzioni</em>. Il numero di funzioni non deve spaventare, infatti alcune di esse si compongo di poche righe. Tale scelta nasce dall&#8217;esigenza di suddividere e organizzare il codice in maniera logica e funzionale.</p>
<pre class="brush: jscript; title: ; notranslate">
// VELOCITA' TRANSIZIONE NEWS (ESPRESSA IN SECONDI)
var speed = 5;

// VARIABILI GLOBALI (NOTIZIE SARA' L'ARRAY CHE CONTERRA' LE NEWS)
var index = 0;
var limite = 0;
var notizie = null;
var rotazione = null;

// FUNZIONE DA CHIAMARE ALLO START DEL BOX NEWS
function start(id_div){
	var box = document.getElementById(id_div);
	$(box).mouseenter(function(){stop();});
	$(box).mouseleave(function(){play();});
	$('#chiudi').click(function(){ $(box).fadeOut();});
	notizie = box.getElementsByTagName('p');
	limite = notizie.length;
	inizializzazione(notizie);
	newsIn();
}
// FUNZIONE NECESSARIA ALL'INIZIALIZZAZIONE
function inizializzazione(elementi){
	for(i=0; i&lt;elementi.length; i++){
		elementi[i].style.display='none';
	}
}
// FUNZIONE PER NEWS IN INGRESSO
function newsIn(){
	rotazione = setTimeout('newsOut()', (speed*1000));
	$(notizie[index]).fadeIn(1000);
}
// FUNZIONE PER NEWS IN USCITA
function newsOut(){
	$(notizie[index]).fadeOut(1000, function(){
		index++;
		if(index==limite){
			index = 0;
		}
		newsIn();
	});
}
// FUNZIONE PER LO STOP DELL'ANIMAZIONE (ATTIVA AL PASSAGGIO DEL MOUSE)
function stop(){
	clearTimeout(rotazione);
}
// FUNZIONE PER LA RIPARTENZA DELL'ANIMAZIONE (ATTIVA AL PASSAGGIO DEL MOUSE)
function play(){
	clearTimeout(rotazione);
	rotazione = setTimeout('newsOut()', 1000);
}
</pre>
<p>Il codice è abbastanza commentato.<br />
La funzione da invocare per dare inizio all&#8217;animazione è: <strong style='color:#FF0000'>start(id_div)</strong>.<br />
Tale funzione, con il supporto di altre funzioni e variabili globali, ha il compito di individuare la finestra delle news tramite id, prelevare i testi delle news e realizzare un array, <em>notizie</em>, che li conterrà. Inoltre la funzione ha il compito di assegnare, tramite jQuery, delle funzioni agli eventi legati al movimento del mouse sulla finestra.<br />
Infatti le funzioni <strong>stop()</strong> e <strong>start()</strong> vengono richiamate quando l&#8217;utente entra e esce con il puntatore del mouse dalla finestra o per interrompere l&#8217;animazione favorendo la lettura della news o per farla ripartire.<br />
Le funzioni <strong style='color:#FF0000'>newsIn()</strong> e <strong style='color:#FF0000'>newsOut()</strong> effettuano lo &#8220;scambio&#8221; delle news utilizzando l&#8217;effetto fade fornito da jQuery.<br />
Da notare infine la temporizzazione che unisce le due funzioni sopracitate, gestibile tramite la varibile <strong>speed</strong> all&#8217;inizio del codice.</p>
<p>Per avviare la finestra con le news è necessaria la seguente riga Javascript dopo aver definito il div nell&#8217;html:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
     start('box');
&lt;/script&gt;
</pre>
<p>Come si potrà vedere dal codice completo presente online e scaricabile da questa pagina, la finestra è stata formattata con alcune semplici regole CSS che chiunque può personalizzare per adattare il layout a quello del proprio sito.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/newsFade/' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/newsFade.rar'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/finestra-news-con-effetto-fade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Il cifrario di Vigenère in PHP</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/il-cifrario-di-vigenere-in-php/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/il-cifrario-di-vigenere-in-php/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 09:41:26 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cifrario di vigenère]]></category>
		<category><![CDATA[php e cifrario di vigenère]]></category>
		<category><![CDATA[tavola di vigenère in php]]></category>
		<category><![CDATA[vigenère e php]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=888</guid>
		<description><![CDATA[In due articoli precedenti abbiamo analizzato, grazie a PHP, due algoritmi di cifratura: Cesare e Blowfish. Il primo al solo scopo didattico-storico, mentre il secondo pienamente utilizzabile all&#8217;interno delle nostre applicazioni, viste le sue potenzialità e il grado di sicurezza che fornisce. Il cifrario di Vigenère è il più semplice dei cifrari polialfabetici. Si basa [...]]]></description>
			<content:encoded><![CDATA[<p>In due articoli precedenti abbiamo analizzato, grazie a PHP, due algoritmi di cifratura: <a href='http://www.donatantonio.net/blog/?p=875'>Cesare</a> e <a href='http://www.donatantonio.net/blog/?p=859'>Blowfish</a>.<br />
Il primo al solo scopo didattico-storico, mentre il secondo pienamente utilizzabile all&#8217;interno delle nostre applicazioni, viste le sue potenzialità e il grado di sicurezza che fornisce.</p>
<p>Il <strong>cifrario di Vigenère</strong> è il più semplice dei cifrari polialfabetici. Si basa sull&#8217;uso di un versetto (chiave) per controllare l’alternanza degli alfabeti di sostituzione.<br />
Il metodo si può considerare una <em>generalizzazione del cifrario di Cesare</em>; invece di spostare sempre dello stesso numero di posti la lettera da cifrare, questa viene spostata di un numero di posti variabile ma ripetuto, determinato in base ad una parola chiave e da scrivere ripetutamente sotto il messaggio, carattere per carattere:</p>
<table border='0'>
<tr>
<td>testo in chiaro:</td>
<td style='color:red; font-weight:bold'>CIAO MAMMA CIAO</td>
</tr>
<tr>
<td>chiave:</td>
<td style='color:red; font-weight:bold'>CHIA VECHI AVEC</td>
</tr>
<tr>
<td>testo cifrato:</td>
<td style='color:red; font-weight:bold'>EPIO HEOTI CDEQ</td>
</tr>
</table>
<p>Il testo cifrato si ottiene spostando la lettera chiara di un numero fisso di caratteri, pari al numero ordinale della lettera corrispondente della chiave.<br />
Per semplificare la cifratura/decifratura Vigenère propose una matrice quadrata (26 X 26) composta da alfabeti ordinati e spostati.<br />
Nel codice che andremo a sviluppare utilizzeremo questa versione &#8220;<em>classica</em>&#8221; dell&#8217;algoritmo, difatti <strong>realizzeremo la matrice</strong> e la cifratura/decifratura verrà eseguita su di essa.<br />
In fondo all’articolo è possibile <u>provare e scaricare il codice completo</u>.</p>
<p>Passiamo quindi al codice della classe che chiameremo vigenere.php.<br />
La classe si comporrà dei seguenti metodi:</p>
<ul>
<li>Costruttore per la realizzazione della matrice (tavola di Vigenère)</li>
<li>Metodo di cifratura</li>
<li>Metodo di decifratura</li>
<li>Metodo che stampa a video la tavola di Vigenère</li>
</ul>
<p>Ecco il codice PHP:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
class Vigenere{
	var $alfabeto = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','W','X','Y','Z');
	var $matrice;
	var $chiave;

	// Il costruttore imposta la chiave e realizza la matrice
	function Vigenere($chiave){
		$this-&gt;chiave = str_replace(array(&quot; &quot;,&quot;.&quot;,&quot;,&quot;,&quot;;&quot;),&quot;&quot;, $chiave);
		$app1 = array();
		$app2 = array();
		$alfabeto_app = array();
		for($i=0; $i&lt;26; $i++){
			$k=0;
			$app1 = array_slice($this-&gt;alfabeto,0,$i);
			$app2 = array_slice($this-&gt;alfabeto,$i);
			$this-&gt;matrice[$i] = array_merge($app2,$app1);
		}
	}

	// Metodo che stampa la matrice
	function stampaTavola(){
		echo &quot;&lt;table border='1' cellpadding='1' cellspacing='0'&gt;
		&lt;tr&gt;&lt;td rowspan='27' width='50px' align='center'&gt;T&lt;br&gt;E&lt;br&gt;S&lt;br&gt;T&lt;br&gt;O&lt;br&gt; &lt;br&gt;I&lt;br&gt;N&lt;br&gt; &lt;br&gt;C&lt;br&gt;H&lt;br&gt;I&lt;br&gt;A&lt;br&gt;R&lt;br&gt;O&lt;br&gt;&lt;/td&gt;&lt;td colspan='26' align='center' height='50px'&gt;CHIAVE&lt;/td&gt;&lt;/tr&gt;&quot;;
		for($i=0; $i&lt;26; $i++){
			echo &quot;&lt;tr&gt;&quot;;
			for($j=0; $j&lt;26; $j++){
				echo &quot;&lt;td align='center'&gt;&quot;.$this-&gt;matrice[$i][$j].&quot;&lt;/td&gt;&quot;;
			}
			echo &quot;&lt;/tr&gt;&quot;;
		}
		echo &quot;&lt;/table&gt;&quot;;
	}

	// Metodo per la cifratura
	function cifratura($testo){
		$txt_cifrato = &quot;&quot;;
		$l_chiave = strlen($this-&gt;chiave);
		$k = 0;
		for($i=0; $i&lt;strlen($testo); $i++){
			$chr_t = substr($testo,$i,1);
			$chr_c = substr($this-&gt;chiave,$k,1);

			if(in_array(strtoupper($chr_t),$this-&gt;alfabeto) &amp;&amp; in_array(strtoupper($chr_c),$this-&gt;alfabeto)){
				$x = array_search(strtoupper($chr_t),$this-&gt;alfabeto);
				$y = array_search(strtoupper($chr_c),$this-&gt;alfabeto);
				$txt_cifrato = $txt_cifrato.$this-&gt;matrice[$x][$y];
				$k++;
			}else{
				$txt_cifrato = $txt_cifrato.strtoupper($chr_t);
			}
			if($k==$l_chiave) $k = 0;
		}
		return $txt_cifrato;
	}

	// Metodo per la decifratura
	function decifratura($testo){
		$txt_decifrato = &quot;&quot;;
		$l_chiave = strlen($this-&gt;chiave);
		$k = 0;
		for($i=0; $i&lt;strlen($testo); $i++){
			$chr_t = substr($testo,$i,1);
			$chr_c = substr($this-&gt;chiave,$k,1);
			if(in_array(strtoupper($chr_t),$this-&gt;alfabeto) &amp;&amp; in_array(strtoupper($chr_c),$this-&gt;alfabeto)){
				$colonna = array_search(strtoupper($chr_c),$this-&gt;alfabeto);
				$riga = 0;
				for($c=0; $c&lt;26; $c++){
					if($this-&gt;matrice[$c][$colonna]==$chr_t){
						$riga = $c;
						break;
					}
				}
				$txt_decifrato = $txt_decifrato.$this-&gt;matrice[$riga][0];
				$k++;
			}else{
				$txt_decifrato = $txt_decifrato.$chr_t;
			}
			if($k==$l_chiave) $k = 0;
		}
		return $txt_decifrato;
	}
}
?&gt;
</pre>
<p>Utilizzando un array contenete l&#8217;alfabeto, realizzeremo la matrice semplicemente tagliando ad ogni riga l&#8217;alfabeto in due parti, grazie alla funzione <strong>array_slice</strong>, per poi ricomporlo in maniera inversa.<br />
Grazie a questa matrice i metodi <strong>cifratura</strong> e <strong>decifratura</strong> risultano abbastanza semplici:<br />
- cicliamo lettera per lettera sul testo in chiaro e sulla chiave<br />
- per ogni coppia di lettere (chiaro-chiave) verifichiamo le posizioni nell&#8217;alfabeto<br />
- le coordinate x e y ottenute individueranno la lettera cifrata nella matrice<br />
Il cuore del codice di cifratura è composto essenzialmente dalle tre righe:</p>
<pre class="brush: php; title: ; notranslate">
$x = array_search(strtoupper($chr_t),$this-&gt;alfabeto);
$y = array_search(strtoupper($chr_c),$this-&gt;alfabeto);
$txt_cifrato = $txt_cifrato.$this-&gt;matrice[$x][$y];
</pre>
<p>Per la decifratura il procedimento è lo stesso, richiede solo una ricerca differente basata sulle colonne identificate dalle lettere che compongono la chiave.<br />
Infine è presente un metodo denominato <strong>stampaTavola</strong> che visualizza a video la matrice favorendo la verifica manuale del processo di cifratura/decifratura.</p>
<p>La classe va così richiamata:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
require_once 'vigenere.php';

$vigenere = new Vigenere($chiave);
$vigenere-&gt;stampaTavola();
$txt_cifrato = $vigenere-&gt;cifratura($testo);
$txt_decifrato = $vigenere-&gt;decifratura($txt_cifrato);
?&gt;
</pre>
<p>All’interno della cartella contenente il codice completo sono presenti i seguenti file:</p>
<ul>
<li>vigenere.php (la classe vista sopra)</li>
<li>test.php (lo script che effettua la cifratura/decifratura)</li>
<li>index.html (un form per il test di coppie chiave-testo in chiaro)</li>
</ul>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpVigenere/index.html' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpVigenere.rar'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/il-cifrario-di-vigenere-in-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Il cifrario di Cesare in PHP</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/il-cifrario-di-cesare-in-php/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/il-cifrario-di-cesare-in-php/#comments</comments>
		<pubDate>Tue, 19 Oct 2010 15:08:25 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[cifrario di cesare]]></category>
		<category><![CDATA[cifratura di cesare in php]]></category>
		<category><![CDATA[crittografia con php]]></category>
		<category><![CDATA[php e cifrario di cesare]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=875</guid>
		<description><![CDATA[In un articolo precedente si è vista la crittografia con algoritmo Blowfish in PHP. Esistono però molteplici algoritmi di cifratura, alcuni utilizzati durante le guerre mondiali, altri ancora più antichi utilizzati nel lontano medioevo. Uno degli algoritmi più antichi di cui si abbia traccia storica è il &#8220;Cifrario di Cesare&#8221;. È un cifrario a sostituzione [...]]]></description>
			<content:encoded><![CDATA[<p>In un <a href='http://www.donatantonio.net/blog/?p=859' target='_blank'>articolo precedente</a> si è vista la crittografia con algoritmo Blowfish in PHP.<br />
Esistono però molteplici algoritmi di cifratura, alcuni utilizzati durante le guerre mondiali, altri ancora più antichi utilizzati nel lontano medioevo.<br />
Uno degli algoritmi più antichi di cui si abbia traccia storica è il <strong>&#8220;Cifrario di Cesare&#8221;</strong>. È un cifrario a sostituzione monoalfabetica in cui ogni lettera del testo in chiaro è sostituita nel testo cifrato dalla lettera che si trova un certo numero di posizioni dopo nell&#8217;alfabeto. Questi tipi di cifrari sono detti anche cifrari a sostituzione: la sostituzione avviene lettera per lettera, scorrendo il testo dall&#8217;inizio alla fine.<br />
Grazie allo studio di alcuni storici sappiamo che Giulio Cesare utilizzava in genere una chiave di 3 per la cifratura.<br />
In generale quindi la seguente frase in chiaro:<br />
<strong style='color:red'>CIAO MAMMA</strong><br />
grazie al Cifrario di Cesare con chiave 3, diventa:<br />
<strong style='color:red'>FLDR PDPPD</strong></p>
<p>Realizzeremo quindi una classe PHP che chiameremo Cesare; implementeremo la logica di cifratura e decifratura con un valore della chiave arbitrario acquisito in fase di istanziamento.<br />
In fondo all&#8217;articolo è possibile <u>provare e scaricare il codice completo</u>.<br />
Vediamo innanzitutto la classe cesare.php:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
class Cesare{
	var $alfabeto = array('A','B','C','D','E','F','G','H','I','J','K','L','M','N', 'O','P','Q','R','S','T','U','V','W','X','Y','Z');
	var $chiave;

	// La chiave è un valore numerico da 1 a 25
	function Cesare($chiave){
		if($chiave&gt;25){
			$this-&gt;chiave = $chiave % 26;
		}else{
			$this-&gt;chiave = $chiave;
		}
	}

	// Metodo per sostituzione lettera in fase di cifratura
	function sostituisciLettera($lettera){
		if(in_array(strtoupper($lettera),$this-&gt;alfabeto)){
			$posizione = array_search(strtoupper($lettera),$this-&gt;alfabeto);
			return strtolower($this-&gt;alfabeto[($posizione+$this-&gt;chiave) % 26]);
		}else{
			return $lettera;
		}
	}

	// Metodo per sostituzione lettera in fase di decifratura
	function ripristinaLettera($lettera){
		if(in_array(strtoupper($lettera),$this-&gt;alfabeto)){
			$posizione = array_search(strtoupper($lettera),$this-&gt;alfabeto);
			if(($posizione - $this-&gt;chiave) &gt;= 0){
				return strtolower($this-&gt;alfabeto[($posizione - $this-&gt;chiave)]);
			}else{
				return strtolower($this-&gt;alfabeto[(count($this-&gt;alfabeto) + ($posizione - $this-&gt;chiave))]);
			}
		}else{
			return $lettera;
		}
	}

	// Metodo per cifratura di un testo in chiaro
	function cifratura($testo){
		$txt_cifrato = &quot;&quot;;
		for($i=0; $i&lt;strlen($testo); $i++){
			$carattere = substr($testo,$i,1);
			$carattere_cifrato = $this-&gt;sostituisciLettera($carattere);
			$txt_cifrato = $txt_cifrato.$carattere_cifrato;
		}
		return $txt_cifrato;
	}

	// Metodo per decifratura di un testo cifrato
	function decifratura($testo){
		$txt_chiaro = &quot;&quot;;
		for($i=0; $i&lt;strlen($testo); $i++){
			$carattere = substr($testo,$i,1);
			$carattere_chiaro = $this-&gt;ripristinaLettera($carattere);
			$txt_chiaro = $txt_chiaro.$carattere_chiaro;
		}
		return $txt_chiaro;
	}
}
?&gt;
</pre>
<p>La classe fa uso di un array denominato alfabeto che contiene appunto le lettere dell&#8217;alfabeto. Il costruttore imposta il valore della chiave che sarà un valore compreso tra 0 e 25, tenendo comunque presente che una chiave uguale a 0 produrrà un testo cifrato uguale a quello in chiaro.<br />
I metodi:<br />
- <strong>sistituisciLettera</strong><br />
- <strong>ripristinaLettera</strong><br />
si occupano di sostituire un carattere con un altro in relazione al valore della chiave. Il primo metodo sarà utilizzato in fase di cifratura, sostituendo quindi una lettera con la successiva di <em>n</em> posizioni. Viceversa il metodo ripristinaLettera sarà utilizzato in fase di decifratura sostituendo la lettera in input con la precedente di <em>n</em> posizioni.<br />
Infine i metodi <strong>cifratura</strong> e <strong>decifratura</strong> hanno il compito di scorrere il testo in chiaro o cifrato per convertire una lettera alla volta.</p>
<p>La classe va così invocata:</p>
<pre class="brush: php; title: ; notranslate">
require_once 'cesare.php';

$cifrario = new Cesare($chiave);
$txt_cifrato = $cifrario-&gt;cifratura($testo);
$txt_chiaro = $cifrario-&gt;decifratura($txt_cifrato);
</pre>
<p>All’interno della cartella contenente il codice completo sono presenti i seguenti file:</p>
<ul>
<li>cesare.php (la classe vista sopra)</li>
<li>test.php (lo script che effettua la cifratura/decifratura)</li>
<li>index.html (un form per il test di coppie chiave-testo in chiaro)</li>
</ul>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpCesare/index.html' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpCesare.rar' target='_blank'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/il-cifrario-di-cesare-in-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Crittografia con Php/Blowfish</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/crittografia-con-phpblowfish/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/crittografia-con-phpblowfish/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 13:25:12 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[blowfish php]]></category>
		<category><![CDATA[crittografia con blowfish]]></category>
		<category><![CDATA[crittografia con php]]></category>
		<category><![CDATA[esempio blowfish]]></category>
		<category><![CDATA[php e blowfish]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=859</guid>
		<description><![CDATA[In questo articolo vedremo come utilizzare l&#8217;algoritmo Blowfish per cifrare un testo in chiaro. Innazitutto Blowfish è un algoritmo a chiave simmetrica a blocchi, ideato nel 1993 da Bruce Schneier e implementato in molti software di crittografia. Quest’algoritmo utilizza varie tecniche tra le quali la rete Feistel, le S-box dipendenti da chiavi e funzioni F [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo vedremo come utilizzare l&#8217;algoritmo Blowfish per cifrare un testo in chiaro.<br />
Innazitutto <strong>Blowfish</strong> è un algoritmo a chiave simmetrica a blocchi, ideato nel 1993 da Bruce Schneier e implementato in molti software di crittografia.<br />
Quest’algoritmo utilizza varie tecniche tra le quali la rete Feistel, le S-box dipendenti da chiavi e funzioni F non invertibili che lo rendono, forse, l’algoritmo più sicuro attualmente disponibile. Le chiavi utilizzate sono di dimensioni variabili fino ad un massimo di 448 bit e i blocchi utilizzati per la cifratura sono di 64 bit. Non si conoscono al momento tecniche di attacco valide nei suoi confronti. E&#8217; considerato uno degli algoritmi di cifratura a blocchi più veloce (risulta più veloce di DES e IDEA). Blowfish non è brevettato ed è di dominio pubblico.</p>
<p>Evitando di entrare nel cuore dell&#8217;algoritmo (troppo complesso per essere spiegato in questa sede), realizzeremo una classe php che inglobi l&#8217;algoritmo fornendoci essenzialmente solo i metodi che ci interessano:</p>
<ul>
<li>Impostare la chiave</li>
<li>Cifrare un testo</li>
<li>Decifrare un testo</li>
</ul>
<p>Inoltre realizzeremo uno script di test e un form html per verificare il risultato finale.<br />
Di seguito il codice della classe Crittografia:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// Richiamo il codice che implementa Blowfish
require_once('blowfish.php');

class Crittografia{
	var $chiave;
	var $blowfish;

	// Costruttore della classe Crittografia - prende in input la chiave in chiaro
	function Crittografia($stringa){
		$this-&gt;chiave = $stringa;
	}

	// Funzione di codifica di un testo in chiaro
	function cifratura($stringa){
		$this-&gt;blowfish = new Horde_Cipher_blowfish;
		$encrypt = '';
		$mod = strlen($stringa) % 8;
		if ($mod &gt; 0) {
			$stringa .= str_repeat(&quot;&#92;&#48;&quot;, 8 - $mod);
		}
		foreach (str_split( $stringa, 8 ) as $chunk){
			$encrypt .= $this-&gt;blowfish-&gt;encryptBlock($chunk, $this-&gt;getChiave());
		}
		return base64_encode($encrypt);
	}

	// Funzione di decodifica di un testo cifrato
	function decifratura($stringa){
		$this-&gt;blowfish = new Horde_Cipher_blowfish;
		$decrypt = '';
		$data = base64_decode($stringa);
		foreach (str_split( $data, 8 ) as $chunk){
			$decrypt .= $this-&gt;blowfish-&gt;decryptBlock($chunk, $this-&gt;getChiave());
		}
		return trim($decrypt);
	}

	// Funzione per restituzione della chiave
	function getChiave(){
		return $this-&gt;chiave;
	}
}
?&gt;
</pre>
<p>La classe Crittografia farà uso dei metodi dell&#8217;algoritmo Blowfish, quindi il codice inizia con il <strong>require</strong> della classe.<br />
Il costruttore della classe è molto semplice, infatti acquisisce in input una stringa che sarà la chiave utilizzata per la cifratura/decifratura.<br />
Di seguito i metodi fondamentali, cifratura e decifratura. Entrambi prendono come parametro una stringa e restituiscono una nuova stringa che nel primo caso sarà il testo cifrato e viceversa nel secondo caso sarà il testo in chiaro.<br />
All&#8217;interno di entrambi i metodi viene istanziato l&#8217;oggetto <strong>Horde_Cipher_blowfish</strong> e viene suddivisa la stringa di input in gruppi di 8 caratteri per effettuare la cifratura/decifratura un blocco per volta.<br />
Vediamo quindi in che modo richiamare la classe Crittografia:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// Richiamo la classe
require_once 'crittografia.php';

// Istanzio l'oggetto Crittografia con chiave $chiave
$blowfish = new Crittografia($chiave);

// Cifro un testo $txt
$txt_cifrato = $blowfish-&gt;cifratura($txt);

// Decifro il testo ottenuto dalla cifratura
$txt_originale = $blowfish-&gt;decifratura($txt_cifrato);
?&gt;
</pre>
<p>All&#8217;interno della cartella contenente il codice completo sono presenti i seguenti file:</p>
<ul>
<li>blowfish.php (l&#8217;algoritmo di cifratura)</li>
<li>crittografia.php (la classe che inbloba l&#8217;algoritmo blowfish)</li>
<li>test.php (lo script che effettua la cifratura/decifratura)</li>
<li>index.html (un form per il test di coppie chiave-testo in chiaro)</li>
</ul>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpBlowfish/index.html' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/phpBlowfish.rar' target='_blank'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/crittografia-con-phpblowfish/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Div al centro che segue lo scrolling</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/div-al-centro-che-segue-lo-scrolling/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/div-al-centro-che-segue-lo-scrolling/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 10:30:13 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[div al centro assoluto]]></category>
		<category><![CDATA[div al centro con scrolling]]></category>
		<category><![CDATA[div che scolla nella pagina]]></category>
		<category><![CDATA[div per banner sempre al centro]]></category>
		<category><![CDATA[div sempre al centro pagina]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=851</guid>
		<description><![CDATA[In un articolo di un pò di tempo fa, si è visto come centrare con CSS/Javascript un div al centro della pagina. L&#8217;obiettivo di questo nuovo articolo è far si che il div venga visualizzato sempre al centro della finestra, anche qualora l&#8217;utente fa lo scrolling della pagina. Il div in questione seguirà l&#8217;utente, restando [...]]]></description>
			<content:encoded><![CDATA[<p>In un <a href='http://www.donatantonio.net/blog/?p=228'>articolo</a> di un pò di tempo fa, si è visto come centrare con CSS/Javascript un div al centro della pagina.<br />
L&#8217;obiettivo di questo nuovo articolo è far si che il div venga visualizzato sempre al centro della finestra, anche qualora l&#8217;utente fa lo scrolling della pagina.<br />
Il div in questione seguirà l&#8217;utente, restando effettivamente <strong>sempre al centro della pagina</strong>. Potremo utilizzare questa tecnica per inserire un messaggio o un immagine in evidenza nel nostro sito oppure un banner.</p>
<p>Realizzeremo una sola funzione che chiameremo appunto: <strong>centra()</strong>.<br />
Per rendere più efficiente il nostro codice Javascript utilizzeremo il framework <strong>JQuery</strong> così saremo quantomeno sicuri che il risultato finale sia adeguato per la maggior parte dei browser in circolazione. Comunque il suo uso sarà minimo e non richiede particolari conoscenze.<br />
In fondo all’articolo è possibile <strong>provare</strong> o <strong>scaricare</strong> il codice completo.</p>
<p>Vediamo quindi il codice della funzione Javascript:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
function centra(div){
	var DIVwidth = $(div).width();
	var DIVheight = $(div).height();
	var SCREENwidth = $(document).width();
	var SCREENheight = $(window).height();
	var SCREENscrolltop = $(window).scrollTop();
	$(div).animate({
		top: (SCREENheight-DIVheight)/2+SCREENscrolltop+&quot;px&quot;,
		left: (SCREENwidth-DIVwidth)/2+&quot;px&quot;
	},100,function(){
        centra(div);
    });
}
&lt;/script&gt;
</pre>
<p>La funzione una volta richiamata calcola larghezza e altezza del div da centrare, quindi larghezza e altezza della finestra del browser e la quantità di scroll effettuato (scrollTop()).<br />
Il div viene successivamente <strong>animato</strong> impostando i due nuovi valori per le proprietà <strong>top e left</strong>.<br />
Dove top sarà dato da: <strong>(altezza finestra &#8211; altezza div)/2 + scroll</strong><br />
Mentre left sarà dato da: <strong>(larghezza finestra &#8211; larghezza div)/2</strong><br />
La funzione viene poi richiamata ad intervalli regolari(di default 100 ms) per ricalcolare il posizionamento.<br />
Infine per invocare la funzione, su un ipotetico div con <strong>id=&#8217;box_centrale&#8217;</strong>, è necessaria la seguente sintassi:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
centra('#box_centrale');
&lt;/script&gt;
</pre>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/centerdiv/' target='_blank'>qui</a></strong> è possibile vedere in azione il codice.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/centerdiv.rar'>qui</a></strong> è possibile scaricare il codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/div-al-centro-che-segue-lo-scrolling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Aggiungere righe a tabella in maniera dinamica</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/aggiungere-righe-a-tabella-in-maniera-dinamica/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/aggiungere-righe-a-tabella-in-maniera-dinamica/#comments</comments>
		<pubDate>Thu, 07 Oct 2010 09:38:57 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[aggiungere righe a tabella html]]></category>
		<category><![CDATA[aggiungere righe dinamicamente]]></category>
		<category><![CDATA[javascript dom]]></category>
		<category><![CDATA[righe dinamiche]]></category>
		<category><![CDATA[table dhtml]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=758</guid>
		<description><![CDATA[In questo articolo vedremo un esempio di applicazione DHTML(Dynamic HTML). Utilizzando Javascript per accedere al DOM, realizzeremo una tabella inizialmente vuota che, tramite un&#8217;apposita funzione richiamata da un bottone, verrà riempita riga per riga dall&#8217;utente. L&#8217;applicazione si compone essenzialmente di una sola funzione; la quale genererà una nuova riga con un numero di celle pari [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo vedremo un esempio di applicazione <strong>DHTML</strong>(Dynamic HTML). Utilizzando Javascript per accedere al <strong>DOM</strong>, realizzeremo una tabella inizialmente vuota che, tramite un&#8217;apposita funzione richiamata da un bottone, verrà riempita riga per riga dall&#8217;utente.<br />
L&#8217;applicazione si compone essenzialmente di <strong>una sola funzione</strong>; la quale genererà una nuova riga con un numero di celle pari al numero di colonne presenti nella tabella. Per ogni cella chiederà all&#8217;utente, tramite prompt, il testo da inserire.<br />
In fondo all&#8217;articolo è possibile <strong>provare o scaricare</strong> il codice completo.</p>
<p>La funzione Javascript si chiamerà <strong>aggiungiRiga()</strong>:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
function aggiungiRiga(id_table){
     var table = document.getElementById(id_table);
     var tbody = table.getElementsByTagName('tbody')[0];
     var colonne = table.getElementsByTagName('th').length;
     var tr = document.createElement('tr');
     for(var i=0; i&lt;colonne; i++){
          var td = document.createElement('td');
          var tx = document.createTextNode(prompt(&quot;Inserisci testo per cella &quot;+(i+1),&quot;&quot;));
          td.appendChild(tx);
          tr.appendChild(td);
     }
     tbody.appendChild(tr);
}
&lt;/script&gt;
</pre>
<p>Analizziamo brevemente la funzione che acquisice come parametro d&#8217;ingresso l&#8217;id della tabella:<br />
- Preleviamo il riferimento alla tabella e al tbody<br />
- Calcoliamo il numero di colonne presenti<br />
- Cicliamo e per ogni cella nuova chiediamo da prompt il testo<br />
- Nidifichiamo il testo nel td e il td nel tr<br />
- Aggiungiamo la nuova riga tr nel tbody</p>
<p>Anche per chi è all&#8217;asciutto di DOM (elementi, nodi e child) non risulterà difficile comprendere il codice della funzione aggiungiRiga().<br />
Infine vediamo il codice HTML che inizializza la tabella e fornisce il richiamo alla funzione:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;table border='2' id='my_table' class='tabella' cellspacing='0' cellpadding='0'&gt;
	&lt;thead&gt;&lt;tr&gt;&lt;th&gt;INTESTAZIONE COLONNA 1&lt;/th&gt;&lt;th&gt;INTESTAZIONE COLONNA 2&lt;/th&gt;&lt;th&gt;INTESTAZIONE COLONNA 3&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
	&lt;tbody&gt;
	&lt;!-- IL BODY E' INIZIALMENTE VUOTO --&gt;
	&lt;/tbody&gt;
&lt;/table&gt;&lt;br/&gt;
&lt;input type='button' value='Aggiungi riga' onClick=&quot;aggiungiRiga('my_table')&quot; /&gt;
</pre>
<p>La tabella è molto semplice. Richiede essenzialmente un ID e la suddivisione in head e body (essenziale per il corretto funzionamento su Explorer). Possiamo aumentare il numero di colonne liberamente, sarà la funzione ad adattarsi ad essa.</p>
<p><strong>Cliccando <a href='http://www.donatantonio.net/script/dynamic_table/dynamic_table.html' target='_blank'>qui</a></strong> è possibile vedere in azione il codice. (abilitare l&#8217;apertura dei prompt)<br/><br />
<strong>Cliccando <a href='http://www.donatantonio.net/script/dynamic_table.rar' target='_blank'>qui</a></strong> è possibile scaricare il codice.<br />
<br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/aggiungere-righe-a-tabella-in-maniera-dinamica/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Presentazione di diapositive con JQuery</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/presentazione-di-diapositive-con-jquery/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/presentazione-di-diapositive-con-jquery/#comments</comments>
		<pubDate>Wed, 22 Sep 2010 08:54:58 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[effetto fadeIn jquery]]></category>
		<category><![CDATA[effetto fadeOut jquery]]></category>
		<category><![CDATA[presentazione diapositive]]></category>
		<category><![CDATA[presentazione diapositive con jquery]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=728</guid>
		<description><![CDATA[In un articolo precedente si è visto come realizzare una semplice presentazione di immagini con poche istruzione Javascript, utilizzando i cicli di temporizzazione per sostituire di volta in volta le immagini. Lo script che analizzeremo consiste in un miglioramento grafico di quello precedente. Infatti verrà utilizzato un effetto sfumatura per sostituire un&#8217;immagine con la successiva. [...]]]></description>
			<content:encoded><![CDATA[<p>In un <a href='http://www.donatantonio.net/blog/?p=709' target='_blank'>articolo precedente</a> si è visto come realizzare una semplice presentazione di immagini con poche istruzione Javascript, utilizzando i cicli di temporizzazione per sostituire di volta in volta le immagini.<br />
Lo script che analizzeremo consiste in un <strong>miglioramento grafico</strong> di quello precedente. Infatti verrà utilizzato un effetto sfumatura per sostituire un&#8217;immagine con la successiva.<br />
A tale scopo è necessario utilizzare il framework <a href='http://www.jquery.com' taget='_blank'>JQuery</a>, in particolare due funzioni del package Effects:<br />
- <strong>fadeOut()</strong><br />
- <strong>fadeIn()</strong></p>
<p>Vediamo innanzitutto il codice javascript completo:</p>
<pre class="brush: jscript; title: ; notranslate">
// Richiamo il framework JQuery
&lt;script type='text/javascript' src='jquery-1.4.2.min.js'&gt;&lt;/script&gt;
&lt;script type='text/javascript'&gt;
// Realizzo una matrice contenente le immagini da presentare
var immagini = new Array();
immagini[0] = new Image();
immagini[0].src = &quot;uno.jpg&quot;;
immagini[1] = new Image();
immagini[1].src = &quot;due.jpg&quot;;
immagini[2] = new Image();
immagini[2].src = &quot;tre.jpg&quot;;
immagini[3] = new Image();
immagini[3].src = &quot;quattro.jpg&quot;;

var timeout;
var index = 1;

// Funzione che sostituisce un'immagine con la successiva
// JQUERY FADEOUT - FADEIN
function RotazioneImmagini(){
     $('#box_immagine').fadeOut(1000, function(){
		document.getElementById('box_immagine').src = immagini[index].src;
		$('#box_immagine').fadeIn(1000, function(){
			index++;
			if(index&gt;=immagini.length){
				index = 0;
			}
			timeout = setTimeout('RotazioneImmagini();', 1000);
		});
	 });
}

// Funzione che permette di interrompere la rotazione delle immagini
function StopRotazione(){
     clearTimeout(timeout);
}
&lt;/script&gt;
</pre>
<p>Il cuore dello script è la funzione <strong>RotazioneImmagini()</strong>.<br />
Prima di sostituire effettivamente un immagine con la successiva viene applicato un effetto di sfumatura in uscita (fadeOut) e solo al termine di questo viene effettuato lo scambio di immagini e quindi applicato un effetto di sfumatura in entrata (fadeIn). In altre parole, l&#8217;immagine viene sostituita mentre il box che le conterrà (box_immagine) non è visibile e quindi prima di effettuare il fadeIn.<br />
Da notare i parametri e la nidificazione di funzioni per fadeOut e fadeIn. I parametri per queste due funzioni sono:</p>
<p><strong>.fadeOut(durata effetto, funzione da eseguire al termine)<br />
.fadeIn(durata effetto, funzione da eseguire al termine)</strong></p>
<p>Nonostante il secondo parametro sia opzionale, nel nostro script abbiamo utilizzato il <strong>callback</strong> per eseguire in un preciso ordine le operazioni. Difatti solo dopo la sfumatura in uscita viene effettuata la sostituzione dell&#8217;immagine, e solo dopo la sfumatura in ingresso viene riattivato il ciclo di temporizzazione.<br />
In alternativa al fade avremmo potuto utilizzare anche un effetto <strong>slide</strong>, sostituendo fadeOut con <strong>slideUp</strong> e fadeIn con <strong>slideDown</strong>.</p>
<p>Infine la porzione di html per completare la pagina:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src='uno.jpg' id='box_immagine'/&gt;
&lt;br/&gt;
&lt;input type='button' value='Start Presentazione' onClick='RotazioneImmagini();'/&gt;
&lt;input type='button' value='Stop Presentazione' onClick='StopRotazione();'/&gt;
</pre>
<p><a href='http://www.donatantonio.net/script/presentazione/index_jquery.html' target='_blank'>Cliccando qui è possibile vedere in esecuzione il codice completo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/presentazione-di-diapositive-con-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introduzione agli ipertesti</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/introduzione-agli-ipertesti/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/introduzione-agli-ipertesti/#comments</comments>
		<pubDate>Mon, 20 Sep 2010 16:11:18 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Tutorial e Pubblicazioni]]></category>
		<category><![CDATA[gli ipertesti]]></category>
		<category><![CDATA[introduzione agli ipertesti]]></category>
		<category><![CDATA[tipologie di ipertesti]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=719</guid>
		<description><![CDATA[In questa relazione viene introdotto il concetto di ipertesto e successivamente quello di ipermedia, ne vengono trattate le diverse tipologie, analizzando in dettaglio la struttura e le modalità realizzative. Inoltre viene fornita una panoramica sulle caratteristiche che compongono un ipertesto, il ciclo di vita ed eventuali problematiche inerenti il loro utilizzo. Lo scopo finale di [...]]]></description>
			<content:encoded><![CDATA[<p>In questa relazione viene introdotto il concetto di ipertesto e successivamente quello di ipermedia, ne vengono trattate le diverse tipologie, analizzando in dettaglio la struttura e le modalità realizzative. Inoltre viene fornita una panoramica sulle caratteristiche che compongono un ipertesto, il ciclo di vita ed eventuali problematiche inerenti il loro utilizzo.<br />
Lo scopo finale di questa relazione è introdurre il lettore, per piccoli passi, allo studio dei linguaggi di markup (html e xml).</p>
<table border="0">
<tbody>
<tr>
<td height="32">Disponibile in formato:</td>
<td>PDF</td>
</tr>
<tr>
<td height="32">Numero di Pagine:</td>
<td>10</td>
</tr>
<tr>
<td height="32">Anno:</td>
<td>2010</td>
</tr>
<tr>
<td height="32">Download:</td>
<td>
<a href="http://www.donatantonio.net//guide_pdf/INTRODUZIONE_AGLI_IPERTESTI_comunicare_sul_web.pdf"><br />
<img src="http://www.donatantonio.net//guide_pdf/logo-pdf.gif" border="0" alt="Download" /><br />
</a>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/introduzione-agli-ipertesti/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Presentazione di diapositive temporizzata</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/presentazione-di-diapositive-temporizzata/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/presentazione-di-diapositive-temporizzata/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 14:43:02 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[immagini in rotazione]]></category>
		<category><![CDATA[presentazione diapositive]]></category>
		<category><![CDATA[temporizzazione javascript]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=709</guid>
		<description><![CDATA[Tramite lo script che andremo ad analizzare verrà implementata una presentazione di immagini. Le immagini verranno presentate in sequenza e saranno resi disponibili due bottoni, uno per avviare la presentazione e l&#8217;altro per fermarla. Innanzitutto vediamo il codice javascript: Prima di analizzare il codice javascript vediamo, per completare, la porzione di html necessaria: Le prime [...]]]></description>
			<content:encoded><![CDATA[<p>Tramite lo script che andremo ad analizzare verrà implementata una presentazione di immagini.<br />
Le immagini verranno presentate in sequenza e saranno resi disponibili due bottoni, uno per avviare la presentazione e l&#8217;altro per fermarla.<br />
Innanzitutto vediamo il codice javascript:</p>
<pre class="brush: jscript; title: ; notranslate">
// Realizzo una matrice contenente le immagini da presentare
var immagini = new Array();
immagini[0] = new Image();
immagini[0].src = &quot;uno.jpg&quot;;
immagini[1] = new Image();
immagini[1].src = &quot;due.jpg&quot;;
immagini[2] = new Image();
immagini[2].src = &quot;tre.jpg&quot;;
immagini[3] = new Image();
immagini[3].src = &quot;quattro.jpg&quot;;

var timeout;
var index = 0;

// Funzione che sostituisce un'immagine con la successiva
function RotazioneImmagini(){
     document.getElementById('box_immagine').src = immagini[index].src;
     index++;
     if(index&gt;=immagini.length){
          index = 0;
     }
     timeout = setTimeout('RotazioneImmagini();', 1000);
}

// Funzione che permette di interrompere la rotazione delle immagini
function StopRotazione(){
     clearTimeout(timeout);
}
</pre>
<p>Prima di analizzare il codice javascript vediamo, per completare, la porzione di html necessaria:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;img src='uno.jpg' id='box_immagine'/&gt;
&lt;br/&gt;
&lt;input type='button' value='Start Presentazione' onClick='RotazioneImmagini();'/&gt;
&lt;input type='button' value='Stop Presentazione' onClick='StopRotazione();'/&gt;
</pre>
<p>Le prime righe del codice javascript impostano la matrice contenente le immagini che inseriremo nella presentazione di diapositive. Nel codice vengono istanziate 4 immagini ma nessuno ci vieta di aumentarne il numero.<br />
Dopo che le immagini sono state precaricate vengono dichiarate due variabili, la prima (timeout) tiene traccia di ogni timeout, mentre la seconda (index) mantiene il puntatore all&#8217;immagine successiva da visualizzare.<br />
Successivamente troviamo la funzione RotazioneImmagini() che dopo aver sostituito l&#8217;immagine attuale con la successiva, richiama se stessa dopo un secondo. Da notare come nella funzione, dopo la sostituzione dell&#8217;immagine, venga incrementato di 1 il valore di index che punterà all&#8217;immagine successiva.<br />
Infine la funzione StopRotazione() permette di interrompere la rotazione delle immagini.<br />
Ultima cosa da notare è nel codice html, infatti per gestire lo spazio dedicato all&#8217;immagine è stato necessario assegnare un id (box_immagine) al tag img.</p>
<p><a href='http://www.donatantonio.net/script/presentazione/index.html' target='_blank'>Cliccando qui è possibile vedere in esecuzione il codice completo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/presentazione-di-diapositive-temporizzata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Costruire un orologio con cicli di temporizzazione</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/costruire-un-orologio-con-cicli-di-temporizzazione/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/costruire-un-orologio-con-cicli-di-temporizzazione/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 10:01:27 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[orologio in javascript]]></category>
		<category><![CDATA[temporizzazione javascript]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=705</guid>
		<description><![CDATA[La precisa temporizzazione degli eventi sulle pagine web le trasforma da documenti statici a vere applicazioni multimediali. Un esempio classico e allo stesso tempo esaustivo è la realizzazione di un orologio javascript che utilizzi dei cicli di temporizzazione. L&#8217;istruzione necessaria a temporizzare una funzione è: Mentre per interrompere un ciclo di temporizzazioni la funzione è: [...]]]></description>
			<content:encoded><![CDATA[<p>La precisa temporizzazione degli eventi sulle pagine web le trasforma da documenti statici a vere applicazioni multimediali.<br />
Un esempio classico e allo stesso tempo esaustivo è la realizzazione di un orologio javascript che utilizzi dei cicli di temporizzazione.</p>
<p>L&#8217;istruzione necessaria a temporizzare una funzione è:</p>
<pre class="brush: jscript; title: ; notranslate">
var timeout = setTimeout('funzione();',1000);
</pre>
<p>Mentre per interrompere un ciclo di temporizzazioni la funzione è:</p>
<pre class="brush: jscript; title: ; notranslate">
clearTimeout(timeout);
</pre>
<p>Vediamo ora il codice necessario alla realizzazione di un orologio:</p>
<pre class="brush: jscript; title: ; notranslate">
var timeout;

function ScriviOra(){
     // Istanzio l'oggetto Date e ricavo ora, minuti e secondi
     var oggi = new Date();
     var ore = oggi.getHours();
     var minuti = oggi.getMinutes();
     var secondi = oggi.getSeconds();

     // Formatto minuti e secondi su due cifre
     minuti = Formatta(minuti);
     secondi = Formatta(secondi);

     // Scrivo la stringa contenente l'orario in un campo di tipo input
     var orario = ore + &quot;:&quot; + minuti + &quot;:&quot; + secondi;
     document.getElementById('time').value=orario;

     // Ripeto la funzione dopo un secondo
     timeout = setTimeout('ScriviOra();', 1000);
}

// Funzione necessaria a formattare l'orario
function Formatta(valore){
     if(valore &lt; 10){
          return &quot;0&quot;+valore;
     }
     return valore;
}

// La funzione necessaria ad interrompere l'orologio
function FermaOra(){
     clearTimeout(timeout);
}
</pre>
<p>Visto il codice javascript è ora necessario creare il campo di input che conterrà l&#8217;orario e due bottoni, uno per inizializzare l&#8217;orologio e uno per interromperlo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;input type='text' id='time' size='8' readonly/&gt;
&lt;br/&gt;
&lt;input type='button' value='Start orologio' onClick='ScriviOra();'/&gt;
&lt;input type='button' value='Stop orologio' onclick='FermaOra();'/&gt;
</pre>
<p>Il cuore dello script è la funzione ScriviOra(). Ogni secondo la funzione determina l&#8217;ora corrente, la formatta e la inserisce nel campo di testo e imposta un timeout per eseguire ScriviOra() un secondo dopo.<br />
Da notare come lo script inizi dichiarando la variabile che conterrà i timeout.<br />
Infine la funzione FermaOra() ha il compito di annullare l&#8217;ultimo timeout impostato, l&#8217;effetto sarà quello di veder fermo l&#8217;orario all&#8217;ultima esecuzione della funzione ScriviOra().</p>
<p><a href='http://www.donatantonio.net/script/orologio/index.html' target='_blank'>Cliccando qui è possibile vedere in esecuzione il codice completo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/costruire-un-orologio-con-cicli-di-temporizzazione/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax con JQuery</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/ajax/ajax-con-jquery/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/ajax/ajax-con-jquery/#comments</comments>
		<pubDate>Thu, 16 Sep 2010 09:04:02 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[ajax con jquery]]></category>
		<category><![CDATA[jQuery.ajax()]]></category>
		<category><![CDATA[utilizzare ajax con jquery]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=693</guid>
		<description><![CDATA[Come descritto in altri articoli è possibile implementare in maniera autonoma le chiamate Ajax, realizzando una o più funzioni che con l&#8217;utilizzo dell&#8217;oggetto XMLHttpRequest e di alcune specifiche Javascript permettano di aggiornare gli elementi che compongono una pagina html. A volte però, soprattutto in occasione di progetti più ampi e complessi, è utile ricorrere ad [...]]]></description>
			<content:encoded><![CDATA[<p>Come descritto in altri <a href='http://www.donatantonio.net/blog/?p=668'>articoli</a> è possibile implementare in maniera autonoma le chiamate Ajax, realizzando una o più funzioni che con l&#8217;utilizzo dell&#8217;oggetto XMLHttpRequest e di alcune specifiche Javascript permettano di aggiornare gli elementi che compongono una pagina html.<br />
A volte però, soprattutto in occasione di progetti più ampi e complessi, è utile ricorrere ad un prezioso alleato, il framework <strong>JQuery</strong>.</p>
<p>JQuery ci fornisce una struttura semplice e snella per implementare chiamare Ajax. La funzione in questione richiede all&#8217;utente una serie di informazioni come ad esempio: url della risorsa, parametri in input, tipo di dato restituito e fornisce sottofunzioni per gestire il buono o cattivo esito della richiesta.<br />
Ecco la <strong>sintassi</strong> per implementare una semplice chiamata Ajax con JQuery:</p>
<pre class="brush: jscript; title: ; notranslate">
$.ajax({
     type: &quot;GET&quot;,
     dataType: &quot;html&quot;,
     url: &quot;pagina.php&quot;,
     data: &quot;parametro=valore&quot;,
     success: function(dati){
                       // OPERAZIONI DA SVOLGERE IN CASO DI SUCCESSO
     }
     error: function(richiesta,stato,errori){
                   // OPERAZIONI DA SVOLGERE IN CASO DI INSUCCESSO
     }
});
</pre>
<p>Il codice appena visto è gia sufficiente per implementare Ajax con JQuery. Andando per ordine, analizziamo ciascun parametro:</p>
<p><strong style='color:red'>TYPE</strong> : specifica la modalità di passaggio dei parametri, può essere GET o POST<br />
<strong style='color:red'>DATATYPE</strong> : specifica il tipo di dato che la chiamata restituisce, può essere html, json, script o xml<br />
<strong style='color:red'>URL</strong> : specifica l&#8217;url dello script lato server a cui effettuare la richiesta<br />
<strong style='color:red'>DATA</strong> : specifica la stringa contenente gli eventuali parametri da passare allo script lato server<br />
<strong style='color:red'>SUCCESS</strong> : racchiude la funzione da invocare nel momento in cui la richiesta Ajax vada a buon fine<br />
<strong style='color:red'>ERROR</strong> : racchiude la funzione da invocare nel momento in cui la richiesta Ajax non vada a buon fine</p>
<p>Vediamo ora un <strong>esempio</strong> concreto di utilizzo Ajax con JQuery. Realizzeremo una funzione javascript che effettua la chiamata ad un file remoto che ha come unico scopo quello di restituire un testo che va ad aggiornare un div html. Per completare l&#8217;esempio, immaginiamo di dover passare un parametro alla pagina lato server.</p>
<pre class="brush: jscript; title: ; notranslate">
function AggiornaDIV(id_div){
     // Prelevo il parametro da passare
     var parametro = document.getElementById('parametroDaPassare').value;

     // Effettuo la chiamata Ajax
     $.ajax({
          type: &quot;GET&quot;,
          dataType: &quot;html&quot;,
          url: &quot;pagina.php&quot;,
          data: &quot;parametro=&quot;+parametro,
          success: function(dati){
               // Aggiorno il contenuto del DIV con i dati ricevuti
               document.getElementById(id_div).innerHTML=dati;
          }
          error: function(richiesta,stato,errori){
               // Visualizzo un messaggio di errore in caso di chiamata fallita
               alert('Errore nella chiamata AJAX:'+errori);
          }
     });
}
</pre>
<p>In poche righe di codice si racchiude tutto ciò che ci serve per effettuare una chiamata AJAX. Esistono però numerosi parametri opzionali che in base alle diverse esigenze possono tornare utili per gli sviluppatori, ad esempio quelli più interessanti sono:</p>
<p><strong>ASYNC</strong> : definisce se la chiamata deve essere sincrona o asincrona e assume valore true o false<br />
<strong>CACHE</strong> : indica al browser se forzare o meno il ricaricamento dei dati anche se questi non sono cambiati, assume valore true e false<br />
<strong>TIMEOUT</strong> : esprire il tempo (in millesecondi) dopo di cui una richiesta non ancora conclusa viene considerata fallita</p>
<p>Parametri come timeout e cache risultano essere molto utili quando si vuol limitare una richiesta Ajax. Mettere in cache l&#8217;esito di una richiesta ci permette di non sprecare tempo e impostare un timeout si evitano attese eterne per richieste che non avranno responso.</p>
<p>In conclusione ecco i riferimenti ufficiali:<br />
- <a href='http://docs.jquery.com/Downloading_jQuery'>Scaricare JQUERY</a><br />
- <a href='http://api.jquery.com/jQuery.ajax/'>Documentazione ufficiale di JQuery</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/ajax/ajax-con-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Intelligenza artificiale &#8211; Lo sviluppo tecnologico tra psiche e medicina</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/intelligenza-artificiale-lo-sviluppo-tecnologico-tra-psiche-e-medicina/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/intelligenza-artificiale-lo-sviluppo-tecnologico-tra-psiche-e-medicina/#comments</comments>
		<pubDate>Tue, 14 Sep 2010 15:03:21 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Tutorial e Pubblicazioni]]></category>
		<category><![CDATA[computer e medicina]]></category>
		<category><![CDATA[informatica e psicologia]]></category>
		<category><![CDATA[intelligenza artificiale]]></category>
		<category><![CDATA[intelligenza artificiale e medicina]]></category>
		<category><![CDATA[robotica e medicina]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=687</guid>
		<description><![CDATA[In questa relazione viene discussa l&#8217;evoluzione tecnologica e culturale dell&#8217;intelligenza artificiale. In particolare vengono trattati argomenti inerenti la psicologia e la medicina, con riferimenti frequenti ad avvenimenti, software e ricerche che hanno contraddistinto l&#8217;evoluzione alla moderna intelligenza artificiale. Tra gli altri argomenti trattati troviamo: Logica Fuzzy, Reti Neurali, Robotica industriale e Robotica biomedicale. Disponibile in [...]]]></description>
			<content:encoded><![CDATA[<p>In questa relazione viene discussa l&#8217;evoluzione tecnologica e culturale dell&#8217;<strong>intelligenza artificiale</strong>. In particolare vengono trattati argomenti inerenti la psicologia e la medicina, con riferimenti frequenti ad avvenimenti, software e ricerche che hanno contraddistinto l&#8217;evoluzione alla moderna intelligenza artificiale.<br />
Tra gli altri argomenti trattati troviamo: Logica Fuzzy, Reti Neurali, Robotica industriale e Robotica biomedicale.</p>
<table border="0">
<tbody>
<tr>
<td height="32">Disponibile in formato:</td>
<td>PDF</td>
</tr>
<tr>
<td height="32">Numero di Pagine:</td>
<td>15</td>
</tr>
<tr>
<td height="32">Anno:</td>
<td>2010</td>
</tr>
<tr>
<td height="32">Download:</td>
<td>
<a href="http://www.donatantonio.net//guide_pdf/INTELLIGENZA_ARTIFICIALE_tra_psiche_e_medicina.pdf"><br />
<img src="http://www.donatantonio.net//guide_pdf/logo-pdf.gif" border="0" alt="Download" /><br />
</a>
</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/intelligenza-artificiale-lo-sviluppo-tecnologico-tra-psiche-e-medicina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un nuovo viaggio</title>
		<link>http://www.donatantonio.net/blog/riflessioni/un-nuovo-viaggio/</link>
		<comments>http://www.donatantonio.net/blog/riflessioni/un-nuovo-viaggio/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 06:09:29 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Riflessioni]]></category>
		<category><![CDATA[amore]]></category>
		<category><![CDATA[amore che mai nascerà]]></category>
		<category><![CDATA[un nuovo viaggio]]></category>
		<category><![CDATA[viaggio]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=674</guid>
		<description><![CDATA[Stasera sono seduto qui&#8230; stanco per la fine di un viaggio, pronto per uno nuovo&#8230; sorseggio un ultimo caffè pensando al su e giù di questa vita che fugge ostinatamente dal tempo&#8230; Penso a te e solo a te, faccio fatica a sconfiggere il sonno, il caldo&#8230; questo incredibile vuoto che sfonda il cuore. Aspetto [...]]]></description>
			<content:encoded><![CDATA[<p>Stasera sono seduto qui&#8230;<br />
stanco per la fine di un viaggio,<br />
pronto per uno nuovo&#8230;<br />
sorseggio un ultimo caffè<br />
pensando al su e giù di questa vita<br />
che fugge ostinatamente dal tempo&#8230;<br />
Penso a te e solo a te,<br />
faccio fatica a sconfiggere il sonno, il caldo&#8230;<br />
questo incredibile vuoto che sfonda il cuore.<br />
Aspetto il prossimo viaggio per vederti<br />
e mentre questo paesaggio si affaccia ai miei occhi<br />
rifletto sulle parole che mai ti dirò&#8230;<br />
Ora riposo&#8230;<br />
domani un nuovo viaggio<br />
soffocherà quell&#8217;amore che mai nascerà&#8230;</p>
<div align='right'>
Fabio Donatantonio
</div>
<p><br/></p>
<div align='center' style='text-align:center'>
<img src='http://www.donatantonio.net/img/nuovo_viaggio.png' alt='Nuovo viaggio' title='Nuovo Viaggio'/>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/riflessioni/un-nuovo-viaggio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ajax semplice e veloce &#8211; Ajax Go</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/ajax/ajax-semplice-e-veloce-ajax-go/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/ajax/ajax-semplice-e-veloce-ajax-go/#comments</comments>
		<pubDate>Sun, 13 Jun 2010 14:03:04 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[ajax go]]></category>
		<category><![CDATA[ajax semplice e veloce]]></category>
		<category><![CDATA[funzione ajax pronta]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=668</guid>
		<description><![CDATA[Ajax è una tecnica di sviluppo che permette lo scambio di dati in background tra browser e server web. Nasce dall&#8217;esigenza innanzitutto di aggiornare dinamicamente parti della pagina visualizzata dall&#8217;utente e per elaborare informazioni senza che queste interferiscano con la navigazione dell&#8217;utente. L&#8217;uso di Ajax si cala in numerose situazione, tuttavia l&#8217;80% di chi utilizza [...]]]></description>
			<content:encoded><![CDATA[<p>Ajax è una tecnica di sviluppo che permette lo scambio di dati in background tra browser e server web. Nasce dall&#8217;esigenza innanzitutto di aggiornare dinamicamente parti della pagina visualizzata dall&#8217;utente e per elaborare informazioni senza che queste interferiscano con la navigazione dell&#8217;utente.</p>
<p>L&#8217;uso di Ajax si cala in numerose situazione, tuttavia l&#8217;80% di chi utilizza questa tecnica lo fa innanzitutto per aggiornare un <em>div</em>, un paragrafo o comunque un blocco della pagina.<br />
Per chi ha esperienza con Javascript e sa dove &#8220;mettere le mani&#8221;, realizzare ciò che è stato appena descritto risulta essere un lavoro abbastanza semplice ma alla lunga noioso; d&#8217;altro canto per chi è a digiuno di programmazione lato Client può risultare difficile e non di immediata comprensione realizzare un aggiornamento dinamico con Ajax.<br />
A tale scopo ho riunito in alcune funzioni il cuore di Ajax dando vita ad uno script che ho chiamato <strong>AJAX GO</strong>.<br />
La funzione <strong>ajax_go</strong>, opportunamente richiamata, <strong>permette a chiunque di implementare la tecnica Ajax evitando la scrittura di ulteriore codice</strong>. Basta includere il file ajax_go.js e chiamare la funzione quando risulta necessario.</p>
<p>Ad esempio se intendo aggiornare il contenuto di un div con id=&#8217;my_box&#8217;, chiamando uno script lato server (ad esempio codice.php) che restituisca il &#8220;nuovo&#8221; codice html da inserire nel div, chiamerò la funzione ajax_go così:</p>
<pre class="brush: xml; title: ; notranslate">
ajax_go('codice.php','my_box');

// Parametri della funzione:
// ajax_go(url dello script lato server,id del blocco html)
</pre>
<p>Per utilizzare da subito la funzione è necessario richiamare il codice, aggiungendo la riga sottostante nell&#8217;head html della pagina che utilizzerà Ajax:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.donatantonio.net/script/ajax_go.js&quot;&gt;&lt;/script&gt;
</pre>
<p>Oppure è possibile scaricare <strong>Ajax Go</strong>(con un esempio di utilizzo) da <a href='http://www.donatantonio.net/script/ajax_go.rar'>qui&#8230;</a></p>
<p>Oppure puoi testare un esempio di utilizzo di <strong>Ajax Go</strong> cliccando <a href='http://www.donatantonio.net/script/test_ajaxgo.html' target='_blank'>qui&#8230;</a></p>
<p>Ecco invece il codice completo per chi è interessato:</p>
<pre class="brush: jscript; title: ; notranslate">
/*
    AJAX GO - AJAX SEMPLICE E VELOCE
    Fabio Donatantonio 2010 - http://www.donatantonio.it/
*/
var myRequest = null;
var the_box = null;

function CreateXmlHttpReq(handler) {
 	var xmlhttp = null;
	try {
    	xmlhttp = new XMLHttpRequest();
  	}catch(e){
    try {
        xmlhttp = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);
    }catch(e){
        xmlhttp = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
    }
  }
  xmlhttp.onreadystatechange = handler;
  return xmlhttp;
}

function aggiornamento() {
    e = document.getElementById(the_box);
    if (myRequest.readyState == 4 &amp;&amp; myRequest.status == 200) {
        e.innerHTML = myRequest.responseText;
    }
}

function ajax_go(url,id_box) {
    the_box = id_box;
    var r = Math.random();
    if(url.indexOf(&quot;?&quot;)==-1)
        url = url + &quot;?rand=&quot;+escape(r);
    else
        url = url + &quot;&amp;rand=&quot;+escape(r);
    myRequest = CreateXmlHttpReq(aggiornamento);
    myRequest.open(&quot;GET&quot;,url);
    myRequest.send(null);
}
</pre>
<p>SINTASSI: ajax_go(url dello script lato server, id del blocco html);</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/ajax/ajax-semplice-e-veloce-ajax-go/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gestione dei link con Javascript</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/gestione-dei-link-con-javascript/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/gestione-dei-link-con-javascript/#comments</comments>
		<pubDate>Fri, 21 May 2010 14:55:53 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[gestione link]]></category>
		<category><![CDATA[link dinamici]]></category>
		<category><![CDATA[modifica href]]></category>
		<category><![CDATA[modifica link]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=658</guid>
		<description><![CDATA[In questo articolo verranno descritte alcune utili funzioni per modificare tramite codice Javascript i link presenti all&#8217;interno di una pagina web. Le funzioni saranno quindi incentrate sul tag &#60;a&#62; e su i suoi parametri. Realizzeremo quattro diverse funzioni: Modifica destinazione link (href) Aggiunta di un parametro all&#8217;url di un link Modifica destinazione e etichetta di [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo verranno descritte alcune utili funzioni per modificare tramite codice Javascript i link presenti all&#8217;interno di una pagina web. Le funzioni saranno quindi incentrate sul tag <em>&lt;a&gt;</em> e su i suoi parametri.<br />
Realizzeremo quattro diverse funzioni:</p>
<ul>
<li>Modifica destinazione link (href)</li>
<li>Aggiunta di un parametro all&#8217;url di un link</li>
<li>Modifica destinazione e etichetta di un link</li>
<li>Modifica del target di un link</li>
</ul>
<p>La prima funzione è così definita:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
function nuovoLink(new_pagina){
	document.getElementById('link').href=new_pagina;
}
&lt;/script&gt;
</pre>
<p>La funzione <strong>nuovoLink</strong> prende come parametro l&#8217;url della nuova pagina di destinazione e aggiorna l&#8217;href.</p>
<p>La seconda funzione invece:</p>
<pre class="brush: jscript; title: ; notranslate">
function modificaLink(parametro,valore){
	var link = document.getElementById('link').href;
	if(link.indexOf(&quot;?&quot;)!=-1){
		link = link + &quot;&amp;&quot;+parametro+&quot;=&quot;+valore+&quot;&quot;;
	}else{
		link = link + &quot;?&quot;+parametro+&quot;=&quot;+valore+&quot;&quot;;
	}
	document.getElementById('link').href=link;
}
</pre>
<p><strong>modificaLink</strong> permette di aggiungere all&#8217;url di un link esistente un parametro con rispettivo valore. La funzione richiede infatti in input il nome del parametro e il valore da assegnarvi, controlla qualora ci siano già parametri e concatena all&#8217;url esistente il nuovo parametro. Questa funzione può essere particolamente utile per inviare ad una determinata pagina una serie di parametri non fissi, bensì generati di volta in volta in relazione ad alcuni eventi o input dell&#8217;utente. </p>
<p>La terza funzione permette di modificare sia l&#8217;url che l&#8217;etichetta del link:</p>
<pre class="brush: jscript; title: ; notranslate">
function cambiaLink(new_pagina,new_label){
	document.getElementById('link').href=new_pagina;
	document.getElementById('link').innerHTML=new_label;
}
</pre>
<p>La funzione <strong>cambiaLink</strong>  richiede come parametri il nuovo url e una stringa che sostituirà quella presente in un link. Ad esempio chiamando la funzione:<br />
cambiaLink(&#8216;contatti.html&#8217;,'Vai alla pagina contatti&#8217;);<br />
prima della chiamata : &lt;a href=&#8217;index.html&#8217;&gt;Vai alla home&lt;/a&gt;<br />
dopo la chiamata : &lt;a href=&#8217;contatti.html&#8217;&gt;Vai alla pagina contatti&lt;/a&gt;</p>
<p>L&#8217;ultima funzione permette di modificare l&#8217;attributo target all&#8217;interno del link:</p>
<pre class="brush: jscript; title: ; notranslate">
function cambiaTarget(new_target){
	document.getElementById('link').target=new_target;
}
</pre>
<p>Un esempio di chiamata a questa funzione potrebbe essere :<br />
cambiaTarget(&#8216;_blank&#8217;);</p>
<p>Tutti gli script illustrati in questo articolo modificano e aggiornano un ipotetico link così definito :</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a id='link' href='index.html'&gt;Questo è un link&lt;/a&gt;
</pre>
<p>Per <strong>provare</strong> lo script completo clicca <a href='http://www.donatantonio.net/script/gestione_link/index.html' target='_blank'>qui</a>.<br />
Per <strong>scaricare</strong> lo script clicca <a href='http://www.donatantonio.net/script/gestione_link.rar'>qui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/gestione-dei-link-con-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Form dinamico &#8211; Aggiunta elementi di input</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/form-dinamico-aggiunta-elementi-di-input/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/form-dinamico-aggiunta-elementi-di-input/#comments</comments>
		<pubDate>Thu, 20 May 2010 20:17:53 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[aggiungere elementi a un form]]></category>
		<category><![CDATA[form dinamico]]></category>
		<category><![CDATA[form divisione in rate di un importo]]></category>
		<category><![CDATA[innerHTML]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=651</guid>
		<description><![CDATA[In molti casi risulta necessario creare un modulo di immissione dati che si adatti alle diverse scelte dell&#8217;utente. In altri termini vorremmo poter aggiungere ad esempio un campo di testo qualora l&#8217;utente selezioni una particolare voce o semplicemente in relazione ad un input precedentemente inserito. Un classico esempio a chiarire le idee è un form [...]]]></description>
			<content:encoded><![CDATA[<p>In molti casi risulta necessario creare un modulo di immissione dati che si adatti alle diverse scelte dell&#8217;utente. In altri termini vorremmo poter aggiungere ad esempio un campo di testo qualora l&#8217;utente selezioni una particolare voce o semplicemente in relazione ad un input precedentemente inserito.<br />
Un classico esempio a chiarire le idee è un form che visualizzando un importo(in euro ad esempio) permetta all&#8217;utente di scegliere il numero di rate per cui dilazionare la somma. In questo caso vorremmo che il nostro form sia il più <em>dinamico</em> possibile, inserendo un numero di righe pari al numero di rate scelte.</p>
<p>In fondo all&#8217;articolo è possibile <strong>testare</strong> e <strong>scaricare</strong> lo script completo con due differenti esempi.</p>
<p>Vediamo innanzitutto la funzione Javascript che aggiunge elementi al form:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
// Funzione che permette di aggiungere elementi al form (in questo caso rate)
function AggiungiRata(rate){
	var numero_rate = rate.value;
	var box = document.getElementById('box_rate');
	if(numero_rate==&quot;&quot;){
		box.innerHTML='';
	}else{
		if(isNaN(numero_rate)==true){
			box.innerHTML='';
		}else{
			var righe = &quot;&quot;;
			var importo = (parseInt(document.form.importo.value)/parseInt(numero_rate));
			// Inserisco una riga ad ogni ciclo
			for(i=1; i&lt;=numero_rate; i++){
				righe = righe + &quot;Rata n°&quot;+i+&quot; : &lt;input type='text' name='rata&quot;+i+&quot; size='10' value='&quot;+importo+&quot;' maxlength='10'/&gt;&lt;br/&gt;&quot;;
			}
			// Aggiorno il contenuto del box che conterrà gli elementi aggiunti
			box.innerHTML=righe;
		}
	}
}
&lt;/script&gt;
</pre>
<p>La funzione prende come input l&#8217;oggetto contenete il numero di rate. Dopo averne controllato la validità aggiorna un box html(box_rate) con una stringa(righe) precedentemente composta all&#8217;interno di un ciclo for. Ad ogni passo del ciclo viene aggiunto un campo di input utilizzando la corretta formattazione html.</p>
<p>Per completare lo script vediamo il codice html della form:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form method=&quot;post&quot; action=&quot;#&quot; name=&quot;form&quot;&gt;
&lt;table border=&quot;0&quot;&gt;
&lt;tr&gt;&lt;td&gt;Euro : &lt;/td&gt;&lt;td&gt;&lt;input type='text' name='importo' value=&quot;0&quot; maxlength=&quot;10&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;Numero di rate : &lt;/td&gt;&lt;td&gt;&lt;input type=&quot;text&quot; name=&quot;rate&quot; maxlength=&quot;2&quot; onkeyup=&quot;AggiungiRata(this)&quot;/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;span id='box_rate'&gt;
&lt;!-- Box che conterrà le righe aggiunte. Inizialmente vuoto! --&gt;
&lt;/span&gt;
&lt;/form&gt;
</pre>
<p>La funzione <em>AggiungiRata</em> viene richiamata ad ogni inserimento di caratteri all&#8217;interno del campo di testo rate. Il box che conterrà gli elementi aggiunti sarà inizialmente vuoto; per ogni riga aggiunta la funzione immetterà di defaul l&#8217;importo della rata.<br />
Possiamo concludere sintetizzando la porzione di codice che permette di inserire <em>un</em> campo di input in un modulo:</p>
<pre class="brush: xml; title: ; notranslate">
// Creo una stringa contenente codice HTML
var riga = &quot;Campo aggiunto : &lt;input type='text' name='campo_aggiunto' size='10' /&gt;&quot;;
// Imposto come contenuto del box_html il codice della variabile riga
document.getElementById('box_html').innerHTML = riga;
</pre>
<p>L&#8217;esempio appena descritto è solo un ipotetico caso in cui risulta necessario aggiungere elementi ad una form.</p>
<p><strong>Prova</strong> lo script cliccando <a href='http://www.donatantonio.net/script/aggiungi_elementi/index.html' target='_blank'>qui</a>.<br />
Oppure <strong>scaricalo</strong> da <a href='http://www.donatantonio.net/script/aggiungi_elementi.rar'>qui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/form-dinamico-aggiunta-elementi-di-input/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shuffle playlist con PHP e MediaPlayer</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/shuffle-playlist-con-php-e-mediaplayer/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/shuffle-playlist-con-php-e-mediaplayer/#comments</comments>
		<pubDate>Wed, 19 May 2010 13:22:09 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[m3u shuffle con php]]></category>
		<category><![CDATA[php e media player shuffle]]></category>
		<category><![CDATA[php shuffle]]></category>
		<category><![CDATA[random m3u]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=579</guid>
		<description><![CDATA[In questo articolo vedremo come realizzare una pagina web che permetta l&#8217;ascolto, tramite il plugin di Windows Media Player, di una playlist in formato m3u in modalità shuffle cioè in ordine casuale di brani. Più precisamente lo script php realizzerà una playlist diversa per ogni chiamata della pagina, in modo tale che ogni utente connesso [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo vedremo come realizzare una pagina web che permetta l&#8217;ascolto, tramite il plugin di <em>Windows Media Player</em>, di una playlist in formato <em>m3u</em> in modalità shuffle cioè in ordine casuale di brani.<br />
Più precisamente lo script php realizzerà una playlist diversa per ogni chiamata della pagina, in modo tale che ogni utente connesso ascolterà la stessa playlist ma in un ordine differente di esecuzione. Potremo, con le dovute differenze, creare una sorta di <em>webradio</em>.</p>
<p>Innanzittutto è necessario creare un file con estensione <em>.m3u</em> che conterrà semplicemente la lista degli url degli mp3 da eseguire.<br />
Ad esempio l&#8217;ipotetico file <strong>playlist.m3u</strong>:</p>
<p>http://www.miosito.com/musica/canzone_0.mp3</p>
<p>http://www.miosito.com/musica/canzone_1.mp3</p>
<p>http://www.miosito.com/musica/canzone_2.mp3</p>
<p>http://www.miosito.com/musica/canzone_3.mp3</p>
<p>http://www.miosito.com/musica/canzone_4.mp3</p>
<p>Tale file sarà locato nel nostro spazio web ad esempio nella cartella /stream.</p>
<p>Andiamo ora a vedere il codice php che implementerà la funzione shuffle:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// url del file m3u originale
$file_playlist = &quot;/stream/playlist.m3u&quot;;

// url del file m3u casuale, utilizzo valore random per differenziarlo
$file_playlist_shuffle = &quot;/stream/playlist_&quot;.rand (10,9999).&quot;.m3u&quot;;

// scarico la playlist in un array, ogni elemento è un url
$lines = file($file_playlist);

// ordino in modo casuale gli elementi dell'array
shuffle($lines);

// realizzo il file m3u con la playlist casuale
$var=fopen($file_playlist_shuffle,&quot;w&quot;);
for($i=0; $i&lt;count($lines); $i++){
    fwrite($var, $lines[$i]);
}
fclose($var);
?&gt;
</pre>
<p>Lo script appena visto verrà inserito all&#8217;interno della nostra pagina web prima dell&#8217;aperura del tag html. Una volta conslusa l&#8217;esecuzione del codice php, avremo nella nostra cartella <em>/stream</em> il file originale &#8220;playlist.m3u&#8221; e un file tipo &#8220;playlist_153.m3u&#8221; che conterrà la playlist in un ordine diverso. (il numero 153 è solo di esempio)</p>
<p>Il player audio andrà quindi a leggere il flusso audio dal secondo file appena realizzato.<br />
Vediamo quindi il codice completo <strong>player.php</strong>:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?php
// -- INIZIO configurazione script
$url_sito = &quot;http://www.donatantonio.it/&quot;;
$file_playlist = &quot;stream/playlist.m3u&quot;;
$file_playlist_shuffle = &quot;stream/playlist_&quot;.rand (10,9999).&quot;.m3u&quot;;
// -- FINE configurazione

$lines = file($file_playlist);
shuffle($lines);
$var=fopen($file_playlist_shuffle,&quot;w&quot;);
for($i=0; $i&lt;count($lines); $i++){
    fwrite($var, $lines[$i]);
}
fclose($var);
?&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;Fabio Donatantonio&quot; /&gt;
&lt;title&gt;Media Player - Shuffle Mode&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Stai ascoltando la playlist&lt;/h1&gt;
&lt;!-- Codice lettore Media Player --&gt;
&lt;object id=&quot;mediaplayer&quot; classid=&quot;clsid:6bf52a52-394a-11d3-b153-00c04f79faa6&quot;
width=&quot;300&quot; height=&quot;300&quot;
codebase = &quot;http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701&quot;&gt;
&lt;param name=&quot;url&quot; value=&quot;&lt;?php echo $url_sito.$file_playlist_shuffle;?&gt;&quot; /&gt;
&lt;param name=&quot;autostart&quot; value=&quot;1&quot; /&gt;
&lt;param name=&quot;showcontrols&quot; value=&quot;1&quot; /&gt;
&lt;param name=&quot;stretchtofit&quot; value=&quot;0&quot; /&gt;
&lt;param name=&quot;enablecontextmenu&quot; value=&quot;0&quot; /&gt;
&lt;param name=&quot;ShowStatusBar&quot; value=&quot;1&quot; /&gt;
&lt;param name=&quot;src&quot; value=&quot;&lt;?php echo $url_sito.$file_playlist_shuffle;?&gt;&quot; /&gt;
&lt;embed id=&quot;mediaplayer&quot; type=&quot;application/x-mplayer2&quot; width=&quot;300&quot; height=&quot;300&quot; src=&quot;&lt;?php echo $url_sito.$file_playlist_shuffle;?&gt;&quot; showstatusbar=&quot;1&quot; enablecontextmenu=&quot;0&quot; stretchtofit=&quot;0&quot; showcontrols=&quot;1&quot; autostart=&quot;1&quot; url=&quot;&lt;?php echo $url_sito.$file_playlist_shuffle;?&gt;&quot;&gt;
&lt;/embed&gt;&lt;/object&gt;
&lt;!-- Fine codice lettore Media Player --&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Una volta personalizzato e caricato il file sul nostro spazio web e richiamata la pagina dal browser ascolteremo la playlist in ordine casuale.</p>
<p>Clicca <a href='http://www.donatantonio.net/script/player.rar'>qui</a> per scaricare lo script completo.</p>
<p>Alcune osservazioni e idee in conclusione:<br />
1 &#8211; La pagina richiede Media Player come player audio<br />
2 &#8211; La cartella contenente le playlist andrebbe &#8220;svuotata&#8221; regolarmente in virtù delle connessioni alla pagina. Ciò magari è implementabile sempre con php.<br />
3 &#8211; Con un pò di pazienza e fantasia si potrebbe utilizzare l&#8217;array degli url mp3 per realizzare un player audio implementato in javascript.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/shuffle-playlist-con-php-e-mediaplayer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Controllo importo in Javascript e messaggio di errore</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/controllo-importo-in-javascript-e-messaggio-di-errore/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/controllo-importo-in-javascript-e-messaggio-di-errore/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 14:07:36 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[controllo importo con javascript]]></category>
		<category><![CDATA[validare importo con javascript]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=535</guid>
		<description><![CDATA[La funzione is_importo consente di verificare il corretto formato e valore di un importo (in euro o altra valuta) inserito da un utente mediante un&#8217;apposita form. Immaginiamo un applicazione web che richieda all&#8217;utente l&#8217;immissione di uno o più valori monetari. Il nostro scopo, e desiderio, è quello di validare tali importi prima che questi siano [...]]]></description>
			<content:encoded><![CDATA[<p>La funzione <em>is_importo</em> consente di verificare il corretto formato e valore di un importo (in euro o altra valuta) inserito da un utente mediante un&#8217;apposita form.<br />
Immaginiamo un applicazione web che richieda all&#8217;utente l&#8217;immissione di uno o più valori monetari. Il nostro scopo, e desiderio, è quello di validare tali importi prima che questi siano processati dal resto dell&#8217;applicazione. Controllando appunto che il valore sia numerico e che rientri in un range da noi prestabilito.<br />
La funzione <em>is_importo</em> successivamente descritta richiede i seguenti parametri di input:</p>
<ul>
<li>L&#8217;importo da controllare</li>
<li>La soglia minima ammissibile per tale importo (se vuoto vale 0)</li>
<li>La soglia massima ammissibile per tale importo (se vuoto vale infinito)</li>
<li>L&#8217;id del tag html che visualizzerà l&#8217;eventuale messaggio di errore</li>
</ul>
<p>Ecco il codice della funzione:</p>
<pre class="brush: jscript; title: ; notranslate">
function is_importo(importo,importo_min,importo_max,id_tag){
     if(isNaN(importo)){
          document.getElementById(id_tag).innerHTML='Importo non valido!';
          return false;
     }
     if(importo_min==&quot;&quot; || importo_max==&quot;&quot;){
          if(importo&lt;=0){
               document.getElementById(id_tag).innerHTML='Valore importo non valido!';
               return false;
          }else{
	  return true;
          }
     }else{
          if(isNaN(importo_min) &amp;&amp; isNaN(importo_max)){
               return false;
          }else{
	  if(importo&gt;=importo_min &amp;&amp; importo&lt;=importo_max){
	       return true;
	  }else{
	       document.getElementById(id_tag).innerHTML='Valore importo non valido!';
	       return false;
	  }
          }
     }
}
</pre>
<p>Vediamo con un esempio come richiamare opportunamente questa funzione:</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
if(is_importo('1500','0','2000','errore')==true){
     // faccio qualcosa...
}else{
     // importo non corretto, quindi faccio altro...
}
&lt;/script&gt;
</pre>
<p>Nell&#8217;esempio precedente sto verificando che l&#8217;importo (1500) sia un valore compreso tra (0) e (2000), in caso di errore chiedo che il messaggio venga visualizzato all&#8217;interno di un blocco identificato dall&#8217;id <em>errore</em>. All&#8217;interno della pagina html dovrò opportunamente dichiarare tale blocco (ad esempio un div o uno span) e quindi collegare il campo di input alla funzione <em>is_importo</em>.</p>
<p>Infine altri esempi di chiamata alla funzione:</p>
<pre class="brush: jscript; title: ; notranslate">
is_importo('1500.60','-2000','2000','errore'); // range con valori negativi
is_importo('3789.99','0','3000','errore'); // valori con virgola
is_importo('10000','','','errore'); // verifica senza vincolo di range
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/controllo-importo-in-javascript-e-messaggio-di-errore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Div con bordo lampeggiante</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/div-con-bordo-lampeggiante/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/div-con-bordo-lampeggiante/#comments</comments>
		<pubDate>Thu, 01 Apr 2010 15:59:04 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[bordo lampeggiante con javascript]]></category>
		<category><![CDATA[div con bordo lampeggiante]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=527</guid>
		<description><![CDATA[La funzione bordo_flash permette di alternare il colore del bordo di un div in modo tale che l&#8217;effetto finale sia quello di vedere un div lampeggiante. La funzione che segue richiede 6 parametri obbligatori: Id del div che vogliamo far lampeggiare Un valore in pixel per la grandezza del bordo I due codici dei colori [...]]]></description>
			<content:encoded><![CDATA[<p>La funzione <strong>bordo_flash</strong> permette di alternare il colore del bordo di un div in modo tale che l&#8217;effetto finale sia quello di vedere un div lampeggiante.<br />
La funzione che segue richiede <em>6 parametri</em> obbligatori:</p>
<ul>
<li>Id del div che vogliamo far lampeggiare</li>
<li>Un valore in pixel per la grandezza del bordo</li>
<li>I due codici dei colori che si alterneranno</li>
<li>Il tempo massimo, in secondi, di lampeggiamento</li>
<li>L&#8217;intervallo, in secondi, tra un colore e l&#8217;altro</li>
</ul>
<p>Ecco quindi il codice della funzione <em>bordo_flash</em>:</p>
<pre class="brush: jscript; title: ; notranslate">
var q=0;
var bordo=null;
var color=null;
var inizial_border = null;
function bordo_flash(id_tag,px_border,color_1,color_2,flash_time,flash_speed){
	var the_div=document.getElementById(id_tag);
	if(inizial_border==null){
		inizial_border = the_div.style.border;
	}
	if (color==color_1){
		the_div.style.border=px_border+&quot;px solid &quot;+color_2;
		color=color_2;
	}else{
		the_div.style.border=px_border+&quot;px solid &quot;+color_1;
		color=color_1;
	}
	q = q+flash_speed;
	if(q&lt;=flash_time){
		bordo = setTimeout(&quot;bordo_flash('&quot;+id_tag+&quot;',&quot;+px_border+&quot;,'&quot;+color_1+&quot;','&quot;+color_2+&quot;', &quot;+flash_time+&quot;,&quot;+flash_speed+&quot;)&quot;, flash_speed);
	}else{
		q=0;
		bordo=null;
		color=null;
		the_div.style.border=inizial_border;
		inizial_border=null;
	}
}
</pre>
<p>La funzione va definita all&#8217;interno dell&#8217;head della pagina dove apparirà il div lampeggiante, e quindi richiamata quando necessario.<br />
Ad esempio, supponendo di avere un div con <em>id=&#8217;myDiv&#8217;</em> :</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
bordo_flash('myDiv',4,'#FF0000','#0000FF',500,20000);
&lt;/script&gt;
</pre>
<p>Nella chiamata precedente stiamo definendo un div chiamato <em>myDiv</em> con un bordo di <em>4</em>px che lampeggia ogni mezzo secondo per un totale di 20 secondi. Infine il colore <em>#FF0000</em> si alternerà con il <em>#0000FF</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/div-con-bordo-lampeggiante/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Controllo data in Javascript e messaggio di errrore</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/controllo-data-in-javascript-e-messaggio-di-errrore/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/controllo-data-in-javascript-e-messaggio-di-errrore/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 15:25:58 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[controllo data]]></category>
		<category><![CDATA[controllo data e messaggio errore]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=521</guid>
		<description><![CDATA[La funzione check_longdate permette di controllare la correttezza di una data nel formato aaaammgg restituendo nel caso contrario un messaggio di errore da visualizzare direttamente nella pagina. Immaginiamo ad esempio ad una form che dopo aver fatto scegliere una data visualizzi, in un div inizialmente vuoto, un messaggio di errore nel caso in cui la [...]]]></description>
			<content:encoded><![CDATA[<p>La funzione check_longdate permette di controllare la correttezza di una data nel formato aaaammgg restituendo nel caso contrario un messaggio di errore da visualizzare direttamente nella pagina.<br />
Immaginiamo ad esempio ad una form che dopo aver fatto scegliere una data visualizzi, in un div inizialmente vuoto, un messaggio di errore nel caso in cui la data non sia corretta.</p>
<p>Ecco il codice della funzione.</p>
<pre class="brush: jscript; title: ; notranslate">
function check_longdate(aaaammgg,id_tag){
     if(isNaN(aaaammgg)){
          document.getElementById(id_tag).innerHTML=&quot;Data non valida!&quot;;
          return false;
     }
     if(aaaammgg.length!=8){
          document.getElementById(id_tag).innerHTML=&quot;Data non valida!&quot;;
          return false;
     }
     var anno = aaaammgg.substring(0,4);
     var mese = aaaammgg.substring(4,6);
     var giorno = aaaammgg.substring(6,8);
     if(anno&gt;1900 &amp;&amp; anno&lt;3000 &amp;&amp; mese&gt;0 &amp;&amp; mese&lt;13 &amp;&amp; giorno&gt;0 &amp;&amp; giorno&lt;32){
          return true;
     }else{
          document.getElementById(id_tag).innerHTML=&quot;Formato data non valido!&quot;;
          return false;
     }
}
</pre>
<p>Quindi un esempio di form che richiami la funzione:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;
&lt;title&gt;Controllo Data&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;check_longdate.js&quot;&gt;&lt;/script&gt;
&lt;script type='text/javascript'&gt;
function Controllo(){
     var g = document.data.g.value;
     var m = document.data.m.value;
     var a = document.data.a.value;
     var d = a+&quot;&quot;+m+&quot;&quot;+g;
     if(check_longdate(d,'box')==true){
          document.data.submit();
     }
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;form method='post' name='data' action='pagina.php'&gt;
Giorno &lt;input type='text' maxlength='2' name='g' /&gt; / Mese &lt;input type='text' maxlength='2' name='m' /&gt; / Anno &lt;input type='text' maxlength='4' name='a' /&gt;
&lt;span id='box' style='color:#FF0000'&gt;&lt;/span&gt;
&lt;input type='button' value='Conferma' onClick=&quot;Controllo()&quot;/&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>La funzione accetta due parametri : la stringa contenente la data nel formato aaaammgg e l&#8217;id del box nel quale far comparire l&#8217;eventuale messaggio di errore.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/controllo-data-in-javascript-e-messaggio-di-errrore/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Formattare una data in Javascript</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/formattare-una-data-in-javascript/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/formattare-una-data-in-javascript/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 14:56:22 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[formattare data in javascript]]></category>
		<category><![CDATA[funzione formatta data]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=517</guid>
		<description><![CDATA[La seguente funzione permette di fomattare una data dal formato aaaammgg nel formato più leggibile tipo gg/mm/aaaa oppure gg-mm-aaaa o in ultima alternativa stampando il mese in forma estesa. Ecco la funzione formatta_data : La funzione va quindi richiamata all&#8217;occorrenza con la seguente sintassi : Utilizzando come secondo argomento la stringa TXT la funzione stamperà [...]]]></description>
			<content:encoded><![CDATA[<p>La seguente funzione permette di fomattare una data dal formato aaaammgg nel formato più leggibile tipo gg/mm/aaaa oppure gg-mm-aaaa o in ultima alternativa stampando il mese in forma estesa.<br />
Ecco la funzione formatta_data :</p>
<pre class="brush: jscript; title: ; notranslate">
var mesi = new Array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno', 'Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');
function formatta_data(aaaammgg,tipo){
     if(isNaN(aaaammgg)){
          return 0;
     }
     if(aaaammgg.length!=8){
          return 0;
     }
     var anno = aaaammgg.substring(0,4);
     var mese = aaaammgg.substring(4,6);
     var giorno = aaaammgg.substring(6,8);
     if(anno&gt;1900 &amp;&amp; anno&lt;3000 &amp;&amp; mese&gt;0 &amp;&amp; mese&lt;13 &amp;&amp; giorno&gt;0 &amp;&amp; giorno&lt;32){
          if(tipo=='/' || tipo=='-'){
               return giorno+tipo+mese+tipo+anno;
          }else{
	  if(tipo=='TXT'){
	       return giorno+&quot; &quot;+mesi[parseInt(mese)-1]+&quot; &quot;+anno;
	  }
	  return false;
          }
     }else{
          return 0;
     }
}
</pre>
<p>La funzione va quindi richiamata all&#8217;occorrenza con la seguente sintassi :</p>
<pre class="brush: jscript; title: ; notranslate">
var data_1 = formatta_data('20100325','/');

var data_1 = formatta_data('20100325','-');

var data_1 = formatta_data('20100325','TXT');
</pre>
<p>Utilizzando come secondo argomento la stringa TXT la funzione stamperà la data in forma estesa.<br />
Con semplici modifiche è possibile adattare la funzione per cui stampi la data nel formato a noi desiderato.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/formattare-una-data-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finestra popup sempre in primo paino</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/finestra-popup-sempre-in-primo-paino/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/finestra-popup-sempre-in-primo-paino/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 14:22:28 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[finestra in primo piano]]></category>
		<category><![CDATA[finestra sempre in primo piano]]></category>
		<category><![CDATA[popup sempre in primo piano]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=513</guid>
		<description><![CDATA[Bastano poche righe di codice Javascript per rendere una finestra sempre in primo piano rispetto alle altre. Immaginiamo all&#8217;esigenza di far apparire ad un determinato evento una sorta di finestra di avviso, con le stesse funzionalità di un alert, che però possa supportare codice html strutturato. Per raggiungere il nostro obiettivo utilizzeremo in combinazione il [...]]]></description>
			<content:encoded><![CDATA[<p>Bastano poche righe di codice Javascript per rendere una finestra sempre in primo piano rispetto alle altre.<br />
Immaginiamo all&#8217;esigenza di far apparire ad un determinato evento una sorta di finestra di avviso, con le stesse funzionalità di un <em>alert</em>, che però possa supportare codice html strutturato.<br />
Per raggiungere il nostro obiettivo utilizzeremo in combinazione il metodo <em>focus()</em> e l&#8217;evento <em>onBlur</em> dell&#8217;oggetto window.</p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type='text/javascript'&gt;
function in_primo(){
     window.focus();
}
&lt;/script&gt;
</pre>
<p>Il codice va inserito all&#8217;interno del tag head del popup e richiamato nel tag body al verificarsi dell&#8217;evento onBlur() in queto modo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;body onBlur=&quot;in_primo()&quot;&gt;
---- Il corpo della pagina ----
&lt;/body&gt;
</pre>
<p><strong>NB.</strong> Si consiglia di non abusare dell&#8217;utilizzo di finestre con tale aspetto (non solo per una questione di accessibilità e di stile), difatti l&#8217;apertura di due finestre popup sempre in primo piano provoca evidenti conflitti di visualizzazione. Inoltre browser differenti interpretano lo script in maniera differente.<br />
Lo script è stato testato con successo nelle versioni Exploer 6 e 7 e in Firefox 3.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/finestra-popup-sempre-in-primo-paino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refresh della pagina controllato dal Server &#8211; Evento lato Server</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/ajax/refresh-della-pagina-controllato-dal-server-evento-lato-server/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/ajax/refresh-della-pagina-controllato-dal-server-evento-lato-server/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 10:15:25 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[ajax e refresh pagina]]></category>
		<category><![CDATA[evento lato server]]></category>
		<category><![CDATA[refresh gestito da server]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=509</guid>
		<description><![CDATA[In questo breve articolo vedremo come risolvere una situazione tipica di refresh di una pagina html/php. Immaginiamo di voler effettuare il refresh di un&#8217;intera pagina html al verificarsi di un evento lato server, ad esempio al cambiamento di una variabile di sessione o al cambiamento di stato di un database. In altre parole vorremmo ricaricare [...]]]></description>
			<content:encoded><![CDATA[<p>In questo breve articolo vedremo come risolvere una situazione tipica di refresh di una pagina html/php.<br />
Immaginiamo di voler effettuare il refresh di un&#8217;intera pagina html al verificarsi di un <strong>evento lato server</strong>, ad esempio al cambiamento di una variabile di sessione o al cambiamento di stato di un database.<br />
In altre parole vorremmo ricaricare la pagina che visiona l&#8217;utente quando decide uno script lato Server e non un javascript lato client.<br />
Realizzeremo essenzialmente due script:</p>
<ul>
<li>La pagina html/php da inviare al browser</li>
<li>Lo script lato Server che controlla il refresh</li>
</ul>
<p>Per implementare il meccanismo di refresh utilizzeremo PHP, Javascript e logicamente Ajax per gestire il processo di controllo in background.</p>
<p>Vediamo il codice php dello script di controllo:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// la variabile che utilizzeremo per verificare l'esito del controllo
// 0 se non è necessario il refresh
// 1 se è da effettuare il refresh
$esito = 0;

// effettuo alcuni controlli come ad esempio una query
// una modifica a variabili di sessione o altro - dipende da voi
// nel mio esempio controllo il numero di record in una tabella...
$db_host = &quot;localhost&quot;;
$db_user = &quot;user&quot;;
$db_password = &quot;pass&quot;;
$db_database = &quot;my_database&quot;;

$connessione=mysql_connect($db_host,$db_user,$db_password);
mysql_select_db($db_database,$connessione);

$query = &quot;SELECT COUNT(*) AS conto  FROM tabella&quot;;
$result = mysql_query($query) or die (mysql_error());

$array = mysql_fetch_array($result);
if($array['conto']&gt;1){
     $esito = 1;
}else{
     $esito = 0;
}

echo $esito;
?&gt;
</pre>
<p>Vediamo ora la pagina html/php che verrà inviata al Client:</p>
<pre class="brush: php; title: ; notranslate">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;&gt;
&lt;head&gt;
&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
&lt;meta name=&quot;author&quot; content=&quot;Fabio Donatantonio&quot; /&gt;
&lt;title&gt;Pagina ricaricata dal server&lt;/title&gt;
&lt;script type='text/javascript'&gt;
var conto = null;
/* Funzione che richiama il controllo ogni 10 secondi */
function countdown(){
	Data();
	conto = setTimeout(&quot;countdown()&quot;,10000);
}

/* Funzione che inizializza il motore Ajax */
var myRequest = null;
function CreateXmlHttpReq2(handler) {
 	var xmlhttp = null;
	try {
    	xmlhttp = new XMLHttpRequest();
  	}catch(e){
    try {
        xmlhttp = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);
    }catch(e){
        xmlhttp = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
    }
  }
  xmlhttp.onreadystatechange = handler;
  return xmlhttp;
}

/* Funzione che verifica il responso della procedura di controllo
    se restituisce 1 allora effettua il refresh */
function myHandler() {
    if (myRequest.readyState == 4 &amp;&amp; myRequest.status == 200) {
        if(myRequest.responseText=='1'){
        	var r = Math.random();
        	location.href = &quot;index.php?rand=&quot;+escape(r)+&quot;&quot;;
        }
    }
}

/* Funzione che invia la richiesta http alla funzione di controllo lato Server */
function Data(){
	var r = Math.random();
	myRequest = CreateXmlHttpReq2(myHandler);
	myRequest.open(&quot;GET&quot;,&quot;controllo.php?rand=&quot;+escape(r));
	myRequest.send(null);
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;fieldset class=&quot;corpo&quot;&gt;
&lt;legend&gt;Refresh gestito dal Server&lt;/legend&gt;
&lt;div class='corpo'&gt;
La pagina è stata aggiornata dal Server in data &lt;?php date('d-m-Y').&quot; alle ore &quot;.date('G:i:s');?&gt; !
&lt;/div&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
countdown();
&lt;/script&gt;
&lt;/fieldset&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>In questo esempio lo script javascript richiama la procedura di controllo in background ogni 10 secondi utilizzando Ajax. La procedura (controllo.php) restituisce 1 se è richiesto il refresh della pagina, 0 altrimenti.</p>
<p>Logicamente il file controllo.php va personalizzato alle proprie esigenze, così come può essere modificato l&#8217;intervallo tra un controllo e l&#8217;altro lato Server.<br />
Questo esempio può essere ad esempio utile ad aggiornare una chat PHP qualora venga inserito un nuovo messaggio in database, evitando quindi che l&#8217;aggiornamento sia dipendente esclusivamente da un timer che non tiene conto dell&#8217;effettivo cambiamento di stato del database.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/ajax/refresh-della-pagina-controllato-dal-server-evento-lato-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 24 &#8211; Generatore numeri di Fibonacci</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-24-generatore-numeri-di-fibonacci/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-24-generatore-numeri-di-fibonacci/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 11:38:54 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[generatore numeri fibonacci]]></category>
		<category><![CDATA[numeri di fibonacci generatore]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=506</guid>
		<description><![CDATA[Realizzare una classe FibGen con metodo nextNumber() che genera il prossimo numero di Fibonacci. Si ricorda che f0 = 1, f1 = 1 e fn = fn-1 + fn-2 Scrivere e testare un programma che dato in input un intero n stampa l’ennesimo numero di Fibonacci. La classe FibGen.java: La classe di test TestFibonacci.java:]]></description>
			<content:encoded><![CDATA[<p>Realizzare una classe FibGen con metodo nextNumber() che genera il prossimo numero di Fibonacci.<br />
Si ricorda che f0 = 1, f1 = 1 e fn = fn-1 + fn-2<br />
Scrivere e testare un programma che dato in input un intero n stampa l’ennesimo numero di Fibonacci.</p>
<p>La classe FibGen.java:</p>
<pre class="brush: java; title: ; notranslate">
public class FibGen
{

  // Metodo Costruttore vuoto
  public FibGen()
  {
  }

  // Metodo ricorsivo per il calcolo del relativo numero di Fibonacci
  public int nextNumber(int numero)
  {
    if(numero==0 || numero==1)
    {
        return 1;
    }
    else
    {
        // Chiamata ricorsiva
        return this.nextNumber(numero-1)+this.nextNumber(numero-2);
    }
  }
}
</pre>
<p>La classe di test TestFibonacci.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestFibonacci
{

  public static void main(String[] args)
  {
    // Creo un nuovo oggetto FibGen
    FibGen f = new FibGen();
    Scanner in = new Scanner(System.in);

    // Prendo in input un numero intero
    System.out.println(&quot;Dammi un numero intero di cui vuoi conoscere il numero di Fibonacci : &quot;);
    int n = in.nextInt();

    // Calcolo il numero di Fibonacci relativo all'input
    System.out.println(f.nextNumber(n));
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-24-generatore-numeri-di-fibonacci/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 23 &#8211; Triangolo con asterischi</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-23-traingolo-con-asterischi/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-23-traingolo-con-asterischi/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 11:31:49 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[stampa triangolo]]></category>
		<category><![CDATA[triangolo con asterischi]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=501</guid>
		<description><![CDATA[Scrivere un programma che legge in input un intero n e stampa un triangolo isoscele con n righe formate da &#8216;*&#8217;. Esempio: se l’input è 4 stampa:       *           * * *       * * * * *   * * * * * * * La [...]]]></description>
			<content:encoded><![CDATA[<p>Scrivere un programma che legge in input un intero n e stampa un triangolo isoscele con n righe formate da &#8216;*&#8217;.<br />
Esempio: se l’input è 4 stampa:</p>
<table border="0">
<tbody>
<tr>
<td> </td>
<td> </td>
<td> </td>
<td>*</td>
<td> </td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td>*</td>
<td>*</td>
<td>*</td>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td>*</td>
<td>*</td>
<td>*</td>
<td>*</td>
<td>*</td>
<td> </td>
</tr>
<tr>
<td>*</td>
<td>*</td>
<td>*</td>
<td>*</td>
<td>*</td>
<td>*</td>
<td>*</td>
</tr>
</table>
<p>La classe StampaTriangolo.java:</p>
<pre class="brush: java; title: ; notranslate">
public class StampaTriangolo
{
int righe;

  // Metodo Costruttore inizializzato con un intero n
  public StampaTriangolo(int n)
  {
    righe = n;
  }

  // Metodo che stampa a video il triangolo
  public void eseguiTriangolo()
  {
    int i = righe;
    int iu = i;
    int k = 0;
    for(int j=1 ; j&lt;i+1 ; j++)
    {
        int s = j + k;
        for(int z=iu ; z&gt;0 ; z--)
        {
          System.out.print(&quot;   &quot;);
        }

        for(int t=0 ; t&lt; s ; t++)
        {
            System.out.print(&quot; * &quot;);
        }
        System.out.println(&quot;&quot;);
        k++;
        iu = iu -1 ;
    }
  }
}
</pre>
<p>La classe che contiene il main TestStampa.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestStampa {
  public static void main(String[] args)
  {
    Scanner in = new Scanner(System.in);

    // Prendo in input un intero, numero di righe nel triangolo
    System.out.println(&quot;Dammi il valore n del triangolo: (max 18) &quot;);
    int num = in.nextInt();

    // Creo un nuovo oggetto StampaTriangolo
    StampaTriangolo tri = new StampaTriangolo(num);

    // Chiamo il metodo per stampare il triangolo
    tri.eseguiTriangolo();
  }
}
</pre>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-23-traingolo-con-asterischi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 22 &#8211; Tasso di cambio</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-22-tasso-di-cambio/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-22-tasso-di-cambio/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 11:19:37 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[cambio monete]]></category>
		<category><![CDATA[tasso cambio]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=498</guid>
		<description><![CDATA[Scrivere un programma che chieda all’utente di inserire il tasso di cambio fra dollari ed euro. Il programma legge alcuni valori in dollari e li converte in euro fino a che l’utente non digita lo zero (0). La classe Cambio.java: La classe di test:]]></description>
			<content:encoded><![CDATA[<p>Scrivere un programma che chieda all’utente di inserire il tasso di cambio fra dollari ed euro. Il programma legge alcuni valori in dollari e li converte in euro fino a che l’utente non digita lo zero (0).</p>
<p>La classe Cambio.java:</p>
<pre class="brush: java; title: ; notranslate">
public class Cambio
{
private double tasso;

  // Metodo Costruttore inizializzato con il tasso di cambio
  public Cambio(double t)
  {
    tasso = t;
  }

  // Metodo che permette di convertire una somma di denaro
  public double conversione(double v)
  {
    double temp = v * tasso;
    return temp;
  }

  // Metodo che restituisce il valore del tasso di cambio
  public double daiTassoCambio()
  {
    return tasso;
  }
}
</pre>
<p>La classe di test:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestCambio
{
  public static void main(String[] args)
  {
      Scanner in = new Scanner (System.in);

      // Prendo in input il tasso di cambio
      System.out.println(&quot;Dammi il tasso di cambio&quot;);
      double tax = in.nextDouble();

      // Creo un nuovo oggetto Cambio
      Cambio m = new Cambio(tax);

      double o = 1;

      // Effettuo il cambio tra monete
      while(o!=0)
      {
	System.out.println(&quot;Inserisci valore da convertire: (0 per uscire)&quot;);
	o = in.nextDouble();

	if(o!=0){
	    System.out.println(&quot;Col cambio : &quot; + m.conversione(o));
	}else{
	    System.out.println(&quot;Programma concluso!&quot;);
	}
      }
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-22-tasso-di-cambio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 21 &#8211; Serratura</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-21-serratura/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-21-serratura/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 11:00:49 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[esercizio serratura java]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=494</guid>
		<description><![CDATA[Realizzare una classe per rappresentare una serratura con combinazione di 3 lettere maiuscole. I metodi sono void setPosition(String) // inserisce una lettera del codice void reset() // azzera la combinazione inserita void unlock() //apre la serratura se il codice passato è quello della serratura boolean isOpen() // verifica se la serratura è aperta void lock() [...]]]></description>
			<content:encoded><![CDATA[<p>Realizzare una classe per rappresentare una serratura con combinazione di 3 lettere maiuscole.<br />
I metodi sono</p>
<ul>
<li>void setPosition(String) // inserisce una lettera del codice</li>
<li>void reset() // azzera la combinazione inserita</li>
<li>void unlock() //apre la serratura se il codice passato è quello della serratura</li>
<li>boolean isOpen() // verifica se la serratura è aperta</li>
<li>void lock() // chiude la serratura</li>
<li>void newComb(String) // assegna la nuova combinazione se la serratura è aperta</li>
</ul>
<p>Ecco la classe Serratura.java:</p>
<pre class="brush: java; title: ; notranslate">
public class Serratura
{
  String codice;
  String codInserito = null;
  String verifica = null;

  // Metodo Costruttore inizializzato con codice di tre lettere
  public Serratura(String c)
  {
    int lung = c.length();
    if(lung==3 &amp;&amp; c.equals(c.toUpperCase()))
    {
        codice = c;
    }
    else
    {
        // Lancia eccezione se il codice non è di 3 lettere
        throw new IllegalArgumentException(&quot;Codice non valido.&quot;);
    }
  }

  // Metodo che permette di inserire il codice, un carattere per volta
  public void setPosition(String uno ,String due, String tre)
  {
    String temp = uno+due;
    String temp1 = temp+tre;
    codInserito = temp1;
  }

  // Metodo che permette di aprire la serratura se il codice è esatto
  public void unlock()
  {
      if ( codInserito.equals(codice))
      {
          verifica = &quot;APERTA&quot;;
          System.out.println(&quot;Serratura Aperta&quot;);
      }
      else
      {
          verifica = &quot;CHIUSA&quot;;
          System.out.println(&quot;Serratura chiusa&quot;);
      }
  }

  // Metodo che verifica lo stato della serratura
  public String isOpen()
  {
    String isOp = null;
    if(verifica.equals(&quot;APERTA&quot;))
    {
      isOp = &quot;Serratura aperta&quot;;
    }
    else
    {
      isOp = &quot;Serratura chiusa&quot;;
    }
    return isOp;
  }

  // Metodo che permette di chiudere la serratura
  public void lock()
  {
    verifica = &quot;CHIUSA&quot;;
    codInserito = null;
  }

  // Metodo che permette di settare un nuovo codice di serratura
  public void newComb(String nc)
  {
    if(verifica.equals(&quot;APERTA&quot;))
    {
      codice = nc;
      verifica = &quot;CHIUSA&quot;;
    }
    else
    {
      System.out.println(&quot;Serratura chiusa. ACCESSO NEGATO.&quot;);
    }
  }
}
</pre>
<p>La classe di test:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestSerratura {

  public static void main(String[] args)
  {
    Scanner in = new Scanner (System.in);

    // Creo una nuova serratura
    Serratura s = new Serratura(&quot;TRE&quot;);

    // Prendo in input le 3 lettere del codice
    System.out.println(&quot;Inserisci prima lettera codice : &quot;);
    String c = in.nextLine();
    System.out.println(&quot;inserisci seconda lettera codice : &quot;);
    String c1 = in.nextLine();
    System.out.println(&quot;Inserisci terza lettare codice : &quot;);
    String c2 = in.nextLine();
    s.setPosition(c,c1,c2);

    // Verifico se il codice apre la serratura
    s.unlock();

    // Verifico lo stato della serratura
    System.out.println(&quot;Lo stato della serratura è : &quot; +s.isOpen());

    // Setto una nuova combinazione se la serratura è aperta
    s.newComb(&quot;REE&quot;);

    // Verifico il nuovo stato della serratura
    System.out.println(s.isOpen());
  }
}
</pre>
<p>Per ulteriori prove modificare il codice della serratura, modificando il valore in input al costruttore. Da notare anche il primo uso delle eccezioni.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-21-serratura/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attesa aggiornamento DIV &#8211; Ajax</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/ajax/attesa-aggiornamento-div-ajax/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/ajax/attesa-aggiornamento-div-ajax/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 10:23:31 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[attesa aggiornamento div]]></category>
		<category><![CDATA[attesa ajax]]></category>
		<category><![CDATA[loading ricarica div]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=468</guid>
		<description><![CDATA[L&#8217;obiettivo è intrattenere il visitatore in attesa che un box, nel nostro caso un div, venga aggiornato tramite una richiesta Ajax. Difatti nella maggior parte dei casi si rischia di abbandonare l&#8217;utente per un periodo variabile, in attesa che una parte della pagina venga aggiornata o modificata. La tecnica che utilizzeremo è estremamente semplice ed [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;obiettivo è intrattenere il visitatore in attesa che un box, nel nostro caso un div, venga aggiornato tramite una richiesta Ajax.<br />
Difatti nella maggior parte dei casi si rischia di abbandonare l&#8217;utente per un periodo variabile, in attesa che una parte della pagina venga aggiornata o modificata.<br />
La tecnica che utilizzeremo è estremamente semplice ed applicabile a qualsiasi script già esistente; infatti non faremo uso del metodo <em>onreadystatechange</em> dell&#8217;oggetto xmlHttpReq ma semplicmente utilizzeremo un minimo di javascript per visualizzare un&#8217;immagine di attesa prima che il div venga rigenerato.</p>
<p>L&#8217;idea di base è questa:<br />
Scriviamo nel DIV, prima di inviare la richiesta Ajax, l&#8217;immagine di loader. Una volta conclusa la richiesta l&#8217;immagine verrà sostituita dal contenuto richiesto.<br />
Dopo aver visto il codice tratteremo brevemente pregi e difetti di questa soluzione.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;&lt;title&gt;Aggiornamento DIV&lt;/title&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
var myRequest = null;

function CreateXmlHttpReq(handler) {
 	var xmlhttp = null;
	try {
    	xmlhttp = new XMLHttpRequest();
  	}catch(e){
    try {
        xmlhttp = new ActiveXObject(&quot;Msxml2.XMLHTTP&quot;);
    }catch(e){
        xmlhttp = new ActiveXObject(&quot;Microsoft.XMLHTTP&quot;);
    }
  }
  xmlhttp.onreadystatechange = handler;
  return xmlhttp;
}

function myHandler() {
    if (myRequest.readyState == 4 &amp;&amp; myRequest.status == 200) {
        e = document.getElementById(&quot;box&quot;);
        e.innerHTML = myRequest.responseText;
    }
}

// la funzione che permette di ricaricare il contenuto del div BOX
function Ricarica(){
             // scrivo nel BOX l'elemento di attesa
	document.getElementById(&quot;box&quot;).innerHTML=&quot;&lt;div align='center'&gt;&lt;div align='center' style='background:#c0c0c0'&gt;&lt;img src='loading.gif' alt='Attendi'/&gt;&lt;br/&gt;Sto aggiornando i dati...&lt;/div&gt;&lt;/div&gt;&quot;;

             // effettuo la richiesta AJAX
	var r = Math.random();
	myRequest = CreateXmlHttpReq(myHandler);
	myRequest.open(&quot;GET&quot;,&quot;aggiornamento_div.php?rand=&quot;+escape(r));
	myRequest.send(null);
}
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;!-- di seguito il div BOX --&gt;
    &lt;div id='box' style='text-align:center'&gt;
    ... Contenuto del DIV ...
    &lt;/div&gt;
    &lt;!-- di seguito il bottone per ricaricare il box --&gt;
    &lt;input type='button' value='Ricarica' onclick='Ricarica()' /&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>La parte essenziale dello script si racchiude nella funzione Ricarica nella quale prima di effettuare la richiesta (verso una pagina fittizia <em>aggiornamento_div.php</em>) abbiamo la scrittura di un&#8217;immagine di attesa all&#8217;interno del div e successivamente la richiesta.<br />
L&#8217;effetto che avremo è che dal momento in cui agiremo sul bottone di ricarica e fino all&#8217;avvenuta ricezione del contenuto aggiornato, verrà presentato all&#8217;utente un&#8217;animazione (o volendo un testo) di attesa.</p>
<p>Concludiamo sottolineando che qualora si volesse controllare l&#8217;attesa per evitare tempi troppo lunghi o eventualmente la mancata ricezione del contenuto, questo script non fa al nostro caso. Bensì si dovrà monitorare lo stato della richiesta con il metodo <em>readyState</em>.<br />
Questa soluzione è quindi utile quando si è certi che la richiesta andrà a buon fine e lo scopo è semplicemente quello di presentare un&#8217;attesa all&#8217;utente.</p>
<p>E&#8217; possibile scaricare da <a href='http://www.donatantonio.net//script/attesa_aggiornamento_div.rar'><strong>qui</strong></a> il codice completo e funzionante (con script di aggiornamento div compreso).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/ajax/attesa-aggiornamento-div-ajax/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Creare una mappa in stile Google Maps con le librerie GD</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/creare-una-mappa-in-stile-google-maps-con-le-librerie-gd/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/creare-una-mappa-in-stile-google-maps-con-le-librerie-gd/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 11:33:29 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[mappa con librerie GD]]></category>
		<category><![CDATA[mappa in php]]></category>
		<category><![CDATA[mappa in stile Google Maps]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=456</guid>
		<description><![CDATA[In questo articolo vedremo come realizzare una simpatica mappa personalizzata seguendo lo stile grafico di Google Maps. Quello di cui abbiamo bisogno sono: Una mappa in formato JPG Un paio di simboli grafici come in Google Maps Nel nostro esempio utilizzeremo come mappa: Come simboli invece quelli classici presenti in Google Maps: &#160;&#160; Il nostro [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo vedremo come realizzare una simpatica mappa personalizzata seguendo lo stile grafico di Google Maps.<br />
Quello di cui abbiamo bisogno sono:</p>
<ul>
<li>Una mappa in formato JPG</li>
<li>Un paio di simboli grafici come in Google Maps</li>
</ul>
<p>Nel nostro esempio utilizzeremo come mappa:</p>
<p><img src='http://www.donatantonio.net/img/campania.jpg' alt='Campania' border='0' /></p>
<p>Come simboli invece quelli classici presenti in Google Maps:</p>
<p><img src='http://www.donatantonio.net/img/rosso.png' alt='Rosso' align='middle'/>&nbsp;<img src='http://www.donatantonio.net/img/giallo.png' alt='Giallo' align='middle'/>&nbsp;<img src='http://www.donatantonio.net/img/verde.png' alt='Verde' align='middle'/></p>
<p>Il nostro obiettivo sarà essenzialmente quello di realizzare una mappa nella quale posizioneremo i simboli in luoghi da noi scelti.<br />
A tale scopo utilizzeremo le librerie GD di PHP, ed in poche righe di codice raggiungeremo il nostro obiettivo. (N.B. E&#8217; necessario avere installata e configurata la libreria GD)<br />
Apporremo ad esempio su Napoli, Salerno e Sapri i tre simboli, non prima di aver individuato le coordinate sulla cartina. In ultimo salveremo la mappa risultante e la stamperemo a video.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// carico l'immagine da usare come mappa
$campania = imageCreateFromJpeg('campania.jpg');

// carico i simboli in stile Google Maps
$rosso = imageCreateFromPng('rosso.png');
$giallo = imageCreateFromPng('giallo.png');
$verde = imageCreateFromPng('verde.png');

// appongo i simboli in 3 posizioni diverse della cartina
// imageCopy(la mappa, il simbolo da apporre, coordinata x mappa, coordinata y mappa, coordinata x simbolo, coordinata y simbolo, larghezza simbolo, altezza simbolo);

// simbolo rosso su Salerno
imageCopy($campania,$rosso,203,151,0,0,15,25);

// simbolo verde su Napoli
imageCopy($campania,$verde,124,115,0,0,15,25);

// simbolo giallo su Sapri
imageCopy($campania,$giallo,333,272,0,0,15,25);

// la cartina è pronta per essere creata e memorizzata
imageJpeg($campania,&quot;campania_maps.jpg&quot;,100);

// stampa a video
echo &quot;&lt;img src='campania_maps.jpg' alt='La mia mappa'/&gt;&quot;;
?&gt;
</pre>
<p>Ecco il risultato dello script:</p>
<p><img src='http://www.donatantonio.net/img/campania_maps.jpg' alt='La mia cartina' /></p>
<p>In poche linee di codice abbiamo creato la nostra prima mappa. Con un pizzico di fantasia sarà possibile realizzare mappe più complesse o semplicemente aggiungere elementi ad immagini di base.</p>
<p>Clicca <a href='http://www.donatantonio.net//script/mappa_personalizzata.rar'>qui</a> per scaricare lo script e le immagini.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/creare-una-mappa-in-stile-google-maps-con-le-librerie-gd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Realizzare un semplice file di log</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/realizzare-un-semplice-file-di-log/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/realizzare-un-semplice-file-di-log/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 17:34:30 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[file di log con php]]></category>
		<category><![CDATA[logger in php]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=452</guid>
		<description><![CDATA[Con questo semplice script che di seguito viene proposto possiamo memorizzare in un file di testo le informazioni essensiali che riguardano gli utenti connessi ad un sito o ad una applicazione web. Possiamo ad esempio memorizzare per ogni connessione le seguenti informazioni: Data e ora Indirizzo IP del Client Indirizzo di provenienza Client Altre info [...]]]></description>
			<content:encoded><![CDATA[<p>Con questo semplice script che di seguito viene proposto possiamo memorizzare in un file di testo le informazioni essensiali che riguardano gli utenti connessi ad un sito o ad una applicazione web.<br />
Possiamo ad esempio memorizzare per ogni connessione le seguenti informazioni:</p>
<ul>
<li>Data e ora</li>
<li>Indirizzo IP del Client</li>
<li>Indirizzo di provenienza Client</li>
<li>Altre info come Browser e SO</li>
</ul>
<p>Vediamo quindi lo script che ci permette di implementare il logger.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$provenienza = $_SERVER['HTTP_REFERER'];
$data = date(&quot;d-m-y&quot;); $ora = date(&quot;G:i:s&quot;);
$ip = $_SERVER['REMOTE_ADDR'];
$altre_info = $_SERVER['HTTP_USER_AGENT'];

$testo = &quot;------\n\r&quot;.$data.&quot; &quot;.$ora;
$testo = $testo.&quot;\n\rIndirizzo IP: &quot;.$ip;
$testo = $testo.&quot;\n\rProvenienza connessione: &quot;.$provenienza;
$testo = $testo.&quot;\n\rAltre info: &quot;.$altre_info;
$testo = $testo.&quot;\n\r------\n\r&quot;;

$var=fopen(&quot;logger.txt&quot;,&quot;a&quot;);
fwrite($var,$testo);
fclose($var);
?&gt;
</pre>
<p>Questo script va posizionato in cima ad una pagina php o comunque di regola nella pagina index del sito.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/realizzare-un-semplice-file-di-log/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 20 &#8211; Simple Calendario</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-20-simple-calendario/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-20-simple-calendario/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 16:24:28 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[calendario semplice]]></category>
		<category><![CDATA[simple calendario]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=449</guid>
		<description><![CDATA[Realizzare una classe Year con metodo predicativo isLeapYear() e metodo getYear(). Classe Month con metodi getDays() che restituisce il numero di giorni del mese e getMonth() che restituisce il nome del mese. Scrivere un programma che dato il numero di un mese e un anno restituisce il nome del mese, l’anno, se l&#8217;anno è bisestile [...]]]></description>
			<content:encoded><![CDATA[<p>Realizzare una classe Year con metodo predicativo isLeapYear() e metodo getYear().<br />
Classe Month con metodi getDays() che restituisce il numero di giorni del mese e getMonth() che restituisce il nome del mese.<br />
Scrivere un programma che dato il numero di un mese e un anno restituisce il nome del mese, l’anno, se l&#8217;anno è bisestile e infine stampi l&#8217;elenco dei giorni.</p>
<p>La classe Year.java</p>
<pre class="brush: java; title: ; notranslate">
public class Year
{
int anno;

  // Metodo Costruttore inizializzato con anno
  public Year(int a)
  {
    if(a&gt;=1980 &amp;&amp; a&lt;=2100)
    {
        anno = a;
    }
    else
    {
        // Lancia un'eccezione se l'anno non è compreso tra 1980 e 2100
        throw new IllegalArgumentException(&quot;Formato anno non valido&quot;);
    }
  }

  // Metodo che restituisce l'anno
  public int getYear()
  {
    return anno;
  }

  // Metodo che verifica se l'anno è bisestile
  public String isLeapYear()
  {
    String verifica = &quot;NO&quot;;

    int annoCorrente = this.getYear();
    if(annoCorrente % 4 == 0){
    	System.out.println(&quot;Anno bisestile&quot;);
        verifica = &quot;bisestile&quot;;
    }
    return verifica;
  }
}
</pre>
<p>La classe Month.java</p>
<pre class="brush: java; title: ; notranslate">
public class Month
{
int mese;
int anno;
Year ann;

  // Metodo Costruttore inizializzato con il numero del mese e un oggetto Year
  public Month(Year a,int m)
  {
    mese = m;
    ann = a;
    anno = a.getYear();
  }

  // Metodo che restituisce il nome del mese
  public void getMonth()
  {
    if (mese &gt;=1 &amp;&amp; mese &lt; 13)
    {
      if (mese==1){  System.out.print(&quot;GENNAIO  &quot;);}
      if (mese==2){  System.out.print(&quot;FEBBRAIO &quot;);}
      if (mese==3){  System.out.print(&quot;MARZO  &quot;);}
      if (mese==4){  System.out.print(&quot;APRILE &quot;);}
      if (mese==5){  System.out.print(&quot;MAGGIO &quot;);}
      if (mese==6){  System.out.print(&quot;GIUGNO &quot;);}
      if (mese==7){  System.out.print(&quot;LUGLIO &quot;);}
      if (mese==8){  System.out.print(&quot;AGOSTO &quot;);}
      if (mese==9){  System.out.print(&quot;SETTEMBRE  &quot;);}
      if (mese==10){  System.out.print(&quot;OTTOBRE &quot;);}
      if (mese==11){  System.out.print(&quot;NOVEMBRE  &quot;);}
      if (mese==12){  System.out.print(&quot;DICEMBRE  &quot;);}
    }
    else
    {
      System.out.println(&quot;Formato mese non valido&quot;);
    }
  }

  // Metodo che restituisce il numero di giorni corrispondente al mese
  public void getDays()
  {
    String v = ann.isLeapYear();
    if(mese == 2)
    {
      // Se il mese è Febbraio verifica l'anno se bisestile
      if(v.equalsIgnoreCase(&quot;bisestile&quot;))
      {
        System.out.println(&quot;  1   2   3   4   5   6   7 &quot;);
        System.out.println(&quot;  8   9   10  11  12  13  14&quot;);
        System.out.println(&quot;  15  16  17  18  19  20  21&quot;);
        System.out.println(&quot;  22  23  24  25  26  27  28&quot;);
        System.out.println(&quot;  29    &quot;);
      }
      else
      {
        System.out.println(&quot;  1   2   3   4   5   6   7 &quot;);
        System.out.println(&quot;  8   9   10  11  12  13  14&quot;);
        System.out.println(&quot;  15  16  17  18  19  20  21&quot;);
        System.out.println(&quot;  22  23  24  25  26  27  28&quot;);
      }
    }
    if(mese==1 || mese==3 || mese==5 || mese==7 || mese==8 || mese==10 || mese==12)
    {
      System.out.println(&quot;  1   2   3   4   5   6   7 &quot;);
      System.out.println(&quot;  8   9   10  11  12  13  14&quot;);
      System.out.println(&quot;  15  16  17  18  19  20  21&quot;);
      System.out.println(&quot;  22  23  24  25  26  27  28&quot;);
      System.out.println(&quot;  29  30  31  &quot;);
    }
    if(mese==4 || mese==6 || mese==9 || mese ==11)
    {
      System.out.println(&quot;  1   2   3   4   5   6   7 &quot;);
      System.out.println(&quot;  8   9   10  11  12  13  14&quot;);
      System.out.println(&quot;  15  16  17  18  19  20  21&quot;);
      System.out.println(&quot;  22  23  24  25  26  27  28&quot;);
      System.out.println(&quot;  29  30  &quot;);
    }
  }
}
</pre>
<p>La classe di test TestCalendario.java</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestCalendario
{
  public static void main(String[] args)
  {
    Scanner in = new Scanner(System.in);

    // Prendo in input l'anno
    System.out.println(&quot;Dammi l'anno :&quot;);
    int a = in.nextInt();

    // Prendo in input il mese
    System.out.println(&quot;Dammi il mese (numero): &quot;);
    int m = in.nextInt();

    // Creo un oggetto Year e un oggetto Month
    Year ye = new Year(a);
    Month mo = new Month(ye,m);

    // Visualizzo i dati completi
    mo.getMonth();
    System.out.println(ye.getYear());
    mo.getDays();
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-20-simple-calendario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 19 &#8211; Ordine lessicografico</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-19-ordine-lessicografico/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-19-ordine-lessicografico/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:25:33 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[ordine lessicografico]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=446</guid>
		<description><![CDATA[Scrivere un programma che prende in input da tastiera un numero fissato di parole (per esempio 4) e stampa la prima e l’ultima parola secondo l’ordine lessicografico. La classe OrdineLessicografico.java: La classe di test:]]></description>
			<content:encoded><![CDATA[<p>Scrivere un programma che prende in input da tastiera un numero fissato di parole (per esempio 4) e stampa la prima e l’ultima parola secondo l’ordine lessicografico.</p>
<p>La classe OrdineLessicografico.java:</p>
<pre class="brush: java; title: ; notranslate">
public class OdineLessicografico {
String prima;
String seconda;
String terza;
String quarta;

  // Metodo costruttore inizializzato con 4 Stringhe
  public OdineLessicografico(String p,String s,String t,String q)
  {
    prima = p;
    seconda = s;
    terza = t;
    quarta = q;
  }

  // Metodo che ordina in modo lessicografico la prima e la quarta parola
  public void ordina()
  {
    if (prima.compareTo(quarta)&lt;0)
    {
      System.out.println(prima);
      System.out.println(quarta);
    }
    else
    {
      System.out.println(quarta);
      System.out.println(prima);
    }
  }
}
</pre>
<p>La classe di test:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestOrdine {

  public static void main(String[] args)
  {
    Scanner in = new Scanner(System.in);

    // Prendo in input 4 parole
    System.out.println(&quot;Dammi 4 parole (ognuna seguita dal tasto &lt;invio&gt;): &quot;);
    String a = in.nextLine();
    String b = in.nextLine();
    String c = in.nextLine();
    String d = in.nextLine();

    // Creo un nuovo oggetto OrdineLessicografico
    OdineLessicografico x = new OdineLessicografico(a,b,c,d);

    // Chiamo il metodo ordina
    x.ordina();
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-19-ordine-lessicografico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 18 &#8211; Stampa stringa in base ad input</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-18-stampa-stringa-in-base-ad-input/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-18-stampa-stringa-in-base-ad-input/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:20:58 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[stampa stringa in relazione ad input]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=442</guid>
		<description><![CDATA[Scrivere un programma che stampi “OK” se legge “S” ,”SI”, “OK”, “certo” oppure “perche` no?”. “Fine” se legge “N” o “No” “Dato non corretto” altrimenti A tal fine scrivere una classe InputChecker. La classe InputChecker.java: La classe di test:]]></description>
			<content:encoded><![CDATA[<p>Scrivere un programma che stampi</p>
<ul>
<li> “OK” se legge “S” ,”SI”, “OK”, “certo” oppure “perche` no?”.</li>
<li> “Fine” se legge “N” o “No”</li>
<li> “Dato non corretto” altrimenti</li>
</ul>
<p>A tal fine scrivere una classe InputChecker.</p>
<p>La classe InputChecker.java:</p>
<pre class="brush: java; title: ; notranslate">
public class InputChecker {
String inp;

  // Metodo Costruttore
  public InputChecker(String v)
  {
    inp = v;
  }

  // Metodo che verifica l'input e stampa la relativa informazione
  public void verificaInput()
  {
    if(inp.equalsIgnoreCase(&quot;S&quot;) || inp.equalsIgnoreCase(&quot;SI&quot;) ||inp.equalsIgnoreCase(&quot;OK&quot;) || inp.equalsIgnoreCase(&quot;certo&quot;) || inp.equalsIgnoreCase(&quot;perchè no?&quot;))
    {
      System.out.println(&quot;OK&quot;);
    }
    else
    {
      if(inp.equalsIgnoreCase(&quot;N&quot;) || inp.equalsIgnoreCase(&quot;No&quot;))
      {
        System.out.println(&quot;Fine&quot;);
      }
      else
      {
        System.out.println(&quot;Dato non corretto&quot;);
      }
    }

  }
}
</pre>
<p>La classe di test:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestInputCheck {

  public static void main(String[] args)
  {
    Scanner in = new Scanner(System.in);

    // Prendo in input la parola da verificare
    System.out.println(&quot;Dammi l'input di verifica: &quot;);
    String a = in.nextLine();

    // Creo un nuovo oggetto InputChecker
    InputChecker x = new InputChecker(a);

    // Verifico l'input
    x.verificaInput();
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-18-stampa-stringa-in-base-ad-input/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 17 &#8211; Numeri in virgola mobile (ordinamento)</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-17-numeri-in-virgola-mobile-ordinamento/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-17-numeri-in-virgola-mobile-ordinamento/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:10:46 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[numeri in virgola mobile]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=439</guid>
		<description><![CDATA[Scrivere un programma che prende in input da tastiera 3 numeri in virgola mobile per poi stamparli in ordine crescente. Senza utilizzare cicli o strutture di appoggio. La classe VirgolaMobile.java:]]></description>
			<content:encoded><![CDATA[<p>Scrivere un programma che prende in input da tastiera 3 numeri in virgola mobile per poi stamparli in ordine crescente. Senza utilizzare cicli o strutture di appoggio.</p>
<p>La classe VirgolaMobile.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class VirgolaMobile
{
	public static void main(String[] args)
	{
		Scanner in = new Scanner(System.in);

		// Prendo in input 3 numeri in virgola mobile
		System.out.println(&quot;Dammi tre numeri in virgola mobile seguiti da &lt;invio&gt; :&quot;);
		double a = in.nextDouble();
		double b = in.nextDouble();
		double c = in.nextDouble();

		// Stampo a video i tre numeri in ordine decrescente
		System.out.println(&quot;Ecco i tre numeri in ordine descrescente:&quot;);
		if (a&gt;b &amp;&amp; a&gt;c)
		{
			System.out.println(a);
			if( b&gt;c)
			{
				System.out.println(b);
				System.out.println(c);
			}
			else
			{
				System.out.println(c);
				System.out.println(b);
		    }
		}
		else
		{
			if (b&gt;a &amp;&amp; b&gt;c)
			{
				System.out.println(b);
				if (a&gt;c)
				{
					System.out.println(a);
					System.out.println(c);
				}
				else
				{
					System.out.println(c);
					System.out.println(a);
				}

			}
			else
			{
				if (c&gt;a &amp;&amp; c&gt;b)
				{
					System.out.println(c);
					if(a&gt;b)
					{
						System.out.println(a);
						System.out.println(b);
					}
					else
					{
						System.out.println(b);
						System.out.println(a);
					}
				}
			}
		}
	}
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-17-numeri-in-virgola-mobile-ordinamento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 16 &#8211; Nomi dei mesi</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-16-nomi-dei-mesi/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-16-nomi-dei-mesi/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 15:01:22 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[nomi dei mesi]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=433</guid>
		<description><![CDATA[Realizzare una classe Mesi i cui oggetti corrispondono ai mesi. Il costruttore riceve in input un parametro intero (il numero del mese) e la classe contiene un metodo getName() che restituisce il nome del mese. Scrivere un programma per tradurre i numeri da 1 a 12 nei nomi dei mesi corrispondenti. La classe Mesi.java: La [...]]]></description>
			<content:encoded><![CDATA[<p>Realizzare una classe Mesi i cui oggetti corrispondono ai mesi. Il costruttore riceve in input un parametro intero (il numero del mese) e la classe contiene un metodo getName() che restituisce il nome del mese.<br />
Scrivere un programma per tradurre i numeri da 1 a 12 nei nomi dei mesi corrispondenti.</p>
<p>La classe Mesi.java:</p>
<pre class="brush: java; title: ; notranslate">
public class Mesi {
int mese;

  // Metodo Costruttore inizializzato con int m = numero del mese
  public Mesi(int m)
  {
    mese = m;
  }

  // Metodo che restituisce il relativo mese
  public void getName()
  {
    if (mese &gt; 12)
    {
        System.out.println(&quot;ERRORE MESE&quot;);
    }
    else
      if (mese == 1)
      {
         System.out.print(&quot;1  &quot;);
         System.out.println(&quot;GENNAIO&quot;);
      }

      if (mese == 2)
      {
         System.out.print(&quot;2  &quot;);
         System.out.println(&quot;FEBBRAIO&quot;);
      }

      if (mese == 3)
      {
         System.out.print(&quot;3  &quot;);
         System.out.println(&quot;MARZO&quot;);
      }

      if (mese == 4)
      {
         System.out.print(&quot;4  &quot;);
         System.out.println(&quot;APRILE&quot;);
      }

      if (mese == 5)
      {
         System.out.print(&quot;5  &quot;);
         System.out.println(&quot;MAGGIO&quot;);
      }

      if (mese == 6)
      {
         System.out.print(&quot;6  &quot;);
         System.out.println(&quot;GIUGNO&quot;);
      }

      if (mese == 7)
      {
         System.out.print(&quot;7  &quot;);
         System.out.println(&quot;LUGLIO&quot;);
      }

      if (mese == 8 )
      {
         System.out.print(&quot;8  &quot;);
         System.out.println(&quot;AGOSTO&quot;);
      }

      if (mese == 9)
      {
         System.out.print(&quot;9  &quot;);
         System.out.println(&quot;SETTEMBRE&quot;);
      }

      if (mese == 10)
      {
         System.out.print(&quot;10  &quot;);
         System.out.println(&quot;OTTOBRE&quot;);
      }

      if (mese == 11)
      {
         System.out.print(&quot;11  &quot;);
         System.out.println(&quot;NOVEMBRE&quot;);
      }

      if (mese == 12)
      {
         System.out.print(&quot;12  &quot;);
         System.out.println(&quot;DICEMBRE&quot;);
      }

      if (mese &lt; 1)
      {
          System.out.println(&quot;ERRORE MESE&quot;);
      }
  }
}
</pre>
<p>La classe di test TestMese.java:</p>
<pre class="brush: java; title: ; notranslate">
public class TestMese
{
  public static void main(String[] args)
  {
    // Stampo a video i nomi dei 12 mesi dell'anno
    for ( int i = 1 ; i &lt; 13 ; i++)
    {
      Mesi a = new Mesi(i);
      a.getName();
    }
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-16-nomi-dei-mesi/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 15 &#8211; Stampa al contrario</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-15-stampa-al-contrario/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-15-stampa-al-contrario/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 14:51:14 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[stampa al contrario]]></category>
		<category><![CDATA[substring]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=431</guid>
		<description><![CDATA[Scrivere un programma che legge da tastiera un numero intero di 5 cifre e stampi in ordine inverso le singole cifre che lo compongono. Utilizzare opportune funzioni di conversione, cicli e substring. Es. se l’input è 42853 vengono stampate le cifre 3 5 8 2 4 La classe LetturaInversa.java: La classe di test:]]></description>
			<content:encoded><![CDATA[<p>Scrivere un programma che legge da tastiera un numero intero di 5 cifre e stampi in ordine inverso le singole cifre che lo compongono. Utilizzare opportune funzioni di conversione, cicli e substring.<br />
Es. se l’input è 42853 vengono stampate le cifre<br />
3<br />
5<br />
8<br />
2<br />
4</p>
<p>La classe LetturaInversa.java:</p>
<pre class="brush: java; title: ; notranslate">
public class LetturaInversa
{
int numero;

  // Metodo costruttore che prende in input un numero intero
  public LetturaInversa(int n)
  {
      numero = n;
  }

  // Metodo che stampa le cifre che compongono il numero in modo inverso
  public void stampaContrario()
  {
    // Converto il numero in una stringa
    String num = Integer.toString(numero);

    // Stampo a video un numero alla volta partendo dall'ultimo numero
    for(int i=0; i&lt;num.length(); i++){
    	System.out.println(num.substring(num.length()-i-1,num.length()-i));
    }
  }
}
</pre>
<p>La classe di test:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestInverso {

  public static void main(String[] args)
  {

    Scanner in = new Scanner(System.in);

    // Prendo in input il numero di 5 cifre
    System.out.println(&quot;Dammi un numero : &quot;);
    int x = in.nextInt();

    if(x&gt;99999){
    	System.out.println(&quot;Doveni inserire un valore di 5 cifre o inferiore!&quot;);
    }else{
    	// Creo un nuovo oggetto per la lettura inversa
        LetturaInversa a = new LetturaInversa(x);

        // Stampo a video i numeri in ordine inverso
        System.out.println(&quot;Ecco i numeri stampati in ordine inverso : &quot;);
        a.stampaContrario();
    }
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-15-stampa-al-contrario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Il Sistema Informativo &#8211; Vulnerabilità e tecniche di backup</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/il-sistema-informativo-vulnerabilita-e-tecniche-di-backup/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/il-sistema-informativo-vulnerabilita-e-tecniche-di-backup/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 16:48:35 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Tutorial e Pubblicazioni]]></category>
		<category><![CDATA[backup sistema informativo]]></category>
		<category><![CDATA[le vulnerabilità di un sistema informativo]]></category>
		<category><![CDATA[sistema informativo]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=426</guid>
		<description><![CDATA[In questa relazione viene trattato il problema della vulnerabilità dei Sistemi Informativi. In particolare viene descritto il concetto di Sistema Informativo e discusse le varie forme di vulnerabilità e i diversi tipi di attacchi, quindi le possibili tecniche di prevensione e difesa con un occhio di riguarado alle tecniche di backup. Disponibile in formato: PDF [...]]]></description>
			<content:encoded><![CDATA[<p>In questa relazione viene trattato il problema della vulnerabilità dei Sistemi Informativi. In particolare viene descritto il concetto di Sistema Informativo e discusse le varie forme di vulnerabilità e i diversi tipi di attacchi, quindi le possibili tecniche di prevensione e difesa con un occhio di riguarado alle tecniche di backup.</p>
<table border='0'>
<tr>
<td height='32px'>Disponibile in formato:</td>
<td>PDF</td>
</tr>
<tr>
<td height='32px'>Numero di Pagine:</td>
<td>6</td>
</tr>
<tr>
<td height='32px'>Anno:</td>
<td>2009</td>
</tr>
<tr>
<td height='32px'>Download:</td>
<td><a href='http://www.donatantonio.net//guide_pdf/Vulnerabilita_sistema_informativo.pdf'><img src='http://www.donatantonio.net//guide_pdf/logo-pdf.gif' alt='Download' border='0' /></a></td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/tutorial_pubblicazioni/il-sistema-informativo-vulnerabilita-e-tecniche-di-backup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grafici con PHP e la libreria Pchart</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/php/grafici-con-php-e-la-libreria-pchart/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/php/grafici-con-php-e-la-libreria-pchart/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 10:38:04 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[grafici con PChart]]></category>
		<category><![CDATA[grafici con php]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=415</guid>
		<description><![CDATA[Le utilissime librerie GD di PHP permettono di disegnare e modificare immagini, ben più difficile è realizzare grafici partendo da una serie di dati o da un database. La libreria PChart permette di fare tutto ciò con estrema semplicità e tutto in poche linee di codice, realizzeremo grafici a barre, a torta e lineari utilizzando [...]]]></description>
			<content:encoded><![CDATA[<p>Le utilissime librerie GD di PHP permettono di disegnare e modificare immagini, ben più difficile è realizzare grafici partendo da una serie di dati o da un database.<br />
La libreria <strong>PChart</strong> permette di fare tutto ciò con estrema semplicità e tutto in poche linee di codice, realizzeremo grafici a barre, a torta e lineari utilizzando al meglio le librerie GD.</p>
<p>E&#8217; innanzitutto necessario scaricare PChart da <strong><a href='http://pchart.sourceforge.net/' target='_blank'>qui</a></strong>.</p>
<p>Vediamo ora come realizzare un semplice grafico utilizzando la libreria.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// importiamo la libreria
include(&quot;pChart/pData.class&quot;);
include(&quot;pChart/pChart.class&quot;);

// carico i valori da rappresentare graficamente - utilizzo 2 array
$DataSet = new pData;
$DataSet-&gt;AddPoint(array(0,3,6,2,3,1,4,8,10,6,3,5,6),&quot;Serie1&quot;);
$DataSet-&gt;AddPoint(array(0,1,3,4,1,3,7,5,6,7,3,8,5),&quot;Serie2&quot;);
$DataSet-&gt;AddAllSeries();

// imposto la legenda
$DataSet-&gt;SetSerieName(&quot;La prima serie&quot;,&quot;Serie1&quot;);
$DataSet-&gt;SetSerieName(&quot;La seconda serie&quot;,&quot;Serie2&quot;);  

// imposto un nome agli assi cartesiani
$DataSet-&gt;SetXAxisName(&quot;Mesi&quot;);
$DataSet-&gt;SetYAxisName(&quot;Valore raggiunto&quot;);

$Test = new pChart(500,250);

// imposto l'aspetto del grafico
$Test-&gt;setFixedScale(0,11);
$Test-&gt;setFontProperties(&quot;Fonts/tahoma.ttf&quot;,8);
$Test-&gt;setGraphArea(50,40,500,210);
$Test-&gt;drawFilledRoundedRectangle(7,7,543,243,5,240,240,240);
$Test-&gt;drawRoundedRectangle(5,5,550,250,5,400,400,400);
$Test-&gt;drawGraphArea(255,255,255,TRUE);
$Test-&gt;drawScale($DataSet-&gt;GetData(),$DataSet-&gt;GetDataDescription(), SCALE_NORMAL,150,150,150,TRUE,0,0);
$Test-&gt;drawGrid(10,TRUE,230,230,230,50);

// imposto il tipo di grafico - lineare, curvilineo, torta ecc...
$Test-&gt;setColorPalette(0,0,255,0);
$Test-&gt;setLineStyle(1.5);
$Test-&gt;drawTreshold(0,143,55,72,TRUE,TRUE);
$Test-&gt;drawCubicCurve($DataSet-&gt;GetData(),$DataSet-&gt;GetDataDescription());
$Test-&gt;drawPlotGraph($DataSet-&gt;GetData(),$DataSet-&gt;GetDataDescription(), 1.5,1.5,0,0,255);

// imposto titolo e legenda del grafico e quindi lo realizzo
$Test-&gt;drawLegend(55,40,$DataSet-&gt;GetDataDescription(),255,255,255);
$Test-&gt;setFontProperties(&quot;Fonts/tahoma.ttf&quot;,10);
$Test-&gt;drawTitle(100,22,&quot;Il primo grafico&quot;,0,0,100);
$Test-&gt;Render(&quot;grafico.png&quot;);
?&gt;
</pre>
<p>Quello che abbiamo realizzato è un semplice <em>grafico introduttivo</em>. Studiando la documentazione di PChart si potranno realizzare grafici complessi e graficamente accattivanti. Si potrà ad esempio prelevare i dati da un file excel, personalizzare gli assi cartesiani, i colori e le scale e sbizzarrirsi a creare grafici tridimensionali.</p>
<p>Ecco il risultato del nostro script:</p>
<div style='background-color:#FFFFFF; width:550px; height:250px'><img src='http://www.donatantonio.net/img/grafico.png' alt='Grafico' /></div>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/php/grafici-con-php-e-la-libreria-pchart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Barra di caricamento in Javascript</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/javascript/barra-di-caricamento-in-javascript/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/javascript/barra-di-caricamento-in-javascript/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 09:04:18 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[barra di caricamento]]></category>
		<category><![CDATA[caricamento]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=411</guid>
		<description><![CDATA[Spesso può essere utile presentare agli utenti di un sito una barra di caricamento la cui funzionalità, nella maggior parte dei casi, è prettamente grafica. Ad esempio prima di effettuare un&#8217;operazione, all&#8217;utente può essere presentata una barra di caricamento che si completa in funzione di un timer alla cui conclusione effettua la particolare operazione. Andremo [...]]]></description>
			<content:encoded><![CDATA[<p>Spesso può essere utile presentare agli utenti di un sito una barra di caricamento la cui funzionalità, nella maggior parte dei casi, è prettamente grafica. Ad esempio prima di effettuare un&#8217;operazione, all&#8217;utente può essere presentata una barra di caricamento che si completa in funzione di un timer alla cui conclusione effettua la particolare operazione.<br />
Andremo a descrivere da prima il codice Javascript:</p>
<pre class="brush: jscript; title: ; notranslate">
function countdown(){
	var ora = parseFloat(document.rovescia.conto.value);
	ora = ora + 0.5;
	document.rovescia.conto.value=ora;
	var g_c = ora*3;
	document.getElementById(&quot;barra&quot;).innerHTML=&quot;&lt;div style='height:10px; width:&quot;+g_c+&quot;px; background-color:#FF0000'&gt;&lt;/div&gt;&quot;;
	if(ora==60){
		location.href = &quot;reindirizzamento.html&quot;;
	}
	conto = setTimeout(&quot;countdown()&quot;,500);
}
</pre>
<p>Utilizzeremo un contatore immagazzinato in un input hidden che chiameremo &#8220;conto&#8221;. Viceversa un altro blocco che chiameremo &#8220;barra&#8221; conterrà l&#8217;avanzamento del caricamento. Dopo 60 secondi la barra di caricamento sarà completata.<br />
L&#8217;aspetto grafico della barra verrà implementata con un semplice DIV e un minimo di CSS.</p>
<p>Ora vediamo lo script inserito in una pagina html:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Pagina di reindirizzamento&lt;/title&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
    function countdown(){
	var ora = parseFloat(document.rovescia.conto.value);
	ora = ora + 0.5;
	document.rovescia.conto.value=ora;
	var g_c = ora*3;
	document.getElementById(&quot;barra&quot;).innerHTML=&quot;&lt;div style='height:10px; width:&quot;+g_c+&quot;px; background-color:#FF0000'&gt;&lt;/div&gt;&quot;;
	if(ora==60){
		location.href = &quot;reindirizzamento.html&quot;;
	}
	conto = setTimeout(&quot;countdown()&quot;,500);
    }
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
Stai per essere reindirizzato alla pagina corretta...
&lt;br/&gt;
&lt;form name='rovescia' action='#'&gt;
    &lt;input type='hidden' name='conto' value='0'/&gt;
&lt;/form&gt;
&lt;div class='barra' id='barra' style='border:1px solid #000000; width:180px;'&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
    countdown();
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/javascript/barra-di-caricamento-in-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 14 &#8211; Erogazione del resto</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-14-erogazione-del-resto/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-14-erogazione-del-resto/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 15:57:24 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[contatore monete]]></category>
		<category><![CDATA[erogazione resto]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=408</guid>
		<description><![CDATA[Scrivere un programma che calcoli il resto in monete (2 euro, 1 euro, 50/100, 20/100, 10/100, 5/100, 2/100, 1/100) della somma corrisposta dal cliente. L&#8217;input sarà costituito da due importi: il prezzo da pagare e la somma corrisposta dal cliente. Realizzare la classe Cashier per la gestione dei diversi tagli di moneta e una classe [...]]]></description>
			<content:encoded><![CDATA[<p>Scrivere un programma che calcoli il resto in monete (2 euro, 1 euro, 50/100, 20/100,<br />
10/100, 5/100, 2/100, 1/100) della somma corrisposta dal cliente. L&#8217;input sarà costituito da due importi: il prezzo da pagare e la somma corrisposta dal cliente.<br />
Realizzare la classe Cashier per la gestione dei diversi tagli di moneta e una classe Resto che implementi l&#8217;erogazione del resto.</p>
<p>La classe Cashier.java</p>
<pre class="brush: java; title: ; notranslate">
public class Cashier
{
double resto;

  // Metodo Costruttore vuoto
  public Cashier()
  {
  }

  // Metodo che restituisce una moneta da 2 Euro
  public double dai2Euro()
  {
      return 2;
  }

  // Metodo che restituisce una moneta da 1 Euro
  public double dai1Euro()
  {
      return 1;
  }

  // Metodo che restituisce una moneta da 50 centesimi
  public double dai50Cent()
  {
      return 0.50;
  }

  // Metodo che restituisce una moneta da 20 centesimi
  public double dai20Cent()
  {
      return 0.20;
  }

  // Metodo che restituisce una moneta da 10 centesimi
  public double dai10Cent()
  {
      return 0.10;
  }

  // Metodo che restituisce una moneta da 5 centeimi
  public double dai5Cent()
  {
      return 0.05;
  }

  // Metodo che restituisce una moneta da 2 centesimi
  public double dai2Cent()
  {
      return 0.02;
  }

  // Metodo che restituisce una moneta da 1 centesimo
  public double dai1Cent()
  {
      return 0.01;
  }

}
</pre>
<p>La classe Resto.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class Resto
{

  public static void main(String[] args)
  {
    Scanner in = new Scanner(System.in);

    // Prendo in input la somma da pagare
    System.out.println(&quot;Dammi il prezzo : &quot;);
    double p = in.nextDouble();

    // Prendo in input la somma emessa per il pagamento
    System.out.println(&quot;Dammi la somma di denaro&quot;);
    double s = in.nextDouble();

    // Creo un nuovo oggetto Cashier per gestire il resto
    Cashier a = new Cashier();

    System.out.println(&quot;Ecco il resto in monete: &quot;);
    // Verifico che la somma emessa sia &gt;= del prezzo del prodotto
    if (s &gt;= p)
    {
        // Calcolo il resto
        double r = s - p;
        double re = 0 ;

        // Emetto se necessario moneta da 2 Euro
        while (r &gt;= 2)
        {
            System.out.println(a.dai2Euro());
            r = r - a.dai2Euro();
            re = re + a.dai2Euro();
        }

        // Emetto se necessario moneta da 1 Euro
        while (r &gt;= 1)
        {
            System.out.println(a.dai1Euro());
            r = r - a.dai1Euro();
            re = re + a.dai1Euro();
        }

        // Emetto se necessario moneta da 50 centesimi
        while (r &gt;= 0.50)
        {
            System.out.println(a.dai50Cent());
            r = r - a.dai50Cent();
            re = re + a.dai50Cent();
        }

        // Emetto se necessario moneta da 20 centesimi
        while (r &gt;= 0.20)
        {
            System.out.println(a.dai20Cent());
            r = r - a.dai20Cent();
            re = re + a.dai20Cent();
        }

        // Emetto se necessario moneta da 10 centesimi
        while (r &gt;= 0.10)
        {
            System.out.println(a.dai10Cent());
            r = r - a.dai10Cent();
            re = re + a.dai10Cent();
        }

        // Emetto se necessario moneta da 5 centesimi
        while (r &gt;= 0.05)
        {
            System.out.println(a.dai5Cent());
            r = r - a.dai5Cent();
            re = re + a.dai5Cent();
        }

        // Emetto se necessario moneta da 2 centesimi
        while (r &gt;= 0.02)
        {
            System.out.println(a.dai2Cent());
            r = r - a.dai2Cent();
            re = re + a.dai2Cent();
        }

        // Emetto se necessario moneta da 1 centesimo
        while (r &gt;= 0.01)
        {
            System.out.println(a.dai1Cent());
            r = r - a.dai1Cent();
            re = re + a.dai1Cent();
        }

    // Stampo a video il resto
    System.out.print(&quot;Per un totale di : &quot;);
    System.out.println(&quot; Euro &quot; + re);

    }
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-14-erogazione-del-resto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 13 &#8211; Calcola quadrato</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-13-calcola-quadrato/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-13-calcola-quadrato/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 15:44:43 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[area quadrato]]></category>
		<category><![CDATA[calcola quadrato]]></category>
		<category><![CDATA[diagonale quadrato]]></category>
		<category><![CDATA[perimetro quadrato]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=405</guid>
		<description><![CDATA[Realizzare un&#8217;applicazione che permetta di calcolare perimetro, area e diagonale di un quadrato partendo dalla conoscenza del lato. Classe Quadrato.java: La classe di test TestQuadrato.java:]]></description>
			<content:encoded><![CDATA[<p>Realizzare un&#8217;applicazione che permetta di calcolare perimetro, area e diagonale di un quadrato partendo dalla conoscenza del lato.</p>
<p>Classe Quadrato.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.math.*;
public class Quadrato
{
  int lato;
  // Metodo costruttore inizializzato con la misura del lato
  public Quadrato(int l)
  {
      lato = l;
  }

  // Metodo che calcola l'area
  public int calcolaA()
  {
      return (lato*lato);
  }

  // Metodo che calcola il perimetro
  public int calcolaP()
  {
      return (lato*4);
  }

  // Metodo che calcola la diagonale
  public double calcolaD()
  {
      // Chiamata al metodo sqrt della classe MATH
      // Calcolo della radice quadrata di 2
      double r = Math.sqrt(2);
      return (lato*r);
  }

  // Metodo che restituisce la misura del lato
  public int getLato()
  {
      return lato;
  }
}
</pre>
<p>La classe di test TestQuadrato.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestQuad {

  public static void main(String[] args)
  {
      Scanner in = new Scanner(System.in);

      // Prendo in input la misura del lato
      System.out.println(&quot;Dammi la misura del lato&quot;);
      int l = in.nextInt();

       // Creo un nuovo oggetto di tipo Gauadrato
      Quadrato a = new Quadrato(l);

      // Stampo a video l'area, il perimetro e la diagonale
      System.out.println(&quot;L'area è pari a &quot;);
      System.out.println(a.calcolaA());

      System.out.println(&quot;Il perimetro è pari a &quot;);
      System.out.println(a.calcolaP());

      System.out.println(&quot;La diagonale è: &quot;);
      System.out.println(a.calcolaD());
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-13-calcola-quadrato/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 12 &#8211; Simulatore lancio dado</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-12-simulatore-lancio-dado/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-12-simulatore-lancio-dado/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 15:30:08 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[lancio dado]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=402</guid>
		<description><![CDATA[Progettare una classe che implementi un dado, specificando da prima il numero di facce (caso base 4) e quindi un metodo che restituisca una faccia del dado simulando appunto il lancio. Utilizzare la classe Random per generare il valore della faccia del dado. Realizzare infine una classe di test. Codice della classe Dado.java: La classe [...]]]></description>
			<content:encoded><![CDATA[<p>Progettare una classe che implementi un dado, specificando da prima il numero di facce (caso base 4) e quindi un metodo che restituisca una faccia del dado simulando appunto il lancio. Utilizzare la classe Random per generare il valore della faccia del dado.<br />
Realizzare infine una classe di test.</p>
<p>Codice della classe Dado.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Random;
public class Dado
{
  // Metodo Costruttore inizializzato con il numero di facce del dado
  public Dado(int s)
  {
    facce = s;
    // Generatore di numeri casuali
    generatore = new Random();
  }

  // Metodo costruttore del dado classico con 4 facce
  public Dado(){
    facce = 4;
    // Generatore di numeri casuali
    generatore = new Random();
  }

  // Metodo che simula il lancio del dado
  public int lancia()
  {
      return 1 + generatore.nextInt(facce);
  }

  private Random generatore;
  private int facce;
}
</pre>
<p>La classe di test TestLancio.java:</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class TestLancio {

  public static void main(String[] args)
  {
      // Creo un nuovo dado con 6 facce
      Dado d = new Dado(6);
      Scanner in = new Scanner(System.in);

      // Simulo una certa quantità di lanci
      System.out.println(&quot;Quanti lanci vuoi simulare?&quot;);
      int n = in.nextInt();

      for( int i = 0 ; i &lt; n ; i++)
      {
          int r = d.lancia();
          // Visualizzo il risultato di ogni singolo lancio
          System.out.print(r + &quot;  &quot;);
      }
  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-12-simulatore-lancio-dado/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 11 &#8211; Contatore di monete</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-11-contatore-di-monete/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-11-contatore-di-monete/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 15:17:22 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[contatore di monete]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=399</guid>
		<description><![CDATA[Realizzare un programmino che chieda in input per ogni taglio di moneta il quantitativo in possesso e calcoli in conclusione il totale economico delle monete. Ecco il codice della classe Moneta.java]]></description>
			<content:encoded><![CDATA[<p>Realizzare un programmino che chieda in input per ogni taglio di moneta il quantitativo in possesso e calcoli in conclusione il totale economico delle monete.</p>
<p>Ecco il codice della classe Moneta.java</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
public class Moneta{

  public static void main(String[] args)
  {
      // Imposto il valore delle monete
      final double dieciCent = 0.10;
      final double ventiCent = 0.20;
      final double cinquantaCent = 0.50;
      final double unEur = 1;
      final double duEur = 2;

      Scanner in = new Scanner(System.in);

      // Prendo in input il numero di monete da 10 centesimi
      System.out.println(&quot;Quanti 10 centesimi hai?&quot;);
      int dieci = in.nextInt();

      // Prendo in input il numero di monete da 20 centesimi
      System.out.println(&quot;Quanti 20 centesimi hai?&quot;);
      int venti = in.nextInt();

      // Prendo in input il numero di monete da 50 centesimi
      System.out.println(&quot;Quanti 50 centesimi hai?&quot;);
      int cinquanta = in.nextInt();

      // Prendo in input il numero di monete da 1 Euro
      System.out.println(&quot;Quanti 1 euro hai?&quot;);
      int euri = in.nextInt();

      // Prendo in input il numero di monete da 2 Euro
      System.out.println(&quot;Quanti 2 euro hai?&quot;);
      int duEuri = in.nextInt();

      // Calcolo il totale di monete e lo visualizzo a video
      double totale = dieci*dieciCent + venti*ventiCent + cinquanta*cinquantaCent + euri*unEur + duEuri*duEur;
      System.out.println(&quot;Totale Euro nel portafoglio = &quot; + totale);

  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-11-contatore-di-monete/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Il treno</title>
		<link>http://www.donatantonio.net/blog/riflessioni/il-treno/</link>
		<comments>http://www.donatantonio.net/blog/riflessioni/il-treno/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 10:33:40 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Riflessioni]]></category>
		<category><![CDATA[il treno va lontano]]></category>
		<category><![CDATA[treno]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=368</guid>
		<description><![CDATA[Il treno corre forte il treno va lontano e il quadro cambia sempre là dietro al finestrino io non ho avuto il tempo di stringere la mano io non ho avuto il tempo di dire una parola per asciugare il pianto di una madre che resta sola per sciogliere quel nodo che mio padre aveva [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><span>Il treno corre forte il treno va lontano<br />
e il quadro cambia sempre là dietro al finestrino<br />
io non ho avuto il tempo di stringere la mano<br />
io non ho avuto il tempo di dire una parola<br />
per asciugare il pianto di una madre che resta sola<br />
</span><span>per sciogliere quel nodo che mio padre aveva in gola</span></p>
<p>Ma il treno va lontano il treno porta via<br />
e batte un tempo strano lungo la strada mia<br />
più indietro c&#8217;è un bambino col naso che gli cola<br />
poi vengono gli amici dei tempi della scuola<br />
l&#8217;amore chiuso al bagno con una mano sola<br />
le canzoni sconce urlate a squarciagola</p>
<p>Ma il treno corre forte e il treno adesso vola<br />
sulle distese immense di ciclamini viola<br />
sulle colline dolci coperte da lenzuola<br />
sopra quei balli tristi coi buchi nella suola<br />
sopra le notti spese in cerca di puttane<br />
sui versi di Pavese sulle promesse vane</p>
<p>Ma il treno corre forte su tutta la mia vita<br />
che passa via veloce che sfugge fra le dita<br />
risento la sua voce si riapre la ferita<br />
la gioventù è passata per non ritornare mai più</p>
<p>Ma il treno va lontano e non si è mai fermato<br />
ma gli occhi di quest&#8217; uomo conservano il passato<br />
e adesso vedo i visi di gente sconosciuta<br />
che cerca nei sorrisi la libertà perduta<br />
la zingara fortuna che scopre le mie carte<br />
che legge nella luna quale sarà la sorte</p>
<p>Ma il treno corre forte si fermerà soltanto<br />
quando qualcuno un giorno mi chiamerà nel vento&#8230;</p>
<p style="text-align: center;"><span> </span></p>
<p style="text-align: center;"><img class="aligncenter" src="http://www.donatantonio.net/img/treno.jpg" alt="Treno" width="500" height="333" /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/riflessioni/il-treno/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Esercizio 10 &#8211; Cartoline con testo fisso</title>
		<link>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-10-cartoline-con-testo-fisso/</link>
		<comments>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-10-cartoline-con-testo-fisso/#comments</comments>
		<pubDate>Tue, 19 Jan 2010 10:05:22 +0000</pubDate>
		<dc:creator>Donatantonio</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[cartoline con testo fisso]]></category>

		<guid isPermaLink="false">http://www.donatantonio.net/blog/?p=365</guid>
		<description><![CDATA[Realizzare una classe Cartolina attraverso la quale siamo interessati a compilare una cartolina postale. L’idea è di implementare una classe che ci faciliti, per esempio, la compilazione di cartoline con lo stesso testo ma inviate a persone diverse. Realizzare poi una classe di test che permetta di scrivere un certo numero di cartoline. Classe Cartolina.java [...]]]></description>
			<content:encoded><![CDATA[<p>Realizzare una classe Cartolina attraverso la quale siamo interessati a compilare una cartolina postale. L’idea è di implementare una classe che ci faciliti, per esempio, la compilazione di cartoline con lo stesso testo ma inviate a persone diverse.<br />
Realizzare poi una classe di test che permetta di scrivere un certo numero di cartoline.</p>
<p>Classe Cartolina.java</p>
<pre class="brush: java; title: ; notranslate">
public class Cartolina
{
  String destinatario;
  String caP;
  String citta;
  final String testo;

  /* Metodo Costruttore inizializzato con destinatario,
     codice di avviamento postale e città.
     Testo cartolina già impostato.
  */
  public Cartolina(String d, String cap, String c )
  {
      destinatario = d;
      caP = cap;
      citta = c;
      testo = &quot;Saluti e baci da Parigi. Fabio&quot;;
  }

  // Metodo che visualizza i dati della cartolina
  public void visualizza()
  {
      System.out.println(&quot;*** CARTOLINA ***&quot;);
      System.out.print(&quot;Per : &quot; + destinatario);
      System.out.print(&quot; &quot; +caP);
      System.out.println(&quot; &quot; + citta);
      System.out.println(testo);
  }
}
</pre>
<p>Classe di test</p>
<pre class="brush: java; title: ; notranslate">
import java.util.Scanner;
import java.util.ArrayList;
public class TestCarolina {

  public static void main(String[] args)
  {
      ArrayList&lt;Cartolina&gt; cart = new ArrayList&lt;Cartolina&gt;();
      Scanner in = new Scanner(System.in);

      // Prendo in input il numero di cartoline da compilare
      System.out.println(&quot;Quante cartoline vuoi spedire?&quot;);
      int t = in.nextInt();
      in.nextLine();

      int l = 1;

      // Compilo le cartoline
      while ( t &gt; 0)
      {
        System.out.println(&quot; CARTOLINA numero : &quot; + l);

        // Prendo in input il destinatario
        System.out.println(&quot;Dammi il destinatario :&quot;);
        String n = in.nextLine();

        // Prendo in input il CAP
        System.out.println(&quot;Dammi il cap :&quot;);
        String cp = in.nextLine();

        // Prendo in input la cità
        System.out.println(&quot;Dammi la città :&quot;);
        String cy = in.nextLine();

        // Creo una nuova cartolina con i dati acquisiti
        Cartolina a = new Cartolina(n,cp,cy);

        // Aggiungo la cartolina in una collezione
        cart.add(a);
        l++;
        t--;
      }

      // Stampo a video le cartoline create
      for (int i =0 ; i&lt;cart.size(); i++)
      {
          Cartolina a = (Cartolina) cart.get(i);
          a.visualizza();
      }

  }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.donatantonio.net/blog/guide_tutorial/java/esercizio-10-cartoline-con-testo-fisso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

