Post

Ventiquattro anni di un framework: cosa ha retto, cosa no, e perché

Immagine
In questi mesi sto reingegnerizzando un framework che ho scritto nell'agosto del 2002. Si chiama MDL, e la versione nuova gira su .NET 10 — la vecchia era partita da .NET 1.0. Nel frattempo ci abbiamo costruito sopra un gestionale amministrativo-contabile in esercizio da allora, il software con cui gestiamo il nostro helpdesk, il framework ASP.NET che ha retto la prima generazione dei nostri form web, e una quantità di web service e API verso l'esterno: banche, sistemi di protocollo, servizi di conservazione digitale, e in pratica chiunque avesse bisogno di dialogare con un ateneo. Nel mezzo ci sono ventiquattro anni in cui il motore è stato rifatto pezzo per pezzo mentre le applicazioni costruite sopra continuavano a girare. Mi sembra un buon momento per guardare indietro e chiedermi quali decisioni abbiano retto, quali no, e soprattutto perché. Agosto 2002 La situazione era questa: un database esistente, la necessità di costruirci sopra centinaia di form funzionan...

Algebra lineare (3): calcolo differenziale con le matrici

Immagine
Algebra lineare — serie in tre parti Spazi vettoriali, basi e applicazioni lineari Matrici, determinanti, autovalori e SVD Calcolo differenziale con le matrici (questo articolo) Nelle prime due parti di questa serie abbiamo costruito gli spazi vettoriali e studiato le matrici . Restava fuori un pezzo: cosa succede quando si deriva rispetto a un vettore o a una matrice. È il pezzo che serve davvero se si scrive codice di ottimizzazione. Ogni algoritmo di addestramento, dalla regressione lineare alla discesa del gradiente in una rete neurale, calcola la derivata di una funzione scalare — la loss — rispetto a un insieme di parametri organizzati in matrici. Le regole che seguono sono quelle che permettono di farlo senza scendere agli indici ogni volta, e quello che si scopre è che ricalcano fedelmente le regole del calcolo a una variabile: dove nel caso scalare c'è \(ax\), qui c'è \(b^T x\); dove c'è \(ax^2\), qui c'è \(x^T A x\); e le derivate si corrispondo...

Algebra lineare (2): matrici, determinanti, autovalori e SVD

Immagine
Algebra lineare — serie in tre parti Spazi vettoriali, basi e applicazioni lineari Matrici, determinanti, autovalori e SVD (questo articolo) Calcolo differenziale con le matrici Nella prima parte di questa serie abbiamo costruito gli spazi vettoriali e le applicazioni lineari, e abbiamo visto che una matrice non è altro che un'applicazione lineare scritta rispetto a due basi fissate. Qui prendiamo quell'oggetto e lo studiamo per conto suo: come si moltiplica, come si inverte, come si decompone. Il filo conduttore dell'articolo è che quasi ogni formula matriciale si può leggere in più modi, e che scegliere la lettura giusta rende un risultato ovvio invece che oscuro. Il prodotto fra matrici, per dire, ammette quattro interpretazioni diverse che danno lo stesso numero ma raccontano cose diverse. Il punto d'arrivo sono la diagonalizzazione e la decomposizione ai valori singolari, cioè gli strumenti con cui si guarda dentro una matrice per capire cosa fa dav...