Generated by All in One SEO v4.9.3, this is an llms.txt file, used by LLMs to index the site. # Fabio Cicerchia Helping teams scale smarter, greener, faster. ## Sitemaps - [XML Sitemap](https://fabiocicerchia.it/sitemap.xml): Contains all public & indexable URLs for this website. ## Posts - [Why I Stepped Down as CTO](https://fabiocicerchia.it/career/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 - [Server Rack Pet-Project](https://fabiocicerchia.it/sys-admin/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. This time, I still felt the need to - [Server Rack Pet-Project: Initial Assembling](https://fabiocicerchia.it/sys-admin/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: but then - [Server Rack Pet-Project: Wheels](https://fabiocicerchia.it/sys-admin/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: Switch](https://fabiocicerchia.it/sys-admin/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. I have - [Server Rack Pet-Project: UPS (Part 1)](https://fabiocicerchia.it/sys-admin/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). Say "hello" to the new member of - [Server Rack Pet-Project: UPS (Part 2)](https://fabiocicerchia.it/sys-admin/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. Meet my new 3 friends, just bought the night before… let’s see if they are a waste of money… This was by far the most challenging part to mount, it took me a long time to - [Server Rack Pet-Project: KVM](https://fabiocicerchia.it/sys-admin/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. I found another good deal and - [Server Rack Pet-Project: NAS](https://fabiocicerchia.it/sys-admin/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: Firewall](https://fabiocicerchia.it/sys-admin/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: Cabling](https://fabiocicerchia.it/sys-admin/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. I went to the shop and bought 2 - [Server Rack Pet-Project: Proxmox](https://fabiocicerchia.it/sys-admin/server-rack-pet-project-proxmox) - There's a shortage of Raspberry Pi, that's not news, it's been a while and people are selling the ones they have at crazy prices. Since I'm not really willing to spend ~150€ for a Pi which usually costs less than half, I've decided to go for a real pc, small in dimensions though, or at - [Past Year Review (2022)](https://fabiocicerchia.it/time-management/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. Every year is an unknown, overall I'd say I managed to - [Past Year Review (2021)](https://fabiocicerchia.it/time-management/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](https://fabiocicerchia.it/web/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. Disclaimer This guide won't cover everything, it won't be a comprehensive guide, and the steps that are shown need to be carefully reviewed and tested in your development/pre-production environment. I - [Save yourself from a disaster #9: Disaster Recovery Plan](https://fabiocicerchia.it/web/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. Disclaimer This guide won't cover everything, - [Save yourself from a disaster #8: Manual Configurations](https://fabiocicerchia.it/web/save-yourself-from-a-disaster-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](https://fabiocicerchia.it/web/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. Disclaimer This guide won't cover everything, it won't be a comprehensive guide, - [Save yourself from a disaster #6: Redundancy of DNS](https://fabiocicerchia.it/web/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 Disclaimer This guide won't cover everything, it won't be - [Save yourself from a disaster #5: Redundancy of Web Servers](https://fabiocicerchia.it/web/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 Disclaimer This guide won't cover everything, it won't be a comprehensive - [Save yourself from a disaster #4: Redundancy of Storage](https://fabiocicerchia.it/web/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 Disclaimer This guide won't cover everything, it won't be a comprehensive guide, - [Save yourself from a disaster #3: Redundancy of Database](https://fabiocicerchia.it/web/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 Disclaimer This - [Save yourself from a disaster #2: Secure the Storage](https://fabiocicerchia.it/web/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 Disclaimer This guide won't cover everything, it won't be a comprehensive guide, - [Save yourself from a disaster #1: Secure the Database](https://fabiocicerchia.it/web/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 Disclaimer This - [Save yourself from a disaster: Redundancy on a budget](https://fabiocicerchia.it/web/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)](https://fabiocicerchia.it/mixed/bye-bye-lastpass-welcome-keepassx) - 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. You’re not sure which one to use? Have a look at the list here. So, I’ve decided to move to KeePass: This time I’ve - [Past Year Review (2020)](https://fabiocicerchia.it/time-management/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](https://fabiocicerchia.it/skills/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... Then I stumbled upon an article about Touch Typing, I gave - [Tech Challenge Explained](https://fabiocicerchia.it/career/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](https://fabiocicerchia.it/programming/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. Entities There is a category of objects which seem to have an identity, which remains the same throughout the states of the software. For these objects it is not the attributes which matter, but a thread of continuity and - [Past Year Review (2019)](https://fabiocicerchia.it/time-management/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](https://fabiocicerchia.it/project-management/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?](https://fabiocicerchia.it/career/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](https://fabiocicerchia.it/project-management/tricky-definition-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](https://fabiocicerchia.it/time-management/practicality-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. The matrix takes the name from Dwight Eisenhower, a five-star general in the - [Performance Optimisation, my first talk ever](https://fabiocicerchia.it/performance/performance-optimisation-first-talk-ever) - [toc] https://www.slideshare.net/fabiocicerchia/performance-optimisation-69670789 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. Here it is the script of the talk. Performance is a process, not a project Every engineer should think - [Being really agile, Being really smart](https://fabiocicerchia.it/methodologies/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](https://fabiocicerchia.it/programming/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](https://fabiocicerchia.it/programming/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](https://fabiocicerchia.it/web/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](https://fabiocicerchia.it/web/browser-fingerprinting-theres-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](https://fabiocicerchia.it/web/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)](https://fabiocicerchia.it/web/ita-rimuovere-le-entita-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!](https://fabiocicerchia.it/os/ita-lhistory-di-linux-e-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](https://fabiocicerchia.it/databases/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/](https://fabiocicerchia.it/os/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](https://fabiocicerchia.it/web/ita-come-aggiungere-www-allurl-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](https://fabiocicerchia.it/web/ita-come-rimuovere-www-dallurl-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](https://fabiocicerchia.it/os/ita-crontab-e-la-magia-dellesecuzione-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](https://fabiocicerchia.it/web/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](https://fabiocicerchia.it/web/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](https://fabiocicerchia.it/web/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](https://fabiocicerchia.it/web/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... Motore di ricerca Descrizione del motore di ricerca. esempi tag - [[ITA] Risolvere il problema delle PNG trasparenti su Internet Explorer](https://fabiocicerchia.it/web/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](https://fabiocicerchia.it/programming/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](https://fabiocicerchia.it/web/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](https://fabiocicerchia.it/web/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. Gli - [[ITA] .htaccess e hotlinking](https://fabiocicerchia.it/web/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](https://fabiocicerchia.it/web/ita-xhtml-strict-e-lattributo-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 ## Pages - [](https://fabiocicerchia.it/) - I’m Fabio, a platform engineer, a software engineer, and an engineering manager. Helping engineering teams deliver value faster with higher standards. - [Resume](https://fabiocicerchia.it/resume) - Resume Cicerchia PDFDownload Read full resume on LinkedIn - [Projects](https://fabiocicerchia.it/projects) - ⭐ GreenOps & GreenCoding GreenOps & GreenCoding: Practical Approaches for Sustainable Software.In the book GreenOps & GreenCoding, you’ll find a practical guide for building more sustainable software systems. Badge-Poser The PHP badges, renders some badges for your readme with the packagist information. HTML PHP go-proxy-cache Simple Reverse Proxy with Caching, written in Go, using Redis. - [Newsletter](https://fabiocicerchia.it/newsletter) - DevPath | Weekly Newsletter In every issue, I deliver curated content for developers and leaders in tech, ideal for busy people as it gives a weekly extract of the latest news and trends. Subscribe - [Books](https://fabiocicerchia.it/books) - GreenOps & GreenCoding Practical Approaches for Sustainable Software Technology powers progress, but at what cost to our planet? This book is a practical roadmap to building sustainable software systems. Learn how to make your code and architectures more energy-efficient, adopt GreenOps practices for cloud and DevOps, and embrace lifecycle thinking from development to decommissioning. Read - [About me](https://fabiocicerchia.it/about-me) - I’m Fabio, a Passionate Engineer and Engineering Manager with 20+ years of experience. My focus is on optimising architecture & infrastructure (Containers & VMs) and engineering processes (pipelines & deployments). Over my years, I’ve worn many hats: freelancer, employee, startup founder, CTO, and platform engineering leader. This journey has given me a 360° view of - [Blog](https://fabiocicerchia.it/blog) - / / - [Mentoring](https://fabiocicerchia.it/mentoring) - If you either want to start your tech career or improve your current one I'd love to help you achieve your professional goals. I could help you pretty much with anything related to: 🏢 Architecture📦 Containers / VMs🚀 Deployments🏗 Infrastructure (bare-metal / cloud)🚨 Monitoring & Alerting🚥 Pipelines With ~20 years of experience, ranging from Junior - [Talks](https://fabiocicerchia.it/talks) - 2021 - Save Yourself From A Disaster @ PUG Roma 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’ll show and guide you through the details of each step I took to make my websites disaster-proof while ## Categories - [Career](https://fabiocicerchia.it/category/career) - [Sys Admin](https://fabiocicerchia.it/category/sys-admin) - [Web](https://fabiocicerchia.it/category/web) - [Programming](https://fabiocicerchia.it/category/programming) - [OS](https://fabiocicerchia.it/category/os) - [Project Management](https://fabiocicerchia.it/category/project-management) - [Time Management](https://fabiocicerchia.it/category/time-management) - [Performance](https://fabiocicerchia.it/category/performance) - [Methodologies](https://fabiocicerchia.it/category/methodologies) - [Databases](https://fabiocicerchia.it/category/databases) - [Skills](https://fabiocicerchia.it/category/skills) - [Mixed](https://fabiocicerchia.it/category/mixed) ## Tags - [css](https://fabiocicerchia.it/tag/css) - [hack](https://fabiocicerchia.it/tag/hack) - [ie](https://fabiocicerchia.it/tag/ie) - [internet explorer](https://fabiocicerchia.it/tag/internet-explorer) - [italian](https://fabiocicerchia.it/tag/italian) - [javascript](https://fabiocicerchia.it/tag/javascript) - [png](https://fabiocicerchia.it/tag/png) - [browser](https://fabiocicerchia.it/tag/browser) - [cache](https://fabiocicerchia.it/tag/cache) - [dns](https://fabiocicerchia.it/tag/dns) - [firefox](https://fabiocicerchia.it/tag/firefox) - [ajax](https://fabiocicerchia.it/tag/ajax) - [php](https://fabiocicerchia.it/tag/php) - [validation](https://fabiocicerchia.it/tag/validation) - [constants](https://fabiocicerchia.it/tag/constants) - [debug](https://fabiocicerchia.it/tag/debug) - [variables](https://fabiocicerchia.it/tag/variables) - [apache](https://fabiocicerchia.it/tag/apache) - [htaccess](https://fabiocicerchia.it/tag/htaccess) - [mod_rewrite](https://fabiocicerchia.it/tag/mod_rewrite) - [anchor](https://fabiocicerchia.it/tag/anchor) - [target](https://fabiocicerchia.it/tag/target) - [w3c](https://fabiocicerchia.it/tag/w3c) - [xhtml](https://fabiocicerchia.it/tag/xhtml) - [hotlinking](https://fabiocicerchia.it/tag/hotlinking) - [dom](https://fabiocicerchia.it/tag/dom) - [namespace](https://fabiocicerchia.it/tag/namespace) - [benchmark](https://fabiocicerchia.it/tag/benchmark) - [profiling](https://fabiocicerchia.it/tag/profiling) - [tutorial](https://fabiocicerchia.it/tag/tutorial) - [xdebug](https://fabiocicerchia.it/tag/xdebug) - [opensearch](https://fabiocicerchia.it/tag/opensearch) - [plugin](https://fabiocicerchia.it/tag/plugin) - [search](https://fabiocicerchia.it/tag/search) - [crontab](https://fabiocicerchia.it/tag/crontab) - [linux](https://fabiocicerchia.it/tag/linux) - [process](https://fabiocicerchia.it/tag/process) - [agile](https://fabiocicerchia.it/tag/agile) - [completeness](https://fabiocicerchia.it/tag/completeness) - [project management](https://fabiocicerchia.it/tag/project-management) - [sprint](https://fabiocicerchia.it/tag/sprint) - [task](https://fabiocicerchia.it/tag/task) - [decision making](https://fabiocicerchia.it/tag/decision-making) - [leadership](https://fabiocicerchia.it/tag/leadership) - [prioritisation](https://fabiocicerchia.it/tag/prioritisation) - [productivity](https://fabiocicerchia.it/tag/productivity) - [time-management](https://fabiocicerchia.it/tag/time-management) - [career](https://fabiocicerchia.it/tag/career) - [personal development](https://fabiocicerchia.it/tag/personal-development) - [skills](https://fabiocicerchia.it/tag/skills) - [t-shape](https://fabiocicerchia.it/tag/t-shape) - [best practices](https://fabiocicerchia.it/tag/best-practices) - [measuring](https://fabiocicerchia.it/tag/measuring) - [monitoring](https://fabiocicerchia.it/tag/monitoring) - [optimisation](https://fabiocicerchia.it/tag/optimisation) - [performance](https://fabiocicerchia.it/tag/performance) - [talk](https://fabiocicerchia.it/tag/talk) - [web design](https://fabiocicerchia.it/tag/web-design) - [eff](https://fabiocicerchia.it/tag/eff) - [fingerprint](https://fabiocicerchia.it/tag/fingerprint) - [privacy](https://fabiocicerchia.it/tag/privacy) - [events](https://fabiocicerchia.it/tag/events) - [nodejs](https://fabiocicerchia.it/tag/nodejs) - [phantomjs](https://fabiocicerchia.it/tag/phantomjs) - [semantic](https://fabiocicerchia.it/tag/semantic) - [semver](https://fabiocicerchia.it/tag/semver) - [software](https://fabiocicerchia.it/tag/software) - [versioning](https://fabiocicerchia.it/tag/versioning) - [branches](https://fabiocicerchia.it/tag/branches) - [flow](https://fabiocicerchia.it/tag/flow) - [git](https://fabiocicerchia.it/tag/git) - [svn](https://fabiocicerchia.it/tag/svn) - [tags](https://fabiocicerchia.it/tag/tags) - [scrum](https://fabiocicerchia.it/tag/scrum) - [waterfall](https://fabiocicerchia.it/tag/waterfall) - [xp](https://fabiocicerchia.it/tag/xp) - [aptitude](https://fabiocicerchia.it/tag/aptitude) - [bash](https://fabiocicerchia.it/tag/bash) - [dpkg](https://fabiocicerchia.it/tag/dpkg) - [lock](https://fabiocicerchia.it/tag/lock) - [shell](https://fabiocicerchia.it/tag/shell) - [database](https://fabiocicerchia.it/tag/database) - [dump](https://fabiocicerchia.it/tag/dump) - [sqlite](https://fabiocicerchia.it/tag/sqlite) - [history](https://fabiocicerchia.it/tag/history) - [entities](https://fabiocicerchia.it/tag/entities) - [html](https://fabiocicerchia.it/tag/html) - [snippet](https://fabiocicerchia.it/tag/snippet) - [mouse](https://fabiocicerchia.it/tag/mouse) - [prototype](https://fabiocicerchia.it/tag/prototype) - [year-review](https://fabiocicerchia.it/tag/year-review) - [development](https://fabiocicerchia.it/tag/development) - [estimation](https://fabiocicerchia.it/tag/estimation) - [management](https://fabiocicerchia.it/tag/management) - [noestimate](https://fabiocicerchia.it/tag/noestimate) - [book](https://fabiocicerchia.it/tag/book) - [ddd](https://fabiocicerchia.it/tag/ddd) - [summary](https://fabiocicerchia.it/tag/summary) - [interview](https://fabiocicerchia.it/tag/interview) - [test](https://fabiocicerchia.it/tag/test) - [cto](https://fabiocicerchia.it/tag/cto) - [programming](https://fabiocicerchia.it/tag/programming) - [keepass](https://fabiocicerchia.it/tag/keepass) - [lastpass](https://fabiocicerchia.it/tag/lastpass) - [password manager](https://fabiocicerchia.it/tag/password-manager) - [disaster recovery](https://fabiocicerchia.it/tag/disaster-recovery) - [ovh](https://fabiocicerchia.it/tag/ovh) - [redundancy](https://fabiocicerchia.it/tag/redundancy) - [sbg2](https://fabiocicerchia.it/tag/sbg2)