5 modi di prendere appunti

Da più di un anno utilizzo Evernote per memorizzare qualunque tipo di nota: appunti, link, ritagli di pagine, todo, PDF e ecc. Ultimamente, complice anche l’entusiasmo con cui ho abbracciato ownCloud, sto ripensando il mio sistema di note e appunti. Ho preso in considerazione 5 applicazioni che si possono suddividere grosso modo in 2 categorie: i classici block notes e le pinboard.

Continua a leggere

Portare GNUCash su ownCloud

Per anni ho usato GNUCash per la mia contabilità personale, per abbandonarlo solo un paio d’anni fa in favore di un’applicazione web. La motivazione era semplice: desideravo inserire transazioni e consultare i dati ovunque mi trovassi, casa o lavoro, oppure on the road con Android. Mia moglie invece non se l’è sentita di intraprendere questa migrazione, per cui ha sempre il problema di doversi ricordare le spese fatte, appuntarle da qualche parte o conservare scontrini fino a che non torna a casa. E a quel punto non sempre i conti tornano.

Continua a leggere

Impressioni su ownCloud

Sono un utilizzatore di cloud computing, di servizi noti e utilissimi come Google Drive, Dropbox, Evernote. Avere documenti, dati, note sempre sincronizzati e disponibili su computer e terminali mobili è fantastico. Purtroppo il cloud pone anche alcuni problemi delicati: la cessione a terzi del controllo sui dati, se non addirittura della proprietà intellettuale (secondo alcuni termini di utilizzo), per non parlare della privacy. Continua a leggere

Facebook e libertà

Mi trovo ancora una volta a scrivere di Facebook perché negli ultimi giorni alcuni quotidiani (Il Fatto, Il Giornale, Il Futurista) lamentano forme di censura su Facebook; più precisamente sarebbe impedita agli utenti la condivisione dei loro contenuti. “Come può un social network limitare le voci libere?” si chiedono. Si dà troppa importanza a Facebook: gli utenti lo confondono con la rete (“Facebook è internet” pensano), gli altri si piegano alle sue regole in cambio di visibilità. Il punto è che su internet, per avere piena libertà, valgono le stesse regole del software: per comunicare si devono scegliere strumenti liberi e aperti, non piattaforme proprietarie che, in quanto tali, fanno quello che più gli conviene.

Oltre a quelli più famosi esistono social network liberi e aperti: identi.ca, Diaspora, Gist. Alcuni sono più maturi, altri meno, altri addirittura sono solo sperimentali. I quotidiani mainstream, invece di parlare sempre e soltanto di Facebook per poi lamentarne le censure, facciano la loro parte diffondendo presso il grande pubblico informazioni su questi social network alternativi: quando questi riusciranno anche solo ad integrare nell’uso quotidiano i social network più famosi e diffusi allora il tasso di vera libertà su internet aumenterà sensibilmente anche per loro.

Perché sto fuori da Facebook

In molti mi chiedono se ho un profilo su Facebook e si meravigliano quando gli rispondo di no e che non ho intenzione di crearlo. Il motivo è in notizie come questa, non tanto per l’orrore della cosa in sé quanto per il fatto che Facebook è riuscita a dar spazio su internet a parecchi idioti. Non che prima di Facebook non ci fosse la possibilità per un qualsiasi idiota di aprire una pagina web inneggiante al nazismo e all’olocausto, ma almeno il microcefalo doveva sbattersi per registrare un dominio e mettere in croce due righe di codice HTML. Ora invece è tutto più facile è l’idiota può dare sfogo in due secondi all’ispirazione del momento, senza nemmeno il filtro “tecnico” che quanto meno teneva fuori gli idioti tecno-analfabeti. E odio quando i giornali e le tv gongolano con i titoloni a effetto sull’abominevole internet, indottrinando i benpensanti che la rete è solo pedopornosatanismo e andrebbe chiusa seduta stante.

DNS facile con dnsmasq

