Ultime voci »

Come buona parte di voi sa, ma magari non tutti, AJAX è una tecnica di sviluppo, che si è sviluppata tramite un utilizzo di tecnologie già esistenti al fine di ottenere un nuovo paradigma di programmazione ed un sistema di comunicazione client-server efficiente e adatto allo svilupo di interfacce grafiche responsive anche in ambiente web.

Dall’introduzione di questa tecnologia ad oggi, lo sviluppo tecnologico ha fatto si che siano disponibili dei framework che ne consentano un utilizzo sicuro, in modo rapido e semplice. Il più noto (e forse anche il milgiore) è certamente JQuery, che mette a disposizione dele primitive attraverso l’operatore $ semplici da utilizzare ed estremamente pulite ed ordinate.

Eccone un esempio:

$.ajax({
  type: 'GET',
  url: '<strong>http://ws.mysite.com/doSomeThing</strong>',
  data: { <strong>postVar1: 'theValue1', postVar2: 'theValue2'</strong> },
  beforeSend:function()
  {
    // clessidra di loading in attesa dell'output della funzione
    $('#ajax-panel').html('<div><img src="<strong>/images/loading.gif</strong>" alt="Attendere prego..." /></div>');
  },
  success:function(data)
  {
    // OK: inserisco i dati nel div di destinazione
    $('#ajax-panel').empty();
    $('#ajax-panel').append('<strong><p>' + data + '</p></strong>');    
  },
  error:function(){
    // KO: segnalo l'errore
    $('#ajax-panel').html('<p><strong>Oops!</strong> Try that again in a few moments.</p>');
  }
});

Questo piccolo esempio usa un metodo GET HTTP per scaricare una porzione di documento ed inserirla in pagina. Ovviamente, possono essere utilizzati tutti gli altri metodi HTTP (ad esempio per interagire con un servizio RESTful) e i dati restituiti possono essere anche in formato JSON o XML, per utilizzarli all’interno di altre funzioni presenti in pagina.
Per ulteriori dettagli, potete fare riferimento a questa pagina.

sito Da sempre mi hanno appassionato le storie di “vita vissuta” dei grandi progetti informatici, oggi vi propongo questo link, dove troviamo il racconto dell’evoluzione del sito di Microsoft. L’articolo è, per i tempi dell’informatica, “antico” (risale al 1999), ma è comunque uno spaccato interessante di quali siano stati gli step di un progetto oggi molto comune ma che all’epoca della sua realizzazione era certamente pionieristico.

Può capitare di avere la necessità di filtrare domini indesiderati, ad esempio per limitare l’accesso ai siti per adulti oppure per bloccare i domini che erogano spyware e banner indesiderati. Esistono numerosi software che consentono di filtrare i contenuti non desiderati, una alternativa è quella di impostare un DNS che non risolve i domini da filtrare, impedendo di fatto l’accesso web.
Un servizio di questo tipo, per utenza non professionale, è Norton ConnectSafe for Home. Si possono scegliere due coppie di DNS, sulla base dei contenuti da filtrare. Lo scenario ideale è quello in cui la configurazione è effettuata direttamente sul router, consentendo quindi di utilizzare i nuovi DNS in modo automatico da tutti i dispositivi connessi in rete e configurati tramite DHCP. Nulla vieta ad utenti esperti di configurarsi in locale un nuovo servizio non filtrato, come OpenDNS, ma per una utenza casalinga è spesso più che sufficiente.

Immaginiamo di voler creare un sistema che generi ad intervalli temporali predefiniti delle miniature di pagine web, un pò come fa Google Chrome per i siti visitati più spesso.
Serve quindi un componente in grado di effettuare il parsing, l’esecuzione degli script ed infine il rendering di una pagina. Tutto ciò può essere effettuato attraverso l’oggetto WebBrowser, al quale è sufficiente passare l’URL della pagina a cui siamo interessati.

WebBrowser wb = new WebBrowser();
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
wb.Width = width;
wb.Height = height;

A questo punto nel controllo è presente la struttura HTML della pagina e il controllo è in grado di visualizzare la pagina a video oppure possiamo ottenere un Bitmap da salvare successivamente su disco:

