Skip to main content

Ciao a tutti! Sono Denny, uno sviluppatore che, come te, ama immergersi in progetti personali per risolvere piccoli problemi quotidiani. In questo post, voglio raccontarti la storia dietro XXHash, la mia prima libreria open source per Flutter. Questo progetto è nato da un’esigenza reale, dalla voglia di sperimentare e (perché no?) mettermi alla prova come contributor nella community open source.

L’Idea: Drag-and-Drop Personalizzato per le Gallerie Immagini 🖼️

Tutto è cominciato mentre cercavo di organizzare le immagini sul mio telefono. Le gallerie predefinite non mi permettevano di personalizzare l’ordine delle foto in modo semplice e intuitivo, come si fa su un desktop trascinando le icone. Sì, ci sono app che offrono soluzioni simili, ma spesso sono a pagamento o non soddisfano del tutto le mie esigenze.

Allora mi sono detto: “Sono un programmatore, perché non creare la mia libreria eheh?”

L’idea era semplice: sviluppare una libreria che permettesse agli utenti di Flutter di ordinare immagini in modo completamente personalizzato, con supporto per dispositivi mobili e senza problemi di prestazioni.

Il Problema: Gestire File Pesanti in Modo Efficiente 💾

Per realizzare una galleria personalizzabile, dovevo trovare un modo per salvare l’ordine delle immagini in modo performante. Dopo aver analizzato le librerie disponibili, ho deciso di implementare una soluzione basata sul hashing.

Inizialmente, ho provato con SHA1, ma il problema era evidente: più grande è il file, più lento è il processo di hashing. Questo sarebbe stato un disastro per video o immagini 4K, ormai standard su molti dispositivi.

Sapevi che l’hashing di un video 4K può richiedere diversi secondi?

La Soluzione: XXHash e Dart FFI ⚡

Mi sono quindi orientato verso XXHash, un algoritmo molto più veloce e adatto alle mie necessità.

Flutter, basato su Dart, offre la possibilità di utilizzare codice nativo grazie a Dart FFI (Foreign Function Interface). Questo strumento consente di integrare librerie scritte in C direttamente in Dart, mantenendo prestazioni elevate.

Ho deciso di utilizzare la libreria condivisa di XXHash, implementando il supporto per il chunking (spezzettamento dei file). Questo approccio evita problemi di memoria sui dispositivi mobili, dove un file di grandi dimensioni potrebbe facilmente saturare le risorse disponibili.

Esempio di Utilizzo della Libreria:

dart 

import 'dart:convert';

import 'package:convert/convert.dart';
import 'package:xxhash/xxhash.dart';

void main() {
  var firstChunk = utf8.encode("foo");
  var secondChunk = utf8.encode("bar");

  var output = AccumulatorSink<Digest>();
  var input = xxh32.startChunkedConversion(output);
  input.add(firstChunk);
  input.add(secondChunk); // call `add` for every chunk of input data
  input.close();
  var digest = output.events.single;

  print("Digest as bytes: ${digest.bytes}");
  print("Digest as hex string: $digest");
}

Perché Non Contribuire a una Libreria Esistente? 🤔

Potresti chiederti: “Perché non fare una pull request alla libreria ufficiale di XXHash?”

La risposta è semplice: volevo imparare e aggiungere la possibilità di fare chunking. Pubblicare un progetto open source da zero mi ha permesso di esplorare ogni fase del ciclo di vita di un pacchetto, dalla scrittura del codice alla pubblicazione su Pub.dev. Inoltre, volevo seguire un pattern di sviluppo ispirato alla libreria Crypto di Google, che non era presente nella libreria ufficiale di XXHash.

Il Risultato: XXHash su Pub.dev 🎉

Il mio pacchetto, XXHash, è ora disponibile per tutti! È una libreria leggera e ottimizzata, ideale per chiunque voglia utilizzare un algoritmo di hashing leggero e veloce su Flutter, con supporto nativo per il chunking.

👉 GitHub Repository: [link al repository]

👉 Pub.dev Package: [link al pacchetto]


Conclusione: Perché l’Open Source Conta ❤️

Concludo con una riflessione: contribuire alla community open source non è solo un modo per risolvere problemi, ma anche per imparare e crescere come sviluppatori. XXHash è il mio primo progetto, ma sono certo che non sarà l’ultimo.

Se hai bisogno di un algoritmo di hashing veloce, prova XXHash!

E ricorda:

“Se pensi che possa essere migliorato, fammelo sapere con una pull request!” 😉