FatturaElettronica for .NET v3.4.11

Fattura Elettronica for .NET v3.4.11 was released on NuGet today. The Fattura Elettronica project allows for the fixes a missing validation point. See the changelog for details (Italian). validation and de/serialization of electronic invoices following the Italian Revenue Agency standards.

October 27, 2023

LINQ DistinctBy on a property for .NET Standard and older .NET versions

Today I learned how to implement a custom Enumerable.DistinctBy extension method that returns distinct elements from a sequence according to a specified key selector function. .NET 6 and its successors have the method built in within LINQ, but I needed it in a .NET Standard 2.0 class library, so I was out of luck. My implementation is simple, not different from others I found online, and should also work fine with old .NET releases. Here it is: ...

October 25, 2023

A few late book reviews

I’ve been reading a few books throughout the summer and needed to be more active in reviewing them here. Rather than writing five individual posts in a row (too lazy for that), I will catch up with this single post. Born to Run 2 I’ve been back to running after a long hiatus, and this book helped me get back on track with the right, lightly-hearted approach. The fundamentals are solid (the barefoot-like technique is the way), the 90-day training plan is a good platform, the nutrition hints are remarkable, and I appreciated the injury-treatment segments. There’s too much chitchat for my liking, though, with many stories, anecdotes, and non-technical, gospel-like content. Some chapters are unattractive to the experienced runner (running with dogs, the music while running debate, and training with scooters?). This book targets the newcomer and the veteran runner switching to the barefoot technique. The first book in the series, Born to Run, was the commercial hit introducing barefoot running to the masses. This one is trying to be both a sequel and something different that can live independently. Meeting all these goals was a complicated bet. Authors: Chris McDougall, Eric Orton. ...

August 26, 2023

rsync with a different user

Today I learned how to rsync with a user different than the one connected to the remote. Why would one want to do such a thing? The data I need to download from that server is owned by ‘backup,’ a different, service-only user. I wanted to avoid going the change-permissions slippery route and allow my user direct access to the data. Looking at the rsync documentation, I learned about the nifty --rsync-path=PROGRAM option: ...

August 23, 2023

The Legacy of Bram Moolenaar

Quoting Jan van den Berg: This weekend we learned that Bram Moolenaar had passed away at the age of 62. And this news affected me more than I expected. Like so many: I did not know Bram personally. But I’ve been using a tool made by Bram for more than half my life — at least weekly, sometimes daily. That tool is a text editor. The best one there is: Vim. ...

August 11, 2023

Cerberus v1.3.5 released

Thanks to funkyfuture’s tireless work, yesterday we released version 1.3.5 of Cerberus, the data validation package for Python. This release officially supports Python 3.10 and 3.11, fixes a few issues, and proudly displays a new documentation theme which I dig, and I hope you’ll do the same. As usual, see the changelog for details.

August 10, 2023

FatturaElettronica for .NET v3.4.10

Fattura Elettronica for .NET v3.4.10 was released on NuGet today. The Fattura Elettronica project allows for the validation and de/serialization of electronic invoices following the Italian Revenue Agency standards. This release adds a missing validation point. See the changelog for details (Italian).

August 3, 2023

The Medieval Monks Who Lived on Top of Giant Pillars

Imagine, for a moment, that you are walking along a dirt road in the seventh century Middle East. The sun is hot, the air is dry, your feet are tired. It’s been a long journey, by boat and foot, from your home in Constantinople to where you find yourself now: outside of the walls of the mountainous river city of Antioch. In the bright sunlight, you strain your eyes to catch a distant glimpse of the sight you’ve come all this way to see – and then suddenly, you do. A bright stone pillar, stretching as tall as a church dome with an unsteady-looking wooden platform; and atop it a tiny, bedraggled, flinty old man. ...

August 3, 2023

Events 0.5 released

Today I released Events 0.5. Thanks to Cailean Parker’s contribution, we added support for the __getitem__ dunder (aka Python magic method.) This allows the calling of events from strings, thus enabling dynamic events. For instance: events = Events(tuple(f"on_{i}" for i in range(5))) for i in range(5): events[f"on_{i}"](i) The C# language provides a handy way to declare, subscribe to and fire events. In C#, an event is a “slot” to which callback functions (event handlers) can be attached - a process referred to as subscribing to an event. Events adds this mechanism to Python. It originated as a side experiment (I was a C# transfugee then) that I later adopted as an Eve dependency. It slowly got some traction besides my projects. Read more on the project’s GitHub page. ...

July 31, 2023

I won the Microsoft MVP Award

I’ve just received news that I’ve been awarded the Microsoft Most Valuable Professional (MVP) Award in the Software Development category. It is an honor and a pleasure to be renewed for the eighth time. Being a Microsoft MVP means a lot to me; I remember how intimidated I felt when I met MVPs at various events and how totally out of reach the title seemed for someone like me. Besides my everyday work, I kept doing the things I loved: ...

July 6, 2023