Blog

10/02/2012

Il blog

Una trasformazione, un blocco query e ho messo in piedi il blog; non male questa piattaforma :)

Torna all'inizio


10/02/2012

Webasic 2: inizia lo sviluppo

Dopo mille ritardi, rinvii e tentennamenti, oggi inizia ufficialmente lo sviluppo di Webasic 2.

Lo spunto l'ho preso da alcune tecniche che volevo implementare nell'attuale Webasic 1 ma che, dopo attente analisi, mi avrebbero obbligato a riscrivere una buona parte del codice del front-end e del back-end. Webasic 1 si poggia su tecnologie vecchie, senza prospettive per il futuro: strada spianata quindi a .NET 4.0, ASP.NET e SQL Server 2008R2!

URL rewriting

Il primo mattone è quello di avere URL più amichevoli con navigatori e soprattutto "SEO compliant". Da un articolo letto in internet provo ad implementare il famigerato "URL rewriting", utilizzando la tecnica del redirect da errori 403 e 404 verso pagine personalizzate. Il primo test funziona perfettamente con qualunque tipo di percorso, alla fine della giornata riesco a visualizzare una pagina HTML dotata di foglio di stile e una immagine png, senza che nella cartella dell'applicazione ci sia nulla di tutto ciò! Ci siamo!

Il database

Preparo velocemente il database in SQL Server 2008R2, partendo dagli esperimenti fatti nella versione sperimentale 1.0.100 (che a questo punto non vedrà mai la luce). Finalmente la struttura ha una forma che mi soddisfa appieno, divisa in un file system (per la gestione delle cartelle e dei nomi dei file) e un'altra parte per la creazione dinamica delle pagine HTML. Di contorno, le ormai consuete tabelle degli utenti e dei permessi, più altre cosucce.

Torna all'inizio


11/02/2012

Webasic 2: la cache del browser

Sulle ali dell'entusiasmo cerco di sistemare il caching delle pagine e delle risorse collegate. Noto infatti che ad ogni richiesta della pagina il server risponde con il codice 200, senza tener conto affatto di quanto il browser potrebbe aver memorizzato nella propria cache. Vado in cerca di qualche articolo per approfondire la questione, non ho ancora ben chiaro come funzioni il sistema.

Gli header

Dagli articoli consultati si evince che, a grandi linee, il browser invia al server una richiesta (request) attraverso un header, nel quale sono contenute una serie di informazioni simili alle seguenti:

Accept:*/*
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:it-IT,it;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Cookie:ASPSESSIONIDACTSQTQA=CDLHAOICLJHJPHIAKKPDJKPK; ASP.NET_SessionId=nl45520...
Host:test1.webasic.it
If-Modified-Since:Thu, 09 Feb 2012 23:00:00 GMT
Referer:http://test1.webasic.it/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like ...

La riga 9 è quella più interessante per quanto concerne la cache: con "If-Modified-Since" il browser invia la data/ora del file presente in cache che si appresta a richiedere al server.

Il server a questo punto elabora la richiesta e decide il da farsi:

  • se il browser è in possesso dell'ultima versione del file non è necessario inviarlo nuovamente, di conseguenza il web server risponde con il codice 304 (Not Modified)
  • se il browser non invia alcun "If-Modified-Since" oppure la data è meno recente di quella presente sul server, allora il web server invia il file e risponde con un codice 200 (Ok).

Problema: il server non riceve mai "If-Modified-Since"

Mi accorgo con sgomento che il browser invia effettivamente "If-Modified-Since" ma il server non lo riceve. Non ho modo di sapere cosa accade nei meandri del server, ma intuisco che il problema derivi dalla tecnica di URL rewriting adottata. Probabilmente il redirect verso la pagina di errore azzera l'header della richiesta; faccio qualche test ed effettivamente ho azzeccato la diagnosi. Devo trovare un'altra tecnica di URL rewriting, questa non va proprio bene :(.

Routing di ASP.NET 4

Colpo di fortuna: tento la strada del routing (una caratteristica presente dalla versione 4 del framework) e funziona tutto al primo tentativo. Per far si che il routing operi con qualsiasi estensione di file, in IIS6 aggiungo una wildcard application map, facendo puntare qualsiasi richiesta al filtro \v4.0.30319\aspnet_isapi.dll.

Pubblicazione

Come accade spesso, le modifiche apportate per risolvere un problema causano a cascata degli altri problemi! Nello specifico, la presenza della wildcard nel mapping impedisce la pubblicazione del progetto tramite FPSE (FrontPage Server Extensions) che da sempre utilizzo per la pubblicazione sui server MS. Ad ogni modifica del sorgente dovrei rimuovere la wildcard, pubblicare e poi rimettere la wildcard, mettendo irrimediabilmente a rischio la salute del mio fegato.

Tento di configurare il servizio FTP di IIS, ma mi arrendo presto per le pochissime opzioni che lo strumento mette a disposizione.

Risolvo definitivamente il problema della pubblicazione con Web Deploy 2.1, che installo attraverso il comodo "Microsoft Web Platform Installer".

Torna all'inizio


13/02/2012

Webasic 2: database XML?

Un interessante database non relazionale, basato su XML e XQuery, open source:

Native XML Database System

"Sedna is a free native XML database which provides a full range of core database services - persistent storage, ACID transactions, security, indices, hot backup. Flexible XML processing facilities include W3C XQuery implementation, tight integration of XQuery with full-text search facilities and a node-level update language."

Bello ma...

Torna all'inizio


30/05/2012

Finalmente online il nuovo sito Bludev!

Dopo oltre tre mesi di gestazione e ripensamenti ho pubblicato ufficialmente la nuova incarnazione di questo sito, che fino ad ora era visibile su un altro dominio e conosciuto solo da pochi eletti :)

Gli obiettivi erano molteplici:

  • usare l'ultima mirabilante versione di Webasic al posto della vecchissima 0.5.11 (si sa, il calzolaio va in giro con le scarpe rotte e il sarto con i pantaloni scuciti)
  • allineare i contenuti alle effettive attività e alla nuova sede
  • dare uno sbocco al mobile, che tanto mi attrae!

Torna all'inizio