Questo articolo è stato scritto nel 2008. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Il plugin Gibberish e tutto questo approccio sono morti e sepolti. Rails 2.2 (2008) ha aggiunto il supporto I18n integrato, e da Rails 3 in poi il modo standard è config/locales/*.yml con la gem i18n. I messaggi di errore di ActiveRecord, i nomi dei campi e tutte le stringhe dell’interfaccia sono gestiti nativamente — niente plugin, niente monkey-patching.
AGGIORNAMENTO: non ti serve questo codice, perché a partire dalla versione 2.2 di Rails il supporto alla localizzazione è integrato.
Localizzazione dei messaggi di errore di Active Record¶
Oggi ho dovuto rispondere a una delle domande su cui ogni sviluppatore Rails
non anglofono prima o poi inciampa… come localizzare i messaggi di errore di
AR per mostrarli in modo decente a un cliente che non parla inglese ;).
Prima di tutto, grazie all’eccellente plugin gibberish di
defunkt e al modo in cui gli errori di validazione di
AR sono esposti, il compito è stato portato a termine in modo semplice e
pulito, senza mettere troppo le mani negli internals di AR.
Ho cominciato traducendo ogni messaggio di errore predefinito di AR, con questo
file di traduzione in lang/it.yml:
# Active Record errors#ar_accepted:"deve essere accettato"ar_not_a_number:"non è un numero"ar_blank:"è un campo obbligatorio"ar_empty:"è un campo obbligatorio"ar_inclusion:"non è nella lista dei valori validi"ar_too_long:"è troppo lungo (massimo %d caratteri)"ar_exclusion:"è riservato"ar_too_short:"è troppo corto (minimo %d caratteri)"ar_invalid:"non è valido"ar_wrong_length:"è errato, dovrebbe essere di %d caratteri"ar_confirmation:"non corrisponde"ar_taken:"esiste già"# This one is not a default key, but I use it in my validationsar_greater_zero:"deve essere maggiore di zero"
Questo articolo è stato scritto nel 2008. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Safari ha abbandonato questo formato di cache SQLite anni fa. Più o meno da Safari 10 / macOS Sierra (2016), la cache è stata spostata in com.apple.WebKit.Networking in un formato blob binario — il vecchio Cache.db non esiste più.
Cinque minuti fa ho sovrascritto il nuovissimo e fiammante foglio di stile CSS
che implementa la combinazione di colori attuale, perché volevo ripristinare
quello originale e metterlo in un nuovo tema per questo sito, così che chi
apprezzava il vecchio tema potesse continuare a usarlo. Ma, come il più
principiante degli amministratori di sistema, ho decompresso i file originali
dall’archivio di backup SOPRA quelli attuali…
Safari in soccorso! Ogni elemento nella cache di Safari è memorizzato in un
database SQLite3 che si trova in ~/Library/Caches/com.apple.Safari,
andiamo a vedere com’è strutturato:
Wow. Impressionante. Ecco perché adoro i prodotti Apple: sono così ben
strutturati che puoi liberamente ispezionarli e usare le loro risorse per
qualsiasi compito imprevisto tu debba completare… anche per rimediare ai tuoi
stessi errori ;). Ed è anche stimolante, perché devi rimboccarti le maniche e
trovare la soluzione esplorando un prodotto software costruito splendidamente.
Questo articolo è stato scritto nel 2008. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Sia Python 2.5 (EOL 2011) che SCO OpenServer sono estinti. SCO/Xinuos è fallita, e lo stesso Python 2 ha raggiunto la fine del ciclo di vita a gennaio 2020. Questo è un fossile digitale.
Devi avere PTH installato, e forse altre librerie.
Aggiungi /usr/local/include a BASECFLAGS nel Makefile (autocrap fa schifo).
Patcha Modules/ctypes/_ctypes_test.c mettendo un #ifdef HAVE_LONG_LONG attorno alle funzioni che usano PY_LONG_LONG (suggerimenti: righe 384 e 318).
Patcha Objects/longobject.c e alla riga 817 metti la macro IS_LITTLE_ENDIAN prima del blocco #ifdef HAVE_LONG_LONG, e metti _PyLong_FromSsize_t e _PyLong_FromSize_t dopo il blocco HAVE_LONG_LONG.
Questo articolo è stato scritto nel 2007. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Ruby 1.9 ha raggiunto la fine del ciclo di vita nel 2015. Ruby è ora alla versione 3.x, e Symbol.all_symbols non include più questo easter egg — è stato rimosso da un pezzo. La risposta alla vita, all’universo e a tutto quanto resta 42.
Un romanzo davvero, davvero, davvero NERD di Cory Doctorow
che racconta di un gruppo di sysadmin che lottano per tenere in piedi la cara
vecchia Rete dopo un evento catastrofico che ha messo il mondo intero in
ginocchio. Combattono con scorte limitate di energia e cibo e comunicano via
Usenet… usando la buona vecchia gerarchia alt.
Voto: 10+ per la cosa più geek che abbia mai letto. Vale davvero l’ora
necessaria per leggerlo tutto.
Questo articolo è stato scritto nel 2007. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.
🔍
Retrospettiva 2026
Apple ha aggiunto il supporto nativo a Time Machine via SMB in macOS High Sierra (2017) e ha deprecato AFP in Big Sur (2020). Oggi qualsiasi NAS con una semplice condivisione Samba funziona senza problemi — niente Netatalk, Avahi o marker file. Il Time Capsule è stato dismesso nel 2018.
Ingredienti: Debian, Netatalk, Avahi, un po’ di trucchetti.
Puoi tranquillamente ignorare la roba del “.passwd”, perché afpd usa PAM per l’autenticazione degli utenti.
Suggerimento: Disabilita i gestori del protocollo atalk in /etc/default/netatalk per un avvio più veloce:
# Set which daemons to run (papd is dependent upon atalkd):
ATALKD_RUN=no # appletalk protocol
PAPD_RUN=no # printer sharing daemon (printers are soooo '90s)
CNID_METAD_RUN=yes # don't remember but is needed, rtfm!
AFPD_RUN=yes # you will always need this
TIMELORD_RUN=no # my time lord's name is <a href="http://openntpd.org">openntpd</a>
A2BOOT_RUN=no # boot? nah! :P
Passo 2: Crea una condivisione per i dati di backup di Time Machine, aggiungendo ad es.¶
# path name perms charset
/some/where/tm "Time Machine" allow:vjt volcharset:"UTF8"
Scarica il file di servizio avahi, mettilo in /etc/avahi/services e ricarica avahi con /etc/init.d/avahi-daemon reload (scusate, i link originali sono rotti).
Ti servono due file sulla condivisione di rete AFP: .com.apple.timemachine.supported e un dot-file che prende il nome dal MAC address della tua en0. Per crearlo, il modo più semplice è collegare un disco USB/Firewire, rinominarlo con il nome della condivisione di rete desiderata (specificata nel file AppleVolumes) e abilitare Time Machine su di esso.