Piero V.

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]

GNOME 3.8: il panico

Chi usa Linux è abituato a fare gli aggiornamenti in blocco, magari anche quotidianamente, grazie all’ottimo sistema di pacchetti.

Personalmente uso Debian Unstable, che, nonostante il nome si dimostra molto stabile, in quanto il metodo Debian prevede di testare molto i pacchetti, prima di passarli da una suite all’altra. Perciò è quasi sempre tutto a posto: a volte però c’è qualche bug irritante, altre volte, quando meno te lo aspetti c’è un aggiornamento abbastanza visibile.

È questo il caso: oggi sulla mia macchina è arrivato GNOME 3.8, con mio conseguente straniamento.

Già dall’accesso, con tanto di animazione, ho cominciato a preoccuparmi 😁 .

Come riportano le note di rilascio, la più grande novità è senz’altro la rimozione della divisione in applicazioni e finestre: adesso bisogna cliccare un testo nella dock a sinistra per vedere le applicazioni.

Vista la rimozione dei pulsanti la barra di ricerca è stata posizionata al centro. Ma questa non è l’unica novità della ricerca: adesso mi piace molto di più: cerca contemporaneamente in applicazioni, impostazione e documenti. Questo c’era in parte già prima, ma è stato molto migliorato. … [Leggi il resto]