Progetti

Software, automazione AV e infrastrutture, dal problema al risultato.

Case study

Dettagli tecnici, scelte e risultati.

In corso

Client Televic CoCon

Client Python asincrono e tipizzato per le API REST documentate di Televic CoCon.

Autore — sviluppo per 3P Technologies S.r.l.

Problema
Fornire un'unica interfaccia asincrona per inviare comandi CoCon e ricevere notifiche, senza ripetere la gestione del trasporto in ogni applicazione.
Approccio
Long polling e invio dei comandi procedono separatamente, così le notifiche in ingresso non bloccano i comandi in uscita. I payload supportati diventano dataclass tipizzate, mentre retry, riconnessione e ripristino delle sottoscrizioni restano interni al client.
Contributo
Sviluppo del client asincrono, del parser tipizzato delle notifiche e della gestione di connessioni e comandi.
Risultato
Libreria pubblicata e utilizzata internamente come base per CoCon Vote Monitor.

Un solo punto di accesso a CoCon

Ho sviluppato il client perché il codice applicativo potesse lavorare con comandi ed eventi tipizzati, senza occuparsi direttamente di long polling, retry e riconnessioni. L’API basata su async with gestisce apertura e chiusura, mentre sottoscrizioni e callback mantengono semplice la gestione delle notifiche.

Il registro delle notifiche raccoglie in un solo punto il supporto ai diversi payload, mentre il ripristino delle sottoscrizioni permette alle applicazioni di proseguire dopo un’interruzione della connessione. Lo stesso client è poi diventato la base di CoCon Vote Monitor.

Tecnologie

Python · asyncio · aiohttp · Dataclass tipizzate · REST/JSON

Attribuzione

Sviluppato per 3P Technologies S.r.l., che ne detiene il copyright. Disponibile con licenza LGPL-3.0-or-later o commerciale. CoCon e i relativi marchi appartengono a Televic Conference NV; il progetto è indipendente e non affiliato a Televic.

In corso

CoCon Vote Monitor

Vista web in tempo reale dello stato della riunione e dei risultati di voto ricevuti da un sistema Televic CoCon.

Autore — sviluppo per 3P Technologies S.r.l.

Problema
Fornire una vista chiara della riunione, del punto all'ordine del giorno e dei risultati di voto correnti.
Approccio
L'applicazione mantiene sul server lo stato della riunione e della votazione e invia uno snapshot completo a ogni nuovo display collegato. I WebSocket trasportano gli aggiornamenti successivi e la vista standard può aprire il flusso di stampa del browser alla chiusura della votazione.
Contributo
Sviluppo dell'applicazione web, mappatura delle notifiche CoCon nello stato della pagina e aggiornamenti in tempo reale per i browser collegati.
Risultato
Applicazione pubblica e configurabile che visualizza stato della riunione, punto all'ordine del giorno, risultati per delegato e conteggi aggregati.

Una vista in tempo reale di ogni votazione

Ho sviluppato il monitor come applicazione complementare a cocon_client. Mantenere lo stato corrente sul server permette a un nuovo display di ricevere subito la vista completa della riunione e della votazione; i display già collegati restano aggiornati tramite WebSocket, senza polling o refresh della pagina.

Alla chiusura della votazione, la vista standard può aprire automaticamente il flusso di stampa del browser. /noautoprint mantiene la stessa vista in tempo reale senza attivarlo.

Tecnologie

Python · Starlette · Uvicorn · WebSocket · cocon_client

Attribuzione

Sviluppato per 3P Technologies S.r.l., che ne detiene il copyright. Rilasciato con licenza AGPL-3.0-or-later. CoCon e i relativi marchi appartengono a Televic Conference NV.

08/2024–in corso

Integrazione AV per spazi conferenza

Integrazione e configurazione di sistemi AV e di controllo per il rinnovamento di più spazi conferenza della principale istituzione internazionale di Ginevra.

System Integrator & Quality Manager — incarico di progetto per 3P Audiovisual SAGL

