Post

Archivio di April, 2007

Il tag del giorno: <ul>, <ol>, <li>

Per visualizzare delle liste in HTML ci vengono date tre possibilità:

  • le liste ordinate (numerate)
  • le liste non ordinate (puntate)
  • le liste di definizioni

Vediamo ora le prime due, per la terza dovrete aspettare un altro giorno ;)

La struttura delle liste ordinate e non ordinate è esattamente la stessa: un tag “di lista” contiene l’intera lista, e può essere usato per stilare tutta la lista, ad esempio per quanto riguarda il padding o i margini. Al suo interno, il tag <li> indica le voci della lista. Attenzione: è sempre buona regola chiudere il tag <li>.

Per una lista ordinata avremo quindi:

<ol>

<li>prima voce</li>

<li>seconda voce</li>

<li>terza voce</li>

</ol>

Una lista non ordinata sarà invece:

<ul>

<li>prima voce</li>

<li>seconda voce</li>

<li>terza voce</li>

</ul>

Per la loro natura, le liste sono ottimali per codificare i menu di navigazione delle pagine. Per quanto riguarda il loro aspetto grafico, di default le liste ordinate verranno visualizzate con dei numeri progressivi per ciascuna voce, quelle non ordinate con dei puntini. Il loro aspetto può però essere modificato estensivamente usando i CSS: si possono modificare i punti e i numeri elenco, cambiare lo sfondo delle voci di lista per effettuare dei rollover, indicare le voci di lista come inline invece di block così da avere elenchi orizzontali e così via.

Il tag del giorno: <del> e <ins>

Esistono un paio di tag, <del> e <ins> per indicare le revisioni del testo:
<del> indica il testo che è stato cancellato,
<ins> quello che è stato inserito.

I browser che supportano questi tag visualizzano il tag <del> con del testo barrato, ma conviene usare i CSS per farlo in modo che sia visto allo stesso modo da tutti i browser.

Per spiegare la modifica fatta si può usare l’attributo title, cite per indicare un URL dove trovare una spiegazione più completa e datetime per indicare la data della modifica, anche se tutti e tre sono poco supportati dai browser. In particolare, l’attributo datetime ha il formato datetime="AAAA-MM-GGThh:mm:ssTZD, dove AAAA è l’anno, MM il mese, GG il giorno, hh l’ora, mm i minuti, ss i secondi e TZD l’indicazione del fuso orario (Z per UTC,+01:00 per l’ora italiana).

heredoc questo sconosciuto…

Una stringa letterale in PHP si scrive nei seguenti modi:

  • Apici singoli
  • Apici doppi
  • Sintassi heredoc

I primi due metodi sono i più utilizzati esempio:

$str = ‘ciao’;
$str = “ciao”;

La differenza tra i due è che utilizzando le virgolette doppie vengono “espanse” le variabili all’interno della stringa

esempio:

$nome = "massimo";print "Ciao $nome";

produrrà la scritta “Ciao massimo”

Il problema utilizzando queste due tecniche è che è necessario usare dei codici di ESCAPE per utilizzare all’interno delle stringhe le virgolette singole e doppie rispettivamente.
Questo è fastidioso specialmente quando si vuole stampare un blocco di codice HTML. Le proprietà dei tag HTML devono avere i valori racchiusi tra apici doppi. Questo costringe lo sviluppatore WEB a utilizzare di continuo il codice di escape \” perdendo un mucchio di tempo.

Per risolvere questo inconveniente viene in aiuto la sintassi “heredoc”. Vediamo un esempio:

$link = "http://www.google.it/";
$site = "www.google.it";
print <<<END
<a href="$link">$site</a>END;

Da notare che in questa sintassi non ho utilizzato i codici di escape e che le variabili $link e $site saranno espanse senza problemi.

NOTE:

Perchè la sintassi funzioni dovete scegliere una parola (nel nostro caso END) e dovete scriverla subito dopo <<<

Dopodichè scrivete del codice e poi riscrivete la stessa parola (END) esclusivamente sulla prima colonna di una riga vuota.

