Compare commits

43 Commits

Author SHA1 Message Date
26c27c5193 fixed ci version information
All checks were successful
Build website to check for errors / test (push) Successful in 11s
Deploy website on production server on a tag / test (push) Successful in 11s
2026-07-30 07:25:37 +02:00
fe427b4c95 fixed email to address in agcom blog post
All checks were successful
Build website to check for errors / test (push) Successful in 11s
Deploy website on production server on a tag / test (push) Successful in 11s
2026-07-30 05:36:22 +02:00
a69b0c2c93 updated CI to use GitHub's API
All checks were successful
Build website to check for errors / test (push) Successful in 14s
Deploy website on production server on a tag / test (push) Successful in 12s
2026-07-30 05:30:49 +02:00
eaca350067 fixed git url parsing 2026-07-30 05:08:47 +02:00
dbc1a9d927 added agcom open letter blog post and blog index page 2026-07-30 05:08:37 +02:00
d52b3301f7 update risotto theme to 0.5.1 (bd4c2c5) 2026-07-30 04:48:43 +02:00
06bdf69b5f feat: add build workflow
All checks were successful
Build website to check for errors / test (push) Successful in 22s
- Add new Gitea build workflow to check for Hugo site errors on main branch pushes
- Update deploy workflow: changed name and group
2026-02-04 10:29:33 +01:00
d2dc3a0a9e changed deployment host and path 2026-02-02 17:21:26 +01:00
f202b2d58c feat: add new content pages and update version page format
- Added new content pages: about, contact, and index with site information
- Updated version page URL format and removed date field
2026-02-02 17:19:28 +01:00
d395c219f6 feat: switch theme to risotto and update config
- Add risotto theme as submodule
- Update hugo.yaml with new theme configuration
- Adjust menu URLs to be absolute paths
- Simplify makefile by removing redundant prep steps
- Update copyright notice and author info
- Remove old theme-specific CSP settings
2026-02-02 17:17:24 +01:00
8a94fe0add THE PRIVATE KEEEEEEEYYY
All checks were successful
Deploy website on production server when committing on main / test (push) Successful in 11s
2026-02-01 19:25:29 +01:00
2f2c60126c feat(deploy): improve environment variable handling and deployment workflow
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 12s
- Update .vars to properly export deployment configuration variables
- Modify deploy.sh to conditionally source .vars only in interactive mode
- Remove include directive from makefile to prevent automatic variable loading
- Enhance deployment script reliability by ensuring proper environment setup
2026-02-01 19:24:37 +01:00
83728057ee stupid variables
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 9s
2026-02-01 19:19:36 +01:00
4f16efe7ed ssh key is handled by the job
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 8s
2026-02-01 19:13:29 +01:00
289e06d6c3 fuck you
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 8s
2026-02-01 19:12:14 +01:00
94469a598b omfg the ci
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 8s
2026-02-01 19:11:20 +01:00
50cd2ae16f try this
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 9s
2026-02-01 19:08:02 +01:00
53795cf5cd removed debug, fixed deployment env
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 9s
2026-02-01 19:06:40 +01:00
4fa2be1351 stderr
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 8s
2026-02-01 19:02:44 +01:00
d1465de486 updated theme
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 8s
2026-02-01 18:56:14 +01:00
2e333ce882 added verbosity
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 12s
2026-02-01 18:50:36 +01:00
9463c44034 feat(deploy): improve ssh key handling and deployment security
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 9s
- Remove hardcoded SSH private key file path from workflow
- Use proper SSH directory structure (~/.ssh/) for key storage
- Add known_hosts file for improved SSH security
- Move environment variables to dedicated env block
- Remove StrictHostKeyChecking=no for better security
- Update deploy script to use proper SSH key path
- Maintain deployment path configuration via environment variables
2026-02-01 18:35:37 +01:00
b7286eeeb6 fix: use explicit bash path in makefile scripts
Specify full path to bash interpreter for version.sh and deploy.sh scripts in makefile to ensure consistent execution across different environments and avoid potential PATH issues.
2026-02-01 18:17:37 +01:00
9a4bdf15a3 fix: update deployment workflow concurrency settings
Configure concurrency group for website deployment workflow to prevent race conditions and ensure orderly deployment execution. The cancel-in-progress setting is set to false to maintain deployment stability.
2026-02-01 18:16:51 +01:00
fafafb0d37 chore: update deployment trigger from branch push to tag push
Change deployment workflow to trigger on tag pushes instead of main branch pushes, allowing for more controlled and versioned deployments.
2026-02-01 18:16:20 +01:00
d0189c57a5 fix(deploy): remove docker compose restart from deployment script
Removes the 'docker compose restart' command from the deployment script as it was causing unnecessary service interruptions during deployment. The tar extraction and cleanup steps are sufficient for updating the application files without requiring a full container restart.
2026-02-01 18:12:28 +01:00
126bd66ddb and now the build passes with zero errors
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 10s
(until I shit my pants again with some other shenanigans)
2024-08-21 23:16:03 +02:00
ec6bbafb2e no, as it turns out, variables were not defined
All checks were successful
Deploy website on production server when committing on main / test (push) Successful in 8s
2024-08-21 23:15:08 +02:00
80b3490e37 are variables actually defined?
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 7s
2024-08-21 23:14:15 +02:00
0c6699e211 does it build on the CI now with submodules?
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 8s
2024-08-21 23:10:34 +02:00
911d274467 fucking ubuntu shit outdated repos, fuck canonical
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 11s
2024-08-21 23:03:26 +02:00
3a7beeade5 apt update, of course, now install hugo!
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 9s
2024-08-21 22:38:18 +02:00
db7f32eb7f need hugo installed to build hugo site, no?
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 3s
2024-08-21 22:35:44 +02:00
e13bd64dc6 stupid syntax error 2024-08-21 22:31:38 +02:00
f0cfff3818 fixed action syntax error (maybe?)
Some checks failed
Deploy website on production server when committing on main / test (push) Failing after 25s
2024-08-21 22:03:18 +02:00
123a090491 added automatic deploy workflow with Gitea CI Actions 2024-08-21 22:02:01 +02:00
1089dbe767 updated hugo-coder theme 2024-08-21 22:01:38 +02:00
3947b3e0c8 added deploy process 2024-08-21 22:01:24 +02:00
22c976ff21 added content security protection 2024-08-21 22:00:37 +02:00
fc9fce6e6d added version information 2024-08-21 21:49:00 +02:00
85bf73bdf3 changed description and social links, added default color scheme 2024-08-21 21:16:30 +02:00
4b597ca2d8 prep target in makefile now updates the submodules 2024-08-21 21:15:11 +02:00
7aa85522dc changed git url, added telegram and linkedin 2024-04-20 00:24:33 +02:00
16 changed files with 363 additions and 25 deletions

