Carmine Zaccagnino

My name is Carmine Zaccagnino and I write some code. If you’re interested in hiring me as a freelance developer or consultant, email me at In some rare occasions, I also write sentences in natural languages. Even though I am Italian this blog will only contain English when it comes to natural languages. I can make no such guarantees when it comes to programming languages, even though the focus of this blog will certainly be on Flutter. Very similar to this blog, but with some obvious content length differences, is my @carminezacc Twitter account. You can find the articles you can find in this blog and other (older and mostly about Web development) articles on my Medium page, which is all 100% outside the Medium metered paywall. I’d really like to know what you have to say about this blog or my work in general, and you can let me know by sending me an email at or by just sending me a DM on Twitter.


Like many of you, I have learned about many web and mobile frameworks over the years and, when it comes to mobile especially, something was clearly missing: there was no simple way to build fast cross-platform mobile apps that also gave me the low-level access of native apps. Flutter is built by Google with support from Apple themselves, gives a simple way to run native Java/Kotlin and Objective-C/Swift code and it supports all of the latest innovation in Android and iOS and produces apps that perform very well.

Linux, Open-Source, System Administration and DevOps

Linux and open-source are topics that I care about deeply, and will certainly find space in this blog at some point. I really enjoy using and developing system administration tools, and I often roll my own Linux server for personal projects even when it’s economically disadvantageous when compared with other solutions just for the fun of it (and the control that comes with it).

My Relationship with Linux

I have been running Linux on my main PC for several years now.

The Beginning

The first Linux distribution I ever tried running as my main operating system was Mint. Then for a while I was mostly running Ubuntu and Debian both on servers and PCs (about 5-6 years from first approach to vanilla Debian itself to the end of my exclusive love of Debian-based distributions). I was unwilling to leave the apt package manager, the rock-solid Debian stability and the overall setup of Debian system, including the location of logs and configuration files and its behaviour in general: it was what I was used to and I was afraid to leave it.

Unlocking the Potential

That ended when I felt like I needed more bleeding-edge software and heard about openSUSE, zypper and YaST. I felt like I could keep control with some easy to use tools while I got used to the way openSUSE worked in general. For about a year that was enough to keep me using openSUSE (and I still believe zypper and YaST are awesome), then, like many Linux users, I went into a distro-hopping adventure: that transition to openSUSE had completely removed all of the inertia and insecurity that stopped me from trying new distributions.

Hopping Here, Hopping There

During that time I tried Arch, which was a bit too different from anything I’d tried before to stick, even though I really liked its wiki, and I might come back to it in the future. I also tried Gentoo, but found the need to do so much of the hard work of optimizing compile option myself too time-consuming and not worth the effort. Even if not on bare metal, I also tried some of the BSDs, finding the ports-pkg system overall acceptable. The old school init system and overall setup intrigued me, but didn’t really feel like something I’d want to use everyday.

Settling Down

What I ended up settling on for my desktop distribution is Fedora, starting from when version 25 had just come out, mostly because I was intrigued by Wayland’s promise of burning down all of the limitations of the anachronism X11 had become and Fedora’s very unique hybrid feel between rolling and fixed releases and frequent kernel updates. It was also partially because I had tried CentOS earlier and had started deploying that on my servers instead of Debian. I love Fedora now, and feel like Red Hat is more trustworthy and open than some other companies that are heavily invested into open-source and Linux: they sponsor CentOS, which had been for years pretty much the legal pirate version of RHEL, and aren’t doing anything to stop anyone from using, for free, the same operating system they are selling to companies for a significant amount of money. Obviously buying RHEL is mostly about receiving support, but letting anybody run the same software for free is still commendable.


Everyone says that contributing to open source is a great thing to do for developers of all levels of expertise, and it’s really true: if you’re a beginner, it’s an easy way to get started writing code that does something useful without having to think about what it can be: it already exists, you just need to improve it. For everyone else, it’s a nice and relaxing way to code on someone else’s terms and to break the boredom that is usually associated with working on the same thing over and over again (for me, at least): don’t change jobs, change your hobbies.

The first thing to do is to find projects that interest you.

One thing peaked my interest from Red Hat lately: their Stratis storage management tool, which promises to give an easy way to manage a machine’s storage, without having to worry about RAID levels or scaling issues: you just add or remove disks to be used for data or redundancy in a pool and mount the virtual device you created. The small contributions I made to its CLI tool are among the very few open-source contributions documented on my main GitHub profile, given that I contributed some projects that bypass GitHub and to some with other e-mail addresses.

The Web

Web development is also something that will be discussed in this blog as there really is a lot to say about it, both on both the front-end and back-end sides of things, with a focus on back-end frameworks.

I used to write a lot more about Web development, especially back-end frameworks, and you can find some of my (worst) stuff on my Medium. Maybe there will be some Web development stuff over here too. As always, you can send me an e-mail and let me know whether or not you’d appreciate that, there’s no point in writing what I’d want to read if noone else cares about it.

Posts by Carmine Zaccagnino

Advanced Flutter Networking Part 1: Uploading a File to a REST API from Flutter Using a Multi-Part (form-data) POST Request

My Flutter book is pretty light on advanced HTTP networking topics, focusing instead on giving a more well-rounded approach that, when it comes to networking, explains how to use the http networking package for basic requests, shows an example of an app that makes GET requests, and then goes a bit more specific with Firebase.

read more

Building a Full-Featured Python CLI Tool With argparse

This post is the third out of four in a series of posts about automating everyday tasks using scripting languages. The first one was an introduction to the hypothetical problem of having to take images divided into subfolders and dump all of them in one folder while altering their name and adding text over them to know what folder they came from (hypotheticall revealing the location where the pictures were taken) to solve and a first simple solution using Bash and ImageMagick.

read more

Programming Flutter

Programming Flutter: Native, Cross-Platform Apps the Easy Way is the book I wrote about Flutter with the Pragmatic Bookshelf. You can find it and buy the eBook on the official Pragmatic Bookshelf website.

read more

About Me

My name is Carmine Zaccagnino and I write some code. If you’re interested in hiring me as a freelance developer or consultant, email me at carmine@carminezacc.

read more