Problema
Far lavorare insieme in modo coerente diversi sistemi AV e di building control durante il rinnovamento pluriennale di più spazi conferenza.
Approccio
Confronto diretto con il cliente, verifica dei punti di contatto tra i sottosistemi, configurazione e collaudo dei dispositivi ambiente per ambiente e coordinamento delle modifiche al controllo con lo sviluppatore principale dell'automazione.
Contributo
Gestione dell'integrazione di sistema, confronto con il cliente su requisiti e possibili modifiche, configurazione, collaudo e messa in servizio dei sistemi audio, video, telecamere, KNX e controllo.
Risultato
Sei dei sette ambienti previsti sono stati configurati, collaudati e messi in esercizio; le attività rimanenti sono in corso.

Integrazione su scala congressuale

Nei sette ambienti conferenza, il progetto comprende quasi 5.000 dispositivi e postazioni: circa 1.700 postazioni delegate e microfono, circa 2.800 unità di ascolto, oltre 300 endpoint AV-over-IP e decine di telecamere controllate.

Mi confronto direttamente con il cliente su requisiti e possibili modifiche, coordino le interfacce tra i sistemi e seguo in prima persona configurazione, collaudo e messa in servizio dei dispositivi. Sei dei sette ambienti previsti sono operativi; le attività rimanenti sono ancora in corso.

Lavoro insieme allo sviluppatore senior dell’automazione, responsabile dell’implementazione principale del codice di controllo. Il mio contributo software riguarda le modifiche più piccole necessarie durante l’integrazione; la maggior parte del mio lavoro è dedicata a integrazione, configurazione dei dispositivi, verifiche di qualità e messa in servizio.

Tecnologie

AMX NetLinx · Sistemi di controllo AV · Audio e video su rete · Controllo telecamere · KNX

Attribuzione

Incarico di progetto a supporto di 3P Audiovisual SAGL come dipendente di 3P Technologies S.r.l., in collaborazione con lo sviluppatore senior dell'automazione.

2024–presente

Driver MicroPython per MCP9808

Driver MicroPython installabile e in un singolo file per leggere e configurare via I2C il sensore di temperatura Microchip MCP9808.

Autore

Problema
Esporre temperatura, risoluzione, modalità a basso consumo e funzioni di allarme dell'MCP9808 attraverso un'interfaccia MicroPython portabile e dai costi prevedibili sui microcontrollori con risorse limitate.
Approccio
Modellare ogni sensore come oggetto MCP9808 associato a un bus I2C compatibile e a un indirizzo, mappare i registri a 8 e 16 bit su operazioni esplicite, riutilizzare buffer di trasferimento fissi ed esporre configurazione in cache e percorsi interi o in virgola mobile per la temperatura.
Contributo
Progettazione e sviluppo del driver orientato ai registri e della sua API pubblica, seguiti dall'architettura v2, dalla pacchettizzazione MicroPython, dal modello simulato dei registri e dall'infrastruttura di test hardware su Pico W.
Risultato
Versione 2.0.0 pubblicata con metadati per mip e per l'inclusione come modulo frozen nel firmware, tag con versionamento semantico, test senza dipendenze basati su un modello dei registri, test hardware su Pico W e una guida implementativa al datasheet.

Modello del driver orientato ai registri

Un’istanza MCP9808 associa un oggetto compatibile con I2C a un indirizzo esplicito a sette bit oppure calcolato dai pin A0, A1 e A2. Il modulo definisce direttamente indirizzi dei registri e maschere di configurazione, senza dipendere da classi machine.I2C concrete, e usa un buffer da due byte e uno da un byte per tutti i trasferimenti.

Il registro di configurazione è rappresentato come uno snapshot in cache. refresh() esegue una lettura esplicita e aggiorna le proprietà di isteresi, spegnimento, blocco, allarme, polarità e modalità; i setter compongono i relativi campi di bit, scrivono il registro e aggiornano lo snapshot. La verifica opzionale dell’identità legge gli identificativi Microchip del produttore e del dispositivo senza rendere obbligatorie queste transazioni per ogni percorso di inizializzazione.