Per gestire i nomi in una rete domestica di solito è sufficiente configurare manualmente il file /etc/hosts sulle varie macchine. Questo va bene in una rete con 3 o 4 host; ma ultimamente fra server, postazioni fisse, laptop, player multimediali e smartphone la mia rete inizia a superare le 15 unità, per cui modificare il file dei nomi su ogni singolo host è diventato impraticabile. Così ho deciso di configurare un servizio di DNS e DHCP con dnsmasq.

Continua a leggere

Shell Magic/ Versioning per tutti

I desktop GNU/Linux e Unix in generale migliorano continuamente. Ci sono comode interfacce grafiche per compiere praticamente qualunque compito. Ma in realtà Unix ha un’interfaccia molto più potente e altrettanto (se non maggiormente) completa. Si tratta della shell, l’interfaccia testuale a riga di comando che spaventa l’utente comune ma è la “casa” naturale dell’utente evoluto, e che permette di utilizzare e combinare quei “mattoncini” che sono le utility aderenti alla filosofia Unix: fare una cosa sola e farla bene.

Spesso capita di avere dei file, prevalentemente di natura testuale (appunti, configurazioni, documenti, output di altri software ecc.), che devono essere modificati nel tempo, ma di volerne tenere una copia di riserva per poter annullare le modifiche o mantenere uno storico dei cambiamenti per qualche motivo. Così finiamo con avere delle directory piene di file con suffissi “old”, “backup”, “20100610″, ecc. e di queste copie, dopo poco tempo, si perde il filo.

Continua a leggere

Una rete mobile di riserva

Nel mio ufficio domestico c’è un server con un po’ di servizi (dischi di rete, subversion, ecc.) e diverse workstation fisse e mobili, oltre a qualche box un po’ più “ludico” sparso per casa. Ovviamente il tutto esce su internet attraverso un router ADSL su rete Telecom (Alice per la precisione). Può succedere, come sa qualunque utente di ADSL italiano, che si verifichino delle interruzioni del servizio più o meno lunghe. In particolare negli ultimi 6 mesi ho avuto moltissimi problemi a far funzionare la linea, cosa che mi rende molto difficile il lavoro e le altre attività. A un certo punto, quando ormai potevo solo sbattere la testa sul muro, ho avuto l’idea di far uscire tutta la mia rete su connessione mobile, almeno nei momenti di failure della linea Telecom. Con una tariffa dati economica (per fortuna costano sempre meno) e un cellulare con funzioni di modem collegato a una box GNU/Linux è possibile redirezionare su linea mobile tutto il traffico internet della rete locale senza riconfigurare i nodi. In questo modo è possibile continuare tutte le proprie attività come se nulla fosse, anche quando l’amato monopolista vi fa aspettare 6 mesi per risolvere un guasto.

Continua a leggere

Recensione: The Definitive Guide to Plone

Nel 2003, insoddisfatto del modello di sviluppo web allora in voga (tutta la logica di applicazione nella pagina php/asp), scoprii l’application server Zope, una piattaforma web orientata agli oggetti e profondamente innovativa. Da allora ho inziato a studiare Zope che oggi, insieme al suo CMS di punta Plone, è divenuto la mia piattaforma di elezione. Purtroppo però non è tutto rose e fiori. Zope e Plone sono strumenti molto potenti, ma il loro difetto atavico è la mancanza di una documentazione per gli sviluppatori completa e omogenea. Con il passare degli anni questa lacuna è stata colmata, in particolare grazie ad alcuni libri. E’ proprio di un paio di questi libri, per me fondamentali nell’apprendimento e nell’affinamento della programmazione Zope/Plone, che voglio parlare in questo e nel prossimo post.

The Definitive Guide to Plone


Il primo libro fondamentale per la mia formazione è stato The Definitive Guide to Plone, di Andy McKay, edito da Apress. Pur essendo ormai un po’ datato (2004) è stato uno dei primi – e migliori – ad affrontare l’argomento Plone dal punto di vista del programmatore, in un panorama che all’epoca offriva molti libri (a volte davvero mediocri) rivolti soprattutto agli utenti finali. Plone però non è soltanto un CMS da mettere in mano agli utenti così com’è, ma una meravigliosa piattaforma per lo sviluppo di applicazioni complesse.

