Proudly debugging the system since 1981

Categoria: programmazione (Pagina 1 di 7)

Ridondanza vs Dipendenze: Qual è il Peggior Nemico del Codice?

La tensione tra ridondanza e dipendenze definisce la qualità del codice. Mentre la ridondanza sembra un problema marginale, le dipendenze possono paralizzare un sistema. Questo articolo esplora come bilanciare questi due aspetti per creare software robusto e mantenibile.

La Tensione tra Ridondanza e Dipendenze

La progettazione di moduli sostenibili richiede un equilibrio tra ridondanza e dipendenze, privilegiando l’efficienza e la manutenibilità. Un modulo ben progettato dovrebbe avere un’interfaccia stabile, documentazione completa e proprietà chiare, evitando di diventare un ‘trash can’ di funzioni disordinate. L’interfaccia deve essere minimalista, limitata a ciò che è realmente necessario, per ridurre la complessità e prevenire errori. La documentazione, invece, è essenziale per garantire che altri sviluppatori possano integrare il modulo senza confusioni. Un esempio emblematico è il caso del parsing dei comandi riga: creare un modulo concreto per questa funzione, anziché dipendere da un ‘utilities module’ sovraccarico, riduce i rischi di instabilità. L’over-engineering, come in alcuni strumenti come XParam, può portare a soluzioni complesse e poco utilizzate, aumentando la manutenzione. La chiara proprietà di un modulo, con un unico responsabile, evita conflitti e garantisce un ciclo di vita prevedibile. La gestione delle dipendenze, quindi, non deve essere vista come un nemico, ma come un’opportunità per costruire sistemi robusti, purché guidata da principi di progettazione rigorosi.

Progettare Moduli Sostenibili

Un modulo sostenibile deve essere un’unità autonoma, con un’interfaccia compatta e stabile. Evita di esporre modelli complessi o classi sovraccariche, che aumentano la dipendenza e la fragilità. La documentazione completa è essenziale: senza essa, un modulo diventa inutilizzabile. Testa l’interfaccia pubblica, non singole funzioni, per garantire coerenza. La dimensione deve essere equilibrata: troppo grande è incontrollabile, troppo piccola genera overhead. Un chiaro proprietario assicura responsabilità e stabilità. La gestione della vita del modulo, con versioni ben definite, evita conflitti. Il rischio maggiore è il “trash can”: un modulo connesso a troppe dipendenze diventa un deposito di codice incoerente. L’esempio del parsing dei comandi riga mostra come un’over-engineering possa generare un’infrastruttura complessa e inutilizzata. Priorizza moduli piccoli, focalizzati, e evita di affidarti a soluzioni generali che non risolvono problemi specifici.

Conclusioni

La ridondanza è meno rischiosa delle dipendenze, ma entrambe richiedono attenzione. Per sviluppare software di alta qualità, è essenziale comprendere i trade-off tra questi due elementi. Scopri di più.

Watchtower

Oggi ho scoperto Watchtower: è un’applicazione che monitora i container Docker in esecuzione e controlla le modifiche alle immagini da cui quei container sono stati originariamente avviati. Se Watchtower rileva che un’immagine è stata modificata, il container viene riavviato automaticamente utilizzando la nuova immagine.

Con Watchtower è possibile aggiornare la versione in esecuzione di un’applicazione containerizzata semplicemente caricando una nuova immagine su Docker Hub o su un registro immagini. Watchtower scarica la nuova immagine, arresta con grazia il container esistente e lo riavvia con le stesse opzioni utilizzate al momento del suo deployment iniziale.

Link : https://containrrr.dev/watchtower/

Gli sviluppatori junior vanno in burn-out prima di diventare senior?

Credo ci siano una serie di condizioni che spingono verso questa fine:

  • L’ossesione per la ricerca del nuovo
  • La facilita’ nel trovare soluzioni pronte senza necessita di apprendere
  • La tendenza a ridurre il tempo in cui si riesce a rimanere attenti e focalizzati

Segnalo questo articolo che tratta due di questi tre argomenti.

Why Junior Developers Are Burning Out Before They Bloom: Surviving Tech’s Obsession With ‘New’

Un estratto:

Tattica 2: Il gioco del “Perché?”
La prossima volta che utilizzi una funzionalità di un framework, chiediti:

  • “Quale problema risolve questa funzionalità?”
  • “Come implementerei questa funzionalità senza il framework?”
  • “Quali sono i compromessi in termini di prestazioni/memoria?”

Nuova versione di LLaMA ancora piu veloce