View File

@@ -0,0 +1,37 @@
---
name: Build website to check for errors
concurrency:
group: build
cancel-in-progress: false
on:
push:
branches:
- main
defaults:
run:
shell: bash
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Install latest Hugo
run: |
set -euo pipefail
tag="$(curl --silent --show-error --location --fail-with-body \
-H 'Accept: application/vnd.github+json' \
https://api.github.com/repos/gohugoio/hugo/releases/latest \
| jq -r '.tag_name // empty')"
[ -n "$tag" ] || { echo "no tag_name in gohugoio/hugo releases/latest" >&2; exit 1; }
export HUGO_VERSION="$tag"
export HUGO_VERSION_SHORT="${HUGO_VERSION#v}"
wget "https://github.com/gohugoio/hugo/releases/download/${HUGO_VERSION}/hugo_${HUGO_VERSION_SHORT}_linux-amd64.deb"
dpkg -i hugo_*.deb
- uses: actions/checkout@v4
with:
submodules: true
- run: make
env:
APP_VERSION: ${{ github.ref_name }}

View File

@@ -0,0 +1,48 @@
---
name: Deploy website on production server on a tag
concurrency:
group: deploy
cancel-in-progress: false
on:
push:
tags:
- '*'
defaults:
run:
shell: bash
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Install latest Hugo
run: |
set -euo pipefail
tag="$(curl --silent --show-error --location --fail-with-body \
-H 'Accept: application/vnd.github+json' \
https://api.github.com/repos/gohugoio/hugo/releases/latest \
| jq -r '.tag_name // empty')"
[ -n "$tag" ] || { echo "no tag_name in gohugoio/hugo releases/latest" >&2; exit 1; }
export HUGO_VERSION="$tag"
export HUGO_VERSION_SHORT="${HUGO_VERSION#v}"
wget "https://github.com/gohugoio/hugo/releases/download/${HUGO_VERSION}/hugo_${HUGO_VERSION_SHORT}_linux-amd64.deb"
dpkg -i hugo_*.deb
- uses: actions/checkout@v4
with:
submodules: true
- run: |
mkdir -p ~/.ssh/
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
make
make deploy
env:
SSH_USERNAME: ${{ vars.SSH_USERNAME }}
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
SSH_KNOWN_HOSTS: ${{ vars.SSH_KNOWN_HOSTS }}
DEPLOYMENT_HOST: ${{ vars.DEPLOYMENT_HOST }}
DEPLOYMENT_PATH: ${{ vars.DEPLOYMENT_PATH }}
APP_VERSION: ${{ github.ref_name }}

