C++ Logger

Ultimamente non stavo più andando avanti con progetti di programmazione, ma, riprendendo, ho sentito la necessità di fare un buon sistema di logging basato sugli stream di C++.

In passato avevo già affrontato l’argomento, ma questa è stata una sfida per vedere se riuscivo a fare tutto da capo e da solo. Ce l’ho fatta, così ho deciso di pubblicare qui i risultati.

Come requisiti ho tenuto in mente la versatilità e la sicurezza per l’uso con i thread.

La versatilità l’ho ottenuta mediante la divisione per modulo (per esempio networking, audio etc…) e livello (errore, informazione…). A coordinare tutto c’è il Log Manager, una classe che coordina i vari log. È un singleton (ottenuto tramite la mia classe allegata), e ritorna degli stream, uno per ogni coppia modulo-livello (che insieme fanno il LogId), assicurandosi che queste istanze siano uniche. Inoltre dispone di una funzione per mandare direttamente in output una stringa, dove in più si può specificare anche il file e la linea, magari usando le macro __FILE__ e __LINE__.

Ho pensato come vari output lo standard output e error, in più un file e un’eventuale consolle interna al programma, configurabili per ogni log, con una questa priorità: LogId > Modulo > Livello > Configurazione globale.

Come dipendenze ha gli smart pointer e i mutex/recursive mutex di Boost. Comunque se preferite e potete, C++11 ha integrato tutti questi componenti nella libreria standard, quindi potete usarli da là, ma sinceramente non ho provato a farlo.

Mancano, volendo, una funzione per impostare la configurazione “grezza” tramite gli enum e l’operatore OR e un controllo nei metodi overflow, xputn e sync della classe LogStreamBuf che ritornino subito se l’output è disabilitato, senza fare movimenti di memoria.

Ho fatto un paio di test anche con dei thread e non ho avuto problemi.

Non mi metto a scrivere tutte le funzioni perché mi pare siano già abbastanza spiegate nell’header 😉 .

Rilascio il materiale sotto il pubblico dominio.

Download: cpp_logger.tar.gz

Ulteriore, deludente sperimentazione sul DSL-504T

Ultimamente non ho molto tempo da dedicare ai miei progetti perché sono stato assorbito da altre attività. Il miller è fermo ormai da inizio novembre, anche se spero in dei progressi durante le festività, e dei progetti a computer non ne parliamo neanche. L’unica cosa cui ho dedicato un po’ di tempo domenica scorsa e un po’ ieri, è stato cercare di riciclare il DSL-504T di cui avevo già parlato per usarlo almeno come router insieme all’altro che ho.

Il mio chiodo fisso è quello di avere un ruoter con l’ottimo firmware libero OpenWRT per godere di funzionalità altrimenti possibili solo con router di livelli più alti. Tra queste ci sono IPv6, supportato nativamente dal mio provider, ma anche DNS interni, configurazioni avanzate di ogni servizio dovute all’accesso completo al router.

Tempo fa avevo già cercato di usarlo autonomamente, sfruttando quindi il modem ATM incluso nel dispositivo, senza tuttavia avere successo. Forse perché, come ho scoperto solo ieri, le informazioni del wiki di OpenWRT si applicano solo alla seconda generazione del 504T, la revisione C, mentre il mio è una versione A1. … [Leggi il resto]

GNOME 3.8: gli screenshot

Finalmente, con un bel po’ di ritardo, mi sono preso del tempo per creare degli screenshot per far vedere GNOME 3.8 al buon Lantaca 😊 .

In realtà presto c’è già GNOME 3.10 ma ho voluto fare lo stesso la mia selezione di funzionalità, anche per spiegare un po’ meglio le novità che avevo segnalato precedentemente.

Torno a GDM

Da molto tempo in alcuni computer sto utilizzando LightDM anziché GDM.

Entrambi sono due gestori di display, ovvero permettono il login grafico e controllano il server X. Il primo è nato con lo scopo di essere leggero, permette una personalizzazione in HTML ed è diventato la scelta predefinita di Ubuntu già da alcune versioni, il secondo è quello ufficiale di GNOME.

Su Debian GDM3 è ancora il DM predefinito per chi ha GNOME, però mi sembrava lento all’avvio, perciò avevo deciso di cambiarlo.

Da tempo, però, pensavo di tornare a GDM perché non mi sembrava più così male come tempi d’avvio, inoltre non era stato rimosso dall’avvio e ad ogni boot veniva fuori il messaggio che era disabilitato.

Una cosa che poi mi seccava parecchio, riguardo LightDM, era che ad ogni aggiornamento dovevo ripristinare l’opzione di visualizzare la lista degli utenti anziché mettere lo username ogni volta, anche se magari esisteva un modo per fare file di configurazione separati dal resto.

Negli ultimi tempi ho avuto qualche problema con GNOME: non si montavano le unità di massa automaticamente e come ultimo bug non funzionavano più l’arresto del sistema o lo standby da parte dell’utente. … [Leggi il resto]

PCB Miller: idee sulla struttura

Ho colto l’occasione del ponte per buttare giù un progettino del PCB miller.

4_rendering_XZ.png

Questo è un rendering degli assi X e Z.

Ho fatto il progetto con Sketchup. Purtroppo è un software proprietario e non gira su Linux, ma visto che in futuro probabilmente dovrò usarlo per altri scopi, ho anche un po’ imparato a usarlo. Devo dire che è molto semplice da usare e per queste cose veloci è ottimo. Il rendering l’ho fatto invece con Blender.

Ho ripreso l’idea della Mantis 9.1 per l’asse delle Z. All’inizio volevo usare due ingranaggi ripresi dalla stampante, però avevo il problema della cintura dentata. Prenderne una compatibile con i miei ingranaggi su internet non era così semplice, avrei dovuto prendere anche tutto il resto. Non che non ne valga la pena ma lo spirito del progetto è un altro 😊 . … [Leggi il resto]