McKay inizia comunque con un’introduzione per i neofiti, toccando tematiche obbligate come l’installazione ed il primo utilizzo, fino alle più immediate personalizzazioni attraverso il web. Ma è con l’introduzione ai template, molto chiara e precisa, che il libro inizia ad essere veramente utile. Da questo punto in poi vengono sviscerati i concetti fondamentali della programmazione Zope e Plone: sicurezza, workflow, object database e ricerca degli oggetti. Importantissima la parte in cui si parla dello sviluppo dei prodotti (il gergo Zope per indicare i plugin) e del framework Archetypes per creare rapidamente nuovi tipi di contenuto. Il libro si conclude con un capitolo dedicato alla parte sistemistica di Zope (configurazione, ottimizzazione, scalabilità, ecc.), molto importante per avere un’infarinatura sul deploy della propria applicazione. Utile come reference l’appendice che riporta le API più importanti, anche se qualcuna sta diventando obsoleta.

Definitive Guide to Plone è un libro introduttivo alla programmazione Zope/Plone, ma non per questo meno approfondito. La prima parte fornirà il contesto a chi non conosce Plone, ma anche basi più solide a chi già lo conosce superficialmente, per affrontare al meglio i capitoli più corposi.

Potete trovare The Definitive Guide to Plone su Amazon. Al momento in cui scrivo il prezzo è di circa $36, che con il cambio favorevole e i costi di spedizione contenuti è davvero molto buono. Inoltre è in preparazione la seconda edizione, sicuramente aggiornata alle versioni più recenti di software e API, e che tra l’altro vede l’entrata dell’italiano Fabrizio Reale di Redomino fra gli autori.

Crap Code

Crap code è un termine volgare con cui gli anglofoni chiamano il codice scritto male. In questo articolo l’autore spiega cos’è – secondo lui – il crap code, chiedendo in chiusura anche il parere dei lettori. Quella che segue è la mia idea di crap code, tenendo presente che il concetto di codice buono è soggettivo. Ma fino ad un certo punto…

  1. Le infinite catene di if/else annidati sono tra le cose che più irritano il mio senso estetico. Una moltitudine di rami decisionali, uno dentro l’altro, che formano un groviglio inestricabile per la comprensione e sono impossibili da modificare.
  2. I metodi, le funzioni o le procedure più lunghi di 20 righe, inclusi i commenti, rendono difficile seguirne il filo logico, spesso sono poco coesi (fanno troppe cose) e di conseguenza scarsamente modificabili.
  3. Il codice non commentato è un danno per gli altri, ma anche per sé. Anche se fosse codice ben scritto, una descrizione di ciò che fa dà subito un’idea sommaria che ne aiuta la comprensione più profonda. Lo stesso autore, a distanza di tempo, non può ricordarsi le idee e i ragionamenti che hanno prodotto quel codice: un commento è un messaggio d’aiuto spedito a sé stessi nel futuro.
  4. L’utilizzo sbagliato o innaturale delle strutture di controllo, per cercare la creatività a tutti i costi. Usare gli idiomi nel modo consueto facilita agli altri la lettura del proprio codice, così che non debbano spremersi le meningi per capire che quel ciclo while scandisce soltanto gli elementi di una lista dal primo all’ultimo, o che quel try/catch non gestisce un errore, ma il flusso dell’applicazione.
  5. L’abuso di flag, che conduce spesso alle catene di if/else di cui sopra e ad espressioni logiche complesse quanto inutili.
  6. Le query SQL cablate nel codice e la scansione manuale dei risultati, magari utilizzando indici posizionali (0, 1, 2, …) invece dei nomi degli attributi. Perché non usare un ORM?

L’articolo inoltre enuncia una verità inconfutabile: il crap code è sempre quello degli altri. Voi che ne pensate?