Projects

Software, AV automation, and infrastructure, from problem to outcome.

Case studies

Technical details, decisions, and results.

Ongoing

Televic CoCon Client

An asynchronous, typed Python client for the documented Televic CoCon REST API.

Author — developed for 3P Technologies S.r.l.

Problem
Provide one asynchronous interface for sending CoCon commands and receiving notifications without repeating transport logic in every application.
Approach
Long polling and command dispatch run independently, so incoming notifications do not block outgoing commands. Supported payloads become typed dataclasses, while retries, reconnection, and re-subscription stay inside the client.
Contribution
Built the asynchronous client, typed notification parser, and connection and command handling.
Outcome
A published library used internally as the foundation for CoCon Vote Monitor.

One boundary for CoCon

I built the client so application code can work with commands and typed events instead of managing long polling, retries, and reconnections itself. Its async with API handles setup and teardown, while subscriptions and callbacks keep notification handling straightforward.

The notification registry keeps support for new payload types in one place, and restored subscriptions let applications continue after a connection interruption. The same client later became the foundation for CoCon Vote Monitor.

Technology

Python · asyncio · aiohttp · Typed dataclasses · REST/JSON

Attribution

Developed for 3P Technologies S.r.l., which holds the copyright. Available under LGPL-3.0-or-later or a commercial licence. CoCon and related trademarks belong to Televic Conference NV; the project is independent and not affiliated with Televic.

Ongoing

CoCon Vote Monitor

A live browser view of meeting state and voting results received from a Televic CoCon system.

Author — developed for 3P Technologies S.r.l.

Problem
Provide a clear browser view of the current meeting, agenda item, and voting results.
Approach
The application keeps meeting and voting state on the server and sends a complete snapshot to each newly connected display. WebSockets carry subsequent updates, and the standard view can open the browser print flow when voting closes.
Contribution
Built the web application, mapped CoCon notifications into page state, and added live updates for connected browsers.
Outcome
A public, configurable application that displays meeting state, agenda item, per-delegate results, and aggregate counts.

A live view of each vote

I built the monitor as a focused companion to cocon_client. Keeping the current state on the server means a newly connected display immediately receives the full meeting and voting view; existing displays stay current through WebSocket updates instead of polling or refreshing the page.

When voting closes, the standard view can open the browser print flow automatically. /noautoprint keeps the same live view without triggering it.

Technology

Python · Starlette · Uvicorn · WebSocket · cocon_client

Attribution

Developed for 3P Technologies S.r.l., which holds the copyright. Released under AGPL-3.0-or-later. CoCon and related trademarks belong to Televic Conference NV.

08/2024–ongoing

Conference-space AV integration

Integration and configuration of AV and control systems for a multi-space renovation at the major international institution in Geneva.

System Integrator & Quality Manager — project assignment for 3P Audiovisual SAGL

Problem
Make several AV and building-control systems work together consistently across a multi-year conference renovation.
Approach
Work through requirements directly with the customer, check the boundaries between subsystems, configure and test devices room by room, and coordinate control changes with the main automation developer.
Contribution
Lead system integration, discuss requirements and possible changes with the customer, and configure, test, and commission the audio, video, camera, KNX, and control systems.
Outcome
Six of seven planned environments have been configured, tested, and placed into operation; remaining work is ongoing.

Integration at conference scale

Across seven conference environments, the project covers nearly 5,000 devices and conference positions: around 1,700 delegate and microphone positions, approximately 2,800 listening units, more than 300 AV-over-IP endpoints, and dozens of controlled cameras.

I work directly with the customer on requirements and possible changes, coordinate the interfaces between systems, and handle the detailed device configuration, testing, and commissioning. Six of the seven planned environments are in operation, with the remaining work still under way.

I work alongside the senior automation developer, who owns the main control-code implementation. My software contribution consists of the smaller changes needed during integration; most of my work is system integration, device configuration, quality checks, and commissioning.

Technology

AMX NetLinx · AV control systems · Networked audio and video · Camera control · KNX

Attribution

Project assignment supporting 3P Audiovisual SAGL while employed by 3P Technologies S.r.l., in collaboration with the senior automation developer.

2024–present

MicroPython MCP9808 driver

An installable single-file MicroPython driver for reading and configuring the Microchip MCP9808 temperature sensor over I2C.

