Il tuo primo widget per Plasma 6: C++, QML e il pattern Observer

🦎 Ciao geeko! Il 14 ottobre 1996 uno studente di nome Matthias Ettrich annunciò la nascita di un “Kool Desktop Environment” per Linux; trent’anni dopo KDE è ancora in piena attività, e un compleanno così merita di essere festeggiato come si deve. Buon trentesimo compleanno, KDE! La comunità raccoglie le iniziative per l’anniversario nella pagina KDE at 30. Crediti immagine: il logo di KDE proviene dal press kit di KDE (LGPL). KDE® e il logo K Desktop Environment® sono marchi registrati di KDE e.V. Questo articolo è il mio regalo di compleanno: il tutorial che avrei voluto trovare quando ho provato a scrivere il mio primo widget per Plasma e mi sono perso nella documentazione. Costruiremo un piccolo widget per Plasma 6 con un modello in C++ e una vista in QML, cioè un pulsante che conta i clic: sono circa cento righe di codice, ma il progetto si compila, si installa, funziona nel pannello e ha perfino un test unitario. Lungo la strada incontreremo quattro concetti che chi sviluppa con Qt e KDE usa ogni giorno, cioè i segnali, gli slot, il pattern Observer e l’MVC. Il codice completo è su GitHub: ilmanzo/plasma-hello-counter. ...

2 ottobre 2026 Â· Andrea Manzini

Quanto codice stai testando ? (5)

🧭 Dove eravamo rimasti Bentornati a questa nuova tappa del nostro viaggio nella misurazione della test coverage sui binari precompilati! Nel quarto capitolo abbiamo introdotto funkoverage, uno strumento nativo ad alte prestazioni basato su eBPF, che sfrutta uprobe_multi per catturare l’ingresso nelle funzioni in GNU/Linux con un overhead inferiore al 2%. Fino ad ora, le librerie statiche venivano scoperte all’installazione analizzando i binari con ldd (tramite le dipendenze DT_NEEDED). Tuttavia, c’era un enorme elefante nella stanza: dlopen(). Alcuni dei software più complessi e modulari al mondo, come i web server con moduli dinamici, le applicazioni enterprise basate su plugin e i database multi-protocollo, caricano le proprie dipendenze a runtime, al volo. Poiché queste librerie non sono dichiarate nell’header ELF DT_NEEDED, risultano invisibili a ldd durante l’installazione. Oggi diamo la caccia a questo fuggiasco tecnologico: scopriremo come lo abbiamo risolto con una strategia elegante ed estremamente scalabile, la strumentazione eBPF JIT event-driven, e la metteremo alla prova sul campo con binari di produzione reali e non modificati come Nginx e OpenSSL! ...

11 agosto 2026 Â· Andrea Manzini

syscalln't đźš«

🤔 Cos’è una syscall, in pratica? Crediti immagine: Mike Norris via Pexels Ogni volta che il tuo programma legge un file, scrive su un socket o alloca memoria, a un certo punto deve chiedere al kernel di farlo per davvero. Quella richiesta è una syscall: il confine preciso e ben definito in cui il codice in userspace passa nel kernel. write(), read(), open(), mmap() non sono semplici funzioni di libreria, sono l’intero vocabolario che il tuo programma ha a disposizione per parlare con il mondo esterno. Tutto il resto — da fwrite a file.write() in Python fino a std::fs::File in Rust — non è altro che un wrapper attorno a questa manciata di punti di ingresso del kernel. ...

16 luglio 2026 Â· Andrea Manzini

Quanto codice stai testando? (4)

🧭 Dove eravamo rimasti Benvenuti al nuovo capitolo della nostra serie dedicata alla misurazione della copertura dei test per i programmi binari! Nella parte 1 abbiamo utilizzato il flag -cover integrato in Go: pulito e preciso, ma funziona solo se si possiede il codice sorgente e lo si può ricompilare. Nella parte 2 abbiamo usato valgrind e gdb per tracciare gzip senza toccarne il sorgente. Nella parte 3 abbiamo esplorato Intel PIN, un vero e proprio framework di strumentazione binaria dinamica: potente, ma dotato di un SDK C++ proprietario da circa 100 MB e limitato a x86_64. ...

13 maggio 2026 Â· Andrea Manzini
Buy Me a Coffee at ko-fi.com Buy Me A Coffee

This site does not use cookies or collect any personal data. © 2026 Andrea Manzini.