mirror of
https://github.com/Techtonic-Fault/homepage.git
synced 2026-01-23 13:29:52 +00:00
Initial commit
This commit is contained in:
8
src/authors/francesco.yml
Normal file
8
src/authors/francesco.yml
Normal file
@@ -0,0 +1,8 @@
|
||||
name: Francesco Arieti
|
||||
avatar: /placeholder.svg
|
||||
ref: francesco
|
||||
title: Software Engineer
|
||||
# description: Francesco è un ingegnere informatico con la passione per la creazione di sistemi scalabili ed efficienti.
|
||||
description: Francesco è un informatico con la passione per la creazione di sistemi scalabili ed efficienti.
|
||||
Ama lavorare su problemi complessi che richiedono soluzioni innovative. Nel tempo libero, ama esplorare nuove tecnologie
|
||||
e lavorare su progetti open source.
|
||||
62
src/portfolio/gym-bro.md
Normal file
62
src/portfolio/gym-bro.md
Normal file
@@ -0,0 +1,62 @@
|
||||
---
|
||||
title: "Gym Bro"
|
||||
description: "Il tuo compagno di allenamenti ideale."
|
||||
tags:
|
||||
- Flutter
|
||||
- Supabase
|
||||
- SQLite
|
||||
image: "/assets/portfolio/gym-bro/header.png"
|
||||
url: "#"
|
||||
year: 2023
|
||||
links:
|
||||
apple: "https://apps.apple.com/us/app/gym-bro-your-workout-buddy/id6745848077"
|
||||
# play: "https://play.google.com/store/apps/details?id=com.gymbro.app"
|
||||
play: "https://play.google.com/"
|
||||
---
|
||||
|
||||
{/* (cambiare immagine header per favore) */}
|
||||
|
||||
## Il tuo compagno di allenamenti ideale
|
||||
|
||||
Gym Bro è un'applicazione mobile progettata per aiutarti a tenere traccia dei
|
||||
tuoi allenamenti e dei tuoi progressi in palestra. Con un registro degli allenamenti,
|
||||
una libreria di esercizi comprensiva, un luogo sicuro per memorizzare i tuoi
|
||||
progressi fisici e un diario alimentare incorporato, Gym Bro è il coltellino
|
||||
svizzero per la tua routine di fitness. Che tu sia un principiante o un esperto,
|
||||
Gym Bro ha tutto ciò di cui hai bisogno per raggiungere i tuoi obiettivi di fitness.
|
||||
|
||||
## Caratteristiche principali
|
||||
|
||||
- **Piano di allenamento personalizzato**: Crea e segui un piano di allenamento
|
||||
su misura per te, con esercizi, serie e ripetizioni personalizzabili.
|
||||
- **Libreria di esercizi**: Accedi a una vasta libreria di esercizi con
|
||||
descrizioni dettagliate per assicurarti di eseguire gli esercizi correttamente.
|
||||
- **Non trovi un esercizio?** Nessun problema! Puoi aggiungere i tuoi esercizi
|
||||
personalizzati e salvarli per un uso futuro.
|
||||
- **Monitoraggio dei progressi**: Tieni traccia dei tuoi progressi nel tempo,
|
||||
visualizzando grafici e statistiche sui tuoi allenamenti.
|
||||
- **Tieni traccia della tua alimentazione**: Registra i tuoi pasti e le tue
|
||||
calorie giornaliere per avere un quadro completo della tua dieta.
|
||||
- **Osserva i tuoi progressi**: Registra le tue misurazioni corporee (quali
|
||||
peso, circonferenza vita, ecc.) e visualizza i tuoi progressi nel tempo.
|
||||
- **Trofei**: Sei una persona competitiva o ami semplicemente le sfide?
|
||||
Competi con te stesso e completa il quadro dei trofei.
|
||||
- **Modalità offline**: Non hai sempre accesso a Internet? Nessun problema! Gym
|
||||
Bro funziona anche offline!
|
||||
- **Personalizzazione**: Il blu non ti piace? Cambia il tema dell'app e
|
||||
personalizzala come vuoi tu.
|
||||
- **Importa dati da altre app**: Vuoi importare i tuoi dati da un'altra app?
|
||||
Nessun problema! Gym Bro supporta l'importazione di dati da altre app di
|
||||
fitness.
|
||||
|
||||
## Tecnologie utilizzate
|
||||
|
||||
- **Flutter**: Per lo sviluppo dell'applicazione mobile, garantendo un'esperienza
|
||||
utente fluida e reattiva su entrambe le piattaforme iOS e Android.
|
||||
- **Supabase**: Utilizzato principalmente per il backend per quanto riguarda
|
||||
il download di schede.
|
||||
- **SQLite** (Drift): Per la memorizzazione dei dati localmente, garantendo un
|
||||
accesso rapido e sicuro alle informazioni in modalità offline.
|
||||
- **Get**: Per la gestione dello stato dell'applicazione.
|
||||
- **OpenFoodFacts**: Per il riconoscimento dei cibi e la loro importazione
|
||||
automatica.
|
||||
38
src/portfolio/mykennel.md
Normal file
38
src/portfolio/mykennel.md
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
title: "MyKennel"
|
||||
description: "Un potente gestionale per allevamenti moderni."
|
||||
tags:
|
||||
- Astro
|
||||
- Flutter
|
||||
- Firebase
|
||||
image: "/assets/portfolio/mykennel/header.png"
|
||||
url: "#"
|
||||
year: 2025
|
||||
links:
|
||||
apple: "https://apps.apple.com/us/app/mykennel/id6745273964"
|
||||
play: "https://play.google.com/store/apps/details?id=com.techtonicfault.mykennel"
|
||||
---
|
||||
|
||||
## Un potente gestionale per il tuo allevamento.
|
||||
|
||||
MyKennel è il gestionale completo per allevamenti moderni: organizza, monitora e
|
||||
semplifica ogni aspetto della tua attività.
|
||||
Con MyKennel puoi tenere traccia di ogni aspetto del tuo allevamento, dai movimenti
|
||||
finanziari alla gestione dei cuccioli, dalle vaccinazioni ai pedigree. È progettato
|
||||
per essere intuitivo e facile da usare, permettendoti di concentrarti su ciò che
|
||||
fai meglio: allevare cani di razza.
|
||||
|
||||
### Funzionalità
|
||||
|
||||
* **Lista dei movimenti**: Tieni traccia delle spese del tuo allenamento grazie al registro dei movimenti. Perfettamente integrato col calcolo del bilancio.
|
||||
* **Esporta PDF informativi**: Che sia il biglietto da visita della tua attività, un foglio riepilogativo di una cucciolata o il PDF di un cucciolo da condividere con il cliente, MyKennel è in grado di generarlo automaticamente.
|
||||
* **Tutti i documenti a portata di mano**: Tieni da parte referti, fatture, pedigree originali e tutto ciò che vuoi nell'archivio integrato.
|
||||
* **Promemoria**: MyKennel può ricordarti di calori, vaccini, profilassi e sverminazioni. Così non dovrai pensarci tu.
|
||||
* **Gestione cucciolate**: Tieni traccia di ogni aspetto della tua cucciolata, dalle nascite alle vaccinazioni, fino alla vendita dei cuccioli.
|
||||
|
||||
## Tecnologie utilizzate
|
||||
|
||||
- **Flutter**: Per lo sviluppo dell'applicazione mobile, garantendo un'esperienza
|
||||
utente fluida e reattiva su entrambe le piattaforme iOS e Android.
|
||||
- **Firebase**: Utilizzato per il backend.
|
||||
- **GetIt**: Per la gestione dello stato dell'applicazione.
|
||||
146
src/posts/logger.md
Normal file
146
src/posts/logger.md
Normal file
@@ -0,0 +1,146 @@
|
||||
---
|
||||
title: "Implementare un logger categorizzabile"
|
||||
excerpt: "Scopri come implementare un logger categorizzabile in Flutter per migliorare la gestione dei log."
|
||||
author: francesco
|
||||
date: "25 aprile 2025"
|
||||
category: "Sviluppo frontend"
|
||||
tags:
|
||||
- Flutter
|
||||
- Frontend
|
||||
- Log
|
||||
coverImage: "/assets/posts/logger/head.png?height=600&width=1200"
|
||||
hidden: true
|
||||
---
|
||||
|
||||
Quando si pubblica un'applicazione, spesso si ha bisogno di un modo per monitorare
|
||||
le performance e il comportamento dell'app. Un modo comune per farlo è utilizzare
|
||||
un logger, che può registrare eventi, errori e altre informazioni utili. In questo
|
||||
articolo, esploreremo come implementare un logger categorizzabile in Flutter,
|
||||
che ci permetterà di organizzare i log in categorie specifiche e facilitare la
|
||||
loro gestione.
|
||||
|
||||
## Perché un logger categorizzabile?
|
||||
|
||||
Molti progetti utilizzano Firebase Crashlytics o Sentry per monitorare gli errori e le performance.
|
||||
Tuttavia, questi strumenti richiedono che l'applicazione sia costantemente in
|
||||
contatto con il servizio per inviare i log. In alcuni casi, potrebbe non essere
|
||||
necessario avere un flusso continuo di log, ma può bastare registrare gli eventi
|
||||
localmente e inviarli in un secondo momento, ad esempio quando l'app è online o
|
||||
quando l'utente lo richiede.
|
||||
È proprio qui che entra in gioco il logger categorizzabile.
|
||||
|
||||
Un logger categorizzabile consente di organizzare i log in categorie specifiche,
|
||||
rendendo più facile la loro gestione e analisi. Possiamo ad esempio avere categorie
|
||||
per gli errori, le performance, le azioni degli utenti e così via. In questo modo,
|
||||
possiamo filtrare i log in base alla categoria e concentrarci solo su quelli che
|
||||
ci interessano in un determinato momento.
|
||||
|
||||
## Creazione del logger
|
||||
|
||||
Iniziamo definendo i tipi di eventi di cui vogliamo tenere traccia:
|
||||
|
||||
```dart
|
||||
enum LogLevel {
|
||||
debug(0),
|
||||
info(1),
|
||||
warning(2),
|
||||
error(3),
|
||||
fatal(99);
|
||||
|
||||
const LogLevel(this.value);
|
||||
|
||||
final int value;
|
||||
}
|
||||
```
|
||||
|
||||
In questo esempio, abbiamo definito cinque livelli di log: `debug`, `info`, `warning`,
|
||||
`error` e `fatal`. Ogni livello ha un valore associato che ci permette di
|
||||
classificarli in ordine di gravità. È qui che possiamo decidere di aggiungere
|
||||
categorie come `performance`, `userAction`, `network` e così via.
|
||||
|
||||
Passiamo ora alla classe Logger. Questa classe sarà responsabile della
|
||||
registrazione dei log e della loro gestione. Ecco un esempio di implementazione:
|
||||
|
||||
```dart
|
||||
typedef LogTransformer = void Function(LogEntry entry);
|
||||
|
||||
class LogEntry {
|
||||
final LogLevel level;
|
||||
final String message;
|
||||
final String? category;
|
||||
final DateTime timestamp;
|
||||
|
||||
// ...
|
||||
}
|
||||
|
||||
class Logger {
|
||||
static final Logger _instance = Logger._internal();
|
||||
factory Logger() => _instance;
|
||||
Logger._internal();
|
||||
|
||||
final List<LogTransformer> _transformers = [];
|
||||
|
||||
void addTransformer(LogTransformer transformer) {
|
||||
_transformers.add(transformer);
|
||||
}
|
||||
|
||||
void log(LogLevel level, String message, {String? category}) {
|
||||
final entry = LogEntry(
|
||||
level: level,
|
||||
message: message,
|
||||
category: category,
|
||||
timestamp: DateTime.now(),
|
||||
);
|
||||
|
||||
for (final transformer in _transformers) {
|
||||
// Invia il messaggio trasformato a un servizio di logging
|
||||
// oppure a un repository locale.
|
||||
transformer(entry);
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
In questo esempio, abbiamo creato una classe `Logger` che utilizza il
|
||||
singleton pattern per garantire che ci sia solo un'istanza del logger in tutta
|
||||
l'applicazione. La classe ha un metodo `log` che accetta un livello di log,
|
||||
un messaggio e una categoria opzionale. Quando viene chiamato il metodo `log`,
|
||||
viene creato un oggetto `LogEntry` che contiene tutte le informazioni sul log.
|
||||
|
||||
Il logger accetta anche una lista di trasformatori (`LogTransformer`) che sono
|
||||
responsabili della gestione dei log. Questi trasformatori possono essere
|
||||
utilizzati per inviare i log a un servizio esterno, salvarli in un file locale
|
||||
o eseguire qualsiasi altra operazione necessaria, come salvare i log in una
|
||||
`List` per una successiva visione degli stessi.
|
||||
|
||||
Il modo in cui abbiamo definito l'enum `LogLevel` e la classe `LogEntry` ci
|
||||
permette di filtrare molto facilmente i log in base alla loro categoria:
|
||||
|
||||
```dart
|
||||
// Assumiamo di avere una lista di log del tipo
|
||||
List<LogEntry> _logs = [];
|
||||
|
||||
// Filtriamo i log in base alla categoria
|
||||
LogLevel category = LogLevel.warning;
|
||||
List<LogEntry> filteredLogs = _logs
|
||||
.where((log) => log.category.value >= category.value)
|
||||
.toList();
|
||||
```
|
||||
|
||||
Così facendo, ignoriamo tutti i log di tipo `debug` e `info`. Ovviamente, possiamo
|
||||
anche prendere solo i log di una categoria specifica, ad esempio `performance` o `userAction`,
|
||||
a seconda delle nostre esigenze.
|
||||
|
||||
## Conclusione
|
||||
|
||||
In questo articolo, abbiamo visto come implementare un logger categorizzabile
|
||||
in Flutter. Questo approccio ci consente di organizzare i log in categorie
|
||||
specifiche, facilitando la loro gestione e analisi. Abbiamo anche visto come
|
||||
creare una classe `Logger` che utilizza il singleton pattern e accetta
|
||||
trasformatori per gestire i log in modo flessibile.
|
||||
|
||||
Abbiamo implementato un logger molto semplice ma estremamente potente. A
|
||||
TECHTONIC FAULT, crediamo che la semplicità sia la chiave per un buon
|
||||
sviluppo software, senza compromettere la potenza e la flessibilità. Con questo
|
||||
logger, possiamo monitorare le performance e il comportamento delle nostre
|
||||
applicazioni in modo efficace e senza complicazioni inutili.
|
||||
Reference in New Issue
Block a user