In questa retrospettiva riassumo quello che è successo nei mesi di giugno e luglio. Vita lavorativa Sono alle battute finali del progetto che coordino come Team Leader e responsabile del backend sviluppato per conto del CNR. Appena si concluderà mi prenderò un breve periodo sabbatico per studiare e portare avanti qualche progetto personale. Sono stato contattato da una grande associazione…
Praticamente nessuna attività personale al di fuori di quelle lavorative. Il progetto che sto guidando come team leader entra nelle fasi finali e ci avviciniamo all’ultimo rilascio pre-collaudo. Fatto un paio di colloqui conoscitivi con due nuove realtà a cui sono seguite due proposte: una relativa all’implementazione di un prototipo e l’altra per un servizio di consulenza…
Projects Nothing to report for this month unfortunately Owlcode.eu Published a couple of articles on the blog: Retrospettiva aprile 2026 Status update April 2026 Conclusion Another busy month due to work committments, so I hadn’t any time to dedicate to my personal projects. If you like RSS, subscribe to the feed See you next month🕺.
Pochissime attività personali in un altro mese sommerso da quelle relative al progetto che sto seguendo lavorativamente. Progetti Ho cercato di eliminare un po' di rumore nelle dashboard di GoatCounter sia per questo sito che per owlcode.it, filtrando alcune pagine di poco interesse. Ho trasferito owlcode.eu da GoDaddy a OVH. La procedura è stata velocissima e non ci sono stati problemi di…
Projects I eliminated a little bit of noise from my GoatCounter dashboards by filtering less interesting pages. I finally transferred this domain from GoDaddy to OVH. A concrete step to move my “assets” closer to home. I received another offer to sell Resting. The terms of the offer are always the same: 20 cents for every active user of Resting on Chrome Web Store. So currently the…
Mese totalmente assorbito dalle attività lavorative, le scadenze sono imminenti. Progetti Ho portato avanti qualche sviluppo su ts-converter, un’estensione per browser che ho scritto in elm. Ho aggiornato vari servizi ospitati dal mio server. Owlcode.eu Pubblicato due articoli sul blog: Retrospettiva febbraio 2026 Status update February 2026 In conclusione Come scritto in apertura il mese è…
Projects I’m working on ts-converter, a browser extension developed in elm, to complete it. I updated some services I host on my server. Owlcode.eu Published a couple of articles on the blog: Retrospettiva febbraio 2026 Status update February 2026 Conclusion A very busy month due to work committments, so I hadn’t any time to dedicate to my personal projects. If you like RSS, subscribe…
Projects I’m working on ts-converter, a browser extension developed in elm, to complete it. I took me some time to relearn the language syntax and to configure neovim to work with it. I started tracking visits of owlcode.it with goatcounter. I’m now using the browser extension offered by shiori to quickly save bookmarks. I moved my Joplin backup script from my main laptop to my small…
Progetti Continua il lavoro su ts-converter, un’estensione per browser che ho scritto in elm, per renderla completa. Ho usato del tempo per riprendere confidenza con il linguaggio e per mettere in piedi un ambiente di sviluppo minimamente comodo su neovim. Ho iniziato ad utilizzare goatcounter anche per tracciare le visite a owlcode.it. Ho iniziato ad utilizzare l’estensione browser…
Progetti Ho lavorato parecchio su Resting. L’obiettivo è concludere il passaggio dell’applicazione da knockoutjs a vue. Ho ripreso in mano ts-converter, un’estensione per browser che ho scritto in elm ormai anni fa per convertire velocemente timestamp numerici in date comprensibili. Voglio terminare le funzionalità che mancano per renderla un’estensione completa: la…
Projects I worked a lot on Resting with the goal of completing the conversion to vue. I recovered ts-converter, a browser extension I implemented a few years ago with elm to convert timestamps into readables dates. Now I want to complete it with the conversion from dates to timestamps. I start exploring vikunja, an Open Source alternative to Trello. Owlcode.eu Published a couple of articles on the…
This is a summary of the past year. Projects I spent most of the year improving my “homelab” management and self-hosting services for myself, my family and a small group of friends. I worked a lot on Resting with the goal of completing the conversion of codebase to vue. Due to the closure of Pocket, I started self-hosting a new service to manage my bookmarks: shiori. Open Source…
Vita lavorativa Ho collaborato con la stessa azienda di consulenza software per due clienti diversi. Progetti L’anno è stato dedicato in larga parte a migliorare la gestione del mio “homelab” dove gestisco i servizi per uso personale, della famiglia e di un piccolo gruppo di amici. Ho rilasciato un paio di versioni di Cambusa seguendo i consigli degli utenti che la stanno…
Projects I’ve finally implemented the list of articles grouped by year on this blog. What’s going on with Resting? I’m converting a base component, used in multiple parts of the application, in vue. Someone contacted me offering to buy Resting for 20 cent per user. I declined because this isn’t part of my plans. I noticed that Chrome active users jumped to 3000 in just a…
Vita lavorativa Il preventivo per l’estensione del gestionale è stato accettato ed è in lenta fase di sviluppo. Partito ufficialmente il progetto Spring Boot che seguirò come responsabile backend e team leader per i prossimi mesi. Come sempre in fase di partenza c’è un sacco di lavoro da fare. In questo progetto, oltre ai test d’integrazione con Testcontainers, proverò ad…
We want to reproduce the MongoDB query below db.presence.aggregate( [ { '$group' : { '_id' : { 'date' : { $dateToString: { format: '%d-%m-%Y', date: '$date'}}, 'sensorId' : '$sensorId', }, count: { $sum: 1 } } } ]); How can I use the function $dateToString in Spring Data ? Let’s say we have a collection presence with documents defined as below. @Document(collection = 'presence') public class…
Projects The repository of pommy has been migrated from Github to Codeberg. I want to migrate all services executed by my nas Qnap to one of my mini-PCs. The idea is to dismiss the qnap in the future and switch to something more open. The first step is moving all services to a local debian server and maintain the qnap only as storage. At the moment I have moved the backup of Cambusa and installed…
Vita lavorativa Ho lavorato qualche giornata sul progetto Micronaut per introdurre una nuova funzionalità. Ho preparato un preventivo per estendere le funzionalità del gestionale che gestisco per un mio cliente storico. Un nuovo progetto è in partenza e mi occuperà nei prossimi mesi. Sarà sviluppato principalmente con Spring Boot e PostgreSQL. Il resto del tempo è stato dedicato allo studio e a…
Vita lavorativa Concluso il lavoro con Micronaut. Ho usato il framework per circa un anno e l’esperienza non è stata esaltante. Nonostante sia alla versione 4.x, l’ho trovato immaturo, con alcune mancanze e qualche problema. Forse vuole offrire troppe funzionalità out-of-the-box e questo diventa difficile da gestire, per cui sono incappato in problemi anche in scenari semplici. Stesso…
Projects Some news about Resting: I have decided to stop my test project on creating a web-extension with knockoutjs, vue and vite. I’m stuck on importing a knockout file into vite. So I have decided to proceed with the porting to vue and then consider introducing vite into the project. I discovered that the Resting website is no longer indexed by Google. I tried to request a new indexing…
I have a collection of measures and I want to group them by zone in an array containing the date and legnth of movement. Below is the MongoDB query. // model { '_id' : ObjectId('62ed153e70c200f3cfe0d06b'), 'sensorId' : 'sensor-1', 'zone': 'zone-1', 'date' : ISODate('2022-08-01T23:00:10.000Z'), 'length' : 18.3 } // query db.getCollection('measure').aggregate([ { $sort: { date : -1 } }, { $group:…
Projects I’m using Goatcounter to collect visits to this site. In the last month I’ve moved from using js script in page to analyze the access log files of Nginx on the server. In the next future I’m going to write an article to document the process. I want to introduce vite in Resting, so I’m working on a little example to understand what are the difficulties: create a…
Vita lavorativa Procede il lavoro sul progetto sviluppato con Micronaut. Progetti Seguendo quanto fatto per Resting, ora anche per questo sito non utilizzo più lo script javascript in pagina per raccogliere su Goatcounter le visite anonime agli articoli, ma analizzo i log di accesso di Nginx lato server. Per valutare la complessità di introdurre vite in Resting sto lavorando ad un piccolo esempio…
How can I configure a specific timezone in Logback ? This is possible using the second parameter of the date pattern function %d{}. Below an example configuring timezone Europe/Rome. <appender name='Console' class='ch.qos.logback.core.ConsoleAppender'> <layout class='ch.qos.logback.classic.PatternLayout'> <Pattern> %d{HH:mm:ss.SSS, Europe/Rome} %-5level %logger{0} - %msg%n </Pattern> </layout>…
How can I pass a JVM argument, such as user.timezone, to an application run with Maven ? I need to use spring-boot.run.jvmArguments parameter. mvn spring-boot:run -Dspring-boot.run.jvmArguments='-Duser.timezone=UTC'
Dopo la pausa per le vacanze ecco la retrospettiva della prima metà dell’estate. Vita lavorativa Procede il lavoro sul progetto sviluppato con Micronaut. Progetti Terminata la modifica delle modalità di tracciamento delle visite al sito di Resting. Da sempre utilizzo Goatcounter; ora non sfrutto più lo script javascript nella pagina html, ma sono passato ad uno script di import schedulato…
How can I limit the maximum number of log files archived by Logback ? Solution We have to use <maxHistory> tag of TimeBasedRollingPolicy. The unit (monthly, daily, hourly, etc) is extracted implicitly from the date format defined in <fileNamePattern>. <appender name='RollingFile' class='ch.qos.logback.core.rolling.RollingFileAppender'> <file>application.log</file> <encoder…
Vita lavorativa Procede il lavoro sul progetto sviluppato con Micronaut. Scoperta di questo mese: Micronaut gestisce le chiamate web tramite netty che utilizza un modello Event Loop. Il framework assume che il codice eseguito dalla chiamata non sia bloccante, in quanto lo gestisce direttamente su thread del pool Event Loop. Nel caso in cui si debba gestire una chiamata bloccante (un accesso a…
Un mese di aprile corto per via delle festività di Pasqua e di vari ponti festivi. Vita lavorativa Dal punto di vista lavorativo lavoro intenso sul progetto sviluppato con Micronaut, ci stiamo avvicinando al rush finale. Progetti La landing page del progetto Resting non è più ospitata da Github Pages, ma direttamente da un mio server. Ho iniziato a giocare con Kuma Uptime. L’obiettivo è…
Vita lavorativa Dal punto di vista lavorativo il mese è trascorso interamente lavorando sul progetto sviluppato con Micronaut. Contributi Open Source Qualche tempo fa ho ricevuto una seconda donazione per il progetto Resting. Come la volta precedente ho deciso di reinvestirla aiutando un altro progetto Open Source di mio interesse: per un anno sono diventato socio sostenitore di Codeberg.org, la…
Vita lavorativa Continua la collaborazione sul progetto sviluppato con Micronaut. Progetti Ho svolto alcune attività su Resting: upgrade a Vue 2.7 (in un lento percorso di passaggio alle più nuove versioni), portato l’intero pannello della response da Knockoutjs a Vue. Contributi Open Source Altro contributo a forgejo in fase di convalida. Owlcode.eu Nessun articolo pubblicato sul blog: In…
Prima retrospettiva del nuovo anno. Vita lavorativa Continua la collaborazione sul progetto sviluppato con Micronaut. Progetti Ho portato avanti un paio di attività di porting da Knockout.js a Vue in Resting. Lavori in corso anche su Cambusa: su suggerimento arrivato direttamente dalla base utenti, sto introducendo la gestione della scadenza dei prodotti in dispensa. La registrazione…
Appuntamento tradizionalmente dedicato a fare il punto su cosa è successo quest’anno. Vita lavorativa Ho collaborato principalmente con due clienti di vecchia data. Nessun nuovo cliente acquisito. Sono stato contattato parecchie volte nel corso dell’anno ma esclusivamente da recruiter e agenzie. Dal punto di vista tecnologico ho iniziato ad utilizzare il framework Micronaut. Progetti…
Enum is a good structure to define a set of limited and well defined values inside the domain of our application. They could help to prevent impossible states in our codebase. The scenario Let’s use a note taking web application as an example to show the possible ways to serialize and deserialize an eum value. We are going to implement it using Spring Boot 3.3.x and MongoDB. We define a Type…
Vita lavorativa Il progetto sviluppato con Micronaut su cui sto lavorando procede a spron battuto e sta assorbendo gran parte del mio tempo in questo periodo. Rinnovato il contratto di manutenzione annuale con un mio cliente. Progetti Ho pubblicato una nuova versione di Resting, la v1.10.0. Questo rilascio contiene una funzionalità che mi è stata richiesta più volte: la possibilità di esportare un…
A new version of Resting has been released. What’s new The export functionality has been improved. Now it’s possible to export a folder or a single bookmark using the related menu action. Resting is a visual HTTP client browser extension available for Chrome and Firefox focused on debugging, testing and inspecting HTTP requests staying light and uncluttered.
E' stato un mese fortemente dedicato alle attività lavorative. Vita lavorativa Quando un nuovo progetto parte si porta dietro una grossa mole di lavoro iniziale, ho speso parecchie energie. Un cliente mi ha contattato per un problema con un’estensione per browser che abbiamo utilizzato all’interno del suo gestionale per accedere velocemente a cartelle e file salvati sui dischi di rete…
Conclusa la parentesi estiva, parecchie attività sono ai blocchi di partenza. Vita lavorativa Sarò impegnato nello sviluppo di un backend in Java con framework Micronaut. Studio Ho creato un piccolo progetto Java Spring Boot per esercitarmi sulla serializzazione/deserializzazione delle enum in un’applicazione che serve API Web con un database MongoDB. Qui il repository, con alcuni esempi su…
Let’s try to understand how to use DateOperators in a Spring Data MongoDB project using an example use case. Scenario We have a collection of sensors installed in various places around the world. Sensors communicate their presence and activity some times per day. We want to count the number of activity of sensors located in Sydney aggregated by the day of month. How can I implement this…
Spring Boot adds some useful extensions to Logback to help with advanced configuration. One of this extensions is the tag <springProfile> that permits to define a conditional part in the log configuration depending from the active spring profiles. The only requirement to use these extensions is to name the log configuration file logback-spring.xml instead of logback.xml Example We want to add a…
Let’s say we have init locally a new git repository and we have done the first commit. Immediately we discover that we have made a mistake. How can we revert the first commit of a repository ? If we try the command git reset HEAD~ we will obtain an error: the revision is unknown. This is because there isn’t a previous commit to come back. So the solution is to execute the commmand:
There are a lot of useful scenarios in which we could prefer using a different git identity depending on the repository we are working on. Some examples: Different accounts for personal and work projects. Clients request specific account for their project, a normal situation for a freelance. Using a different account for every Git platform provider. We can use gitconfig and the ifinclude option to…
Ultimi scampoli d’estate, a breve si ritorna a pieno regime; nel frattempo sfrutto il tempo disponibile per studiare. Vita lavorativa Ho iniziato un progetto per prendere dimestichezza con il framework Micronaut, a breve potrei iniziare ad usare questa tecnologia per un cliente. Progetti La cosa bella di un mio vecchio posto di lavoro è che tutti i progetti su cui lavoravo erano rilasciati…
Una retrospettiva di due mesi per via delle tanto attese ferie estive 🏖️. Vita lavorativa Ho concluso lo sviluppo e il rilascio di una nuova versione del gestionale scritto su misura per le necessità di un cliente, progetto iniziato ormai tre anni fa. Progetti Ho portato avanti alcune attività di contorno, che definirei di marketing, su Resting: aggiornato il README di progetto aggiungendo uno…
Often I have to move between different branches in my daily work and I always have a hard time remembering the name of last branches which I am working on. A mental noise I avoid gladly. I discovered that it is possible to sort the list of branches by some criteria, and the most interesting for my case is by commit date. This is the command to set it in the git configuration.
It is very common for me, as a freelance, to work on software existent since many years and to collaborate with teams with different coding rules. It is not uncommon to work on projects that haven’t a clear coding style policy. In the latter scenario it is particularly important to avoid the introduction of accidental coding style rules. Eclipse IDE permits to customize very well the actions…
This is a pill article for keeping memory of a Spring Boot option to use with Maven. Using task spring-boot:run it is possible to run a Spring Boot application with Maven in a quick way. Sometimes we want to run the application with a particular Spring profile or a set of profiles. We have to use the following JVM argument: spring-boot.run.profiles A realistic complete example mvn spring-boot:run…
xmllint is a command line tool to work with XML files. It permits a lot of operations such as formatting and validating XML against a schema. You can install it in Ubuntu through the libxml2-utils package. sudo apt install libxml2-utils Format and beautify XML on standard output with xmllint --format laptop-unformatted.xml Validate an XML using a schema with xmllint --schema laptop.xsd laptop.xml