Riferimenti: it.php.net/heredoc

Introduzione a ASP.NET

Cosa è ASP.NET?

ASP.NET rappresenta la parte del framework .NET che si usa per scrivere le applicazioni web.

Le caratteristiche peculiari di ASP.NET sono:

  1. Flessibilità: potete utilizzare tutte le classi di .NET e uno qualsiasi dei linguaggi che supportano lo standard .NET
  2. Sicurezza: sono assicurati elevati livelli di sicurezza
  3. Performance: le applicazioni ASP.NET sono convertiti in MS-IL (MS intermediate Language) per essere eseguiti più velocemente dal CLR.
  4. Integrabilità dei sistemi: predisposizione per l’utilizzo di formati aperti di interscambio dati (Es. XML) e per la realizzazione di applicazioni distribuite (Web Services)
  5. Riutilizzabilità del codice

WebServer

Un elemento essenziale per far girare le applicazioni WEB è il WebServer. Essendo .NET un insieme di specifiche sostanzialmente svincolato dalla piattaforma è possibile far girare pagine ASP.NET sia su Internet Information Service che su Apache grazie al progetto mono.

Code-Behind

Una singola pagina web è (a parte eccezioni si intende), in ASP.NET, fisicamente costituita da due file:

  • file .aspx contiene codice di impaginazione (codice HTML e componenti di interfaccia)
  • file .vb (visualbasic) o .cs (C#) contenente la logica di elaborazione

Questa tecnologia si chiama code-behind ed è molto utile perché consente a coloro che impaginano i contenuti di interagire con componenti ad alto livello molto più “maneggevoli”.
Un secondo vantaggio di questo approccio è che all’atto dell’installazione (deploy) dell’applicazione web i sorgenti “code behind” saranno compilati in opportune DLL. Il vantaggio è sia in termini di prestazioni (il codice è precompilato e dunque più rapido) sia in termini di riservatezza del codice.
A livello operativo all’interno della pagina .aspx si dichiara quale è il file che contiene il codice “code-behind” relativo.

Direttiva Page

La direttiva Page deve essere collocata in testa ad una pagina .aspx e serve per:

  1. specificare il tipo di linguaggio utilizzato
  2. esplicitare il nome del file che contiene il codice “code-behind”
  3. specificare da quale classe la pagina corrente sta ereditando le caratteristiche
  4. altri parametri…

Esempio:
<%@ Page Language="cs" CodeBehind="pagina.aspx.cs" Inherits="nome_applicazione.pagina"%>

Il parametro Language specifica il tipo di linguaggio utizzato (C# in questo caso); CodeBehind dice che la pagina con il codice code-behind è pagina.aspx.cs, collocato nella stessa directory; Inherits specifica che la pagina corrente eredita dalla classe pagina.

Realizzazione delle interfacce

All’interno delle pagine .aspx si utilizza la sintassi XML per identificare un particolare controllo e per specificarne i parametri.

Esempio di Web Controls:

<asp:TextBox> : Casella di testo
<asp:Button> : Bottone
<asp:Label> : Testo
<asp:Table> : Tabella
<asp:Calendar> : Calendario
<asp:Panel> : Pannello

Come si vede i controlli web non sono solamente elementi che rispecchiano i corrispondenti tag HTML ma anche elementi complessi come Calendar e Panel.

Runat=”server”

Una tra le direttive più importanti è Runat=”server”. Se vogliamo che il comportamento del controllo sia controllabile dalla logica code-behind è necessario impostare la proprietà runat al valore “server”.
Questo vuol dire che il codice code-behind avrà a disposizione un riferimento univoco per impostare le proprietà di quel controllo.

ID

Ogni controllo con runat=”server” dovrà avere un ID univoco. es. ID=”label1″
Nell’esempio il codice code-behind avrà potrà accedere al testo della label semplicemente con label1.Text

es.
label1.Text = “ciao mondo”;

Introduzione a .NET

.NET (”dotnet”) è un insieme di specifiche che definiscono una piattaforma di sviluppo del software in grado di raggiungere obiettivi molto ambiziosi quali:

  1. supporto verso un elevato numero di linguaggi di programmazione
  2. programmazione fortemente orientata agli oggetti
  3. alta predisposizione verso l’utilizzo di formati aperti per interscambio dati (XML, SOAP, …)
  4. sostanziale indipendenza dalla particolare piattaforma hardware utilizzata (computer, telefonini, palmari, portatili,..)
  5. predisposizione “nativa” verso l’elaborazione distribuita delle informazioni
  6. gestione della sicurezza

L’ambiente di esecuzione: Redistributable Package

All’interno di .NET esiste un ambiente di esecuzione chiamato Common Language Runtime che, in modo analogo a alla Java Virtual Machine di Java, consente l’esecuzione del codice compilato. L’analogia con la JVM non finisce qui: i programmi compilati sono una sorta di “semilavorato” chiamato IL (Intermediate Language) che, dato in pasto alla CLR specifica di una piattaforma hardware e del particolare sistema operativo utilizzato (Windows, MacOs, Linux) viene interpretato ed eseguito.
Il CLR svolge anche la funzione di controllare la sicurezza delle applicazioni che girano vietando le operazioni potenzialmente “dannose”.
Il CLR e tutto quanto è necessario per far girare applicazioni .NET su Windows (ad esempio tutte le DLL), è distribuito gratuitamente dalla Microsoft con il nome di .NET Redistributable Package.

L’ambiente di sviluppo: FrameWork SDK

Come faccio a sviluppare scrivere i miei software e a compilare i miei sorgenti?
Devi scaricare il pacchetto di sviluppo chiamato FrameWork SDK, attualmente giunto alla versione 3.0, che contiene tutti gli strumenti per lo sviluppo e la compilazione di programmi .NET ivi inclusa una completissima documentazione delle classi.
Come posso scrivere i miei programmi? anche con un banale editor testuale.
Se vuoi qualcosa di più evoluto puoi scaricare il completissimo SharpDevelop www.icsharpcode.net oppure le soluzioni commerciali proposte da Microsoft.

Indipendenza dal linguaggio di programmazione

Siete esperti di Visual Basic oppure di Java oppure di C++? Perchè perdere tempo ad imparare un’altro linguaggio per utilizzare le nuove potenti caratteristiche di .NET?
Nessun problema! con .NET è possibile utilizzare uno dei linguaggi di programmazione che aderiscono allo standard, in modo indipendente e intercambiabile.
Le specifiche che consentono questo prodigio sono il cosiddetto “Common Language Infrastructure”. Tutti i linguaggi di .NET (C#, VB.NET, C++.NET, J# ed altri) utilizzano tipi di dati comuni e specifiche comuni e consentono a sottosistemi differenti scritti in linguaggi diversi, di interagire tra di loro in modo sostanzialmente trasparente.
Parte della CLI è la cosiddetta “Base Class Library”: l’insieme delle classi di base si cui possono “contare” tutti i linguaggi che aderiscono allo standard. Questo vuol dire che qualsiasi linguaggio di programmazione di .NET utilizzerà le medesime classi nello stesso modo senza variazioni.

ADO.NET: interazione con i database

Una delle funzioni più utilizzate nelle applicazioni è la possibilità di interazione con i sistemi database (SqlServer, Oracle, Access, MySQL etc.).
ADO.NET è il sottosistema di .NET per l’interazione con i database.
Il linguaggio “standard” utilizzato per l’interazione con i sistemi database è l’SQL (Structured Query Language) sviluppato originariamente dall’IBM nel 1976 ed evolutosi nel tempo.
Una importante possibilità messa a disposizione da ADO.NET è quella di utilizzare sia la modalità “connessa” che “non connessa” ovvero quella nella quale si opera su una “copia” di un database sostanzialmente in RAM per poi sincronizzare con il database reale in modo differito. Questa modalità è utile quando di ha a che fare con dispositivi implicitamente non connessi come ad esempio portatili e palmari.

Application Forms : interfacce di tipo desktop

Consente di realizzare interfacce a finestre arbitrariamente complesse.

ASP.NET : applicazioni Web

Consente di realizzare interfacce web in modo abbastanza simile alla creazione delle interfacce di tipo “Desktop”.
Utilizza la tecnica del posizionamento assoluto dei componenti per consentire il disegno delle interfacce mediante drag&drop.
Consente di reagire alle “azioni” utilizzando gestori di evento in modo simile alle interfacce “Desktop”.

Il mio primo programma .NET

Supponiamo in questa fase che abbiate installato Redistributable Package e FrameWork SDK e che abbiate aggiunto alla path di sistema la directory che contiene il comando csc.exe (trovatelo nel vostro filesystem utilizzando “cerca”).
csc è il compilatore per i programmi scritti in C# (vbc è il compilatore per i programmi scritti in VisualBasic etc.).

Editate, con qualsiasi editor, il file ciaomondo.cs

/*
 * programma CiaoMondo
*/

using System;

public class CiaoMondo
{
 	public static void Main()
	{
	 System.Console.WriteLine("Ciao mondo");
	}
}

Come faccio per renderlo eseguibile? semplice: csc ciaomondo.cs

Il compilatore creerà il file ciaomondo.exe (MIL) che potrà essere eseguito senza problemi.

Il tag del giorno: <cite>

<cite> serve, ovviamente, citare le fonti. Hehe… NON per il testo citato, per cui ci sono <blockquote> se serve un elemento block o <q> se basta uno inline.

Ad esempio:

Se cito <cite>l'Amleto di Shakespeare</cite>
posso dire <q>Essere o non essere</q>

Il tag del giorno: <acronym> e <abbr>

<acronym> è un tag inline che permette di inserire un acronimo spiegandone il significato, così:

<acronym title=”Gnu’s Not Unix”>GNU</acronym>

ugualmente, <abbr> permette di spiegare una abbreviazione:

<abbr title=”Presidente con poltrona di pelle umana”>Pres.</abbr>

Inserire tali tag permette di aumentare l’accessibilità del contenuto, non solo per chi usa dispositivi di lettura automatica, ma anche per quelli di noi che non hanno idea di cosa significhino le sigle che si trovano nei testi ;)

Introduzione alla programmazione OO con Javascript

JavaScript è un linguaggio fortemente orientato agli oggetti.
Per scrivere codice OO con JS si utilizzano costrutti differenti rispetto agli altri linguaggi di programmazione.
C,C#, C++, Java, PHP, Ruby utilizzano infatti il costrutto “class” mentre JS utilizza “function”.
Anche il modo con il quale si definiscono il costruttore, i metodi e le variabili “di classe” differisce fortemente dagli altri linguaggi.

Terminologia di base:

  • Classe : definisce le caratteristiche di un oggetto
  • Oggetto : un’istanza di una classe
  • Costruttore : un metodo chiamato alla creazione di un oggetto
  • Proprietà : una oggetto che memorizza un’informazione
  • Metodo: una funzione di una classe

Creazione di una nuova classe

Javascript è un linguaggio orientato al “prototipo”. Qualsiasi oggetto JS possiede un “prototype” che supplisce alla mancanza dell’istruzione class e che rappresenta lo scheletro dell’oggetto. Si utilizza “prototype” per definire una classe e per estenderla.

esempio:

function rettangolo() {}

Definisce la classe rettangolo.

Creazione di un oggetto

Per utilizzare un oggetto è necessario crearne un’istanza.
Per fare questo si utilizza l’istruzione new.
L’esempio che segue crea due istanze della classe rettangolo.

function rettangolo() {}

var r1 = new rettangolo();
var r2 = new rettangolo();

Definizione del costruttore

Il costruttore è una particolare funzione che viene invocata automaticamente al momento della creazione di una istanza ed è usualmente utilizzato per inizializzare le proprietà di una classe (le sue variabili di stato) e per questo può possedere dei parametri.
Creando una nuova istanza della classe rettangolo e non avendo definito un costruttore personalizzati, viene invocato il costruttore di default che non fa nulla.

In Javascript non si definisce esplicitamente un costruttore ma viene considerato “costruttore” tutto il codice che è al
di fuori di un metodo all’interno di una “classe” (una funzione in JS).

Esempio:

function rettangolo()
{
alert('Sono un rettangolo!');
}

var r1 = new rettangolo();

Il codice precedente stamperà un codice di alert con il messaggio “Sono un rettangolo!” come conseguenza della creazione dell’oggetto r1.

Definizione delle proprietà

Le proprietà di un oggetto costituiscono le sue unità di memorizzazione.
Per definire una proprietà si usa il codice all’interno del costruttore.
Si utilizza il riferimento implicito “this” e si agisce in questo modo sul prototipo della funzione stessa.

Nell’esempio che segue aggiungeremo le proprietà larghezza e altezza al rettangolo e modificheremo il costruttore per
inizializzarne il valore:

function rettangolo(lun,alt)
{
this.larghezza = lun;  // creazione e inizializzazione della propietà larghezza
this.altezza   = alt;  // creazione e inizializzazione della propietà altezza
}

var r1 = new rettangolo(10,20);
var r2 = new rettangolo(30,40);

Creazione di metodi

Creare un metodo è analogo a creare una proprietà.
Bisogna definire un nome di funzione e assegnare ad essa un’istanza di una funzione con eventualmente i parametri.

L’esempio chiarisce meglio questo concetto.

function rettangolo(lun,alt)
{
this.larghezza = lun;  // creazione e inizializzazione della propietà larghezza
this.altezza   = alt;  // creazione e inizializzazione della propietà altezza

this.stampa = function()
{
alert("Sono un rettangolo "+this.larghezza+" X "+this.altezza);
}
}

var r1 = new rettangolo(10,20);
r1.stampa();   // Richiama il metodo stampa

Ereditarietà

Una delle caratteristiche comuni a tutti i linguaggi OO è l’ereditarietà.
L’ereditarietà viene implementata in JS assegnando ad una classe il prototipo di un’altra.
Facendo questo tutti i metodi della prima classe vengono ereditati dalla seconda.
Fatto questo è possibile definire o ridefinire altri metodi o proprietà.
L’esempio che crea una classe rettangolo_new che eredita dalla classe rettangolo e nella quale viene ridefinito il metodo stampa.

Da notare che per creare un metodo viene utilizzato il prototipo della funzione come riferimento alla struttura della classe analogamente a quanto accade all’interno della classe con “this”.

function rettangolo_new(lun,alt)
{
}

rettangolo_new.prototype = rettangolo.prototype;

rettangolo_new.prototype.stampa = function()
{
alert('Sono un nuovo rettangolo');
}

Polimorfismo

Una classe JS può definire più metodi con lo stesso nome caratterizzati da un numero differente di parametri.

Il tag del giorno: <em> e <strong>

Gli elementi <em> e <strong> vengono usati per indicare rispettivamente enfasi e una forte enfasi. Vengono visualizzati così:

Questo è <em> e questo è <strong>

Normalmente <em> viene visualizzato in corsivo, ma non sempre <em> è il tag adatto per sostituire il corsivo… ad esempio, per una citazione si può usare <cite>, oppure si può usare un tag <span> con classe personalizzata, indicando il corsivo attraverso i CSS, ad esempio per le parole in una lingua diversa all’interno di un testo. Tutto questo sempre nell’ottica di usare i tag per indicare la funzione dell’elemento all’interno del documento, e non la sua formattazione.

Il tag del giorno: <address>

L’elemento <address> è un elemento block che può essere usato per indicare i contatti dell’autore o del gestore del documento. Normalmente viene messo in fondo al documento o associato ad una form. Non è corretto usarlo per elencare diversi indirizzi nel contenuto del documento.

Archivi e link