Archivio del maggio 2010

PHP: tenere traccia degli accessi al sito da parte di un client con i cookie

In questo esempio utilizzeremo i cookie, con la relativa variabile globale $_COOKIE e la funzione setcookie, per salvare la data e l’ora del primo e dell’ultimo accesso al sito.
Alla prima connessione da parte del client, il valore relativo alla chiave firstAccess, all’interno di $_COOKIE, non sarà settato. A quel punto verrà settato e, nelle successive comunicazioni, potrà essere reperito.
Il valore relativo a lastAccess verrà aggiornato di volta in volta:

<html>
    <body>
    <center>
    <?php
        date_default_timezone_set('Europe/Rome');

        $nowts = date("d/m/Y H:i:s");

        if(!isset($_COOKIE["firstAccess"]))
        {
            setcookie("firstAccess", $nowts);
            echo "Sembra essere la tua prima visita al sito<br/>";
        }
        else
        {
            echo "Primo accesso: ".$_COOKIE["firstAccess"]."<br/>";
            if(isset($_COOKIE["lastAccess"]))
            {
                echo "Ultimo accesso: ".$_COOKIE["lastAccess"]."<br/>";
            }
        }

        setcookie("lastAccess", $nowts);
    ?>
    </center>

    <div style=" position: absolute; bottom: 1em;">
        <?php echo "Ora locale: ".$nowts; ?>
    </div>

    </body>
</html>

La classe Dictionary di C#

La classe Dictionary, contenuta nel namespace System.Collections.Generic, rappresenta una collezione di chiavi-valori.
Essendo implementata come una tabella hash, ottenere un valore a partire da una chiave ha complessità vicina O(1) (dipende comunque anche dalla qualità dell’algoritmo di hash definito per il tipo chiave).

Dictionary una classe generica, ed è dunque necessario specificare la classe della chiave e quella del valore:

using System;
using System.Collections.Generic;

namespace test
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			Dictionary<String, String> dict =
				new Dictionary<String, String>();
		}
	}
}

Continua >

C#: la parola chiave “is”

La keyword is consente di sapere, a runtime, se un oggetto è compatibile con un tipo specificato.
Essa restituisce true se l’oggetto in esame non è null e se è possibile sottoporlo a cast verso il tipo specificato senza che venga sollevata un’eccezione.

Continua >

Java: comprimere e decomprimere file in formato GZIP

Java fornisce due classi, contenute in java.util, per la gestione dei file in formato GZIP, GZIPInputStream e GZIPOutputStream.
Passando al costruttore di queste due classi un InputStream (per la prima classe) o un OutputStream (per la seconda classe), ci è consentito leggere e scrivere dati in formato compresso.

Continua >

C#: le proprietà

In C#, le proprietà sono membri che forniscono un meccanismo semplificato di lettura e scrittura dei campi di una classe.
Solitamente si utilizzano le proprietà per accedere ai campi privati (anche se possono essere utilizzati anche per campi pubblici), al posto dei metodi setter/getter (il tipico approccio di Java).

Continua >

Java EE 5: creare un contatore di utenti online

Per creare un contatore di utenti online (o meglio, di utenti che hanno attualmente una sessione aperta con il server), si può agire in diversi modi.
In questo esempio, utilizzeremo i listener. In particolare, faremo uso del listener javax.servlet.ServletContextListener (il listener del contesto dell’applicazione) e del listener javax.servlet.http.HttpSessionListener e dei relativi eventi.
Con il primo setteremo il contatore a zero, con il secondo controlleremo le creazioni e distruzioni delle sessioni, in modo da decrementare/incrementare il contatore.
Faremo uso dell’interfaccia javax.servlet.ServletContext, in modo da rendere disponibile il contatore a tutti i servlet dell’applicazione.

Continua >

L’istruzione “using” del C#

L’istruzione using del C# è utilizzata per definire un ambito all’esterno del quale uno o più oggetti verranno eleminati.
L’oggetto fornito all’istruzione using deve necessariamente implementare l’interfaccia System.IDisposable (e, di conseguenza, il metodo Dispose, che rilascerà le risorse).
Si esce dall’ambito definito da using quando termina il blocco o in presenza di un’eccezione.

Continua >

Java EE 5: esempio di utilizzo dei filtri

Nello sviluppo di un’applicazione web Java, è possibile utilizzare una particolare interfaccia, javax.servlet.Filter, che consente di intercettare una richiesta prima che raggiunga la risorsa.
In questo modo, possiamo ottenere gli oggetti HttpServletRequest e HttpServletResponse prima che questi giungano al servlet.

Continua >

SPL: la classe ArrayObject

LA Standard PHP Library ci mette a disposizione il wrapper ArrayObject per gli array, per utilizzare alcune tra le più comuni funzionalità, come l’aggiunta di un elemento e l’ordinamento dei dati. Inoltre è possibile iterarlo ricorsivamente utilizzando un iteratore.

Un ArrayObject viene creato in maniera simile a questa:

$arr = new ArrayObject(array("Giallo", "Verde", "Rosso", "Blu"));

Per lavorare con i singoli elementi dell’array, dato un indice, possiamo utilizzare i seguenti quattro metodi:

ArrayObject::offsetExists($index)
ArrayObject::offsetGet($index)
ArrayObject::offsetSet($index, $newval)
ArrayObject::offsetUnset($index)

Il primo metodo controlla se esiste un valore associato all’indice.
Il secondo metodo ci consente di ottenere il valore associato all’indice mentre il terzo ci permette di settarlo con un nuovo valore.
Infine, il quarto metodo elimina l’elemento indicato.

Continua >

Connettersi ad un database Oracle con Java

La modalità di connessione ad un database Oracle in Java è la stessa presentata in questo articolo.
Verranno infatti utilizzare le stesse classi, con l’aggiunta della classe java.sql.ResultSetMetaData per ottenere i metadati della tabella.
L’unica differenza riguarda la stringa di connessione. La sua forma è la seguente:

jdbc:oracle:<drivertype>:<username/password>@<database>

Il tipo di driver utilizzato in questo esempio è il driver thin. username e password, ovviamente, rappresentano le credenziali per l’accesso al database.
La parte database può assumere una di queste due forme (per il driver thin):

<host>:<port>:<SID>
//<host>:<port>/<service>

Tali dati sono recuperabili aprendo il file tnsnames.ora. Nel mio caso, il database gira in locale sulla porta 1521 e sia il SID che il service è XE.

Il sito dell’Oracle riporta questa frase, riguardo l’utilizzo della stringa che riporta il servizio:

We strongly encourage everyone to transition from SIDs to services as quickly as possible as SIDs will be cease to be supported in one of the next few releases of the database.

Per questo motivo, verrà utilizzata la seconda forma.

Continua >