La temperatura segue la rappresentazione firmata del registro in sedicesimi di grado, affiancata da un wrapper in gradi Celsius per comodità. Anche le soglie di allarme dispongono di operazioni esatte in quarti di grado oltre all’API in virgola mobile. La stessa interfaccia copre risoluzione, stato a basso consumo, isteresi, funzionamento come comparatore o interrupt, polarità, selezione delle soglie e blocchi dei registri azzerabili solo spegnendo e riaccendendo l’MCP9808.

Infrastruttura di pacchettizzazione e test

Il repository separa distribuzione e validazione: package.json supporta l’installazione tramite mip, mentre manifest.py permette di includere il modulo nel firmware MicroPython con un livello di ottimizzazione che conserva i numeri di riga. Tag versionati e changelog distinguono l’API originale dall’interfaccia v2 con modifiche incompatibili.

I test host usano una mappa dei registri FakeI2C senza dipendenze che modella identificativi, temperature, flag di allarme, blocchi di configurazione, bit di cancellazione interrupt autoazzerante e conteggio delle transazioni. Una suite separata su Pico W esercita il ciclo di alimentazione, il sensore fisico e l’uscita di allarme; uno script sul dispositivo resta disponibile per misure ripetibili di tempo e allocazioni senza trasformare uno specifico risultato di benchmark nell’esito principale del progetto.

Tecnologie

MicroPython · Python · I2C · Raspberry Pi Pico W · Microchip MCP9808 · mpremote · Python unittest

Attribuzione

Progetto open source personale di Marco Miano, rilasciato con licenza MIT. MCP9808 è un prodotto di Microchip Technology; il progetto è indipendente e non è affiliato né approvato da Microchip Technology.

2026–in corso

miano.cloud

Sito personale statico bilingue, con un'interfaccia ispirata ai terminali e un runtime volutamente ridotto.

Progettazione e sviluppo

Problema
Presentare un percorso tecnico vario senza trasformare il sito in un modello di curriculum tradizionale o in una caricatura a tema terminale.
Approccio
Generare pagine statiche da contenuti bilingui tipizzati, mantenere navigazione e lettura funzionanti senza JavaScript e riservare gli script client a tema, tastiera ed effetti iniziali facoltativi.
Contributo
Definizione dell'architettura, della struttura dei contenuti, del sistema visivo, della base di accessibilità e del flusso di verifica automatica.
Risultato
Sito bilingue pubblicato con CV e casi di studio, supportato da controlli sull'output statico e test cross-browser.

Statico per scelta

Ho scelto un’architettura statica perché il sito non richiede account, database o application server. Astro trasforma i contenuti bilingui in normali pagine HTML, mentre il piccolo livello client aggiunge soltanto controlli ed effetti facoltativi.

L’interfaccia riprende elementi di terminali ed editor di testo senza sostituire il comportamento abituale del web. I link restano link, le pagine funzionano senza JavaScript, le animazioni possono essere disattivate e gli stessi contenuti si adattano a schermi stretti e alla stampa.

Il repository pubblico contiene il sorgente del sito e il relativo flusso di verifica. I controlli automatici coprono formattazione, tipi, route generate, sicurezza di pubblicazione, comportamento responsive, interazione da tastiera e i tre motori browser.

Tecnologie

Astro · TypeScript · CSS nativo · Playwright · GitHub Actions

Attribuzione

Progetto personale ideato e realizzato da Marco Miano con sviluppo assistito da Codex. Il codice sorgente è disponibile con licenza MIT; contenuti e risorse d'identità restano copyright Marco Miano.

Palette dei comandi

Navigazione

6 destinazioni disponibili.

Scorciatoie da tastiera

Le scorciatoie globali sono disattivate mentre scrivi in un campo. Tutte le azioni restano disponibili come controlli e link normali.

Alt+P
Apri la palette dei comandi
Alt+T
Cambia tema: auto, scuro, chiaro
Alt+H
Apri o chiudi questo aiuto
Esc
Chiudi la finestra attiva