Questo sito
Premessa
Per raggiungere le finalità del sito (le "vetrina") sarebbero bastate alcune pagine statiche in semplice HTML e CSS. Per qualche funzionalità in più, ad esempio il log degli accessi, avrei potuto usare uno dei linguaggi di scripting attualmente in voga, ad esempio il PHP.
Tuttavia nel corso del tempo ho avuto modo di sperimentare vari linguaggi e varie tecnologie di sviluppo, rilevandone pregi e difetti, ovviamente nel contesto di volta in volta considerato.
Dal mio punto di vista gli strumenti attualmente disponibili hanno dei punti deboli, specie quando si vogliano realizzare applicazioni complesse che vadano al di là di semplici pagine. Questi strumenti, per quella che è la mia esperienza, costringono gli sviluppatori a mirabolanti giochi di prestigio per ottenere funzionalità particolari desiderate. In altre parole, quando si devono realizzare applicazioni complesse serve un livello di organizzazione per il quale gli strumenti alla moda, a mio parere, non sono adeguati. D'altra parte ritengo che spesso uno strumento sia "alla moda" proprio perché pensato per i principianti...
Ovviamente ogni considerazione è solo un'opinione personale, ma l'esperienza mi ha portato a valutare le tecnologie disponibili in una certa maniera. D'altra parte non penso di sbagliarmi di molto considerando che sviluppo programmi da quando i computer avevano qualche kilobyte di memoria e i computer comunicavano tramite modem a qualche migliaio di bit al secondo...
Per questi motivi ho pensato di provare a realizzare un framework per lo sviluppo di applicazioni web complesse che, dal mio punto di vista, ne semplificasse la realizzazione.
Uno degli obiettivi era inoltre quello di rimanere nell'ambito dell'utilizzo di un linguaggio di programmazione ad uso generico che conosco bene e col quale realizzo agevolmente ogni genere di applicazioni. In questo modo non sarei stato costretto ad approfondire linguaggi di programmazione specialistici relegati ad ambiti particolari.
Con queste premesse, direi che ho realizzato questo sito un po' per passatempo e un po' per mettere alla prova le mie conoscenze e competenze sullo sviluppo software, sia di applicazioni desktop che di applicazioni web.
Mi piace "reinventare l'acqua calda", specie se quella che mi offrono gli altri è tiepida o bollente, o la chiamano hot water perchè è più cool... E poi vuoi mettere il gusto di creare qualcosa con le proprie mani...
Scelte tecnologiche
L'impianto complessivo del sito è sempre quello di una applicazione fondamentalmente CGI.
La sigla CGI richiama alla memoria una tecnologia arcaica, ma che tutto sommato costituisce le fondamenta di ogni altra tecnologia web.
Lato client
Lato client ho cercato di aderire il più possibile alle moderne linee guida, cioè separare la struttura dei contenuti della pagina dalla modalità di rappresentazione. Quindi utilizzo HTML5 per conferire una struttura al contenuto e CSS3 per rappresentarlo. In questo modo le pagine sono più "responsive" e si adattano abbastanza bene alle varie dimensioni degli schermi dei dispositivi oggi disponibili.
Dopo qualche tentativo di utilizzare un framework CSS (w3.css, bootstrap, tailwind) ho deciso di ricorrere a CSS puro. Mi sono reso conto di quanto limitanti siano i framework CSS.
Vedere Framework CSS
Per quanto riguarda Javascript, cerco di limitarne l'utilizzo al minimo indispensabile mantenendo l'elaborazione lato server. Quando necessario ricorro a JQuery per semplificare la scrittura del codice nell'accesso agli elementi della pagina.
Lato server
Mentre nel lato client non ci sono molte alternative tra cui scegliere, nel lato server si possono provare varie soluzioni diverse, sia come linguaggi di programmazione, framework di sviluppo, configurazioni hardware/software.
Web server
Per lungo tempo ho usufruito di un servizio di hosting su sistema Windows. Se da un lato questo era più che sufficiente per gli scopi del sito, questa configurazione è risultata un po' vincolante per le scelte tecnologiche effettuate.
Sostanzialmente, ero costretto ad appoggiarmi a pagine ASP.NET delle quali realizzavo delle estensioni C# per utilizzare le funzionalità di una DLL scritta in FreePascal.
Non propriamente una soluzione "pulita".
Grazie alla riduzione dei prezzi sono passato ad un sistema Linux su VPS.
In questo modo ho il totale controllo del web server e posso adottare la soluzione tecnologica che preferisco.
Linguaggio di programmazione
Lato server utilizzo come linguaggio di programmazione FreePascal e come ambiente di sviluppo Lazarus.
Trovo che la coppia Lazarus/FreePascal offra varie caratteristiche che non ho ancora notato in altri linguaggi di programmazione a me noti. Vedere FreePascal e Lazarus
In particolare ho trasferito, praticamente senza sostanziali modifiche, quanto sviluppato per sistemi Windows nei sistemi Linux.
Database
Per l'archiviazione dei dati di norma è opportuno ricorrere ad un DBMS relazionale.
Per l'utilizzo che se ne deve fare in un sito web "normale", la scelta è influenzata principalmente da fattori economici e di disponibilità nel web server.
Su sistema Windows ho avuto modo di utilizzare dapprima Access, quindi SQLite.
Trovo quest'ultimo un DBMS particolarmente interessante per la sua semplicità di utilizzo e soprattutto perché non richiede installazione nel web server (cosa particolarmente utile nel caso di hosting se non si vuole ricorrere a soluzioni più costose come MySQL e SQLServer).
Ritengo che per piccoli siti come questo possa essere una soluzione ideale.
Il passaggio a database più potenti è comunque possibile senza un grande sforzo grazie all'utilizzo delle librerie fornite dall'ambiente di sviluppo Lazarus/FreePascal, già previste per la connessione a diversi DBMS senza sostanzialmente modificare il codice.
Con il passaggio ad un VPS Linux utilizzo MySQL che offre soluzioni tecnologiche più avanzate.
Da non trascurare l'utilizzo di semplici file di testo, notevoli per la velocità di accesso rispetto ai DBMS. Con opportuni lock si possono utilizzare anche in scrittura dei dati in ambienti multiutente.
Contenuti
La scrittura dei contenuti delle pagine statiche generalmente avviene usando LibreOffice Writer grazie alle funzionalità di export in HTML e ad una post-elaborazione delle pagine da me realizzata.
Questo mi offre una certa facilità di scrittura rispetto al ricorso all'HTML puro.
Ovviamente non tutte le pagine sono realizzate in questo modo e quando serve si scrive direttamente HTML.
CGI
L'interfaccia tra server web e applicazione era realizzata mediante una pagina ASP.NET (o in alternativa PHP) che si occupava di prelevare le informazioni della richiesta HTTP fornite dal web server e le passava al programma per l'elaborazione e la generazione della risposta.
Purtroppo ci si doveva adeguare ai vincoli imposti dal fornitore del servizio di hosting non avendo accesso alla configurazione del server web.
Adesso invece si ha un "semplice" programma eseguibile in tecnologia CGI.
La cosa interessante è che, con qualche "trucchetto", si può effettuare anche il debugging delle applicazioni direttamente dall'ambiente di sviluppo come se si trattasse di una normale applicazione desktop. Un enorme vantaggio in fase di sviluppo.
Framework
Tutto il sistema si basa su un framework realizzato anni addietro e raffinato (più per divertimento che per necessità) nel corso del tempo.
Questo framework si occupa di vari aspetti comuni alle applicazioni web:
- elabora la richiesta HTTP mettendone le informazioni a disposizione sotto forma di oggetto
- gestisce la sessione utente per la persistenza dei dati
- gestisce gli oggetti pagina per quanto riguarda le proprietà persistenti, l'elaborazione degli eventi e la generazione della risposta
- restituisce la risposta generata dall'applicazione
L'applicazione che ne risulta è costituita da un unico programma eseguibile che contiene al suo interno tutta la logica applicativa. In questo modo l'applicazione è sufficientemente protetta da copia, reverse engineering, alterazioni, tutelando il lavoro dello sviluppatore.
L'applicazione CGI non richiede installazione, a parte ovviamente una opportuna configurazione del web server per l'abilitazione dell'esecuzione.
Inoltre, con qualche piccola modifica al codice di interfaccia, è possibile separare la gestione della richiesta HTTP dall'elaborazione della stessa. Con due eseguibili distinti è possibile aumentare la sicurezza dell'applicazione mediante isolamento dei processi di elaborazione dal processo del web server, e controllare il carico elaborativo stabilendo un pool di processi server dedicati.