Blog

  • Past Year Review (2022)

    The end of the year has arrived, and it’s time to look back and sum up all the good and bad things that have happened in the year. It’s a great exercise to review each achievement and to focus on how to get better.

    /

  • Server Rack Pet-Project: Cabling

    After having configured the firewall, I needed to have one extra cable to plug it to the switch in order to connect my laptop to the network. (Un)fortunately I ran out of spare ethernet cables, so I took advantage of this to learn how to make one.

    /

  • Server Rack Pet-Project: Firewall

    What server rack project would it be without a firewall?! I got myself another bargain deal with a WatchGuard Firebox XTM25. I should have enough fun with some Stateful Packet Inspection and Threat protection (such as DoS attacks, fragmented & malformed packets, blended threats, and more), and if I manage to reactivate a WatchGuard subscription I…

    /

  • Server Rack Pet-Project: NAS

    After mounting and finally managing to have a UPS working, I can guarantee that a NAS will “always” be powered on without disrupting the data availability… I started in a very naive way by plugging my HDD into the Pi, then one of the two almost broke and I had to run take shelter and…

    /

  • Server Rack Pet-Project: KVM

    It happened already a handful of time that the Raspberry Pi are not reachable in the network, so I need to have a proper way to access them directly. The solution would be a KVM switch, a little overkill for my Pis, but I’m looking for something more flexible.

    /

  • Server Rack Pet-Project: UPS (Part 2)

    After quite a lot of suffering and sweating with my new UPS I managed to finally have it working.

    /

  • Server Rack Pet-Project: UPS (Part 1)

    Now that I have something that is network-connected and which I could use finally, it is time to make sure it has continuous electricity to keep things stable. I picked another deal and managed to get an APC Smart-UPS SC450, with almost new batteries (just 6 months old).

    /

  • Server Rack Pet-Project: Switch

    After having done a little tweak to the rack, I started tackling the networking side. I bought a network switch, I have already 2 Raspberry Pi, so finally, I can connect them to the network, then let them do something (not yet sure what though). Because those Pis without connection they’ll be useless.

    /

  • Server Rack Pet-Project: Wheels

    Now that I have got my cool rack assembled I noticed the mess it made on my floor. Unfortunately, I was so busy cleaning it right away, that I didn’t take any pictures of it. 26kg of an empty rack, which most likely is going to be something like 40kg once filled, on my parquet……

    /

  • Server Rack Pet-Project: Initial Assembling

    Today I’ll be covering the first phase of my new pet project: a server rack. So let’s start with ordering a new rack. Even though most of what I’ll put inside will be second-hand material to save some money, for the rack itself I chose it to be brand new. I ordered this:

    /

  • Server Rack Pet-Project

    This will be an unusual pet project compared to the one I’ve always done as a programmer. Since I started to get more involved in the infrastructure side, and later in cloud-native, I was always happily dealing with server configuration, process optimisation, provisioning, infrastructure-as-code, and so on.

    /

  • Past Year Review (2021)

    It’s again that time of the year, the end of it, the moment where we stop, we look back and check how we did. Have we been able to do all the things we wanted to do? Of course not. But what matter most is what has been achieved. Let’s abandon the regrets and let’s…

    /

  • Save yourself from a disaster #10: Play with Providers

    This is the tenth part of the series Save yourself from a disaster: Redundancy on a budget. Try to experiment and find the right technology.

    /

  • Save yourself from a disaster #9: Disaster Recovery Plan

    This is the ninth part of the series Save yourself from a disaster: Redundancy on a budget. How are you going to behave in the event of a disaster? You’ll start running around waving your hands up in the air? Ok, stop, breathe, and try to follow these advices.

    /

  • Save yourself from a disaster #8: Manual Configurations

    This is the eighth part of the series Save yourself from a disaster: Redundancy on a budget. Snowflakes servers are our enemies, we should avoid them like the plague. Our best allied are fail-proof reproducible steps, even better if coded in an actionable code, like Infrastructure as Code. We went through many steps, are you…

    /

  • Save yourself from a disaster #7: Billing Impact

    This is the seventh part of the series Save yourself from a disaster: Redundancy on a budget. In this post we will check about the “hardest” part of all of it, the money coming out of our pockets. So, let’s crunch some numbers.

    /

  • Save yourself from a disaster #6: Redundancy of DNS

    This is the sixth part of the series Save yourself from a disaster: Redundancy on a budget. How can we make sure our website is always available and not going down when a node is offline? We could do mainly 2 things: Secondary DNS Manual Switch

    /

  • Save yourself from a disaster #5: Redundancy of Web Servers

    This is the fifth part of the series Save yourself from a disaster: Redundancy on a budget. How can we make sure our second most important asset is safely secured in case of a disaster? We could mainly 3 things: Duplicate VM Docker Kubernetes

    /

  • Save yourself from a disaster #4: Redundancy of Storage

    This is the fourth part of the series Save yourself from a disaster: Redundancy on a budget. How can we make sure our second most important asset is safely secured in case of a disaster? We could mainly 2 things: Distributed Storage Backups

    /

  • Save yourself from a disaster #3: Redundancy of Database

    This is the third part of the series Save yourself from a disaster: Redundancy on a budget. How can we make sure our most important asset (which is the DB) is safely secured in case of a disaster? We could do mainly 2 things (and you better do both of them): Backups Redundancy

    /

  • Save yourself from a disaster #2: Secure the Storage

    This is the second part of the series Save yourself from a disaster: Redundancy on a budget. How can we make sure our second most important asset is safely secured in case of a disaster? We could mainly 2 things: Distributed Storage Backups

    /

  • Save yourself from a disaster #1: Secure the Database

    This is the first part of the series Save yourself from a disaster: Redundancy on a budget. How can we make sure our most important asset (which is the DB) is safely secured in case of a disaster? We could do mainly 2 things (and you better do both of them): Backups Redundancy

    /

  • Save yourself from a disaster: Redundancy on a budget

    What can we learn from the latest major cloud incident (ie. burning OVH datacenter)? Do not put all your eggs in one basket! The only certain thing is that it’s not a matter of IF there’ll be a disaster but rather WHEN, so better be not caught off guard. I’m running a bunch of very…

    /

  • Bye-bye LastPass, Welcome KeePass(X)

    LastPass has recently decided to limit their free account to allow only 1 active device (computer or mobile) per account. In the lights of this debatable decision, many people have decided to move away from it.

    /

  • Past Year Review (2020)

    The end of the year has come, so it’s time to look back and sum up what has happened and what has been achieved. Let’s say that everyone would like to forget 2020, what a year! 2021, let’s jump into the unknown. Following my previous New Year’s Resolution, I’ve continued with the same kind of…

    /

  • Learning Touch Typing

    I’ve been typing with two fingers for over 20 years and didn’t bother much about my typing skills. In fact, I was a pretty average typist with a rate of ~39wpm with pretty good accuracy of 96%, at least it was fine by me…

    /

  • Why I Stepped Down as CTO

    I left Skuola.net as CTO to join Radical (formerly BAGBNB) as Engineer. TL;DR I jumped boat, changed role, changed tech stack, I’m enjoying a bit more of tranquillity, I have a bit more family time, I got my (dev) passion back! Way to go folks ? Long Story I’m just sharing some reasons for this…

    /

  • Tech Challenge Explained

    The tech challenged I’ve used in Skuola.net was designed in order to be submitted by any developer, regardless the experience level or the programming language. So the easiest choice was to do an algorithm test, and amongst the infinite list of test you can find online, I’ve picked one based on anagrams. Another self-imposed constraint…

    /

  • Book Review: Domain-Driven Design Quickly

    This is my summary of the book Domain Driven Design Quickly, I’ve highlighted the main concepts as a reference.

    /

  • Past Year Review (2019)

    It all started as a New Year’s Resolution. This year I wanted to make it happen for real, and, by knowing myself pretty well, I had to put it to a whole new level in order to make it to the end. Moved with all the good intentions of my last certification (AWS Solutions Architect)…

    /

  • Practical Estimates

    It all started while working as CTO (first-time though) at Skuola.net and attending the conference Codemotion Rome 2019, I was listening to Daiany Palacios talking about hers “The trap of averages. How to avoid it in software development estimates” in particular about doing estimates using the Montecarlo method. That moment something triggered in me, like…

    /

  • What kind of shaped professional are you?

    The most common one is the T-shaped professional or more correctly T-shaped skills since we’re talking about abilities. The original term was coined by Tim Brown, Chair of IDEO. The vertical bar of the letter T represents the depth of the skills in a single field, instead, the horizontal bar is the ability to collaborate…

    /

  • The Tricky Definition of Done

    Most of the times the word “done” has a very subjective meaning, especially when we are in a business context. It can be confusing understanding if a task or an activity has been completed or not. I’ll try to define the meaning of done (in a business context), or at least what it should be.…

    /

  • The practicality of the Eisenhower Matrix

    The Eisenhower Matrix helps you decide and prioritise tasks based on urgency and importance. In fact, it is also referred to as the Urgent-Important Matrix. If you find yourself fire-fighting throughout the day, then you should apply this concept to improve your productivity.

    /

  • Performance Optimisation, my first talk ever

    [toc] Performance Optimisation from Fabio Cicerchia At the end of 2016, I gave a talk at the PUG Roma meetup talking about web performance. Despite my expectations of a first-time shy speaker, the room was packed with more than 50 attendees.

    /

  • Being really agile, Being really smart

    The Agile Manifesto has the following 4 core values: Individuals and interactions over processes and toolsthis means to communicate, a lot. Working software over comprehensive documentationif you are working on something that is not working properly why bother documenting what’s doing (and maybe it’s even going to change). Also, the customer will use / buy the software, not…

    /

  • Branching Model: clean-up those repos

    Usually, most rookie developers don’t use a VCS (Versioning Control System), like SVN or GIT, in this post I won’t talk about the benefits of using one. This post is dedicated to who are already using a VCS without using a branching model. So, what’s a branch? A branch is a separate development line, where you or your…

    /

  • Versioning Numbers, make them meaningful

    The version number itself, and more generally the way you manage it, is most of the time underestimated because it’s considered something trivial.It is used to give a chronological order to the software releases and it conveys the useful information about the state and the impact of the release. I can think only of two major way to assign a version number:…

    /

  • Retrieve JS Events: how to get all of them

    I was trying to face an apparently huge problem, collect all the events bound to the DOM elements. Then I realised that the main obstacle was the browser, yes the browser.Because of the way the browser manage the events. So I started my research about it, nothing came from Google or StackOverflow. This answer made me think and…

    /

  • Browser Fingerprinting: There’s no place where you can hide

    The EFF, The Electronic Frontier Foundation, did research about the users’ privacy and how it is possible to identify the user in a quite unique way.The concept is based on gathering as much information as possible, like user agent (browser and version), resolution, plugins installed, timezone, language, and so on to create a message digest to identify the user /…

    /

  • [ITA] Gli eventi onMouseEnter & onMouseLeave su tutti i browser

    Utilizzare gli eventi onMouseEnter & onMouseLeave non solo su Internet Explorer non sarà più un problema! Basta una funzioncina javascript e prototype. function extendMouseEvents(e) { var elem = e.element(); var target = e.relatedTarget; var p = stop = null; if (!target || (elem !== target && !target.descendantOf(elem))) { if (target && elem.descendantOf(target)) stop = target.childElements();…

    /

  • [ITA] Rimuovere le entità HTML (unhtmlentities)

    Ecco un modo veloce per rimuovere tutte le entità html da una stringa: function unhtmlentities($string) { $string = preg_replace(‘~&#x([0-9a-f]+);~ei’, ‘chr(hexdec(“\\1”))’, $string); $string = preg_replace(‘~&#([0-9]+);~e’, ‘chr(“\\1”)’, $string); $trans_tbl = get_html_translation_table(HTML_ENTITIES); $trans_tbl = array_flip($trans_tbl); return strtr($string, $trans_tbl);} questa funzione sostituisce sia le entità numeriche che quelle testuali.

    /

  • [ITA] L’history di linux è troppo corta? Allungala!

    Come aumentare la lista dei comandi eseguiti nella shell è un’operazione rapida e indolore, basta aggiungere 2 righe al vostro file ~/.bashrc. export HISTSIZE=9999export HISTFILESIZE=999999 Il valore di HISTSIZE determina il numero di comandi da salvare nell’history. Una volta che uscite dalla sessione in cui state lavorando i comandi più utilizzati verranno salvati nel file specificato nella variabile HISTFILE (il…

    /

  • [ITA] Convertire un database SQLite 2 a SQLite3

    Ecco a voi un piccolo comando da lanciare nella vostra linux shell per convertire un database SQLite 2 alla versione più recente ovvero la 3: sqlite vecchio.db .dump | sqlite3 nuovo.db Un comando rapido ed utile che vi eviterà di dumparvi tutto a mano e poi reimportare nel nuovo…

    /

  • [ITA] Ripristinare aptitude fixando il lock di /var/lib/dpkg/

    Vi è mai capitato che quando digitate il vostro bel comando “apt-get …” la shell vi risponda “picche” dandovi questo messaggio: E: Impossibile ottenere il lock /var/lib/dpkg/lock – open (11 Risorsa temporaneamente non disponibile)E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it? Se si, ora vi do il metodo per risolvere…

    /

  • [ITA] Come aggiungere “www” all’url del vostro dominio

    Nel post precedente abbiamo visto come rimuovere il www dall’url, ora invece vediamo come aggiungerlo   Create il file “.htaccess” nella root del vostro web server sempre che non lo avete gia e inserite le righe riportate qui sotto: RewriteEngine On RewriteCond %{HTTP_HOST} !^www\.miosito\.it$ [NC] RewriteRule ^(.*)$ http://www.miosito.it/$1 [R=301,L] Così forziamo l’aggiunta del www nell’url. Ora basta sostituire…

    /

  • [ITA] Come rimuovere “www” dall’url del vostro dominio

    Volete utilizzare il vostro dominio senza che vi sia il “www” davanti? Allora create un file “.htaccess” nella root del vostro web server se non lo avete gia, e aggiungete il codice riportato qui sotto: RewriteEngine OnRewriteCond %{HTTP_HOST} ^www\.miosito\.it$ [NC]RewriteRule ^(.*)$ http://miosito.it/$1 [R=301,L] Così facendo abilitiamo il mod_rewrite e forziamo la rimozione del www dall’url.…

    /

  • [ITA] Crontab e la magia dell’esecuzione automatica

    Se mai avete sentito parlare di crontab, cron o cronjobs e non siete mai riusciti a capire di cosa si stava parlando: questo tutorial è per voi!   Allora innanzitutto cron è uno script utilissimo, e anche se ora non sapete di cosa stia parlando alla fine lo troverete utilissimo e vi risolverà molti problemi… Crontab…

    /

  • [ITA] Come recuperare tutte le variabili e le costanti dichiarate

    Oggi vi darò un’altro piccolo snippet per PHP, ovvero come recuperare tutte le variabili e le costanti dichiarate… Potete parsarvi i due array e applicare un filtro oppure utilizzarli per il debug. Ovviamente non ci sono solo questi 2 utilizzi, l’obiettivo e il motivo per cui utilizzarli alla fine dipende da voi. 🙂 $PHP_DEFINED_VAR =…

    /

  • [ITA] Validazione chiamata AJAX

    Validare una chiamata AJAX o presunta tale si può fare tramite un HTTP Header particolare: HTTP_X_REQUESTED_WITH. Il browser che effettua una chiamata AJAX imposta sempre questo header e lo valorizza a “XMLHttpRequest”. Quindi verificando questo header si scoprirà se la chiamata è reale o è stata generata (quindi non è affidabile e bisognerebbe bloccare la…

    /

  • [ITA] DNS Cache Hack per Firefox

    Volete evitare di chiudere Firefox ogni volta che modificate il vostro file hosts? Qui troverete la soluzione! 😉Allora per chi non sa cosa sia un file hosts vi do una piccola definizione (anche se sarebbe inutile perchè questo post non è rivolto a voi…): Il file hosts è un file di testo che contiene le…

    /

  • [ITA] Creare plugin motore di ricerca per Firefox e Internet Explorer

    Oggi vi mostrerò come creare facilmente e in poco tempo un plugin motore di ricerca, per Firefox e Internet Explorer 7, utilizzando il formato OpenSearch. Il plugin Iniziamo subito con il codice XML del plugin, e poi dopo passiamo alla teoria… <?xml version=”1.0″ encoding=”UTF-8″?><OpenSearchDescription xmlns=”http://a9.com/-/spec/opensearch/1.1/”> <ShortName>Motore di ricerca</ShortName> <Description>Descrizione del motore di ricerca.</Description> <Tags>esempi tag…

    /

  • [ITA] Risolvere il problema delle PNG trasparenti su Internet Explorer

    Come risolvere il problema della trasparenza delle immagine PNG su Internet Explorer 6? E’ risaputo che ogni browser applica gli standard secondo la propria interpretazione, come è risaputo anche che Internet Explorer non li applica alla perfezione… Però dato che è il browser più utilizzato al mondo è bene che ogni sito web venga visualizzato…

    /

  • [ITA] XDebug, il debug di PHP

    XDebug ci aiuta nel debugging dei nostri script, permettendoci anche di migliorare le prestazioni. Cos’è XDebug Xdebug è una libreria professionale che consente di effettuare sia il profiling che il debug delle applicazioni web. Questo utilissimo strumento consente ai programmatori di risparmiare molto tempo nel testing del codice alla ricerca di errori; ma non svolge…

    /

  • [ITA] I Namespaces in Javascript

    Come creare script in javascript mantenendo la compatibilità con gli altri framework utilizzati all’interno di un sito (es: prototype, jquery, mootools, ecc)? Un bel namespace sarebbe perfetto   Basta definire dei nodi nel DOM del documento e il gioco è fatto… Creando un namespace si evita la confusione di dover capire a quale framework o script appartiene…

    /

  • [ITA] Intercettare la chiusura del browser

    Avete la necessità di dover intercettare quella fase precedente alla chiusura del brower o del tab contenuto in esso? Eccovi qui la soluzione: function beforeUnload() { return “Sei sicuro di voler chiudere la finestra?”;}window.onbeforeunload = beforeUnload; Ovviamente questo esempio vi mostrerà soltanto un alert che vi chiederà se chiudere la finestra o tornare alla pagina.…

    /

  • [ITA] .htaccess e hotlinking

    In questo post vi mostrerò un metodo efficace per prevenire il consumo illecito della vostra banda e la violazione dei diritti di copyright. L’hot-linking è una tecnica alquanto fastidiosa, utilizzata spesso per linkare immagini provenienti da altri siti web. Per porre rimedio a questo “problema” c’è un sistema alquanto facile da utilizzare: usare il mod_rewrite…

    /

  • [ITA] XHTML Strict e l’attributo target: workaround

    Sicuramente chiunque di voi si sia imbattuto nella creazione di siti web che rispettino gli standard XHTML 1.1 del W3C e ha voluto mantenere la compatibilità con HTML 4 ha avuto dei problemi di validazioni degli elementi anchor poichè avevano l’attributo target che è diventato deprecato con il passaggio di versione… Un modo per bypassare…

    /