Davide O. Zhu
Sviluppatore backend freelance. API, integrazioni, pipeline di dati e sistemi con IA.
Dal 2021 lavoro su software che deve stare in piedi in produzione: microservizi per la grande distribuzione, applicazioni di un'utility energetica, piattaforme costruite da zero. Quando qualcosa non torna, continuo a chiedermi perché finché non trovo la causa.
Valuto nuovi progetti da freelance e posizioni da remoto. Lavoro in italiano e in inglese.
Fino alla causa
Un guasto vero, sul server che tengo in casa con le stesse regole di un ambiente di produzione. Il metodo è quello che uso sul lavoro: il primo errore è solo il punto da cui si comincia a scendere.
- Il sintomo
Dopo un riavvio del server, due servizi non ripartono: l'archivio delle foto e le automazioni. Tutto il resto funziona, compresi altri servizi che usano la stessa GPU.
- Perché? primo
I due container si fermano con
NVML: Driver Not Loaded. Ma il driver era caricato: sull'hostnvidia-smirispondeva. - Perché? secondo
Dentro i container,
/dev/nvidia*non erano dispositivi ma file vuoti./dev/nvidiactlmancava del tutto. - Perché? terzo
I container erano partiti prima che l'host creasse i dispositivi della GPU. Il mount opzionale, non trovandoli, aveva creato dei segnaposto.
- Perché? quarto
Niente stabiliva un ordine tra la GPU e l'avvio automatico dei container. A ogni boot vinceva chi arrivava prima, per questo alcuni servizi si salvavano.
- L'intervento
Un servizio di sistema che inizializza la GPU prima di qualsiasi container:
nvidia-persistencedconBefore=pve-guests.service.Ho usato il binario fornito con il driver installato (580) e non il pacchetto della distribuzione, fermo alla 550, che sarebbe andato in conflitto. Poi ho scritto come riconoscere il problema in un minuto, se dovesse tornare.
Cosa faccio
Backend e integrazioni
API REST e microservizi in Node.js (Fastify) e Java (Spring Boot). Collego sistemi nuovi a quelli che ci sono già, anche a eventi con Kafka, senza fermare chi li usa.
Dati e IA
Pipeline in Python che raccolgono e ripuliscono dati non strutturati. Assistenti basati su modelli linguistici, con retrieval su database vettoriali e a grafo (Qdrant, Neo4j).
Applicazioni in produzione
Presa in carico di software esistente: ticket, analisi della causa, fix, refactoring del codice legacy con test. Docker, Kubernetes, CI/CD con Jenkins, server Linux.
Dove ho lavorato
-
Dal 2026
SaaS B2B per la conformità normativa
Nel team che sviluppa un assistente IA per verificare ingredienti cosmetici e alimentari rispetto alle normative: retrieval su database vettoriali e a grafo, pulizia del corpus documentale, modello dei dati.
Python, Qdrant, Neo4j
-
Dal 2026
Duemme Dental, Nerviano
Il CRM dello studio dentistico, sviluppato con un collega: pazienti, questionario anamnestico e odontogramma ricalcati sui moduli cartacei dello studio, preventivi e agenda.
React, Spring Boot, Java 21, PostgreSQL
-
2024–2025
Consulente freelance per ATS S.p.A.
- Unicoop, grande distribuzione. Microservizi in Node.js e Fastify; sincronizzazione in tempo reale da Oracle a MongoDB con Kafka durante la migrazione.
- A2A, energia. Gestione autonoma dei ticket di produzione su Jira, analisi della causa e hotfix in TypeScript.
- BitQ. Refactoring di una codebase Java/Spring Boot con molto debito tecnico, guidato dai test (JUnit, Mockito); containerizzazione con Docker e Kubernetes.
-
2021–2023
Expandi Group e Account Insight
Full stack e poi lead developer. Una piattaforma proprietaria in Java/Spring Boot, dai requisiti alla produzione; pipeline CI/CD con Jenkins e Docker su AWS; procedure Python e SQL per l'analisi dei dati.
Laurea in Informatica in corso all'Università degli Studi di Milano.
Fuori orario
A casa gestisco un piccolo datacenter: Proxmox con una decina tra container e macchine virtuali, una GPU condivisa per i modelli linguistici in locale, monitoraggio con avvisi su Telegram, controllo dei dischi e backup notturni. Lo tratto come un ambiente di produzione, quindi ogni tanto si rompe davvero. Altri due guasti risolti:
- Load a 30 e sembrava RAM esaurita. Era una conversione di container da unprivileged a privileged che aveva lasciato tutti i file con gli UID spostati di 100000: nove container Docker in crash continuo. Backup, proprietari riallineati su tutto il filesystem, quattordici container di nuovo su.
- Thin pool quasi pieno: decine di GB recuperati abilitando discard e
fstrim.
E qualche strumento per conto mio: un wrapper Python per API multimodali con gestione di token e rate limit, e una pipeline che trasforma thread di Reddit in video verticali senza intervento manuale.
Scrivimi
davide.ouxiang.zhu@gmail.comRaccontami cosa c'è da costruire o cosa non torna. Lavoro da remoto, in italiano e in inglese. Il CV completo te lo mando su richiesta.