Author

Problem
Expose the MCP9808's temperature, resolution, low-power, and alert functions through a portable MicroPython interface with predictable costs on constrained microcontrollers.
Approach
Model one sensor as an MCP9808 object bound to an I2C-compatible bus and address, map its 8- and 16-bit registers to explicit operations, reuse fixed transfer buffers, and expose cached configuration state plus integer and floating-point temperature paths.
Contribution
Designed and implemented the register-oriented driver and its public API, then developed the v2 architecture, MicroPython packaging, simulated register model, and Pico W hardware-test infrastructure.
Outcome
Version 2.0.0 published with mip and frozen-firmware metadata, semantic-versioned tags, dependency-free register-model tests, Pico W hardware tests, and a datasheet-oriented implementation guide.

Register-oriented driver model

An MCP9808 instance binds an I2C-compatible object to either an explicit seven-bit address or one assembled from the A0, A1, and A2 pins. The module defines the sensor’s register addresses and configuration masks directly, without depending on concrete machine.I2C classes, and uses one two-byte buffer plus one one-byte buffer for all transfers.

The configuration register is represented as a cached snapshot. refresh() performs one explicit read and updates hysteresis, shutdown, lock, alert, polarity, and mode properties; setters assemble the corresponding bit fields, write the register, and refresh the snapshot. Optional identity verification reads the Microchip manufacturer and device identifiers without making those transactions mandatory for every construction path.

Temperature data follows the sensor’s signed sixteenth-degree register representation, with a Celsius float wrapper for convenience. Alert thresholds likewise have exact signed quarter-degree operations alongside the float API. The same interface covers resolution, low-power state, hysteresis, comparator or interrupt behavior, polarity, threshold selection, and the MCP9808’s power-cycle-reset register locks.

Package and test infrastructure

The repository separates deployment and validation concerns: package.json supports installation through mip, while manifest.py supports freezing the module into MicroPython firmware with line-preserving optimization. Versioned tags and a changelog distinguish the original API from the breaking v2 interface.

Host tests use a dependency-free FakeI2C register map that models identity registers, temperatures, alert flags, configuration locks, the self-clearing interrupt bit, and transaction counts. A separate Pico W suite exercises power cycling and the physical sensor and alert output; an on-device script is retained for repeatable timing and allocation measurements without making a specific benchmark result the project’s main outcome.

Technology

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

Attribution

Personal open-source project by Marco Miano, released under the MIT License. MCP9808 is a Microchip Technology product; the project is independent and is not affiliated with or endorsed by Microchip Technology.

2026–ongoing

miano.cloud

A bilingual static personal site with a restrained terminal-inspired interface and a deliberately small runtime.

Designer and developer

Problem
Present a varied technical background without turning the site into either a conventional résumé template or a terminal-themed novelty.
Approach
Build static pages from typed bilingual content, keep navigation and reading functional without JavaScript, and reserve client scripts for optional theme, keyboard, and first-session enhancements.
Contribution
Defined the architecture, content structure, visual system, accessibility baseline, and automated verification workflow.
Outcome
A deployed bilingual site with a public CV and project case studies, backed by static-output checks and cross-browser tests.

Static by default

I chose a static architecture because the site does not need accounts, a database, or an application server. Astro turns the bilingual content into ordinary HTML pages, while the small client-side layer only adds optional controls and effects.

The interface borrows from terminals and text editors without replacing familiar web behaviour. Links remain links, the pages work without JavaScript, motion can be disabled, and the same content adapts to narrow screens and print.

The public repository contains the website source and its verification workflow. Automated checks cover formatting, types, generated routes, publication safety, responsive behaviour, keyboard interaction, and the three browser engines.

Technology

Astro · TypeScript · Native CSS · Playwright · GitHub Actions

Attribution

Personal project designed and built by Marco Miano with Codex-assisted development. Source code is available under the MIT License; site content and identity assets remain copyright Marco Miano.

Command palette

Navigation

6 destinations available.

Keyboard shortcuts

Global shortcuts are disabled while you type in a field. Every action remains available through ordinary controls and links.

Alt+P
Open the command palette
Alt+T
Cycle theme: auto, dark, bright
Alt+H
Open or close this help
Esc
Close the active window