3
.gitmodules vendored
View File

@@ -1,3 +1,6 @@
[submodule "themes/hugo-coder"]
path = themes/hugo-coder
url = https://github.com/luizdepra/hugo-coder.git
[submodule "themes/risotto"]
path = themes/risotto
url = https://github.com/joeroe/risotto

4
.vars Normal file
View File

@@ -0,0 +1,4 @@
#/usr/bin/env bash
export DEPLOYMENT_HOST=vps01.hostit.infra.bjphoster.cloud
export DEPLOYMENT_PATH=/srv/pedini.dev

25
content/_index.md Normal file
View File

@@ -0,0 +1,25 @@
```shell
$ cat content/about.md
```
# About me
I'm just a guy passionate about ICT and networking, increasing their knowledge every day, and always looking forward to solve new challenges life might arise.
More info in the [about page](/about/).
```shell
$ cat content/projects.md
```
# Projects (just a summary)
- pedini.dev:
This is my personal website, built with [Hugo](https://gohugo.io) and hosted on a private [Gitea](https://gitea.io) instance.
The deployment is automated through an Act Runner workflow, the Gitea version of Github Actions.
- ansible:
On [this repo](https://git.bjphoster.com/ansible/ansible) you can find my Ansible playbooks. There's anything ranging from updating the system, to converting Debian to Proxmox, to configuring every new server of mine. That last one tho is actually done with the help of [the Debian automation](https://git.bjphoster.com/automation/debian-unattended), which lets me boot a system from a custom Debian ISO and configure everything from a template file already in place in the image.
- docker:
I'm a big fan, using it for a while now, built a lot of things with it. What else to say? All the repos are available [here](https://git.bjphoster.com/deployments).
```shell
$ cat content/contact.md
```
What? There's a dedicated page for that! Go [there](/contact/).

13
content/about.md Normal file
View File

@@ -0,0 +1,13 @@
+++
title = "About me and my career"
url = "/about/"
+++
I started working as an "IT manager as a service" back in 2019 just after graduating from college, basically my entire company was a consultant for a couple clients, B2C and B2B as well, and each of us had their specific role in which they thrived.
Then, in 2021, I moved to a larger company based in Milan for just over a year, where I provided support for my colleagues and our customers working on a PBX system developed entirely in-house.
I was then called by a telco provider based in Reggio Emilia in 2022, and decided why not, I was actually gonna do it. I remained there for more than two and a half years, up until the end of 2024. There, I started with singlehandedly managing a large migration of three PBX systems that nobody wanted to do, merging two of those into the 3rd, then I moved on to customer support, then NOC administration (basically customer support for the provider itself, where my customers were my colleagues), and in the end, I carried the entire cloud department of the company until I trained a new replacment, became the specialist in 80% of what there was to do tech-wise, programmed a couple of internal tools and scripts for my fellow colleagues, and then was told my mind was "wasted" there, that I had "too much potential" and I should probably find better opportunities elsewhere, and then was harrassed by management three to four times a week asking if I was gonna leave, or when, or if I found a better job, etc. Until one day I actually did. :)
Starting from 2025, I decided to start my own business, acquire my first couple of customers, and start building my own story.
We're now in 2026, I'm working on a couple of projects, I'm still learning new stuff - as one in this field should always be - and even if the work is hard, it's still fun, which I think is the most important thing.

View File

@@ -0,0 +1,84 @@
---
title: "Lettera aperta ad AGCOM: fermatevi, non funziona, e ci costa"
date: 2026-07-30T00:00:00+02:00
slug: "lettera-aperta-agcom"
---
Qualche giorno fa mi è arrivata voce della delibera n. 171/26/CONS, con cui AGCOM ha ordinato ai provider italiani il blocco DNS del sito Escort Advisor, in attuazione del cd. Decreto Caivano e delle indicazioni sulla verifica dell'età già definite nella delibera n. 96/25/CONS.
Non ho potuto fare a meno di scrivere. Non per il singolo sito bloccato, ma per la logica che c'è dietro, e per dove quella logica ci sta portando.
## "Think of the children" non è una politica, è un paravento
"Tutela dei minori" è una frase che dovrebbe pesare. Invece sta diventando, in Italia come altrove, la formula con cui si costruiscono infrastrutture di identificazione e controllo degli adulti, il cui costo reale non lo pagano i minori: lo paghiamo noi, in privacy, in libertà di accesso a servizi legali, e - come spiego più sotto - anche in tasse.
Non serve andare lontano per vedere dove porta questa strada. Basta guardare agli Stati Uniti, dove la stessa retorica - sicurezza pubblica, recupero di veicoli rubati, riduzione della criminalità - ha giustificato l'installazione di oltre 80.000 telecamere Flock Safety in migliaia di città. Sistemi che non leggono solo le targhe: usano l'intelligenza artificiale per riconoscere un'auto da ammaccature, adesivi, portapacchi, dettagli che nessun umano potrebbe incrociare su quella scala ma che una macchina gestisce senza sforzo.
E cosa è successo dopo l'installazione? Il sistema, venduto come scudo di sicurezza, è stato usato da agenti come motore di ricerca personale: a Milwaukee un agente ha interrogato il database 179 volte per rintracciare una persona con cui aveva una relazione e il suo ex; a Sedgwick, Kansas, un capo della polizia si è dimesso dopo oltre 200 ricerche sull'ex e sul suo nuovo compagno; in Florida un agente ha piazzato un tracker GPS su un'auto dopo aver seguito la ex-partner con le telecamere; in Texas il sistema è stato usato per rintracciare una donna sospettata di aver interrotto una gravidanza. Tutto documentato, tutto fuori da qualunque finalità dichiarata al momento dell'installazione.
Il punto non è la tecnologia. Il punto è che un'infrastruttura, una volta costruita, viene usata per ciò che consente di fare, non per ciò che era stato promesso.
## La direzione in cui stiamo andando
Il mio timore è che l'Italia stia percorrendo una traiettoria pericolosa: dalla verifica dell'età al filtro obbligatorio, dal filtro obbligatorio all'ispezione di ciò che ciascuno produce o consulta. Quando ci si arriva, succedono due cose prevedibili: un contenzioso ampio e perdente per l'amministrazione, sproporzionato alla tenuta tecnica e giuridica delle misure, e la fuga di competenze e imprese tecnologiche verso altri Paesi.
## Le nostre tasse meritano di meglio
Il blocco DNS di un sito costa tempo, denaro pubblico e credibilità istituzionale, per un risultato pratico prossimo allo zero: chi vuole aggirarlo - con una VPN, un DNS alternativo, strumenti legali e ampiamente diffusi - sa perfettamente come farlo. Chi resta esposto è chi non sa come aggirarlo, l'esatto opposto della "protezione" promessa.
Le stesse risorse potrebbero essere spese meglio. Ad esempio:
- imponendo ai grandi fornitori di piattaforme (Google, Amazon, Meta, ByteDance) contromisure reali, definite con un tavolo tecnico di esperti del settore, invece di "verificare l'età di tutti per escludere i minori";
- rafforzando la moderazione contro il cyberbullismo, che è un problema vero e misurabile;
- finanziando corsi per i genitori su tecnologie, rischi, mitigazioni e strumenti di parental control;
- finanziando corsi reali di educazione sessuale rivolti ai minori, invece di lasciare questo compito ai soli genitori o, come accade oggi nella maggior parte dei casi, ai minori stessi e alla loro curiosità, che finiscono per informarsi da soli su internet, dove trovano perlopiù rappresentazioni distorte ed esagerate, a partire proprio dalla pornografia.
Tutto questo è più utile - e più onesto - che bloccare un sito a cui un cittadino ha diritto di accedere perché non è illegale.
## L'email che ho inviato
Ho scritto tutto questo in una email formale, inviata all'Ufficio competente di AGCOM. Qui sotto la riporto integralmente: è pronta per essere inviata così com'è, oppure modificata e personalizzata a piacimento.
```
to: info@agcom.it
Spett.le Autorità,
vi scrivo a titolo personale, quale cittadino e professionista, in merito alla delibera n. 171/26/CONS del 7 luglio 2026, con cui avete ordinato ai fornitori di accesso italiani il blocco DNS del sito Escort Advisor in attuazione dell'art. 13-bis del cd. Decreto Caivano e delle indicazioni della delibera n. 96/25/CONS sulla verifica dell'età.
La presente non contesta la finalità dichiarata, tuttavia il fatto che "tutela dei minori" e "think of the children" siano diventati, in Italia come altrove, la cornice con cui si costruiscono infrastrutture di identificazione e profilazione degli adulti, il cui costo reale ricade non sui minori ma sulla privacy e sulla libertà di chi accede a servizi e contenuti perfettamente leciti.
Un esempio istruttivo arriva dagli Stati Uniti: con la stessa giustificazione - sicurezza pubblica, recupero di veicoli rubati, riduzione della criminalità, protezione della collettività - sono state installate in decine di migliaia di città reti di telecamere automatiche "powered by AI" (i sistemi Flock Safety, oltre 80.000 apparati). Questi tuttavia non si limitano a leggere le targhe: usano l'intelligenza artificiale per identificare e tracciare un veicolo anche attraverso ammaccature, adesivi, portapacchi e altri dettagli che nessun operatore umano potrebbe incrociare manualmente su quella scala, ma che un sistema automatizzato gestisce senza difficoltà.
Il punto rilevante è cosa è successo dopo l'introduzione di tale sistema. Questo, venduto come strumento di sicurezza, è stato invece usato in modo documentato dagli agenti come motore di ricerca personale:
- a Milwaukee, l'agente Josue Ayala è stato incriminato per aver interrogato il database 179 volte per rintracciare la persona con cui aveva una relazione e il suo ex partner, giustificando ogni ricerca con una sola parola generica;
- a Sedgwick (Kansas) un capo della polizia si è dimesso dopo aver interrogato oltre 200 volte le targhe dell'ex e del nuovo compagno di lei;
- a Orange City (Florida) un agente ha usato le telecamere per pedinare l'ex, arrivando a mostrarle le riprese e a piazzarle un tracker GPS;
- in Texas il sistema è stato usato per rintracciare una donna sospettata di aver interrotto una gravidanza, seguita attraverso più Stati;
- è emerso inoltre l'uso dei dati per finalità di controllo migratorio e ricerche a sfondo discriminatorio.
Gli audit interni mostrano ricerche giustificate con termini vaghi ("investigation", "suspicious") o addirittura con nessuna motivazione. Usi non solo estranei alla finalità dichiarata al momento dell'installazione, bensì illegittimi. La lezione è semplice: una volta costruita, l'infrastruttura viene usata per ciò che consente di fare, non per ciò che era stato promesso. L'unico argine reale non è l'auto-disciplina di chi vi ha accesso, ma le limitazioni tecniche dell'apparato, appunto, molto vaste e ben superiori a quanto pubblicamente dichiarato.
Piccolo appunto sulla direzione di marcia: lo stesso Paese oltreoceano offre un secondo esempio, ancora più utile a capire dove porta questa logica quando incontra l'incompetenza tecnica del regolatore. Diversi Stati americani (California con l'AB 2047, New York con il budget S.9005/A.10005, Washington con l'HB 2320) stanno legiferando per imporre alle stampanti 3D un "censorware" di Stato: un algoritmo, certificato dall'autorità, che analizza ogni file di stampa e blocca la macchina se "riconosce" la geometria di un componente d'arma. Le stesse proposte criminalizzano la distribuzione di file CAD e, di fatto, mettono fuori legge il software open source, perché un firmware libero e ispezionabile, di fatto, non può essere costretto a montare quel filtro. Organizzazioni come la Electronic Frontier Foundation hanno spiegato, su base tecnica concreta e non "fuffa da pubblicità istituzionale", perché il blocco alla stampa non funziona e produce solo sorveglianza sistematica di ogni oggetto stampato, e come questo crei solo danno all'innovazione e criminalizzazione di attività del tutto legittime.
È il tipo di norma che si scrive quando si spara sul mucchio sperando di centrare qualcosa, senza avere la più pallida idea di come la tecnologia funzioni davvero. Il mio timore concreto è che l'Italia arrivi molto presto allo stesso punto, seguendo la medesima traiettoria: dalla verifica dell'età a tappeto al filtro obbligatorio, dal filtro obbligatorio all'ispezione di ciò che ciascuno produce o consulta sul web. Quando si arriva lì, succedono due cose tanto semplici quanto prevedibili: la prima è un contenzioso ampio e perdente per l'amministrazione, di gran lunga sproporzionato alla scarsa tenuta tecnica e giuridica delle misure. La seconda è la fuga delle competenze: cittadini, professionisti e imprese del settore, tecnologico e non, che scelgono semplicemente di operare altrove, sommandosi a chi il Paese lo lascia già oggi per ragioni economiche e fiscali, e tenore di vita. Non aggiungiamoci anche l'oppressione privacy da "grande fratello".
Chiedo quindi due cose, con rispetto ma senza giri di parole.
Primo: che si chiamino le misure con il loro nome. Un obbligo di verifica dell'età è un sistema di identificazione e profilazione degli adulti. Discuterlo apertamente come tale - con una valutazione onesta dei rischi di abuso, di data breach e di uso secondario dei dati raccolti - è sicuramente più serio che presentarlo unicamente come scudo per i minori, che può essere legittimamente il pensiero e l'intento del legislatore, ma abbiamo già diversi riscontri di come non corrisponda affatto alla realtà dei fatti.
Secondo: che si prenda atto che la pornografia e i servizi per adulti sono attività lecite. Escort Advisor è un servizio informativo su prestazioni che in Italia non costituiscono reato. Non vedo quindi su quale base l'Autorità debba frapporre oneri di identificazione tra un adulto che sceglie liberamente di usufruire di un servizio perfettamente legale e chi quel servizio lo offre altrettanto legalmente.
La tutela dei minori si persegue con strumenti proporzionati, non trasformando ogni adulto in un soggetto da schedare e ogni tecnologia in un sospetto da filtrare. Le risorse economiche e di tempo che questi blocchi assorbono - denaro che, in ultima analisi, esce dalle casse dello Stato e quindi dalle tasche dei cittadini, sottoscritto compreso - sarebbero impiegate assai meglio altrove. A titolo puramente esemplificativo e non esaustivo: imponendo ai grandi fornitori di piattaforme (Google, Amazon, Meta, ByteDance e simili) contromisure reali e verificabili definite in un tavolo tecnico con esperti del settore, invece di "verificare l'età di tutti per escludere i minori" - approccio del quale conosciamo già l'esito; rafforzando la moderazione contro il cyberbullismo; finanziando progetti e corsi rivolti ai genitori per formarli sulle tecnologie attuali, sui rischi, sulle mitigazioni e sugli strumenti di parental control. Tutte misure più utili che spendere una parte del gettito fiscale per bloccare servizi ai quali ho diritto di accedere in quanto non illegali.
Aggiungo in ultimo, senza reticenze, il dato tecnico che rende il tutto ancora più problematico: questi blocchi sono banalmente aggirabili con VPN, DNS alternativi e strumenti analoghi, che esistono, sono legali e vengono normalmente utilizzati, dunque chi vuole aggirarli, sa perfettamente come farlo, e non impiega neppure troppo sforzo. L'effetto pratico della delibera è quindi prossimo allo zero sul piano della reale protezione dei minori, mentre impone a un adulto di dotarsi di contromisure tecniche per esercitare un diritto legittimo, oppure di venire sorvegliato se non è tecnicamente capace di farlo. Non è tutela: è una semplice facciata istituzionale che consuma risorse pubbliche senza raggiungere l'obiettivo dichiarato.
Caldeggio infine Autorità e legislatore a fermarsi e a ripensare l'approccio. Resto a disposizione per un confronto e vi ringrazio per l'attenzione.
Cordiali saluti,
```
## Unisciti alla causa
Non costa nulla. Non serve essere avvocati, non serve essere esperti di diritto o di tecnologia. Basta un indirizzo email e la volontà di dire, con le proprie parole, che non siamo d'accordo con questa direzione.
Ogni voce in più aiuta il nostro Paese ad andare, forse, in una direzione più appropriata per il nostro quieto vivere, nel rispetto della nostra privacy e dei nostri diritti.

3
content/blog/_index.md Normal file
View File

@@ -0,0 +1,3 @@
---
title: "Personal Blog"
---

10
content/contact.md Normal file
View File

@@ -0,0 +1,10 @@
+++
title = "Contact Information"
url = "/contact/"
+++
- Email: [bryan@pedini.dev](mailto:bryan@pedini.dev)
- Telegram: [@bryanpedini](https://45r.it/pedini-tg)
- LinkedIn: [bryanpedini](https://45r.it/pedini-li)
- Gitea: [private server](https://45r.it/bjphoster-git)
- Instagram: [bryanp_og](https://45r.it/pedini-ig)

8
content/version.md Normal file
View File

@@ -0,0 +1,8 @@
+++
title = "Version Information"
url = "/version/"
+++
- Version: VAR_VERSION
- Commit ID: [VAR_COMMIT_ID](VAR_COMMIT_URL)
- Theme Commit ID: [VAR_THEME_COMMIT](VAR_THEME_URL)

42
deploy.sh Executable file
View File

@@ -0,0 +1,42 @@
#!/usr/bin/env bash
set -e
###
# FLOW
###
#
# if the username variable is set, append the at sign to it
# if either the deployment host or deployment path variables are not set, return an error
# tarball the built website and scp it to the deployment host
# ssh to the remote host, cd to the deployment path, and get the data path from .env file
# then remove everything in the data path, untar the tarball and reload the server
# finally remove the tarball, both from the remote host and locally (cleanup)
if [ -t 0 ]; then # Interactive: prompt user
source .vars
fi
# Check if the username variable is set
if [ ! -z "${SSH_USERNAME}" ]; then
SSH_USERNAME="${SSH_USERNAME}@"
fi
# Check if either the deployment host or deployment path variables are not set
if [ -z "${DEPLOYMENT_HOST}" ] || [ -z "${DEPLOYMENT_PATH}" ]; then
echo "required variable DEPLOYMENT_HOST is not set"
exit 1
fi
# Compress the built website and scp it to the remote host
tar -czf httpdocs.tgz -C public .
scp httpdocs.tgz ${SSH_USERNAME}${DEPLOYMENT_HOST}:/tmp/httpdocs.tgz
# SSH to the remote host, cd to the deployment path, and deploy the website (delete and overwrite everything)
ssh ${SSH_USERNAME}${DEPLOYMENT_HOST} "DEPLOYMENT_PATH=$DEPLOYMENT_PATH bash" << 'EOF'
cd ${DEPLOYMENT_PATH}
DATAPATH=$(cat .env | grep "NGINX_DATA" | sed "s/NGINX_DATA=//g")
rm -rf ${DATAPATH}/{*,.*}
tar xf /tmp/httpdocs.tgz -C ${DATAPATH}
rm -f /tmp/httpdocs.tgz
EOF
rm -f httpdocs.tgz

View File

@@ -1,39 +1,52 @@
---
baseURL: "https://pedini.dev"
languageCode: "en-us"
languageCode: "us"
theme: "risotto"
title: "Bryan Joshua Pedini"
theme: "hugo-coder"
copyright: "Copyright © 2019 Bryan Joshua Pedini - All Rights Reserved"
markup:
goldmark:
renderer:
hardWraps: true
params:
author: "Bryan Joshua Pedini"
info: "FullStack developer, Networking/Docker specialist, DevOps enthusiast, k8s newbie, disco lover"
description: "Bryan's personal website / blog"
keywords: "blog,personal,developer,networking,docker,devops,k8s,kubernetes"
gravatar: "bryan@pedini.dev"
since: 2019
commit: "https://git.bjphoster.com/source/pedini.dev/tree/"
theme:
palette: "base16-dark"
about:
title: "Bryan Joshua Pedini"
description: "Developer, Network Specialist, Cloud Architect, Right to Repair/Ownership Advocate, Self Employed."
logo_image: ""
#keywords: "blog,personal,developer,networking,docker,devops,k8s,kubernetes"
social:
- name: "Git"
socialLinks:
- title: "Git"
icon: "fa-brands fa-git fa-2x"
weight: 1
url: "https://git.bjphoster.com"
- name: "Instagram"
url: "https://45r.it/bjphoster-git"
- title: "Instagram"
icon: "fa-brands fa-instagram fa-2x"
weight: 2
url: "https://instagram.com/bryanp_og/"
url: "https://45r.it/pedini-ig"
- title: "Telegram"
icon: "fa-brands fa-telegram fa-2x"
url: "https://45r.it/pedini-tg"
- title: "LinkedIn"
icon: "fa-brands fa-linkedin fa-2x"
url: "https://45r.it/pedini-li"
menu:
main:
- name: "About me"
weight: 1
url: "about/"
url: "/about/"
- name: "Blog"
weight: 2
url: "blog/"
- name: "Contacts"
url: "/blog/"
- name: "Contact"
weight: 3
url: "contacts/"
url: "/contact/"
- name: "Version"
weight: 4
url: "/version/"
taxonomies:
category: "categories"

View File

@@ -3,10 +3,13 @@
default: build
prep:
git submodule update --init --recursive
git submodule foreach --recursive bash -c "git checkout \$$(git remote show origin | grep HEAD | sed 's/.*\: //'); git pull"
build: prep
hugo
build:
/usr/bin/env bash version.sh
run: prep
deploy:
/usr/bin/env bash deploy.sh
run:
hugo server

1
themes/risotto Submodule

Submodule themes/risotto added at bd4c2c5b2f

44
version.sh Executable file
View File

@@ -0,0 +1,44 @@
#!/usr/bin/env bash
set -e
# Check if version is already provided
if [ -z "${APP_VERSION}" ]; then
if [ -t 0 ]; then # Interactive: prompt user
# Get version from user
read -p "Version [latest]: " VERSIONINPUT
# If version was not provided, use the latest commit short hash as version
if [ -z ${VERSIONINPUT} ]; then
APP_VERSION="latest"
else
APP_VERSION=${VERSIONINPUT}
fi
else # Non-interactive (CI): default to "latest"
APP_VERSION="latest"
fi
fi
# Get project commit id and URL
COMMIT_ID=$(git log HEAD --oneline | awk '{print $1}' | head -n1)
COMMIT_URL="$(git remote get-url origin | sed 's/\.git$//')/commit/${COMMIT_ID}"
# Get the theme used and its commit id and URL
THEME=$(cat hugo.yaml | grep "theme:" | awk '{print $2}' | sed 's/"//g')
pushd themes/${THEME} &>/dev/null
THEME_COMMIT=$(git log HEAD --oneline | awk '{print $1}' | head -n1)
THEME_URL="$(git remote get-url origin | sed 's/\.git$//')/commit/${THEME_COMMIT}"
popd &>/dev/null
# Create version tag (if provided)
if [ ! -z ${VERSIONINPUT} ]; then
git tag ${APP_VERSION}
fi
# Build the website
hugo
# Put the correct version information in the website
sed -i "s|VAR_VERSION|${APP_VERSION}|" public/version/index.html
sed -i "s|VAR_COMMIT_ID|${COMMIT_ID}|" public/version/index.html
sed -i "s|VAR_COMMIT_URL|${COMMIT_URL}|" public/version/index.html
sed -i "s|VAR_THEME_URL|${THEME_URL}|" public/version/index.html
sed -i "s|VAR_THEME_COMMIT|${THEME_COMMIT}|" public/version/index.html