Sono molto affascinato da questo progetto. Spero che la IA esca presto da un utilizzo solo mediante API e in server remoti e misteriosi per arrivare ad essere disponibile sui dispositivi comuni. Il progetto LLaMA ci porta piu vicini a questo obbiettivo. La seguente chat e’ con Mistral 7B Q4 e LLaMA 0.7, eseguiti su un i7 13th gen con 16 GB di ram e nessuna accelerazione con GPU.

Annuncio : https://justine.lol/matmul/ – Repo: https://github.com/Mozilla-Ocho/llamafile

I metodi di sviluppo software

Spiegati come se l’ obbiettivo fosse andare su Marte.

Nota 1: si sono vecchio.

Nota 2: si è irrilevante perché tanto tra un po’ non svilupperà più nessuno. O forse proprio per questo il metodo sarà ancora più importante.

Plugin gradle per la migrazione da javax a jakarta

Il plugin si trova qua : https://plugins.gradle.org/plugin/com.netflix.nebula.jakartaee-migration

La spiegazione su cosa puo fare e come si usa qua : https://github.com/nebula-plugins/gradle-jakartaee-migration-plugin

Lo scenario in cui l’ho utilizzato e’ quando si devono usare due librerie o framework, una con dipendenze “vecchie” sotto javax e una con dipendenze “nuove” sotto jakarta su un application server “nuovo”.

Il plugin aggiorna automaticamente le dipendenze vecchie, al momento della compilazione, rendendo tutto funzionante e interoperabile.

Un sentito ringraziamento a chi ha reso necessario il cambio di nome.

Usare la intelligenza artificiale in locale per rinominare le foto

Questa la devo provare:

https://hackaday.com/2023/12/29/using-local-ai-on-the-command-line-to-rename-images-and-more/

UPDATE: E infatti poi l’ho provata. Ho dovuto fare un po di aggiustamenti per utilizzare il tutto con windows e ho provato a modificare i prompt in italiano.

Le modifiche si limitano ai controlli sulla presenza dei llama-file e sui prompt.

Controllo presenza file:

if ! LLAVA=$(command -v ./llava-v1.5-7b-q4.llamafile.exe); then
  printf '%s\n' "llava-v1.5-7b-q4-main.llamafile: fatal error: update this script with the path of your llava llamafile" >&2
  printf '%s\n' "please download https://huggingface.co/jartine/mistral-7b.llamafile/blob/main/mistral-7b-instruct-v0.1-Q4_K_M.llamafile, rename to llava-v1.5-7b-q4.llamafile.exe, and put it in the same directory of this script" >&2
  abort
fi

if ! MISTRAL=$(command -v ./mistral-7b-instruct-v0.2.Q3_K_L.llamafile.exe); then
  printf '%s\n' "mistral-7b-instruct-v0.1-Q4_K_M-main.llamafile: fatal error: update this script with the path of your mistral llamafile" >&2
  printf '%s\n' "please download https://huggingface.co/jartine/Mistral-7B-Instruct-v0.2-llamafile/blob/main/mistral-7b-instruct-v0.2.Q3_K_L.llamafile, rename to mistral-7b-instruct-v0.2.Q3_K_L.llamafile.exe, and put it in the same directory of this script" >&2
  abort
fi

Prompt italiani:

isgood() {
  "$MISTRAL" \
      --temp 0  \
      --grammar 'root ::= "si" | "no"' \
      -p "[INST]Questo nome file '${1##*/}' è una descrizione comprensibile e corretta in lingua italiana?[/INST]" \
      --silent-prompt 2>/dev/null
}

pickname() {
  "$LLAVA" \
      --image "$1" --temp 0.3  \
      --grammar 'root ::= [a-z]+ (" " [a-z]+)+' -n 15 \
      -p '### User: Questa immagine contiene ...
### Assistant:' \
      --silent-prompt 2>/dev/null
}

Inoltre per mistral ho dovuto scegliere una versione di dimensione non superiore ai 4giga, per limitazioni proprie di windows.

Il comportamento in inglese è buono, mentre l’output in italiano non e’ molto utile e spesso capita qualche parola di spagnolo qua e la.

llamafile v0.6

Mi segno e segnalo questa release che ho trovato impressionate : https://github.com/Mozilla-Ocho/llamafile/releases

Si tratta di un sistema per rendere facilmente accessibili modelli di linguaggio e praticamente funziona su tutti i sistemi operativi (window, linux, mac, etc) sfruttando CPU anche ARM, GPU anche multiple, anche AMD.

Si scarica il modello. Su linux gli si da il permesso di esecuzione, su windows lo si rinomina in .exe e lo si avvia.

Ho scaricato il modello llava e funziona con prestazioni accettabili anche usando solo una CPU non nuovissima (intel i7 11 generazione).

« Articoli meno recenti

© 2025 b0sh.net

Tema di Anders NorenSu ↑