Bitmap bitmap = new Bitmap(wb.Width, wb.Height);
wb.DrawToBitmap(bitmap, new Rectangle(0, 0, wb.Width, wb.Height));
wb.Dispose();

Mi sono imbattuto nella necessità di memorizzare una immagine su database. Nonostante sia più conveniente memorizzare i file binari su un repository esterno e tracciarne su DB solo i riferimenti, può essere interessante anche capire come eventualmente tenere tutti i dati nello stesso posto, ad esempio se si ha a che fare con ambienti cloud.
Ho utilizzato il tipo di dati System.Data.Linq.Binary per inserire un blocco di dati binari non modificabili, in una colonna di tipo image. Il costruttore prende come argomento un array di byte, occorre quindi prima trasformare la nostra immagine nel tipo di dati corretto:

private static byte[] ImageToByteArray(System.Drawing.Image imageIn)
{
    using (MemoryStream ms = new MemoryStream())
    {
        imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
        return ms.ToArray();
    }
}

private static Image ByteArrayToImage(byte[] byteArrayIn)
{
    using (MemoryStream ms = new MemoryStream(byteArrayIn))
    {
        Image returnImage = Image.FromStream(ms);
        return returnImage;
    }
}

Fatto ciò, possiamo possiamo inserire i dati nell’oggetto associato alla tabella del DB:

// Convert System.Drawing.Image to a byte[]
byte[] file_byte = ImageToByteArray(thumb);
// Create a System.Data.Linq.Binary - this is what an "image" column is mapped to
System.Data.Linq.Binary file_binary = new System.Data.Linq.Binary(file_byte);

objectRow.image = file_binary;

objectdb.tableName.InsertOnSubmit(cr);
objectdb.SubmitChanges();

WebBrowser, ma in Java!

Vi siete mai chiesti se esiste un equivalente dell’oggetto WebBrowser per Java? Esiste qualcosa di molto simile, per Java Swing. Il nome del progetto è Lobo Browser, non solo offre dei componenti per integrare un piccolo browser nell’interfaccia ma anche una API con il quale comandare da codice la visualizzazione del sorgente HTML. Inoltre, supporta sia Javascript che CSS.
Qui un esempio di come creare un componente browser:

import org.lobobrowser.gui.*;
import org.lobobrowser.main.*;
import javax.swing.*;

public class LoboTestFrame extends JFrame {
	public static void main(String[] args) throws Exception {
		// This optional step initializes logging so only warnings
		// are printed out.
		PlatformInit.getInstance().initLogging(false);

		// This step is necessary for extensions to work:
		PlatformInit.getInstance().init(false, false);

		// Create frame with a specific size.
		JFrame frame = new LoboTestFrame();
		frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		frame.setSize(600, 400);
		frame.setVisible(true);
	}

	public LoboTestFrame() throws Exception {
		FramePanel framePanel = new FramePanel();
		this.getContentPane().add(framePanel);
		framePanel.navigate("http://lobobrowser.org/browser/home.jsp");
	}
}

A questo link potete trovare un manuale d’epoca, correva l’anno 1972, scritto da Ken Thompson e Dennis Ritchie. La qualità è molto bassa, si tratta della scansione di un testo battuto a macchina, ma vale certamente la pena di leggerlo!

Upload di un file con PHP

L’upload di un file con PHP è davvero semplice. Per prima cosa, configuriamo il form di selezione del file sulla nostra pagina HTML:

<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE must precede the file input field -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- Name of input element determines name in $_FILES array -->
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

Fatto ciò, occorre gestire il file ricevuto lato server, identificare il file temporaneo in cui è stato memorizzato e spostarlo nella directory di destinazione:

$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

echo 'Here is some more debugging info:';
print_r($_FILES);

print "</pre>";

Per qualsiasi informazione aggiuntiva e per i la gestione dell’upload con versioni di PHP precedenti alla 4 potetet fare riferimento a questa pagina.

Recentemente mi è capitato di dover aprire un file CSV per processarlo all’interno di PHP. Il linguaggio mette a disposizione in modo nativo tutti gli strumenti per il processing di questo tipo di dati.
Ecco come leggere riga per riga un file ed ottenere un array contenente gli elementi separati dalla virgola:

$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}

Molto semplice vero? Per ulteriori dettagli potete fare riferimento a questa pagina.

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.