È passato un po' di tempo…

Questo articolo potrebbe contenere informazioni interessanti ma non più correntemente aggiornate.

appe è un mini gestionale gratuito che consente di maneggiare dati senza dover per forza installare web server, software aggiuntivo da internet, programmi di videoscrittura, dando la possibilità di improntare una app portatile rapidamente e scrivere anche spaghetti code, fare delle belle spaghettate.

Semplice da utilizzare, leggero e lanciabile quasi ovunque con un browser oppure creando un software eseguibile tramite Electron.

Prova la demo

Tutto è cominciato spontaneamente da un lavoro commissionatomi che prevedeva l’archiviazione di dati e il calcolo di un punteggio, cosa che poteva essere fatta con un foglio di calcolo e un sistema di formule e macro. Il problema principale del foglio di calcolo è la necessità di software esterno per essere utilizzato o in alternativa l’utilizzo di software in cloud, l’archiviazione di anno in anno è resa difficile dalla presenza di formule, ciò avrebbe richiesto la creazione di più file o più schede e di essere rimanipolato di volta in volta. Va considerato anche il fatto che un foglio di calcolo ha una interfaccia molto malleabile, basta trascinare qualche valore e si rischia di mandare in errore le formule e stravolgerne il contenuto.


Serviva quindi un programma semplice da utilizzare e gestire, che potesse essere contenuto in una pendrive, il tempo a disposizione era pochissimo e l’idea iniziale era quella di prendere un CMS leggero, qualcosa che fosse portatile, ma questo avrebbe richiesto un webserver con tutti i problemi di gestione che questo poteva scaturire. Poi ho pensato all’HTML e a JavaScript, ai moderni framework che lavorano lato client-side, però aldilà dell’utilizzo di AJAX e alla presenza di CORS, c’era da considerare anche la mole di dipendenze, la struttura di cartelle che ne sarebbe derivata e soprattutto il breve tempo. Quindi ho pensato al protocollo file: che consente di aprire dei file HTML con delle importanti limitazioni.

L’inizio

Ho aperto l’editor e ho iniziato a scrivere, cercando di capire se localStorage e sessionStorage potevano essere utilizzati con localfile, ogni browser ha un suo comportamento e una volta aggirato l’ostacolo delle differenze di comportamento, ho inserito un iframe con l’intenzione di utilizzare window.postMessage per adottare un sistema di tipo “main” vista principale e “view” vista secondaria. Anche questo funzionava correttamente e nel giro di 4 giorni ho tirato su tutta l’applicazione, molto spaghettosa però con funzionalità di rilievo tipo apri, salva, esporta in CSV, stampa, riapri il file precedentemente aperto. Un qualcosa di soddisfacente, il tutto nell’ottica del riutilizzo.

Il meccanismo di riapertura del file è un semplice trick utilizzato frequentemente per inserire nelle pagine web servizi di terze parti come per esempio il codice di monitoraggio per report e analisi sui visitatori, l’applicativo salva un file JavaScript con estensione .js contenente al suo interno una globale e dati JSON, quando si effettua un hard refresh della pagina oppure viene a mancare la sorgente dati, attraverso i cookie o WebStorage si recupera il nome del file e l’ultimo salvataggio disponibile viene ricaricato in memoria automaticamente.

La struttura delle cartelle è semplificata per consentire di lanciare il programma con un solo file LAUNCH.html così da non creare confusione nell’utente, inserire tutti gli altri file di funzionamento all’interno di un’unica cartella “app”, i salvataggi in un’unica cartella “save”, le estensioni in un’unica cartella “ext” e via dicendo.


Il nome {appe} deriva dalle graffe utilizzate per contrassegnare i segnaposto all’interno delle pagine, ricordano visivamente anche dei forchettoni per servire la pasta, l’abbreviazione “app” che sta per “applicazione” con la “e” finale, più un semplice distinguo come suffisso “appe”.

Il rilascio

Qualche tempo dopo ho pensato “chissà se qualcosa di questo tipo potrebbe tornare utile ad altri per creare programmi o manipolare semplicemente dei dati al volo?”.

Così l’ho riaperta e mi sono messo a studiare un metodo per renderla utilizzabile dai più, senza perdere quella facilità di approccio, fissando la possibilità di scrivere spaghetti code come un punto cardine.

La prima cosa che ho dovuto fare è stato riorganizzare tutto il codice JavaScript scritto in fretta e furia nelle viste HTML, utilizzare nelle proprietà, funzioni e argomenti, dei nomi intuitivi e riscrivere completamente il tutto sotto forma di API utilizzabili e documentate, questo un po’ a discapito della possibilità di abbozzare rapidamente un programma ma resosi necessario dall’impossibilità di utilizzarla per chiunque out-of-the-box.

Paradossalmente {appe} riesce a fare molte più cose di quante riuscisse a farne un celebre PHP nel suo primissimo rilascio (a me piace andare a vedere la storia di programmi, capire come gli sviluppatori si sono destreggiati, come si è evoluta una cosa piuttosto che un’altra), questo da una parte mi è servito anche per studiare localfile e comportamenti dei browser e dall’altra da anche una percezione del potenziale del lato client.

In un mese di tempo sono riuscito a creare una API abbastanza stabile e semplice, mantenendo la possibilità di estendere {appe}, una demo, documentazione con esempi, aggiungendo anche funzionalità che non avevo previsto inizialmente come per esempio l’internazionalizzazione i18n.


Dietro le quinte di {appe} (immagine contenente una anteprima visuale della dimostrazione presente nel link)

Un coltellino svizzero

Ho dovuto creare la demo per dare possibilità di vedere direttamente cosa è possibile fare, dovendo scegliere una fonte di dati da cui attingere la mia scelta è ricaduta sui dinosauri, perché catalogabili, provvisti di nomenclature, categorizzazioni, anno di scoperta, tipi di dati che si adattavano con più facilità alla struttura dati esistente, inoltre privi di limitazioni legali, eccezion fatta per alcuni dino creati di sana pianta nel noto colossal Jurassic Park, inseriti comunque con un nome alterato per via del marchio registrato. Essendo creature abbastanza trasversali ho pensato potesse essere anche una buona idea per avvicinare persone alla programmazione.

Lo scopo è quello di scaricare un file zippato, scompattarlo, senza scaricare nient’altro, leggere la documentazione e iniziare a scrivere un programmino, come potrebbe essere il Fantacalcio, gestire la fatturazione, creare una calcolatrice, ci sono infinite possibilità di utilizzo. Il tutto può essere trasportato, quindi si può mettere in una pennetta USB, su uno spazio cloud, senza dover dipendere da altri software. Gli si può dare in pasto una struttura di dati in JSON, essendo molto diffuso, listare i risultati e stamparli, anche avvalendosi di trasformazioni come per esempio con la data, attraverso la funzione app.utils.dateFormat.

Vorrei aggiungere tante altre nuove funzionalità nei prossimi rilasci, oltre a migliorarne l’integrazione con ambiente remoto e webserver, per esempio mi piacerebbe creare un gestore delle fonti di dati [appe.driver] per consentire la connessione con servizi cloud, database e diverse tipologie di dati.


C’è anche da ampliare la documentazione e migliorarne la fruibilità, completare alcune cose in TODO, aggiungere funzionalità previste nella roadmap.

{appe} può fare molte cose e potrebbe farne tante altre, qualsiasi apporto è gradito, per contribuire allo sviluppo partecipa dal repository git con i vari strumenti a disposizione (Pull Request, Issues, …), possiamo discuterne istantaneamente direttamente in questa pagina anche con WhatsApp facendo click sul pulsante “parla con me…”.